c语言键盘输入每个人各科的成绩,成绩的范围0到100,包括0和100.超出范围的数据提示”输入错误,重新输入并打印按照以上表格方式打印输入的结果; 2、按照成绩来排序,每门功课按照由低到高的顺序,排出名次,并用人名打统
时间: 2024-10-22 17:23:30 浏览: 32
在C语言中,你可以通过以下步骤实现这个功能:
1. 首先,创建一个结构体来存储学生的姓名和每个科目的成绩,例如:
```c
typedef struct {
char name[50];
int scores[5]; // 假设最多有5门课
} Student;
```
2. 定义函数接收用户输入,并检查成绩是否在范围内:
```c
void input_scores(Student *student) {
for (int i = 0; i < 5; i++) {
printf("请输入学生%s第%d门课程的成绩(0-100): ", student->name, i+1);
scanf("%d", &student->scores[i]);
while (student->scores[i] < 0 || student->scores[i] > 100) {
printf("输入错误,成绩应为0到100,请重新输入: ");
scanf("%d", &student->scores[i]);
}
}
}
```
3. 排序函数,这里可以使用冒泡排序或其他简单算法对成绩数组进行降序排序:
```c
void sort_scores(Student *students, int num_students) {
for (int i = 0; i < num_students - 1; i++) {
for (int j = 0; j < num_students - 1 - i; j++) {
if (students[j].scores[0] > students[j + 1].scores[0]) {
// 交换两门课的名次
int temp = students[j].scores[0];
students[j].scores[0] = students[j + 1].scores[0];
students[j + 1].scores[0] = temp;
}
// 对其他科目也做同样的比较,如果需要的话
}
}
}
```
4. 打印结果:
```c
void print_students(Student *students, int num_students) {
for (int i = 0; i < num_students; i++) {
printf("学生名:%s\n", students[i].name);
for (int j = 0; j < 5; j++) {
printf("第%d门课成绩:%d, 排名: %d\n", j+1, students[i].scores[j], i + 1); // 第一位同学排名为1
}
printf("\n");
}
}
```
5. 主函数里整合输入、排序和打印过程:
```c
int main() {
Student students[10]; // 假设最多10个学生
int num_students;
printf("请输入学生人数: ");
scanf("%d", &num_students);
input_scores(students);
sort_scores(students, num_students);
print_students(students, num_students);
return 0;
}
```
运行程序时,提示用户输入学生人数,然后按照上述步骤获取成绩、排序并显示结果。
阅读全文