《函数调用时参数传递方式》由会员分享,可在线阅读,更多相关《函数调用时参数传递方式(12页珍藏版)》请在金锄头文库上搜索。
1、32 函数调用时参数传递方式, 本段任务 学会用普通变量、数组元素变量和数组名变量作函数的参数实施编程。懂得参数的传值和传地址两种不同的参数传递方法。321 普通变量作函数的参数 想一想:下面例4_3_4 程序设计的目的是将A、B两数交换。可是程序运行后两个数是否交换了?,main() void Swap(int iA,int iB); /*函数声明*/ int iA,iB; /*定义变量iA,iB*/ printf(“Input iA iB=”); scanf(“%d%d”,&iA,&iB); printf(“rn”); /*键盘输入iA,iB的值*/ printf(“a=%d,b=%dn”
2、,iA,iB); /*输出iA,iB的值*/ Swap(iA,iB); /*调用Swap函数*/ printf(“a=%d,b=%dn”,iA,iB); /*再次输出iA,iB的值*/void Swap(int iA,int iB) /*定义Swap函数*/ int iTemp; /*定义数据交换的中间变量iTemp*/ printf(“a=%d,b=%dn”,iA,iB); /*输出iA,iB的值*/ iTemp=iA; /*交换iA,iB的值*/ iA=iB; iB=iTemp; printf(“a=%d,b=%dn”,iA,iB); /*再次输出iA,iB的值*/ return; /*S
3、wap函数无返回值,故return后无参数。当然连return也可省略*/,322 数组元素作函数参数,例4_3_5 两个队进行“掰手腕”比赛,每队5名选手,每次每队出一名选手,由每队教练决定各自选手的出场顺序,共进行5场比赛,决出胜负。我们这里做个假设,比赛都是体重较重的人获胜,这样各队选手的出场顺序就非常关键了。输入排好顺序的各队的15号选手的体重,比较一下谁能获胜。分析:定义fTeama5、fTeamb5数组存储两队选手的体重。定义函数Judge来比较选手的体重,若Teama队选手体重大,就返回值1;若Teamb队选手体重大,就返回值-1。再定义两个变量对各队的胜利次数进行累加,最后再进
4、行比较,决出胜利者。,main() int Judge(float fA,float fB); /*函数声明*/ float fTeama5,fTeamb5; int i,iA=0,iB=0; printf(“Please input Team A:n”); for(i=0;i5;i+) scanf(“%f”,fTeamai); /*输入数组Teama*/ printf(“Please input Team B:n”); for(i=0;i5;i+) scanf(“%f”,fTeambi); /*输入数组Teamb*/ for(i=0;iiB) scanf(“%f”,fTeambi); /*比
5、较iA和iB的大小,输出相应的信息 */ else printf(“Team B Win!n”); int Judge(float fA,float fB) /* Judge函数用于比较体重,实参、与形参类型必须一致 */ if(fAfB) return(1); /*如果fA大于fB,函数返回值是1*/ else if(fAfB) return(-1); /*否则函数返回值是-1*/ ,323 数组名作函数参数,例4_3_6 已知一个班10名学生的计算机考试成绩,求平均成绩。要求:在主函数main中输入10个成绩,并输出最后的平均成绩;求平均成绩的过程用函数完成。分析:这是本节的例 4_1_1
6、,前面是用一个主函数完成的。10个已知数据我们仍然把它们组织成一个数组iScore10。要用函数计算数组10个元素的平均值,就应该由主调函数将这10个数组元素传递给被调函数,我们将数组作为一个整体传递给被调函数。实参表列就写数组名即可,形参表列就写与实参数组同类型的数组。,/* 4_3L6_1.C */main() float Average(int iScore10); /*函数声明*/ int iScore10,i; float fAver; for(i=0;i10;i+) scanf(“%d”,&iScorei); /*输入10个成绩*/ fAver=Average(iScore); /
7、* 用数组名iScore作为实参调用函数 */ printf(“average=%fn”,fAver); /*输出平均成绩*/ float Average(int iScore10) /* 函数定义,形参数组应与实参数组类型相同 */ int i, iSum=0; float fAver; for(i=0;i10;i+) iSum=iSum+iScorei; /* 用循环累加*/ fAver=iSum/10.0; /* 求出平均成绩*/ return(fAver); /* 将平均成绩返回给主调函数*/ ,例4_3_7 一个年级有3个班,每个班有20名学生。输入所有学生的计算机考试成绩,求出最高
8、分,以及该学生的所在班级、学号。要求:在主函数中输入成绩,输出最高分,以及该学生的所在班级、学号;在函数中完成求最高分和学生所在班级学号的功能。分析:这道题就是本章第一节例4_1_8,现要求用函数完成对二维数组的运算,因此实参数组应该是二维数组,形参也应该是同类型的二维数组。定义二维形参数组: void Highscore(int iScoremn),int g_iMax,g_iRow=0,g_iColumn=0; main()void Highscore(int iScore 20,int n);int iScore320,I,j; printf(“Please input score:n”
9、); for(i=0;i3;i+) for(j=0;j20;j+) scanf(“%d”,&iScoreij); Highscore(iScore,20); printf(“max=%d,row=%d,column=%dn”,g_iMax,g_iRow+1,g_iColumn+1); /*打印结果*/void Highscore(int iScore 20,int n) int i,j; g_iMax=iScore00; /*将iScore00元素赋给g_iMax变量作为初始值 */ for(i=0;i3;i+) for(j=0;jn;j+) if(g_iMaxiScoreij) g_iMax
10、=iScoreij; g_iRow=i; g_iColumn=j; /* 将比g_iMax大的值替换g_iMax,并记下它的班号和学号 */ return; ,例4_3_8 输入一个班级10名学生的计算机考试成绩,按成绩从高到低的顺序排序。要求:在主函数中输入原始数据,并输出最后排序好的数据,在函数中完成排序功能。分析:这是本章第一节例4_1_3,现改用函数实现。由于原来的解法实、形参都是一维数组。新解法只需将原解法中排序功能的程序段抽出来,单独构成函数;再将剩下的程序段加上函数声明和函数调用语句就可以了。设计用数组名作参数,形参数组排序好了实际上实参数组也排序好了。,#define N 10
11、 /*定义符号常量N,表示待排序数组长度*/main() void Sort(float fScore ,int n); /*函数声明*/float fScoreN; int i,j; /* 输出提示信息,输入待比较的数据,同例4_1_3,略写 */ Sort(fScore,N); /*函数调用,用fScore数组和N作实参*/ /*输出提示信息,输出最后排序好的数据,同例4_1_3,略写 */void Sort(float fScore ,int n) /*函数定义,用fScore数组和n作形参*/int i,j; float fTemp; /*定义变量fTemp作为数据交换的中间变量*/ for(i=0;in-1;i+) for(j=0;jn-1-i;j+) /* 用冒泡法排序,见第四章113 */ if(fScorejfScorej+1) fTemp=fScorej; fScorej=fScorej+1; fScorej+1=fTemp; return; /*函数结束*/,