函数的参数、返回值总结
(一)参数
函数分:
有参函数:函数名(实参列表)
无参函数:函数名()
有参函数调用语句中的实参应与被调函数中的形参在个数、类型、顺序上一致。
参数传递时,实参向形参一一对应进行单向的值传递。值:可是数值(变量或数组元素)或数值的地址值(指针或数组名)。
(二)返回值
函数的返回值即为函数调用后的结果,可有如下返回结果的方法:
(1)通过return语句返回一个值;
(2)利用地址做参数返回一个或多个值;
(3)利用全局变量返回一个或多个值。
(三)例
1、170页实验内容(1):打印由正三角和倒三角组成的图形。
有一个参数,无返回值。实参向形参传递一个数值。
#include /* 有一个参数,无返回值的函数,打印正三角 */ void f1(int n) /* 形参只能是变量,用来接收实参传来的数值 */ { int i,j,k; for(k=1;k<=n;k++) {for(i=1;i<=10-k;i++) printf(\" \"); for(j=1;j<=k;j++) printf(\" *\"); printf(\"\\n\");} } /* 有一个参数,无返回值的函数,打印倒三角*/ void f2(int n) {int i,j,k; for(k=n;k>=1;k--) {for(i=1;i<=10-k;i++) printf(\" \"); for(j=1;j<=k;j++) printf(\" *\"); /*双引号内应为“空格加半角星号”*/ printf(\"\\n\");} } main() { int n; scanf(\"%d\ f1(n); /* 实参可以是常量、变量或表达式,将一个确定的数值传给形参 */ f2(n-1); /* 无返回值函数的调用形式 */ printf(\"\\n\"); f2(n); f1(n); } 2、171页实验内容(2):调用两个函数,求两个整数的最大公约数与最小公倍数。 有两个参数,有一个返回值。实参向形参传递两个数值。 #include /* 有两个参数,有返回值的函数,求两个整数的最大公约数 */ int f1(int a,int b) /* 形参只能是变量,用来接收实参传来的数值 */ { int t,k=1; if(b>a){t=a;a=b;b=t;} while(k!=0) { k=a%b; a=b; b=k; } return a; } int f2(int a,int b) { int i; for(i=1;iif(i*a%b==0)break; return i*a; } main() { int a,b,c; scanf(\"%d,%d\ /*有返回值函数调用形式1:结果直接输出 */ printf(\"%d和%d的最大公约数是%d\\n\a,b)); /*有返回值函数调用形式2:结果赋给变量 */ c=f2(a,b); printf(\"%d和%d的最小公倍数是%d\\n\ } 3.编写一函数:求两个整数的和及平均值,并返回调用函数。 有三个参数,a和b用于传递要处理的两个数,指针p用于返回平均值; 有两个返回值,一个返回值通过return语句返回,另一个返回值通过指针返回。 #include int fun(int a,int b,float *p) { int sum; sum=a+b; *p=(a+b)/2.0; return sum; } main() { int a,b,c; float avg; scanf(\"%d,%d\ /* 传递变量avg的地址,使指针p指向avg,带回平均值 */ c=fun(a,b,&avg); printf(\"%d和%d的和是:%d,平均值为:%f\\n\ } 4、171页实验内容(3):编写一函数,用来计算具有10数的一维数组中元素的最大值,最小值与平均值。 平均值通过return语句返回,最大值和最小值通过全局变量返回。 通过数组名做参数,使实参和形参数组中元素一一对应。 #include int max,min; float func(int a[],int n) /* 形参也应该是数组,名+[] */ { int i,sum=a[0]; float avg; max=a[0];min=a[0]; for (i=1;i if (a[i] avg=sum/n; return(avg); } void main() { float average; int i,b[10]; for (i=0;i<10;i++) scanf(\"%d\ average=func(b,10); /* 实参数组名,不带[] */ printf(\"max=%d,min=%d,average=%.2f\max,min,average); } 5、函数m的功能是:求出M行N列二维数组每列元素中的最小值,并计算它们的和,和通过形参传回主函数输出。 参数为地址时的两种形式 #define M 2 #define N 4 #nclude void sm(int a[M][N],int *sum) {int i,j,k,s=0; for(i=0;i for(j=1;j s+=a[k][i];} *sum=s;} void main() { int x[M][N]={3,2,5,1,4,1,8,3},s; sm(x,&s); /* 实参均为地址:数组的首地址和变量的地址 */ printf(\"%d\\n\ 6.172页实验内容(4):在主函数中由键盘输入一字符串,编写一函数求字符串的长度。 (1)书上代码:用数组名做实参和形参,传递字符串。 #include int len(char s[]) { int i,n=0; for(i=0;s[i]!='\\0';i++) n=n+1; return (n); } void main() {char a[20]=\"I love China!\"; int lenth; lenth=len(a); printf(\"%s,lenth=%d\\n\ } (2)修改代码:用指针做实参和形参,传递字符串。可有多种组合。 组合1:一数组名,一指针 #include int len(char *s) { int i,n=0; for(i=0;s[i]!='\\0';i++) n=n+1; return (n); } void main() {char a[20]=\"I love China!\"; int lenth; lenth=len(a); printf(\"%s,lenth=%d\\n\ } 组合2:两指针 #include int len(char *s) { int i,n=0; for(i=0;s[i]!='\\0';i++) n=n+1; return (n); } void main() {char a[20]=\"I love China!\ int lenth; lenth=len(p); printf(\"%s,lenth=%d\\n\ } 组合3:一指针,一数组 #include int len(char s[]) { int i,n=0; for(i=0;s[i]!='\\0';i++) n=n+1; return (n); } void main() {char a[20]=\"I love China!\ int lenth; lenth=len(p); printf(\"%s,lenth=%d\\n\ } (3)修改代码:用指针处理字符串。 #include int len(char *s) { int i,n=0; for(;*s++!='\\0';) /* 该句可改为:while(*s++!='\\0') */ n=n+1; return (n); } void main() {char a[20]=\"I love China!\"; int lenth; lenth=len(a); printf(\"%s,lenth=%d\\n\ } 7、请编写一个函数fun,它的功能是:将pp所指字符串中所有下标为偶数位置上的字母转换为大写(若该位置上不是字母,则不转换)。 例如,若输入”abc4EFg”,则应输出”aBc4EFg”。 #include #include void fun ( char *pp ) { int i; for(i=0;i pp[i]-=32; } main( ) { char tt[81] ; printf( \"\\nPlease enter an string within 80 characters:\\n\" ); gets( tt ); fun( tt ); printf( \"\\nbecomes\\n \\\"%s\\\"\\n\ tt ); } 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- oldu.cn 版权所有 浙ICP备2024123271号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务