函数调用时参数传递方式

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

/* 4_3L6_1.C */ main() { float Average(int iScore[10]); /*函数声明*/ int iScore[10],i; float fAver; for(i=0;i<10;i++) scanf(“%d”,&iScore[i]); /*输入10个成绩*/ fAver=Average(iScore); /* 用数组名iScore作为实参调用函数 */ printf(“average=%f\n”,fAver); /*输出平均成绩*/ } float Average(int iScore[10]) /* 函数定义,形参数组应与实参数组类型相同 */ { int i, iSum=0; float fAver; for(i=0;i<10;i++) iSum=iSum+iScore[i]; /* 用循环累加*/ fAver=iSum/10.0; /* 求出平均成绩*/ return(fAver); /* 将平均成绩返回给主调函数*/ }
#define N 10 /*定义符号常量N,表示待排序数组长度*/ main() { void Sort(float fScore[ ],int n); /*函数声明*/ float fScore[N]; 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;i<n-1;i++) for(j=0;j<n-1-i;j++) /* 用冒泡法排序,见第四章1· 3 */ 1· if(fScore[j]<fScore[j+1]) { fTemp=fScore[j]; fScore[j]=fScore[j+1]; fScore[j+1]=fTemp; } return; /*函数结束*/ }
3· 3 数组名作函数参数 2·
例4_3_6 已知一个班10名学生的计算机考试成绩,求 平均成绩。要求:在主函数main中输入10个成绩,并 输出最后的平均成绩;求平均成绩的过程用函数完 成。 分析:这是本节的例 4_1_1,前面是用一个主函数完 成的。10个已知数据我们仍然把它们组织成一个数 组iScore[10]。要用函数计算数组10个元素的平均值, 就应该由主调函数将这10个数组元素传递给被调函 数,我们将数组作为一个整体传递给被调函数。实 参表列就写数组名即可,形参表列就写与实参数组 同类型的数组。
作业与练习:(本节习题都要 求用函数形式完成)
4、输入一个正整数,求出它所有的因子。在主 函数中输入数据并输出结果。 5、输入10名学生的某门课程的考试成绩,然后 再输入一个成绩,查找该成绩是第几名学生的 成绩;如果没有找到,输出“无此数”。在主 函数中输入数据并输出结果。 6、输入若干个正整数,判断每一个数是否是素 数。在主函数中输入数据,并输出结果。
main() { int Judge(float fA,float fB); /*函数声明*/ float fTeama[5],fTeamb[5]; int i,iA=0,iB=0; printf(“Please input Team A:\n”); for(i=0;i<5;i++) scanf(“%f”,fTeama[i]); /*输入数组Teama*/ printf(“Please input Team B:\n”); for(i=0;i<5;i++) scanf(“%f”,fTeamb[i]); /*输入数组Teamb*/ for(i=0;i<5;i++) /*由i控制循环,共循环5次,也就是调用5次函数*/ if(Judge(fTeama[i],fTeamb[i])= =1) /*,调用Judge函数判断fTeama[i]与fTeamb[i]的大*/ iA++; /* 小,若返回值是1,则表示Teama获胜,iA自增 */ else /*若返回值是-1,则表示Teamb获胜,iB自增 */ if(Judge(fTeama[i],fTeamb[i])= =-1) iB++; if(iA>iB) scanf(“%f”,fTeamb[i]); /*比较iA和iB的大小,输出相应的信息 */ else printf(“Team B Win!\n”); } int Judge(float fA,float fB) /* Judge函数用于比较体重,实参、与形参类型必须一致 */ { if(fA>fB) return(1); /*如果fA大于fB,函数返回值是1*/ else if(fA<fB) return(-1); /*否则函数返回值是-1*/ }
*/
例4_3_8 输入一个班级10名学生的计算机 考试成绩,按成绩从高到低的顺序排序。 要求:在主函数中输入原始数据,并输出 最后排序好的数据,在函数中完成排序功 能。 分析:这是本章第一节例4_1_3,现改用函 数实现。由于原来的解法实、形参都是一 维数组。新解法只需将原解法中排序功能 的程序段抽出来,单独构成函数;再将剩 下的程序段加上函数声明和函数调用语句 就可以了。设计用数组名作参数,形参数 组排序好了实际上实参数组也排序好了。
下次课再见!
百度文库
例4_3_7 一个年级有3个班,每个班有20名学生。 输入所有学生的计算机考试成绩,求出最高分, 以及该学生的所在班级、学号。要求:在主函数 中输入成绩,输出最高分,以及该学生的所在班 级、学号;在函数中完成求最高分和学生所在班 级学号的功能。 分析:这道题就是本章第一节例4_1_8,现要求用 函数完成对二维数组的运算,因此实参数组应该 是二维数组,形参也应该是同类型的二维数组。 定义二维形参数组: void Highscore(int iScore[m][n])
3· 函数调用时参数传递方式 2
[ 本段任务 ] 学会用普通变量、数组元素变量 和数组名变量作函数的参数实施编程。懂得参 数的传值和传地址两种不同的参数传递方法。 3· 1 普通变量作函数的参数 2· 想一想:下面例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(“\r\n”); /*键盘输入iA,iB的值*/ printf(“a=%d,b=%d\n”,iA,iB); ① /*输出iA,iB的值*/ Swap(iA,iB); /*调用Swap函数*/ printf(“a=%d,b=%d\n”,iA,iB); ② /*再次输出iA,iB的值*/ } void Swap(int iA,int iB) /*定义Swap函数*/ { int iTemp; /*定义数据交换的中间变量iTemp*/ printf(“a=%d,b=%d\n”,iA,iB); ③ /*输出iA,iB的值*/ iTemp=iA; /*交换iA,iB的值*/ iA=iB; iB=iTemp; printf(“a=%d,b=%d\n”,iA,iB); ④ /*再次输出iA,iB的值*/ return; /*Swap函数无返回值,故return后无参数。当然连return也可省略*/ }
3· 2 数组元素作函数参数 2·
例4_3_5 两个队进行“掰手腕”比赛,每队5名选手, 每次每队出一名选手,由每队教练决定各自选手的出 场顺序,共进行5场比赛,决出胜负。我们这里做个 假设,比赛都是体重较重的人获胜,这样各队选手的 出场顺序就非常关键了。输入排好顺序的各队的1~5 号选手的体重,比较一下谁能获胜。 分析:定义fTeama[5]、fTeamb[5]数组存储两队选手的体 重。定义函数Judge来比较选手的体重,若Teama队选 手体重大,就返回值1;若Teamb队选手体重大,就返 回值-1。再定义两个变量对各队的胜利次数进行累加, 最后再进行比较,决出胜利者。
int g_iMax,g_iRow=0,g_iColumn=0; main() { void Highscore(int iScore[ ][20],int n); int iScore[3][20],I,j; printf(“Please input score:\n”); for(i=0;i<3;i++) for(j=0;j<20;j++) scanf(“%d”,&iScore[i][j]); Highscore(iScore,20); printf(“max=%d,row=%d,column=%d\n”,g_iMax,g_iRow+1,g_iColumn+1); /*打印结果*/ } void Highscore(int iScore[ ][20],int n) { int i,j; g_iMax=iScore[0][0]; /*将iScore[0][0]元素赋给g_iMax变量作为初始值 for(i=0;i<3;i++) for(j=0;j<n;j++) if(g_iMax<iScore[i][j]) { g_iMax=iScore[i][j]; g_iRow=i; g_iColumn=j; /* 将比g_iMax大的值替换g_iMax,并记下它的班号和学号 */ } return; }
相关文档
最新文档