scanf(\}
count = set_grade(ptr);
printf(\printf(\for(i = 0; i < N; i++)
printf(\return 0; }
int set_grade(struct student *p) {
int i, n = 0;
for(i = 0; i < N; i++, p++){ if(p->score >= 85) p->grade = 'A';
else if(p->score >= 70) p->grade = 'B';
else if(p->score >= 60) p->grade = 'C'; else{
p->grade = 'D'; n++; } }
return n; } 7.在本章例题的基础上编写一个学生信息综合管理程序,要求能够实现对学生信息的新建、 输出、修改、查询、按平均成绩排序等功能。 解答:
例9-1 中的函数new_student()、search_student()、output_student()分别实现了学生信息的 新建、查询和输出;
例9-3 实现了按学生平均成绩排序,将其排序功能程序封装在自定义函数sort(struct student students[ ], int n)中;
例9-3 中的函数update_score()实现了学生成绩修改;
将这5 个函数放在一个程序文件中,主函数在例9-1 的基础上修改如下: #include
struct student{ /*学生信息结构类型定义*/ int num; /* 学号 */
char name[10]; /* 姓名 */
int computer, english, math; /* 三门课程成绩 */ double average; /* 个人平均成绩 */ };
int Count = 0; /* 全局变量,记录当前学生总数 */
int main(void) {
int choice, num, course, score;
struct student students[MaxSize]; /* 定义学生信息结构数组 */ do{ /* 用户操作界面 */
printf(\scanf(\switch(choice){
case 1: new_student(students); break;
case 2: printf(“Please input the student?s number:”); scanf(“%d”, &num);
search_student(students, num); break;
case 3: output_student(students); break; case 4: sort(students, Count); break;
case 5: printf(\scanf(“%d”, &num);
printf(\scanf(“%d”, &course);
printf(\scanf(“%d”, &score);
update_score(students, Count, num, course, score); break; case 0: break; }
} while(choice != 0); printf(\return 0; }
3 实验指导教材参考答案
一、调试示例
改正下列程序中的错误。输入一个正整数n(3≤n≤10),再输入n 个职员的信息(表
9.1),要求输出每位职员的姓名和实发工资(实发工资=基本工资+浮动工资-支出)。(源程
序error09_1.c)
表9.1 工资表
姓 名
基本工资 浮动工资 支出 zh ao
240.00 400.00 75.00 qi an
360.00 120.00 50.00 zh ou
560.00 150.00 80.00
源程序(有错误的程序) 1 #include
4 struct emp{ 5 char name[10]; 6 float jbgz; 7 float fdgz; 8 float zc; 9 };
10 emp s[10]; 11 int i, n; 12
13 printf(\14 scanf(\15 for (i = 0; i < n; i++)
16 scanf(\17 for (i = 0; i < n; i++) /* 调试时设置断点 */
18 printf (\,实发数:%.2f\\n\19
20 return 0;
21 } /* 调试时设置断点 */
运行结果(改正后程序的运行结果) n=3
zhao 240 400 75 qian 360 120 50 zhou 560 150 80
zhao 实发数:565.00 qian 实发数:430.00 zhou 实发数:630.00 改错汇总
错误行号: 10 正确语句: struct emp s[10];
错误行号: 16 正确语句: scanf(\&s[i].zc); 二、改错题
建立一个有n(3 1 黄岚 78 83 75 2 王海 76 80 77 3 沈强 87 83 76 4 张枫 92 88 78 5 章盟 80 82 75 总分最高的学生是:张枫,258 分 源程序(有错 .的程序) 1 #include 9 int i, j, k, n, max=0; 10 printf(\11 scanf(\12 for (i = 0; i < n; i++){ 13 scanf(\14 15 for(j = 0; j < 3; j++){ 16 scanf(\17 student[i].sum += student[i].score[j]; 18 } 19 } 20 k = 0; max = student[0].sum; 21 for(i = 1; i < n; i++) 22 if(max < student[i].sum) { 23 k = i; 24 25 } 26 printf(\总分最高的学生是: %s,%d 分\\n\27 return 0; 28 } 改错汇总 错误行号: 8 正确语句: }student[10]; 错误行号: 14 正确语句: student[i].sum=0; 错误行号: 24 正确语句: max=student[i].sum; 三、编程题 1.时间换算。用结构类型表示时间内容(时间以时、分、秒表示),输入一个时间数值,再 输入一个秒数n(n<60),以h:m:s 的格式输出该时间再过n 秒后的时间值(超过24 点就从0 点开始计时)。 输入输出示例
相关推荐: