输入一个正整数n,再输入n个学生的姓名和百分制成绩,将其转换为两级制成绩后输出。要求定义和调用函数set_grade(stu, n),其功能是根据结构数组stu中存放的学生的百分制成绩score,将其转换为两级制成绩,并赋给grade。百分制成绩到两级制成绩的转换规则:大于或等于60分为P,否则为F。 #include<stdio.h> #define MAXN 100 struct student{ char name[20]; int score; char grade; }; void set_grade( struct student *p, int n ); int main() { int i, n; struct student stu[MAXN]; scanf("%d", &n); for(i = 0; i < n; i++){ scanf("%s%d", stu[i].name, &stu[i].score); } set_grade(stu, n); for(i = 0; i < n; i++) printf("%s %c\n", stu[i].name, stu[i].grade); return 0; } void set_grade(struct student *p, int n) { struct student *q = p + n - 1; while( 1 分 ){ 1 分 1 分 p++; } }
时间: 2024-01-12 15:02:43 浏览: 27
以下是完整程序:
```
#include <stdio.h>
#define MAXN 100
struct student {
char name[20];
int score;
char grade;
};
void set_grade(struct student *p, int n);
int main() {
int i, n;
struct student stu[MAXN];
scanf("%d", &n);
for (i = 0; i < n; i++) {
scanf("%s%d", stu[i].name, &stu[i].score);
}
set_grade(stu, n);
for (i = 0; i < n; i++) {
printf("%s %c\n", stu[i].name, stu[i].grade);
}
return 0;
}
void set_grade(struct student *p, int n) {
struct student *q = p + n - 1;
while (p <= q) {
if (p->score >= 60) {
p->grade = 'P';
} else {
p->grade = 'F';
}
p++;
}
}
```
程序定义了一个结构体 student,包含学生的姓名、百分制成绩和两级制成绩。接着定义了一个函数 set_grade,用于将百分制成绩转换为两级制成绩。
在主函数中,程序首先读入学生的个数 n,然后循环读入每个学生的姓名和百分制成绩,并存储到结构体数组 stu 中。接着调用 set_grade 函数,将百分制成绩转换为两级制成绩,并存储到结构体数组 stu 中。最后,程序循环输出每个学生的姓名和两级制成绩。
在函数 set_grade 中,程序首先定义两个指针 p 和 q,分别指向结构体数组的首元素和末元素。接着进入循环,每次循环将 p 的百分制成绩转换为两级制成绩,并存储到 p 的 grade 成员中。最后将指针 p 向后移动一位,继续下一次循环,直到 p > q,循环结束。
注意,转换规则为大于或等于 60 分为 P,否则为 F,所以在转换成绩时需要使用大于等于运算符(>=),而不是大于运算符(>)。