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則默認為外部函數。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM