實驗樓的學習筆記
地址:https://www.shiyanlou.com/courses/57
#include<stdio.h> int main() { int max(int x,int y); //聲明 max 函數 int a = 10,b = 20; int c; c = max(a,b); //a, b 爲實際參數;調用max函數,傳遞的是a,b的值給 max 函數。 printf("%d",c); return 0; } int max(int x,int y) //int 代表的是返回值是 int 型 { int z; z = x>y ? x:y; return (z);
注意:其中,x和y是形參,a和b是實參
無參函數
其一般形式爲
類型名 函數名() { 函數體 }
例子:
void printstar () { }
例子:
輸入四個整數,找出其中最大的整數。
include<stdio.h> int main() { int max4(int a,int b,int c,int d); int a,b,c,d,max; printf("please enter 4 integer number:"); scanf("%d%d%d%d",&a,&b,&c,&d); max=max4(a,b,c,d); printf("max=%d\n",max); return 0; } int max4(int a,int b,int c,int d) { int max2(int a,int b); //聲明max2 int m; m = max2(a,b); m = max2(m,c); m = max2(m,d); return(m); } int max2(int a,int b) { if(a>=b) return a; else return b; }
#include<stdio.h> int main() { int fac(int n); int n,y; printf("please input an integer number:"); scanf("%d",&n); if(n<0) printf("data error"); //n不能小於0 else { y = fac(n); printf("%d!=%d\n",n,y); } return 0; } int fac(int n) { int f; if(n==0||n==1) f = 1; else f = fac(n-1) * n; return f; }
相當於用n*(n-1)!
3.數組與函數
例子:輸入 10 個數,要求輸出其中值最大的元素和該數是第幾個數。
解題思路:可以定義一個長度爲 10 的數組。設計一個函數 max,用來求兩個數中的大者。在主函數中定義一個變量 m,m 的初值爲 a[0],每次調用 max 函數後的返回值存放在 m 中。用打擂臺算法,將數組元素 a[1] 到 a[9] 與 m 比較,最後的到的 m 就是最大值。
#include<stdio.h> int main() { int max(int x,int y); int a[10],m,n,i; printf("please enter 10 integer number:"); for(i=0;i<10;i++) scanf("%d",&a[i]); printf("\n"); for(i=1,m=a[0],n=0;i<10;i++) { if(max(m,a[i])>m) //若max函數返回值大於m { m = max(m,a[i]); //max函數的返回值取代m n = i; //把數組元素的序號記下來,放到n中 } } printf("the largest number is %d\n it is the %dth number \n",m,n+1); return 0; } int max(int x,int y) { return(x>y?x:y); }
例子:有一個一維數組 score,內放 10 個學生成績,求平均成績。
解題思路:用一個函數 average 來求平均成績,不用數組元素作爲函數實參,而是用數組名作爲函數的實參,形參也用數組名,在 average 函數中引用各數組的元素,求平均成績並返回 main 函數。
#include<stdio.h> int main() { float average(float array[10]); float score[10],aver; int i; printf("please enter 10 scores:"); for(i=0;i<10;i++) scanf("%f",&score[i]); printf("\n"); aver = average(score); //注意這裏調用函數時,向形參傳遞的是數組首元素的地址 printf("average score is %5.2f\n ",aver); return 0; } float average(float array[10]) { int i; float aver,sum = 0; for(i=0;i<10;i++) sum = sum + array[i]; aver = sum / 10; return(aver); }
需要注意的是,主函數中調用 float average(float array[10]) 這個函數,使用的是
aver = average(score); 這個語句
將一開始定義的score[10]帶入到 float average(float array[10])函數中。
課後習題
1.編寫函數 fun,其功能是:用戶輸入一個數 m,打印 1~m 能被 7 或 11 整除的所有整數。
例如,如果傳給 m 的值是 50,則程序輸出:
7 11 14 21 22 28 33 35 42 44 49
#include<stdio.h> int fun(int num){ if((num%7)==0 || (num%11)==0) printf("%d\t",num); } int main() { int m; scanf("%d",&m); //調用函數 for(int i=0;i<m;i++) fun(i+1); return 0; }
編寫函數fun,其功能是將兩個兩位數的正整數a、b合併成一個整數放在c中。合併的方式是:將a數的十位和個位依次放在c數的十位和千位上,b數的十位和個位依次放在c數的百位和個位上。
例如,當a=45,b=12 時,調用該函數後,c=5142。
#include<stdio.h> int fun(int a,int b){ int c; c = a%10*1000 + a/10*10 + b/10*100 + b%10; printf("%d",c); } int main() { int a,b; scanf("%d%d",&a,&b); //a,b必須是兩位數 if(a<10 || a>99 || b<10 || b>99){ printf("Enter erro!"); return 0; } //調用函數 fun(a,b); return 0; }