C语言尝试定义一个这样的结构体: 小明的班级里有若干学生,每个学生都拥有姓名、学号、数学成绩、语文成绩、英语成绩、总分、排名。
时间: 2023-11-04 20:52:48 浏览: 124
你可以这样定义一个类似于这样的结构体:
```c
struct student {
char name[20]; // 姓名
int number; // 学号
float math_score; // 数学成绩
float chinese_score;// 语文成绩
float english_score;// 英语成绩
float total_score; // 总分
int rank; // 排名
};
struct class {
struct student stu[100]; // 班级中的学生,假设不超过100人
int num; // 班级中学生的人数
};
```
这里定义了两个结构体,一个是 `student` 表示学生信息,包括姓名、学号、数学成绩、语文成绩、英语成绩、总分、排名;另一个是 `class` 表示班级信息,包括班级中的学生和学生人数。
相关问题
编写C语言程序,定义一个高考成绩记录信息的结构体,包含考试号(stuNo)、姓名(name)、语文成绩(chnScore)、数学成绩(mathScore)、英语成绩(engScore)、平均成绩(avgScore), (1)通过scanf函数从终端输入十个学生信息,保存到结构体数组中: (可以允许在程序初始化的时候初始化这些信息【因为程序调试的输入成本太高,所以允许大家直接初始化这个信息】,但是scanf函数必须定义出来。 (2)计算每个学生的三门课的平均成绩,结果保存到avgscore成员变量中 (3)按照原始输入顺序打印所有学生的信息(一行打印一个学生的信息) (4)按照平均分由高到低输出学生的信息 (5)输出英语成绩最低的同学的信息;输出平均成绩最高的同学的信息 (6)输出数学分数最高的五个学生的学号、姓名和数学成绩信息; (7)输出数学分数最高且英语分数高于75分的三个学生的信息; (8)输出按照以语文成绩由高分到低分排序的学生信息,如果语文成绩相同,按 照数学成绩由高到低排序输出。 (9)再从键盘获取学号,根据学号查询是否有该学号的记录,如果有,就输出该 学号对应的学生的信息,如果没有则输出查无此人。
以下是代码实现:
```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;
}
```
c语言结构体
C语言中的结构体是一种自定义数据类型,可以将不同的数据类型组合在一起,形成一个新的数据类型,方便程序员进行操作和管理。其基本语法如下:
```
struct 结构体名
{
数据类型 成员变量1;
数据类型 成员变量2;
……
};
```
其中,`结构体名`是定义的结构体的名称,`成员变量`是组成结构体的数据类型。例如,定义一个学生结构体:
```
struct student
{
int id; //学生学号
char name[20]; //学生姓名
int age; //学生年龄
};
```
定义出来后,就可以通过结构体名来声明结构体类型的变量,在程序中使用结构体变量来存储和处理数据。例如:
```
struct student stu1; //定义一个名为stu1的结构体变量
stu1.id = 10001; //给结构体变量的成员变量赋值
strcpy(stu1.name, "小明");
stu1.age = 18;
```
这样就可以通过结构体变量`stu1`来存储一个学生的信息。同时,也可以定义结构体指针来操作结构体变量,例如:
```
struct student *pstu;
pstu = &stu1; //结构体指针指向结构体变量
printf("%d %s %d\n", pstu->id, pstu->name, pstu->age); //使用指针访问结构体成员变量
```
此时,输出的结果就是`10001 小明 18`。
阅读全文