实验目的
一、进一步熟悉C 语言中函数的编程方法;
二、进一步掌握C 语言中函数定义和调用方法;
三、掌握数组作为函数参数的编程方法。
四、掌握字符串的编程方法。
实验要求
本次实验不要求提交正式实验报告,但要求实验完成后,将程序及程序的运行结果依次拷贝到一个word文档中,统一形成一个.doc文档后提交至Blackboard。文档名可用你的姓名+你的学号。
实验内容
本次实验要求定义4个函数,编写主函数调用自定义函
数进行验证。
(第一个函数)
void inputFromKeyboard(float score[][4], char name[][10], int num)
功能:从键盘输入每一位学生的信息(姓名、4门课的成绩)。所存入的学生姓名存入字符数组name中,所输入的4门课的成绩存入数组score中。
score数组:学生成绩,name数组:学生姓名,num:学生人数
(第二个函数)
void outputToScreen(float score[][4], char name[][10], int num)
功能:将每一位学生信息(姓名 4门课的成绩 平均成绩)输出到屏幕上。
score数组:学生成绩,name数组:学生姓名,num:学生人数
(第三个函数)
int compare_score(float student1_score [4], float student2_score [4])
功能:计算两个学生的总成绩,并对两学生的总成绩进行比较。若学生1的总成绩大于学生2的总成绩,返回值为1,否则,返回值为0。
student1_score数组:学生1各科成绩,student2_score数组:学生2各科成绩。
(第四个函数)
void sortByTotalScore(float score[][4], char name[][10], int num)
功能:根据总成绩按从小到大的顺序对学生的信息进行排序。
注意:在两学生总成绩比较时,要求调用compare_score函数。比如下标为i和下标为j的学生比较时,调用的形式为
compare_score(score[i], score[j])
(主函数)编写主函数对你所编写的上述3个函数进行调用验证。主函数应有以下功能:
1)定义数组float student_score[5][4]和数组char student_name[5][10]分别用于存贮5名学生4门课的成绩和5名学生的姓名。
2)调用函数inputFromKeyboard由键盘输入学生的信息( 姓名、英语成绩、数学成绩、物理成绩、化学成绩 )。数组名student_score、数组名student_name和数字5作为函数inputFromKeyboard的三个输入参数(实参)。5名学生信息可能如下:
孙颖莎 88.0 76.0 78.0 77.0
王曼昱 98.0 67.0 79.0 65.0
王艺迪 89.0 79.0 85.0 79.0
陈梦 90.0 95.0 97.0 85.0
钱天一 86.0 83.0 82.0 75.0
3)调用函数outputToScreen 将输入的学生信息显示到屏幕上。student_score、student_name和5作为函数outputToScreen的三个输入参数(实参)。
4)调用函数sortByTotalScore 根据学生的总成绩对学生信息进行排序。student_score、student_name和5作为函数sortByTotalScore的三个输入参数(实参)。
5)调用函数outputToScreen 将排序后的学生完整信息显示到屏幕上。student_score、student_name和5作为函数outputToScreen的三个输入参数(实参)。
实验代码
#include<stdio.h>
void inputFromKeyboard(float score[][4], char name[][10], int num)
{
int i;
printf("请输入 %d 名学生的姓名和成绩:\n", num);
for (i = 0; i < num; i++) {
scanf("%s%f%f%f%f", name[i], &score[i][0], &score[i][1], &score[i][2], &score[i][3]);
}
}
void outputToScreen(float score[][4], char name[][10], int num)
{
int i;
printf("姓名\t英语\t数学\t物理\t化学\t平均分\n");
for (i = 0; i < num; i++) {
float sum = score[i][0] + score[i][1] + score[i][2] + score[i][3];
printf("%s\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n", name[i], score[i][0], score[i][1], score[i][2], score[i][3], sum / 4);
}
}
int compare_score(float student1_score[4], float student2_score[4])
{
float sum1 = student1_score[0] + student1_score[1] + student1_score[2] + student1_score[3];
float sum2 = student2_score[0] + student2_score[1] + student2_score[2] + student2_score[3];
if (sum1 > sum2) {
return 1;
}
else {
return 0;
}
}
void sortByTotalScore(float score[][4], char name[][10], int num)
{
int i, j;
for (i = 0; i < num - 1; i++) {
for (j = i + 1; j < num; j++) {
if (compare_score(score[i], score[j])) {
float temp_score[4];
for (int k = 0; k < 4; k++) {
temp_score[k] = score[i][k];
score[i][k] = score[j][k];
score[j][k] = temp_score[k];
}
char temp_name[10];
for (int k = 0; k < 10; k++) {
temp_name[k] = name[i][k];
name[i][k] = name[j][k];
name[j][k] = temp_name[k];
}
}
}
}
}
int main()
{
float student_score[5][4];
char student_name[5][10];
inputFromKeyboard(student_score, student_name, 5);
printf("\n输出所有学生信息如下:\n");
outputToScreen(student_score, student_name, 5);
sortByTotalScore(student_score, student_name, 5);
printf("\n按总成绩从小到大排序后,学生信息如下:\n");
outputToScreen(student_score, student_name, 5);
return 0;
}