用c语言实现 1 能输入10位同学学号(字符串)、姓名(字符串)、三门课程成绩(整型) 2 能自动计算总分(整型) 3 根据总分排序,降序,如果总分相同,则按照一定规则排序。 4 显示成绩信息。 5 能修改学生成
时间: 2024-12-29 13:30:27 浏览: 27
在C语言中,我们可以创建一个结构体来存储学生的学号、姓名和成绩,并结合循环和数组或链表来实现这个功能。这里是一个简单的示例:
```c
#include <stdio.h>
#include <string.h>
// 定义学生结构体
typedef struct {
char id[11]; // 学号
char name[21]; // 姓名
int score[3]; // 三门课程的成绩
} Student;
// 比较函数用于排序
int compare(const void *a, const void *b) {
const Student *sa = a, *sb = b;
if (sa->total_score > sb->total_score)
return 1;
else if (sa->total_score < sb->total_score)
return -1;
else { // 如果总分相同,按姓名字母顺序比较
return strcmp(sa->name, sb->name);
}
}
int main() {
Student students[10]; // 假设最多10名学生
int i, total_score;
// 输入学生信息
for (i = 0; i < 10; i++) {
printf("请输入第%d名学生的学号(10位字符): ", i + 1);
fgets(students[i].id, sizeof(students[i].id), stdin); // 注意去掉最后的换行符
students[i].id[strlen(students[i].id) - 1] = '\0'; // 修剪多余的换行
printf("请输入第%d名学生的姓名(不超过20字符): ", i + 1);
fgets(students[i].name, sizeof(students[i].name), stdin);
students[i].name[strlen(students[i].name) - 1] = '\0';
printf("请输入第%d名学生三门课程的成绩(用空格隔开): ", i + 1);
scanf("%d %d %d", &students[i].score[0], &students[i].score[1], &students[i].score[2]);
// 计算总分
total_score = students[i].score[0] + students[i].score[1] + students[i].score[2];
students[i].total_score = total_score;
}
// 排序
qsort(students, 10, sizeof(Student), compare);
// 输出和修改学生成绩
printf("\n按总分降序排列的学生信息:\n");
for (i = 0; i < 10; i++) {
printf("学号:%s 姓名:%s 总分:%d\n", students[i].id, students[i].name, students[i].total_score);
// 修改学生成绩
printf("请输入新成绩(例如:120 98 88),回车结束: ");
scanf("%d %d %d", &students[i].score[0], &students[i].score[1], &students[i].score[2]);
total_score = students[i].score[0] + students[i].score[1] + students[i].score[2];
students[i].total_score = total_score;
}
return 0;
}
```
阅读全文