#include <stdio.h> #include <string.h> #define N 3 // 学生人数 struct Student { char name[20]; int id; double score[3]; double avg_score; }; void input_student_info(struct Student *p, int n) { int i; for (i = 0; i < n; i++) { printf("Student %d\n", i+1); printf("Name: "); scanf("%s", p[i].name); printf("ID: "); scanf("%d", &p[i].id); printf("Scores: "); scanf("%lf %lf %lf", &p[i].score[0], &p[i].score[1], &p[i].score[2]); } } void calculate_avg_score(struct Student *p, int n) { int i; for (i = 0; i < n; i++) { p[i].avg_score = (p[i].score[0] + p[i].score[1] + p[i].score[2]) / 3.0; } } void print_student_info(struct Student *p, int n) { int i, j; struct Student tmp; for (i = 0; i < n-1; i++) { for (j = i+1; j < n; j++) { if (p[j].avg_score > p[i].avg_score) { tmp = p[i]; p[i] = p[j]; p[j] = tmp; } } } printf("Sorted by average score:\n"); for (i = 0; i < n; i++) { printf("%d. %s (ID: %d) - Scores: %.2f %.2f %.2f - Average score: %.2f\n", i+1, p[i].name, p[i].id, p[i].score[0], p[i].score[1], p[i].score[2], p[i].avg_score); } } int main() { struct Student students[N]; input_student_info(students, N); calculate_avg_score(students, N); print_student_info(students, N); return 0; }解每条语句
时间: 2024-03-11 14:49:43 浏览: 54
这是一个学生信息管理程序,可以输入学生的姓名、学号和三门课的成绩,然后计算每个学生的平均成绩,并按照平均成绩从高到低排序输出学生的信息。
代码如下:
```c
#include <stdio.h>
#include <string.h>
#define N 3 // 学生人数
struct Student {
char name[20];
int id;
double score[3];
double avg_score;
};
// 输入学生信息
void input_student_info(struct Student *p, int n) {
int i;
for (i = 0; i < n; i++) {
printf("Student %d\n", i+1);
printf("Name: ");
scanf("%s", p[i].name);
printf("ID: ");
scanf("%d", &p[i].id);
printf("Scores: ");
scanf("%lf %lf %lf", &p[i].score[0], &p[i].score[1], &p[i].score[2]);
}
}
// 计算每个学生的平均成绩
void calculate_avg_score(struct Student *p, int n) {
int i;
for (i = 0; i < n; i++) {
p[i].avg_score = (p[i].score[0] + p[i].score[1] + p[i].score[2]) / 3.0;
}
}
// 按照平均成绩从高到低排序并输出学生信息
void print_student_info(struct Student *p, int n) {
int i, j;
struct Student tmp;
for (i = 0; i < n-1; i++) {
for (j = i+1; j < n; j++) {
if (p[j].avg_score > p[i].avg_score) {
tmp = p[i];
p[i] = p[j];
p[j] = tmp;
}
}
}
printf("Sorted by average score:\n");
for (i = 0; i < n; i++) {
printf("%d. %s (ID: %d) - Scores: %.2f %.2f %.2f - Average score: %.2f\n",
i+1, p[i].name, p[i].id, p[i].score[0], p[i].score[1], p[i].score[2], p[i].avg_score);
}
}
int main() {
struct Student students[N];
input_student_info(students, N);
calculate_avg_score(students, N);
print_student_info(students, N);
return 0;
}
```
代码注释如下:
1. 定义了一个结构体`Student`,表示学生的信息,包括姓名、学号、三门课程的成绩和平均成绩。
2. 定义了一个宏`N`,表示学生人数。
3. `input_student_info`函数用于输入学生信息,参数为一个指向`Student`类型的结构体指针和学生人数。
4. `calculate_avg_score`函数用于计算每个学生的平均成绩,参数为一个指向`Student`类型的结构体指针和学生人数。
5. `print_student_info`函数用于按照平均成绩从高到低排序并输出学生信息,参数为一个指向`Student`类型的结构体指针和学生人数。
6. `main`函数定义了一个`Student`类型的结构体数组`students`,调用`input_student_info`函数输入学生信息,调用`calculate_avg_score`函数计算每个学生的平均成绩,最后调用`print_student_info`函数按照平均成绩从高到低排序并输出学生信息。
7. `if (p[j].avg_score > p[i].avg_score)`表示比较第i个和第j个学生的平均成绩,如果第j个学生的平均成绩更高,则交换它们的位置,使得第j个学生排在第i个学生前面。
8. `printf("%d. %s (ID: %d) - Scores: %.2f %.2f %.2f - Average score: %.2f\n",`表示输出每个学生的信息,其中`%d`表示序号,`%s`表示姓名,`%d`表示学号,`%.2f`表示保留两位小数的浮点数,分别为三门课的成绩和平均成绩。
阅读全文