首页 > 代码库 > C语言数组和函数实例练习(二)

C语言数组和函数实例练习(二)

1.C语言中不允许函数的嵌套定义,但可以使用函数的嵌套调用。

1:输入4个整数,找出其中最大的数。

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 int max1(int a,int b)
 4 {
 5     if(a>=b)
 6     return a;
 7     else
 8     return b;
 9 }
10 int max2(int a,int b,int c,int d)
11 {
12     int m;
13     m=max1(a,b);
14     m=max1(m,c);
15     m=max1(m,d);
16     return m;
17 }
18 int main()
19 {
20     int a,b,c,d,max;
21     printf("请输入4个数字:\n");
22     scanf("%d %d %d %d",&a,&b,&c,&d);
23     max=max2(a,b,c,d);
24     printf("The max is %d",max);
25     return 0;
26 }

其中红色部分语句可更改为:m=max1(max1(max1(a,b),c),d);//更加精炼

2.函数的递归调用

25个学生坐在一起,上一个学生比下一个学生分别小2岁,已知第1个学生今年10岁,那么求第5个学生的年龄。

 1 int age(int n)
 2 {
 3     int c;
 4     if(n==1)
 5         c=10;
 6     else
 7         c=age(n-1)+2;
 8     return c;
 9 }
10 int main()
11 {
12     printf("第5个学生的年龄是%d",age(5));
13     return 0;
14 }

3:用递归方法求n!。

 1 int fac(int n)
 2 {
 3     int f;
 4     if(n<0)
 5     {
 6         printf("n<0,输入错误!"); 
 7     }else if(n==0||n==1){
 8         f=1;
 9     }else{
10         f=fac(n-1)*n;
11     }
12     return f;
13 }
14 int main()
15 {
16     int n,y;
17     printf("请输入要求阶乘的整数:");
18     scanf("%d",&n);
19     y=fac(n);
20     printf("%d!=%d\n",n,y);
21     return 0; 
22 }

4:汉诺塔问题。

 1 void move(char x,char y)
 2 {
 3     printf("%c->%c\n",x,y);
 4 } 
 5 void hanoi(int n,char one,char two,char three)
 6 {
 7     if(n==1)
 8         move(one,three);
 9     else{
10         hanoi(n-1,one,three,two);
11         move(one,three);
12         hanoi(n-1,two,one,three);
13     }
14 }
15 int main()
16 {
17     int m;
18     printf("请输入块数:");
19     scanf("%d",&m);
20     printf("需要移动%d块。\n",m);
21     hanoi(m,A,B,C); 
22 }

3.数组作为函数参数

5:输入10个数,要求输出其中值最大的元素和该数是第几个数。

 1 int max(int x,int y)
 2 {
 3     return(x>y?x:y);
 4 }
 5 int main()
 6 {
 7     int a[10],m,n,i;
 8     printf("请输入10个数字:\n");
 9     for(i=0;i<10;i++)
10     {
11         scanf("%d",&a[i]);
12     } 
13     printf("\n");
14     for(i=1,m=a[0],n=0;i<10;i++)
15     {
16         if(max(m,a[i])>m)
17         {
18             m=max(m,a[i]);
19             n=i;
20         }
21     }
22     printf("最大的数是%d,它是第%d个数字。\n",m,n+1);
23 }

6:有两个小组,分别有5人和7人,调用average函数,分别求这两个组的学生的平均成绩。

 1 float average(float array[],int n)
 2 {
 3     int i;
 4     float aver,sum=array[0];
 5     for(i=1;i<n;i++)
 6     {
 7         sum=sum+array[i];
 8     }
 9     aver=sum/n;
10     return aver;
11 }
12 int main()
13 {
14     float score1[5]={88,98,97.5,84.5,86};
15     float score2[7]={78.5,98,97.5,84.5,86,77,94.5};
16     printf("第1个小组的成绩是:%6.2f\n",average(score1,5));
17     printf("第2个小组的成绩是:%6.2f\n",average(score2,7));
18     return 0;
19 }

4.内部函数和外部函数

内部函数只能被本文件中其他函数所调用;static 类型名 函数名(参数列表);

外部函数可以在其他文件中被调用:extern 类型名 函数名(参数列表);

C语言中规定,若省略extern则默认为外部函数。

C语言数组和函数实例练习(二)