《函数调用时参数传递方式.ppt》由会员分享,可在线阅读,更多相关《函数调用时参数传递方式.ppt(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”,/*Swap函数无返回值,故return后无参数。当然连return也可省略*/,322 数组元素作函数参数,例4_3_5 两个队进
2、行“掰手腕”比赛,每队5名选手,每次每队出一名选手,由每队教练决定各自选手的出场顺序,共进行5场比赛,决出胜负。我们这里做个假设,比赛都是体重较重的人获胜,这样各队选手的出场顺序就非常关键了。输入排好顺序的各队的15号选手的体重,比较一下谁能获胜。分析:定义fTeama5、fTeamb5数组存储两队选手的体重。定义函数Judge来比较选手的体重,若Teama队选手体重大,就返回值1;若Teamb队选手体重大,就返回值-1。再定义两个变量对各队的胜利次数进行累加,最后再进行比较,决出胜利者。,main()int Judge(float fA,float fB);/*函数声明*/float fTe
3、ama5,fTeamb5;int i,iA=0,iB=0;printf(“Please input Team A:n”);for(i=0;iiB)scanf(“%f”,fTeambi);/*比较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 已知
4、一个班10名学生的计算机考试成绩,求平均成绩。要求:在主函数main中输入10个成绩,并输出最后的平均成绩;求平均成绩的过程用函数完成。分析:这是本节的例 4_1_1,前面是用一个主函数完成的。10个已知数据我们仍然把它们组织成一个数组iScore10。要用函数计算数组10个元素的平均值,就应该由主调函数将这10个数组元素传递给被调函数,我们将数组作为一个整体传递给被调函数。实参表列就写数组名即可,形参表列就写与实参数组同类型的数组。,/*4_3L6_1.C*/main()float Average(int iScore10);/*函数声明*/int iScore10,i;float fAve
5、r;for(i=0;i10;i+)scanf(“%d”,/*将平均成绩返回给主调函数*/,例4_3_7 一个年级有3个班,每个班有20名学生。输入所有学生的计算机考试成绩,求出最高分,以及该学生的所在班级、学号。要求:在主函数中输入成绩,输出最高分,以及该学生的所在班级、学号;在函数中完成求最高分和学生所在班级学号的功能。分析:这道题就是本章第一节例4_1_8,现要求用函数完成对二维数组的运算,因此实参数组应该是二维数组,形参也应该是同类型的二维数组。定义二维形参数组:void Highscore(int iScoremn),int g_iMax,g_iRow=0,g_iColumn=0;ma
6、in()void Highscore(int iScore 20,int n);int iScore320,I,j;printf(“Please input score:n”);for(i=0;i3;i+)for(j=0;j20;j+)scanf(“%d”,例4_3_8 输入一个班级10名学生的计算机考试成绩,按成绩从高到低的顺序排序。要求:在主函数中输入原始数据,并输出最后排序好的数据,在函数中完成排序功能。分析:这是本章第一节例4_1_3,现改用函数实现。由于原来的解法实、形参都是一维数组。新解法只需将原解法中排序功能的程序段抽出来,单独构成函数;再将剩下的程序段加上函数声明和函数调用语句
7、就可以了。设计用数组名作参数,形参数组排序好了实际上实参数组也排序好了。,#define N 10/*定义符号常量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
8、 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;/*函数结束*/,作业与练习:(本节习题都要求用函数形式完成),4、输入一个正整数,求出它所有的因子。在主函数中输入数据并输出结果。5、输入10名学生的某门课程的考试成绩,然后再输入一个成绩,查找该成绩是第几名学生的成绩;如果没有找到,输出“无此数”。在主函数中输入数据并输出结果。6、输入若干个正整数,判断每一个数是否是素数。在主函数中输入数据,并输出结果。,下次课再见!,