6-3 修改学生成绩 (15 分)
输入n(n<50)个学生的成绩信息,再输入一个学生的学号、课程以及成绩,在自定义函数update_score()中修改该学生指定课程的成绩。
函数接口定义: int update_score(struct student *p, int n, int num, int course, int score);其中p是结构指针,n是学生个数,course是课程序号,score是修改后的课程成绩。函数须返回指定学生的顺序位置,如果查无此人,返回-1。
裁判测试程序样例: #include <stdio.h>struct student{ /*学生信息结构定义*/ int num; /* 学号 */ char name[10]; /* 姓名 */ int math, english, computer; /* 三门课程成绩 */}; int update_score(struct student *p, int n, int num, int course, int score); /*函数声明*/int main(void){ int i, pos, n, num, course, score; struct student students[50]; /* 定义结构数组 */ scanf("%d", &n); for(i = 0; i < n; i++){ scanf("%d", &students[i].num); scanf("%s", students[i].name); scanf("%d", &students[i].math); scanf("%d", &students[i].english); scanf("%d", &students[i].computer); } /* 输入待修改学生信息 */ scanf("%d", &num); scanf("%d", &course); scanf("%d", &score); /*调用函数,修改学生成绩*/ pos = update_score(students, n, num, course, score); /*输出修改后的学生信息*/ if(pos == -1) printf("Not found!n"); else { printf("%d,%d,%d,%dn", students[pos].num, students[pos].math, students[pos].english, students[pos].computer); } return 0;}/* 请在这里填写答案 */ 输入样例: 3101 Zhang 78 87 85102 Wang 91 88 90103 Li 75 90 84102 2 89 输出样例:在这里给出相应的输出。例如:
102 91 89 90
题目解答:
首先,我们看最后判断语句那里,原文为:if(pos == -1) 则可知,我们在调用函数,返回的是-1 或者指定学生的顺序位置,所以我们在返回值的设定为指定学生的顺序位置 和-1。另外,函数题应该为仔细看函数的参数,并且知道每个参数的作用。(毕竟不可能空白给你玩玩) *p: 结构指针, n:学生个数(待会可以用来遍历),num是学生学号,course是课程序号,score是修改后的课程成绩。剩余实现则为:将数组遍历,若找到学生学号,判读是什么学科,改成绩,然后返回指定学生的顺序位置。
解题代码:
int update_score(struct student *p, int n, int num, int course, int score){
int i,j=-1;
for(i = 0;i<n;i++){
if(p[i].num == num){
if(course ==1){
p[i].math = score;
j = i;
}
else if(course == 2){
p[i].english = score;
j = i;
}
else if(course == 3){
p[i].computer = score;
j = i;
}
break;
}
}
return j;
}