编写C语言程序,定义一个高考成绩记录信息的结构体,包含考试号(stuNo)、姓名(name)、语文成绩(chnScore)、数学成绩、(mathScore)、英语成绩(engScore)、平均成绩(avgScore),通过scanf函数从终端输入如下的十个学生信息,保存到结构体数组中,但是scanf函数必须定义出来,可使用注释符号注释掉)计算每个学生的三门课的平均成绩,结果保存到avgscore成员变量中;按照原始输入顺序打印所有学生的信息(一行打印一个学生的信息);按照平均分由高到低输出学生的信息;输出英语成绩最低的同学的信息;输出平均成绩最高的同学的信息;输出数学分数最高的五个学生的学号、姓名和数学成绩信息;输出数学分数最高且英语分数高于75分的三个学生的信息;输出按照以语文成绩由高分到低分排序的学生信息,如果语文成绩相同,按照数学成绩由高到低排序输出。再从键盘获取学号,根据学号查询是否有该学号的记录,如果有,就输出该学号对应的学生的信息,如果没有则输出查无此人。
时间: 2023-06-14 12:06:36 浏览: 1266
c语言作业——学生成绩统计.docx
```c
#include <stdio.h>
#include <string.h>
#define N 10 // 学生数量
// 定义高考成绩记录信息的结构体
struct student {
int stuNo; // 考试号
char name[20]; // 姓名
int chnScore; // 语文成绩
int mathScore; // 数学成绩
int engScore; // 英语成绩
float avgScore; // 平均成绩
};
// 定义函数,用于输入学生信息
void input(struct student *s) {
printf("请输入学生的考试号、姓名、语文成绩、数学成绩、英语成绩,用空格隔开:");
scanf("%d %s %d %d %d", &s->stuNo, s->name, &s->chnScore, &s->mathScore, &s->engScore);
s->avgScore = (s->chnScore + s->mathScore + s->engScore) / 3.0; // 计算平均分
}
// 定义函数,用于打印学生信息
void print(struct student s) {
printf("%d %s %d %d %d %.2f\n", s.stuNo, s.name, s.chnScore, s.mathScore, s.engScore, s.avgScore);
}
// 定义函数,用于按平均分排序
void sort(struct student *students) {
int i, j;
struct student temp;
for (i = 0; i < N - 1; i++) {
for (j = i + 1; j < N; j++) {
if (students[i].avgScore < students[j].avgScore) {
temp = students[i];
students[i] = students[j];
students[j] = temp;
}
}
}
}
// 定义函数,用于查找学生信息
void search(struct student *students, int stuNo) {
int i;
for (i = 0; i < N; i++) {
if (students[i].stuNo == stuNo) {
print(students[i]);
return;
}
}
printf("查无此人\n");
}
int main() {
struct student students[N]; // 定义结构体数组
int i, j;
for (i = 0; i < N; i++) {
input(&students[i]); // 输入学生信息
}
printf("原始输入顺序打印所有学生的信息:\n");
for (i = 0; i < N; i++) {
print(students[i]); // 打印学生信息
}
sort(students); // 按平均分排序
printf("按照平均分由高到低输出学生的信息:\n");
for (i = 0; i < N; i++) {
print(students[i]); // 打印学生信息
}
int min_engScore = students[0].engScore;
int min_engScore_index = 0;
for (i = 1; i < N; i++) {
if (students[i].engScore < min_engScore) {
min_engScore = students[i].engScore;
min_engScore_index = i;
}
}
printf("输出英语成绩最低的同学的信息:\n");
print(students[min_engScore_index]);
int max_avgScore_index = 0;
for (i = 1; i < N; i++) {
if (students[i].avgScore > students[max_avgScore_index].avgScore) {
max_avgScore_index = i;
}
}
printf("输出平均成绩最高的同学的信息:\n");
print(students[max_avgScore_index]);
struct student mathScores[N];
memcpy(mathScores, students, sizeof(students)); // 复制一份结构体数组
// 按数学成绩排序
for (i = 0; i < N - 1; i++) {
for (j = i + 1; j < N; j++) {
if (mathScores[i].mathScore < mathScores[j].mathScore) {
temp = mathScores[i];
mathScores[i] = mathScores[j];
mathScores[j] = temp;
}
}
}
printf("输出数学分数最高的五个学生的学号、姓名和数学成绩信息:\n");
for (i = 0; i < 5; i++) {
printf("%d %s %d\n", mathScores[i].stuNo, mathScores[i].name, mathScores[i].mathScore);
}
printf("输出数学分数最高且英语分数高于75分的三个学生的信息:\n");
int count = 0;
for (i = 0; i < N; i++) {
if (students[i].mathScore == mathScores[0].mathScore && students[i].engScore > 75) {
print(students[i]);
count++;
if (count == 3) {
break;
}
}
}
printf("按照以语文成绩由高分到低分排序的学生信息,如果语文成绩相同,按照数学成绩由高到低排序输出:\n");
for (i = 0; i < N - 1; i++) {
for (j = i + 1; j < N; j++) {
if (students[i].chnScore < students[j].chnScore) {
temp = students[i];
students[i] = students[j];
students[j] = temp;
} else if (students[i].chnScore == students[j].chnScore) {
if (students[i].mathScore < students[j].mathScore) {
temp = students[i];
students[i] = students[j];
students[j] = temp;
}
}
}
}
for (i = 0; i < N; i++) {
print(students[i]);
}
int stuNo;
printf("请输入学号:");
scanf("%d", &stuNo);
search(students, stuNo); // 查找学生信息
return 0;
}
```
阅读全文