用C语言编写程序 有10个学生,每个学生的数据包括学号,姓名,三门课的成绩(要求用结构体来定义学生的数据),从键盘输入10个学生的数据,要求打印出三门课总平均成绩,以及平均成绩最高分的学生的数据
时间: 2023-03-09 15:05:49 浏览: 181
首先,需要声明结构体:struct Student {int num; char name[20]; float score[3];}; 然后,循环输入10个学生的数据,分别存入结构体:for(int i=0;i<10;i++){scanf("%d%s%f%f%f",&stu[i].num,stu[i].name,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);}接着,计算三门课总平均成绩:float sum=0; for(int i=0;i<10;i++){sum+=stu[i].score[0]+stu[i].score[1]+stu[i].score[2];} float avg=sum/30;最后,找出三门课平均成绩最高的学生:float max=stu[0].score[0]+stu[0].score[1]+stu[0].score[2]; int k=0; for(int i=1;i<10;i++){if(stu[i].score[0]+stu[i].score[1]+stu[i].score[2]>max){max=stu[i].score[0]+stu[i].score[1]+stu[i].score[2];k=i;}} printf("三门课总平均成绩为:%f
最高平均成绩的学生是:%d %s",avg,stu[k].num,stu[k].name);
相关问题
用C语言写一个程序,要求如下:有5个学生,每个学生的数据包括:学号、姓名、三门课成绩,编写程序要求从键盘输入学生们的数据,并输出成绩报表(包括每人的学号,姓名、三门成绩及平均分数),还要求输出平均分在前3名的学生姓名及平均成绩。输入仅五行,输入5个学生的学号、姓名、三门课成绩,要求数据之间用空格分开。输出仅八行,输出5行的成绩报表(依原来顺序的成绩榜,包括:学号 姓名 三门课成绩 平均分),输出3行的成绩榜(平均成绩最高的三个学生的倒序成绩榜,包括:学号 姓名 三门课成绩 平均分)
好的,这是一个完成你要求的C程序:
```c
#include <stdio.h>
#include <string.h>
struct Student {
int id;
char name[20];
int score1;
int score2;
int score3;
float avg_score;
};
int main() {
struct Student students[5];
// 从键盘输入学生数据
for (int i = 0; i < 5; i++) {
printf("Enter student %d data (id name score1 score2 score3): ", i + 1);
scanf("%d %s %d %d %d", &students[i].id, students[i].name, &students[i].score1, &students[i].score2, &students[i].score3);
students[i].avg_score = (float)(students[i].score1 + students[i].score2 + students[i].score3) / 3.0;
}
// 输出成绩报表
printf("成绩报表:\n");
printf("学号\t姓名\t课程1\t课程2\t课程3\t平均分\n");
for (int i = 0; i < 5; i++) {
printf("%d\t%s\t%d\t%d\t%d\t%.2f\n", students[i].id, students[i].name, students[i].score1, students[i].score2, students[i].score3, students[i].avg_score);
}
// 找到平均成绩最高的三个学生
struct Student top_students[3];
memcpy(top_students, students, sizeof(struct Student) * 3);
for (int i = 3; i < 5; i++) {
for (int j = 0; j < 3; j++) {
if (students[i].avg_score > top_students[j].avg_score) {
memcpy(&top_students[j], &students[i], sizeof(struct Student));
break;
}
}
}
// 输出平均成绩在前三名的学生的成绩榜
printf("\n前三名的成绩榜:\n");
printf("学号\t姓名\t课程1\t课程2\t课程3\t平均分\n");
for (int i = 2; i >= 0; i--) {
printf("%d\t%s\t%d\t%d\t%d\t%.2f\n", top_students[i].id, top_students[i].name, top_students[i].score1, top_students[i].score2, top_students[i].score3, top_students[i].avg_score);
}
return 0;
}
```
该程序首先定义了一个结构体`Student`,用于存储每个学生的数据。然后,程序从键盘输入了所有学生的数据,并计算出每个学生的平均成绩。接着,程序输出了成绩报表,包括每个学生的学号、姓名、三门课成绩及平均分数。最后,程序找到了平均成绩在前三名的学生,并输出了这三个学生的成绩榜,包括学号、姓名、三门课成绩及平均分数。
用c语言编写代码,有3个学生,每个学生的数据包括学号,姓名,及三门课成绩,总成绩和平均成绩,从键盘输入3个学生的数据(包括学号,姓名及3门课成绩),要求打印出每位学生的学号,姓名,三门课的成绩,总成绩和平均成绩。 内容要求利用函数形式完成以下内容: (a)根据学生信息定义一个结构体类型,在说明一个该结构体类型的数组;
好的,根据您的要求,我编写了以下代码,实现了您的需求:
```c
#include <stdio.h>
// 定义学生结构体
struct Student {
int id; // 学号
char name[20]; // 姓名
float scores[3]; // 三门课成绩
float totalScore; // 总成绩
float averageScore; // 平均成绩
};
// 计算学生总成绩和平均成绩
void calculateScore(struct Student *student) {
float total = 0;
for (int i = 0; i < 3; i++) {
total += student->scores[i];
}
student->totalScore = total;
student->averageScore = total / 3.0;
}
int main() {
// 定义三个学生结构体
struct Student students[3];
// 从键盘输入学生数据
for (int i = 0; i < 3; i++) {
printf("请输入第%d个学生的信息:\n", i+1);
printf("学号:");
scanf("%d", &students[i].id);
printf("姓名:");
scanf("%s", students[i].name);
printf("三门课成绩:");
scanf("%f %f %f", &students[i].scores[0], &students[i].scores[1], &students[i].scores[2]);
// 计算学生总成绩和平均成绩
calculateScore(&students[i]);
}
// 打印每位学生的信息
printf("学生信息如下:\n");
for (int i = 0; i < 3; i++) {
printf("学号:%d,姓名:%s,三门课成绩:%.2f %.2f %.2f,总成绩:%.2f,平均成绩:%.2f\n",
students[i].id, students[i].name, students[i].scores[0], students[i].scores[1], students[i].scores[2],
students[i].totalScore, students[i].averageScore);
}
return 0;
}
```
在这个代码中,我们首先定义了一个名为 `Student` 的结构体,它包括了学号、姓名、三门课成绩、总成绩和平均成绩。然后,我们在 `main` 函数中定义了一个数组,用于存储三个学生的信息。接下来,我们从键盘输入每个学生的信息,并通过 `calculateScore` 函数计算总成绩和平均成绩。最后,我们打印每位学生的信息。
希望这个代码可以帮助您解决问题!
阅读全文