8二维数组函数和常用算法综合编程.doc
文本预览下载声明
·PAGE 140·
C语言大学实用教程学习指导
·PAGE 141·
第2章 上机实验指导
2.2.7 二维数组和函数综合编程练习
成绩排名次
某班期末考试科目为数学(MT)、英语(EN)和物理(PH),有最多不超过30人参加考试。考试后要求:
(1)计算每个学生的总分和平均分;
(2)每门课的平均分。
(3)按总分成绩由高到低排出成绩的名次;
(4)打印出名次表,表格内包括学生编号、各科分数、总分和平均分;
程序要实现的功能,根据功能划分为几个函数
输入成绩和学号。简单来说是给一维数组和二维数组分别赋初值。
求每个学生的总分和平均分. 简单来说是求二维数组score[STU][COURSE]每行的总和以及平均分。
每门课的平均分,简单来说是求二维数组score[STU][COURSE]每列的平均分。
按总分成绩由高到低排出成绩的名次. 简单来说,是对成绩数组sum[STU]排序,相应得把别的成绩数组、平均分数组等都一并排序。
定义好要公共使用的变量或数组。
如成绩数组int score[STU][COURSE],STU\COURSE定义为常变量。
学号数组:long num[STU];
代表参加考试的实际人数的变量int n;
其它形参中用到的变量、数组也要在主调函数中定义(名字不一定相同,但一定要代表同样的含义),否则没法实现实参到形参的传递。
float aver[],float course_aver[]
确定函数要使用的形式参数。
首先明确每个函数里面定义的变量是局部变量,只能在该函数范围内起作用。而形参是一个特殊的局部变量,它也是在本函数范围内生效,也是随着函数的运行而分配空间,函数结束则回收空间,但它可以接收从实参传递过来的数值或地址值。
一般是每个函数实现相对独立的功能,然后在主函数(或主调函数)中调用各子函数实现特定的功能,那么主函数和各子函数就要通过数据来联系,也即主函数和子函数要通过访问同一个数组或代表相同含义的变量来实现两函数的数据共享。
那么如何实现对同一个数组或变量的访问?可以把需要共同使用的数据作为定义为全局变量,则各函数可直接访问这些数据,不需要再定义形参;也可以使用形参,把两函数之间需要共同使用的数据作为定义为形式参数,在调用函数时,通过实参到形参的传递,来实现数据共享。
如果想共享整个数组,则形参定义为数组,主调函数中相应的定义代表同样含义的数组,在函数调用语句中,实参使用数组名。如果想共享单个的变量,则形参定义为普通的变量,主调函数中也相应的定义代表同样含义的变量,在函数调用语句中,实参使用变量名。
实参和形参可以同名也可以不同名。如果子函数较多,而不同函数又都可能要使用同样的数据,则实参形参可以使用同样的名字,这样容易作到“见名知其义”。
形参数组的长度可以省略。
1、输入成绩和学号。void Input(long num[], int score[ ][COURSE], int n)
2、求每个学生的总分和平均分void GetSumAver(int score[][COURSE], int n, int sum[], float aver[])
3、每门课的平均分void aver_cour(int score[][COURSE],int n,float course_aver[])
4、按总分成绩由高到低排出成绩的名次
void Sort(long num[],int score[][COURSE], int n, int sum[],float aver[])
5、打印名次表
void Print(long num[], int score[][Course], int n, int sum[], float aver[])
四、到底需不需要返回值?
一个函数中,只能有一条return语句起作用。因此Return只能返回单个的数值,如果需要返回单个的数值到主调函数中调用该子函数的位置,则可以加上return语句,如return average/return sum/return flag;其中average\sum\flag都是子函数里面的局部变量,不是主调函数和被调函数共享的形式参数.相应得要注意return后面的数据类型要与函数名前面的数据类型一致。
如果是想返回整个数组的值,则不需要特意使用return语句,因为我们通常会把这个同学们想特意返回值的数组作为形参,那么主调函数A和被调函数B本身就共享同一个内存段,如果B被内存段做了修改,A读取的是同一个内存段,所以也能读取到修改后的值。
五、 可以依次单独写各子函数了
六、 最后可以写主函数。
如果完全想好了子函数的功能,想好了要用到哪些形参,就知道该怎么调用子函
显示全部