1.从键盘读入5个学生的成绩信息,包括学号、姓名、语文、数学、英语,成绩允许有一位小数,存入一个结构体数组。 结构体定义为: typedef struct _subject { char sno[20]; //学号 char name[20]; //姓名 float chinese; //语文成绩 float math; //数学成绩 float english; //英语成绩 } subject;
时间: 2023-06-14 08:05:45 浏览: 207
下面是一个示例程序,实现了从键盘读入学生的成绩信息,并按照总成绩从高到低排序输出:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct _subject {
char sno[20];
char name[20];
float chinese;
float math;
float english;
} subject;
int compare(const void *a, const void *b) {
subject *sa = (subject *)a;
subject *sb = (subject *)b;
float total_a = sa->chinese + sa->math + sa->english;
float total_b = sb->chinese + sb->math + sb->english;
if (total_a > total_b) {
return -1;
} else if (total_a < total_b) {
return 1;
} else {
return 0;
}
}
int main() {
subject students[5];
int i;
for (i = 0; i < 5; i++) {
printf("请输入第%d个学生的信息:\n", i+1);
printf("学号:");
scanf("%s", students[i].sno);
printf("姓名:");
scanf("%s", students[i].name);
printf("语文成绩:");
scanf("%f", &students[i].chinese);
printf("数学成绩:");
scanf("%f", &students[i].math);
printf("英语成绩:");
scanf("%f", &students[i].english);
}
qsort(students, 5, sizeof(subject), compare);
printf("\n按总成绩从高到低排序的结果为:\n");
printf("学号\t姓名\t语文\t数学\t英语\t总成绩\n");
for (i = 0; i < 5; i++) {
float total = students[i].chinese + students[i].math + students[i].english;
printf("%s\t%s\t%.1f\t%.1f\t%.1f\t%.1f\n", students[i].sno, students[i].name,
students[i].chinese, students[i].math, students[i].english, total);
}
return 0;
}
```
程序中使用了 qsort 函数来对结构体数组进行排序,需要自定义一个比较函数来指定排序规则。在本程序中,按照总成绩从高到低排序,如果总成绩相同则按照原数组顺序输出。
阅读全文