用c语言写出对一个有N个学生的班级,每个学生有3门课程,分别为语文,数学,语言。该系统实现对班级成绩的录入、显示,统计等操作的管理。功能要求: (1)本系统采用一个结构体数组,每个数据的结构应当包括:学号、姓名、M门课程名称。 (2)本系统显示这样的菜单: 系统功能选项: a、 数据导入及显示 b、新记录输入 c、 成绩统计 1)显示每门课程成绩最高的学生的基本信息 2)显示每门课程的平均成绩 3)显示超过某门课程平均成绩的学生人数 g、 退出系统 注意:需保证学号唯一性 (该题目用或数组完成)
时间: 2024-03-18 09:42:17 浏览: 60
20位学生有3门课程分别是高数-大英-C语言的考试成绩-求每门课的总分和平均分.pdf
好的,这是一个比较具体的问题,我会尽力回答。以下是一个C语言的实现代码。
```c
#include <stdio.h>
#include <string.h>
struct student{
int id;
char name[20];
float chinese;
float math;
float english;
};
struct student stu[100];
int count = 0;
void input(){
int id;
char name[20];
float chinese, math, english;
printf("请输入学生的学号,姓名和三门课程成绩(用空格隔开):\n");
scanf("%d %s %f %f %f", &id, name, &chinese, &math, &english);
for(int i=0; i<count; i++){
if(stu[i].id == id){
printf("该学号已经存在,请重新输入!\n");
input();
return;
}
}
stu[count].id = id;
strcpy(stu[count].name, name);
stu[count].chinese = chinese;
stu[count].math = math;
stu[count].english = english;
count++;
printf("添加成功!\n");
}
void display(){
if(count == 0){
printf("当前没有学生记录!\n");
return;
}
printf("学号\t姓名\t语文\t数学\t英语\n");
for(int i=0; i<count; i++){
printf("%d\t%s\t%.2f\t%.2f\t%.2f\n", stu[i].id, stu[i].name, stu[i].chinese, stu[i].math, stu[i].english);
}
}
void stat(){
if(count == 0){
printf("当前没有学生记录!\n");
return;
}
float chinese_sum = 0, math_sum = 0, english_sum = 0;
float chinese_avg, math_avg, english_avg;
int chinese_max_index = 0, math_max_index = 0, english_max_index = 0;
for(int i=0; i<count; i++){
chinese_sum += stu[i].chinese;
math_sum += stu[i].math;
english_sum += stu[i].english;
if(stu[i].chinese > stu[chinese_max_index].chinese){
chinese_max_index = i;
}
if(stu[i].math > stu[math_max_index].math){
math_max_index = i;
}
if(stu[i].english > stu[english_max_index].english){
english_max_index = i;
}
}
chinese_avg = chinese_sum / count;
math_avg = math_sum / count;
english_avg = english_sum / count;
printf("语文平均分:%.2f,数学平均分:%.2f,英语平均分:%.2f\n", chinese_avg, math_avg, english_avg);
printf("语文最高分的学生:学号%d,姓名%s,成绩%.2f\n", stu[chinese_max_index].id, stu[chinese_max_index].name, stu[chinese_max_index].chinese);
printf("数学最高分的学生:学号%d,姓名%s,成绩%.2f\n", stu[math_max_index].id, stu[math_max_index].name, stu[math_max_index].math);
printf("英语最高分的学生:学号%d,姓名%s,成绩%.2f\n", stu[english_max_index].id, stu[english_max_index].name, stu[english_max_index].english);
float chinese_above_avg = 0, math_above_avg = 0, english_above_avg = 0;
for(int i=0; i<count; i++){
if(stu[i].chinese > chinese_avg){
chinese_above_avg++;
}
if(stu[i].math > math_avg){
math_above_avg++;
}
if(stu[i].english > english_avg){
english_above_avg++;
}
}
printf("语文成绩高于平均分的人数:%d\n", (int)chinese_above_avg);
printf("数学成绩高于平均分的人数:%d\n", (int)math_above_avg);
printf("英语成绩高于平均分的人数:%d\n", (int)english_above_avg);
}
void menu(){
printf("系统功能选项:\n");
printf("a、数据导入及显示\n");
printf("b、新记录输入\n");
printf("c、成绩统计\n");
printf("g、退出系统\n");
}
int main(){
char choice = ' ';
while(choice != 'g'){
menu();
scanf("%c", &choice);
switch(choice){
case 'a':
display();
break;
case 'b':
input();
break;
case 'c':
stat();
break;
case 'g':
printf("退出系统!\n");
break;
default:
printf("无效的选项,请重新输入!\n");
break;
}
getchar();
}
return 0;
}
```
以上代码实现了对班级成绩的录入、显示和统计等功能。其中,数据使用一个结构体数组来存储,每个结构体包括学号、姓名、语文、数学和英语成绩。对于录入和显示操作,直接使用结构体数组和循环即可完成。对于统计操作,需要遍历结构体数组,计算平均分、最高分和高于平均分的人数等。最后,使用一个while循环和switch语句来实现菜单功能。
阅读全文