例题9-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,%d\n", students[pos].num, students[pos].math, students[pos].english, students[pos].computer); } return 0; } /* 请在这里填写答案 */ 输入样例: 3 101 Zhang 78 87 85 102 Wang 91 88 90 103 Li 75 90 84 102 2 89 输出样例: 在这里给出相应的输出。例如: 102,91,89,90
时间: 2024-03-11 13:47:56 浏览: 112
以下是题目的解答代码:
```c
#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,%d\n", students[pos].num, students[pos].math, students[pos].english, students[pos].computer);
}
return 0;
}
int update_score(struct student *p, int n, int num, int course, int score) {
int i, pos = -1;
for(i = 0; i < n; i++) {
if(p[i].num == num) {
switch(course) {
case 1: p[i].math = score; break;
case 2: p[i].english = score; break;
case 3: p[i].computer = score; break;
default: break;
}
pos = i;
break;
}
}
return pos;
}
```
其中,`update_score()` 函数用于修改学生成绩,返回指定学生的顺序位置,如果查无此人,返回-1。在该函数中,我们遍历所有学生的信息,找到与目标学号相同的学生,然后根据目标课程编号修改相应的成绩。如果查无此人,返回 -1。注意,题目中的 `course` 是课程序号,而不是课程名称。因此,我们需要使用 `switch` 语句来判断目标课程编号,然后修改相应的成绩。
阅读全文