用c语言写出一下内容:有5个学生,每个学生的数据包括学号、姓名,4门课程,从键盘输入5个学生的数据,要求输出5个学生4门课程总成绩以及每门课程的平均分,以及每个学生未达到平均分的课程数和每门课没有达到平均分的人数
时间: 2023-10-28 07:32:44 浏览: 80
C语言程序设计-输入2个学生3门课的成绩,计算学生成绩平均分,课程平均分和最高分.
5星 · 资源好评率100%
好的,以下是用C语言实现的代码:
```c
#include <stdio.h>
#include <string.h>
#define STUDENT_NUM 5
#define COURSE_NUM 4
struct Student {
int id;
char name[20];
int scores[COURSE_NUM];
int total_score;
int below_avg_num;
};
void calc_total_score(struct Student *stud) {
int total = 0;
for (int i = 0; i < COURSE_NUM; i++) {
total += stud->scores[i];
}
stud->total_score = total;
}
float calc_course_avg(struct Student *stud, int course_idx, struct Student *all_studs) {
int total = 0;
int count = 0;
for (int i = 0; i < STUDENT_NUM; i++) {
total += all_studs[i].scores[course_idx];
if (all_studs[i].scores[course_idx] > 0) {
count++;
}
}
return (float) total / count;
}
void calc_below_avg_num(struct Student *stud, struct Student *all_studs) {
int count = 0;
for (int i = 0; i < COURSE_NUM; i++) {
float avg = calc_course_avg(stud, i, all_studs);
if (stud->scores[i] < avg) {
count++;
}
}
stud->below_avg_num = count;
}
int main() {
struct Student studs[STUDENT_NUM];
memset(studs, 0, sizeof(studs));
// 从键盘输入5个学生的数据
for (int i = 0; i < STUDENT_NUM; i++) {
printf("请输入第%d个学生的学号:", i+1);
scanf("%d", &studs[i].id);
printf("请输入第%d个学生的姓名:", i+1);
scanf("%s", studs[i].name);
printf("请输入第%d个学生的4门课程成绩:", i+1);
for (int j = 0; j < COURSE_NUM; j++) {
scanf("%d", &studs[i].scores[j]);
}
calc_total_score(&studs[i]);
}
// 输出5个学生4门课程总成绩
printf("\n总成绩如下:\n");
for (int i = 0; i < STUDENT_NUM; i++) {
printf("%d %s", studs[i].id, studs[i].name);
for (int j = 0; j < COURSE_NUM; j++) {
printf(" %d", studs[i].scores[j]);
}
printf(" %d\n", studs[i].total_score);
}
// 输出每门课程的平均分
printf("\n每门课程的平均分如下:\n");
for (int i = 0; i < COURSE_NUM; i++) {
float avg = calc_course_avg(&studs[0], i, studs);
printf("第%d门课程的平均分为:%.2f\n", i+1, avg);
}
// 输出每个学生未达到平均分的课程数和每门课没有达到平均分的人数
printf("\n每个学生未达到平均分的课程数和每门课没有达到平均分的人数如下:\n");
for (int i = 0; i < STUDENT_NUM; i++) {
calc_below_avg_num(&studs[i], studs);
printf("%d %s 未达到平均分的课程数为:%d\n", studs[i].id, studs[i].name, studs[i].below_avg_num);
}
for (int i = 0; i < COURSE_NUM; i++) {
int count = 0;
for (int j = 0; j < STUDENT_NUM; j++) {
float avg = calc_course_avg(&studs[0], i, studs);
if (studs[j].scores[i] < avg) {
count++;
}
}
printf("第%d门课程没有达到平均分的人数为:%d\n", i+1, count);
}
return 0;
}
```
代码的思路如下:
1. 定义一个结构体 `Student`,包含学号、姓名、4门课程成绩、总成绩、未达到平均分的课程数等信息。
2. 定义一些函数,用于计算总成绩、每门课程的平均分、每个学生未达到平均分的课程数等信息。
3. 在 `main` 函数中,从键盘输入5个学生的数据,计算总成绩,并输出5个学生4门课程总成绩。
4. 计算每门课程的平均分,并输出。
5. 计算每个学生未达到平均分的课程数,并输出。
6. 计算每门课没有达到平均分的人数,并输出。
注意,这里为了简化代码,所有的输入都是从键盘输入,没有进行错误处理。在实际应用中,需要对输入进行合法性检查。
阅读全文