编写C语言程序,定义一个高考成绩记录信息的结构体,包含考试号(stuNo)、姓名(name)、语文成绩(chnScore)、数学成绩(mathScore)、英语成绩(engScore)、平均成绩(avgScore), (1)通过scanf函数从终端输入十个学生信息,保存到结构体数组中: (可以允许在程序初始化的时候初始化这些信息【因为程序调试的输入成本太高,所以允许大家直接初始化这个信息】,但是scanf函数必须定义出来。 (2)计算每个学生的三门课的平均成绩,结果保存到avgscore成员变量中 (3)按照原始输入顺序打印所有学生的信息(一行打印一个学生的信息) (4)按照平均分由高到低输出学生的信息 (5)输出英语成绩最低的同学的信息;输出平均成绩最高的同学的信息 (6)输出数学分数最高的五个学生的学号、姓名和数学成绩信息; (7)输出数学分数最高且英语分数高于75分的三个学生的信息; (8)输出按照以语文成绩由高分到低分排序的学生信息,如果语文成绩相同,按 照数学成绩由高到低排序输出。 (9)再从键盘获取学号,根据学号查询是否有该学号的记录,如果有,就输出该 学号对应的学生的信息,如果没有则输出查无此人。
时间: 2023-06-12 10:03:39 浏览: 1126
以下是代码实现:
```c
#include <stdio.h>
#include <string.h>
#define MAX_STUDENT 10
struct Student {
int stuNo;
char name[20];
int chnScore;
int mathScore;
int engScore;
float avgScore;
};
void initStudent(struct Student *s) {
s->stuNo = 0;
strcpy(s->name, "");
s->chnScore = 0;
s->mathScore = 0;
s->engScore = 0;
s->avgScore = 0.0;
}
void inputStudent(struct Student *s) {
printf("请输入考试号:");
scanf("%d", &s->stuNo);
printf("请输入姓名:");
scanf("%s", s->name);
printf("请输入语文成绩:");
scanf("%d", &s->chnScore);
printf("请输入数学成绩:");
scanf("%d", &s->mathScore);
printf("请输入英语成绩:");
scanf("%d", &s->engScore);
s->avgScore = (s->chnScore + s->mathScore + s->engScore) / 3.0;
}
void printStudent(struct Student s) {
printf("%d\t%s\t%d\t%d\t%d\t%.2f\n", s.stuNo, s.name, s.chnScore, s.mathScore, s.engScore, s.avgScore);
}
void printStudents(struct Student *students, int n) {
printf("所有学生信息:\n");
for (int i = 0; i < n; i++) {
printStudent(students[i]);
}
}
void sortStudentsByAvgScore(struct Student *students, int n) {
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
if (students[i].avgScore < students[j].avgScore) {
struct Student temp = students[i];
students[i] = students[j];
students[j] = temp;
}
}
}
}
void printStudentWithLowestEngScore(struct Student *students, int n) {
int minEngScore = students[0].engScore;
int minEngScoreIndex = 0;
for (int i = 1; i < n; i++) {
if (students[i].engScore < minEngScore) {
minEngScore = students[i].engScore;
minEngScoreIndex = i;
}
}
printf("英语成绩最低的同学信息:\n");
printStudent(students[minEngScoreIndex]);
}
void printStudentWithHighestAvgScore(struct Student *students, int n) {
float maxAvgScore = students[0].avgScore;
int maxAvgScoreIndex = 0;
for (int i = 1; i < n; i++) {
if (students[i].avgScore > maxAvgScore) {
maxAvgScore = students[i].avgScore;
maxAvgScoreIndex = i;
}
}
printf("平均成绩最高的同学信息:\n");
printStudent(students[maxAvgScoreIndex]);
}
void sortStudentsByMathScore(struct Student *students, int n) {
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
if (students[i].mathScore < students[j].mathScore) {
struct Student temp = students[i];
students[i] = students[j];
students[j] = temp;
}
}
}
}
void printTop5StudentsByMathScore(struct Student *students, int n) {
sortStudentsByMathScore(students, n);
printf("数学分数最高的五个学生信息:\n");
for (int i = 0; i < 5 && i < n; i++) {
printf("%d\t%s\t%d\n", students[i].stuNo, students[i].name, students[i].mathScore);
}
}
void printTop3StudentsByMathScoreAndEngScore(struct Student *students, int n) {
struct Student tempStudents[MAX_STUDENT];
int tempIndex = 0;
for (int i = 0; i < n; i++) {
if (students[i].mathScore > tempStudents[0].mathScore) {
tempStudents[0] = students[i];
for (int j = 1; j < 3; j++) {
if (tempStudents[j].engScore < tempStudents[j - 1].engScore) {
struct Student temp = tempStudents[j];
tempStudents[j] = tempStudents[j - 1];
tempStudents[j - 1] = temp;
}
}
}
}
printf("数学分数最高且英语分数高于75分的三个学生信息:\n");
for (int i = 0; i < 3; i++) {
printStudent(tempStudents[i]);
}
}
void sortStudentsByChnScoreAndMathScore(struct Student *students, int n) {
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
if (students[i].chnScore < students[j].chnScore) {
struct Student temp = students[i];
students[i] = students[j];
students[j] = temp;
} else if (students[i].chnScore == students[j].chnScore && students[i].mathScore < students[j].mathScore) {
struct Student temp = students[i];
students[i] = students[j];
students[j] = temp;
}
}
}
}
void printStudentByChnScoreAndMathScore(struct Student *students, int n) {
sortStudentsByChnScoreAndMathScore(students, n);
printf("按照语文成绩由高到低排序的学生信息:\n");
for (int i = 0; i < n; i++) {
printStudent(students[i]);
}
}
int main() {
struct Student students[MAX_STUDENT];
for (int i = 0; i < MAX_STUDENT; i++) {
initStudent(&students[i]);
}
// 直接初始化学生信息
students[0].stuNo = 1;
strcpy(students[0].name, "张三");
students[0].chnScore = 90;
students[0].mathScore = 85;
students[0].engScore = 80;
students[0].avgScore = (students[0].chnScore + students[0].mathScore + students[0].engScore) / 3.0;
students[1].stuNo = 2;
strcpy(students[1].name, "李四");
students[1].chnScore = 85;
students[1].mathScore = 90;
students[1].engScore = 75;
students[1].avgScore = (students[1].chnScore + students[1].mathScore + students[1].engScore) / 3.0;
students[2].stuNo = 3;
strcpy(students[2].name, "王五");
students[2].chnScore = 80;
students[2].mathScore = 90;
students[2].engScore = 85;
students[2].avgScore = (students[2].chnScore + students[2].mathScore + students[2].engScore) / 3.0;
students[3].stuNo = 4;
strcpy(students[3].name, "赵六");
students[3].chnScore = 75;
students[3].mathScore = 80;
students[3].engScore = 90;
students[3].avgScore = (students[3].chnScore + students[3].mathScore + students[3].engScore) / 3.0;
students[4].stuNo = 5;
strcpy(students[4].name, "小明");
students[4].chnScore = 60;
students[4].mathScore = 70;
students[4].engScore = 80;
students[4].avgScore = (students[4].chnScore + students[4].mathScore + students[4].engScore) / 3.0;
students[5].stuNo = 6;
strcpy(students[5].name, "小红");
students[5].chnScore = 70;
students[5].mathScore = 60;
students[5].engScore = 75;
students[5].avgScore = (students[5].chnScore + students[5].mathScore + students[5].engScore) / 3.0;
students[6].stuNo = 7;
strcpy(students[6].name, "小刚");
students[6].chnScore = 80;
students[6].mathScore = 85;
students[6].engScore = 90;
students[6].avgScore = (students[6].chnScore + students[6].mathScore + students[6].engScore) / 3.0;
students[7].stuNo = 8;
strcpy(students[7].name, "小李");
students[7].chnScore = 75;
students[7].mathScore = 70;
students[7].engScore = 80;
students[7].avgScore = (students[7].chnScore + students[7].mathScore + students[7].engScore) / 3.0;
students[8].stuNo = 9;
strcpy(students[8].name, "小张");
students[8].chnScore = 90;
students[8].mathScore = 80;
students[8].engScore = 75;
students[8].avgScore = (students[8].chnScore + students[8].mathScore + students[8].engScore) / 3.0;
students[9].stuNo = 10;
strcpy(students[9].name, "小王");
students[9].chnScore = 85;
students[9].mathScore = 90;
students[9].engScore = 80;
students[9].avgScore = (students[9].chnScore + students[9].mathScore + students[9].engScore) / 3.0;
printStudents(students, MAX_STUDENT);
sortStudentsByAvgScore(students, MAX_STUDENT);
printf("按照平均分由高到低输出学生信息:\n");
printStudents(students, MAX_STUDENT);
printStudentWithLowestEngScore(students, MAX_STUDENT);
printStudentWithHighestAvgScore(students, MAX_STUDENT);
printTop5StudentsByMathScore(students, MAX_STUDENT);
printTop3StudentsByMathScoreAndEngScore(students, MAX_STUDENT);
printStudentByChnScoreAndMathScore(students, MAX_STUDENT);
int queryStuNo;
printf("请输入要查询的学号:");
scanf("%d", &queryStuNo);
int queryStuIndex = -1;
for (int i = 0; i < MAX_STUDENT; i++) {
if (students[i].stuNo == queryStuNo) {
queryStuIndex = i;
break;
}
}
if (queryStuIndex == -1) {
printf("查无此人。\n");
} else {
printf("查询到的学生信息:\n");
printStudent(students[queryStuIndex]);
}
return 0;
}
```
阅读全文