以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:
根据您提供的程序框架和需求,我将帮您完成这个C语言程序。以下是完整的代码实现:
#include
#define N 3 /* 学生人数 */
struct Student {
char name[50];
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++, p++) {
printf("\nStudent %d info:\n", i + 1);
printf("name: ");
scanf("%s", p->name);
getchar(); // 清除缓冲区中的换行符
printf("id: ");
scanf("%d", &p->id);
printf("scores: ");
scanf("%lf %lf %lf", &p->score[0], &p->score[1], &p->score[2]);
}
}
void calculate_avg_score(struct Student *p, int n) {
int i;
for (i = 0; i < n; i++, p++) {
p->avg_score = (p->score[0] + p->score[1] + p->score[2]) / 3;
}
}
void print_student_info(struct Student *p, int n) {
int i;
printf("\nSorted by average score:\n");
printf("%-15s %-8s %-8s %-8s %-12s\n", "Name", "ID", "Score1", "Score2", "Score3");
for (i = 0; i < n; i++, p++) {
printf("%-15s %-8d %-8.1f %-8.1f %-8.1f\n", p->name, p->id, p->score[0], p->score[1], p->score[2]);
}
}
void sort_by_avg_score(struct Student *p, int n) {
int i, j;
struct Student temp;
for (i = 0; i < n - 1; i++) {
for (j = i + 1; j < n; j++) {
if (p[i].avg_score < p[j].avg_score) {
temp = p[i];
p[i] = p[j];
p[j] = temp;
}
}
}
}
int main() {
struct Student students[N];
input_student_info(students, N);
calculate_avg_score(students, N);
sort_by_avg_score(students, N);
print_student_info(students, N);
return 0;
}
代码说明:
input_student_info
函数用于输入学生信息,包括姓名、学号和三门课程的成绩。calculate_avg_score
函数计算每个学生的平均成绩,并将其存储在avg_score
成员中。print_student_info
函数打印排序后的学生信息,包括姓名、学号和三门课程的成绩。sort_by_avg_score
函数使用冒泡排序算法按平均成绩从高到低对学生进行排序。main
函数调用上述函数以完成整个程序的运行。
注意事项:
- 程序中使用了
getchar()
来清除输入缓冲区中的换行符,以避免读取姓名时出现问题。 - 定义了
N
宏来指定学生人数,可以根据需要修改。 - 在
print_student_info
函数中,使用了格式化输出来美化打印结果。
参考资料:
希望这个程序能够满足您的需求。如果您有任何问题或需要进一步的帮助,请随时告诉我。