// 对被调用函数的声明和函数原型

在一个函数中调用另一个函数(即被调用函数)需要具备如下条件:
a.首先被调用的函数必须是已经定义的函数(是库函数或用户自己定义的函数)

b.如果使用库函数,应该在本文开头用#include 指令将调用有关库函数时
所需用到的信息"包含"到本文件中来。

c.如果使用用户自己定义的函数,而该函数的位置在调用它的函数(即主调函数)
的后面(在同一个文件中),应该在主调函数中对被调用的函数作声明(declaration)。
声明的作用是把 函数名、函数参数的个数和参数类型等信息通知编译系统。

输入两个实数,用一个函数求出它们之和。


  
  1. #include "stdafx.h"
  2. int _tmain(int argc, _TCHAR* argv[])
  3. {
  4. float add(float x,float y);
  5. float a,b,c;
  6. printf("Please enter a and b:");
  7. scanf_s("%f,%f",&a,&b);
  8. c=add(a,b);
  9. printf("sum is %f\n",c);
  10. return 0;
  11. }
  12. float add(float x,float y)
  13. {
  14. float z;
  15. z=x+y;
  16. return(z);
  17. }

函数的首行(即函数首部)称为函数原型(function prototype)

函数原型的一般形式为
1.函数类型 函数名(参数类型1 参数名1,参数类型2 参数名2,...,参数类型n 参数名n);

2.函数类型 函数名(参数类型1,参数类型2,...,参数类型n);

// 函数的嵌套调用
输入4个整数,找出其中最大的数。


  
  1. #include "stdafx.h"
  2. int _tmain(int argc, _TCHAR* argv[])
  3. {
  4. int max4(int a,int b, int c,int d);
  5. int a,b,c,d,max;
  6. printf("Please enter 4 interger numbers:");
  7. scanf_s("%d %d %d %d",&a,&b,&c,&d);
  8. max=max4(a,b,c,d);
  9. printf("max=%d \n",max);
  10. return 0;
  11. }
  12. int max4(int a,int b,int c,int d)
  13. {
  14. int max2(int a,int b);
  15. int m;
  16. m=max2(a,b);
  17. m=max2(m,c);
  18. m=max2(m,d);
  19. return(m);
  20. }
  21. int max2(int a,int b)
  22. {
  23. if(a>=b)
  24. return a;
  25. else
  26. return b;
  27. }

// 函数的递归调用
在调用一个函数的过程中又出现直接或间接地调用该函数本身,称为函数的递归调用。

int f(int x)
{
int y,z;
z=f(y);
return(2*z);
}


  
  1. #include "stdafx.h"
  2. int _tmain(int argc, _TCHAR* argv[])
  3. {
  4. int age(int n);
  5. printf("NO.5,age:%d\n",age(5));
  6. return 0;
  7. }
  8. int age(int n)
  9. {
  10. int c;
  11. if(n==1)
  12. c=10;
  13. else
  14. c=age(n-1)+2;
  15. return(c);
  16. }

用递归方法求n!


  
  1. #include "stdafx.h"
  2. int _tmain(int argc, _TCHAR* argv[])
  3. {
  4. int fac(int n);
  5. int n;
  6. int y;
  7. printf("input an integer number:");
  8. scanf_s("%d",&n);
  9. y=fac(n);
  10. printf("%d!=%d\n",n,y);
  11. return 0;
  12. }
  13. int fac(int n)
  14. {
  15. int f;
  16. if(n<0)
  17. printf("n<0,data error!");
  18. else
  19. if(n==0||n==1)
  20. f=1;
  21. else
  22. f=fac(n-1)*n;
  23. return(f);
  24. }

Hanoi(汉诺)塔问题


  
  1. #include "stdafx.h"
  2. int _tmain(int argc, _TCHAR* argv[])
  3. {
  4. void hanoi(int n,char one,char two,char three);
  5. int m;
  6. printf("input the number of diskes:");
  7. scanf_s("%d",&m);
  8. printf("The step to move %d diskes:\n",m);
  9. hanoi(m,'A','B','C');
  10. }
  11. void hanoi(int n,char one,char two,char three)
  12. {
  13. void move(char x,char y);
  14. if(n==1)
  15. move(one,three);
  16. else
  17. {
  18. hanoi(n-1,one,three,two);
  19. move(one,three);
  20. hanoi(n-1,two,one,three);
  21. }
  22. }
  23. void move(char x,char y)
  24. {
  25. printf("%c-->%c\n",x,y);
  26. }