实验楼的学习笔记
地址: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; }