定义学生结构体struct Student类型如下: char id[10]; //学号 char Name[20];//姓名 double Score[3];//3门课程成绩 定义并初始化struct Student数组stus[10],显示stus数组数据,输入学生学号,查找该生的数据;删除符合某个条件的所有学生数据;建立struct Student类型的变量并赋值,将该变量插入到stus数组的末尾,依据3门课程的总成绩,对stus数组进行降序排序,如总成绩相同,则按照Score[0]降序排序,并显示。用c语言编写
时间: 2024-02-29 08:55:28 浏览: 125
c语言课件结构体
以下是实现上述功能的C语言代码:
```c
#include <stdio.h>
#include <string.h>
// 学生结构体
struct Student {
char id[10]; // 学号
char name[20]; // 姓名
double score[3]; // 3门课程成绩
};
// 初始化学生数组
void init(struct Student stus[]) {
for (int i = 0; i < 10; i++) {
sprintf(stus[i].id, "S%02d", i + 1); // 学号格式为S01、S02、S03...
sprintf(stus[i].name, "Student%d", i + 1); // 姓名格式为Student1、Student2、Student3...
for (int j = 0; j < 3; j++) {
stus[i].score[j] = 0; // 成绩初始值为0
}
}
}
// 显示学生数组数据
void show(struct Student stus[]) {
printf("学号\t姓名\t成绩1\t成绩2\t成绩3\n");
for (int i = 0; i < 10; i++) {
printf("%s\t%s\t%.1f\t%.1f\t%.1f\n", stus[i].id, stus[i].name, stus[i].score[0], stus[i].score[1], stus[i].score[2]);
}
}
// 查找学生数据
void find(struct Student stus[]) {
char id[10];
printf("请输入要查找的学生学号:");
scanf("%s", id);
for (int i = 0; i < 10; i++) {
if (strcmp(stus[i].id, id) == 0) {
printf("学号\t姓名\t成绩1\t成绩2\t成绩3\n");
printf("%s\t%s\t%.1f\t%.1f\t%.1f\n", stus[i].id, stus[i].name, stus[i].score[0], stus[i].score[1], stus[i].score[2]);
return;
}
}
printf("未找到该学生数据!\n");
}
// 删除符合某个条件的所有学生数据
void del(struct Student stus[]) {
double minScore;
printf("请输入要删除的学生最低总成绩:");
scanf("%lf", &minScore);
int count = 0;
for (int i = 0; i < 10; i++) {
double totalScore = stus[i].score[0] + stus[i].score[1] + stus[i].score[2];
if (totalScore < minScore) {
memset(&stus[i], 0, sizeof(struct Student)); // 将该学生数据清零
count++;
}
}
printf("成功删除%d条学生数据!\n", count);
}
// 插入学生数据
void insert(struct Student stus[]) {
struct Student newStu;
printf("请输入新学生学号:");
scanf("%s", newStu.id);
printf("请输入新学生姓名:");
scanf("%s", newStu.name);
printf("请输入新学生3门课程成绩:");
scanf("%lf %lf %lf", &newStu.score[0], &newStu.score[1], &newStu.score[2]);
stus[10] = newStu; // 将新学生数据插入到数组末尾
printf("成功插入1条学生数据!\n");
}
// 降序排序
void sort(struct Student stus[]) {
for (int i = 0; i < 10; i++) {
for (int j = i + 1; j < 10; j++) {
double totalScore1 = stus[i].score[0] + stus[i].score[1] + stus[i].score[2];
double totalScore2 = stus[j].score[0] + stus[j].score[1] + stus[j].score[2];
if (totalScore1 < totalScore2 || (totalScore1 == totalScore2 && stus[i].score[0] < stus[j].score[0])) {
struct Student temp = stus[i];
stus[i] = stus[j];
stus[j] = temp;
}
}
}
}
int main() {
struct Student stus[11]; // 学生数组,多定义一个元素用于插入新学生
init(stus); // 初始化学生数组
show(stus); // 显示学生数组数据
find(stus); // 查找学生数据
del(stus); // 删除符合某个条件的所有学生数据
insert(stus); // 插入学生数据
sort(stus); // 降序排序
show(stus); // 显示排序后的学生数组数据
return 0;
}
```
注意:这里为了方便,学号和姓名都采用了自动生成和初始化的方式,实际使用时需要根据实际情况进行修改。另外,删除学生数据的方式比较简单粗暴,实际使用时可以考虑使用链表等数据结构进行优化。
阅读全文