当前位置:文档之家› 函数参数返回值总结

函数参数返回值总结

函数的参数、返回值总结(一)参数◆函数分:有参函数:函数名(实参列表)无参函数:函数名()◆有参函数调用语句中的实参应与被调函数中的形参在个数、类型、顺序上一致。

◆参数传递时,实参向形参一一对应进行单向的值传递。

值:可是数值(变量或数组元素)或数值的地址值(指针或数组名)。

(二)返回值函数的返回值即为函数调用后的结果,可有如下返回结果的方法:(1)通过return语句返回一个值;(2)利用地址做参数返回一个或多个值;(3)利用全局变量返回一个或多个值。

(三)例1、170页实验内容(1):打印由正三角和倒三角组成的图形。

有一个参数,无返回值。

实参向形参传递一个数值。

#include <stdio.h>/* 有一个参数,无返回值的函数,打印正三角 */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",&n);f1(n); /* 实参可以是常量、变量或表达式,将一个确定的数值传给形参 */ f2(n-1); /* 无返回值函数的调用形式 */printf("\n");f2(n);f1(n);}2、171页实验内容(2):调用两个函数,求两个整数的最大公约数与最小公倍数。

有两个参数,有一个返回值。

实参向形参传递两个数值。

#include <stdio.h>/* 有两个参数,有返回值的函数,求两个整数的最大公约数 */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;i<b;i++)if(i*a%b==0)break;return i*a;}main(){ int a,b,c;scanf("%d,%d",&a,&b);/*有返回值函数调用形式1:结果直接输出 */printf("%d和%d的最大公约数是%d\n",a,b, f1(a,b));/*有返回值函数调用形式2:结果赋给变量 */c=f2(a,b);printf("%d和%d的最小公倍数是%d\n",a,b, c);}3.编写一函数:求两个整数的和及平均值,并返回调用函数。

有三个参数,a和b用于传递要处理的两个数,指针p用于返回平均值;有两个返回值,一个返回值通过return语句返回,另一个返回值通过指针返回。

#include <stdio.h>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",&a,&b);/* 传递变量avg的地址,使指针p指向avg,带回平均值 */c=fun(a,b,&avg);printf("%d和%d的和是:%d,平均值为:%f\n",a,b,c,avg);}4、171页实验内容(3):编写一函数,用来计算具有10数的一维数组中元素的最大值,最小值与平均值。

平均值通过return语句返回,最大值和最小值通过全局变量返回。

通过数组名做参数,使实参和形参数组中元素一一对应。

#include <stdio.h>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<n;i++){if (a[i]>max)max=a[i];if (a[i]<min)min=a[i];sum=sum+a[i];}avg=sum/n;return(avg);}void main(){ float average;int i,b[10];for (i=0;i<10;i++)scanf("%d",&b[i]);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 <stdio.h>void sm(int a[M][N],int *sum){int i,j,k,s=0;for(i=0;i<N;i++){ k=0;for(j=1;j<M;j++)if(a[k][i]>a[j][i])k=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",s);}6.172页实验内容(4):在主函数中由键盘输入一字符串,编写一函数求字符串的长度。

(1)书上代码:用数组名做实参和形参,传递字符串。

#include <stdio.h>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",a,lenth);}(2)修改代码:用指针做实参和形参,传递字符串。

可有多种组合。

组合1:一数组名,一指针#include <stdio.h>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",a,lenth);}组合2:两指针#include <stdio.h>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!",*p=a;int lenth;lenth=len(p);printf("%s,lenth=%d\n",a,lenth);}组合3:一指针,一数组#include <stdio.h>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!",*p=a;int lenth;lenth=len(p);printf("%s,lenth=%d\n",a,lenth);}(3)修改代码:用指针处理字符串。

#include <stdio.h>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",a,lenth);}7、请编写一个函数fun,它的功能是:将pp所指字符串中所有下标为偶数位置上的字母转换为大写(若该位置上不是字母,则不转换)。

例如,若输入”abc4EFg”,则应输出”aBc4EFg”。

#include <stdio.h>#include <string.h>void fun ( char *pp ){ int i;for(i=0;i<strlen(pp);i+=2)if(pp[i]>='a'&&pp[i]<='z')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 );}。

相关主题