原题链接:[编程入门]结构体之成绩统计2
解题思路:
创建结构体将学号,姓名,成绩等不同的数据类型组合在一起形成新的数据类型Student。在主函数中定义变量N用来保存学生人数,因为学生的数量不是一个,所以用数组来保存学生的信息,接着定义Ane_sum,Two_sum,Three_sum来保存各课成绩的总成绩。用Ane_aver,Two_aver,Three_aver保存各课成绩的平均成绩。
因为运用到数组保存信息,所以用for循环来输入学生的信息,代码如下:
for(i=0;i<N;i++)
{
cin>>student[i].Id;
cin>>student[i].Name;
cin>>student[i].Ane_score;
cin>>student[i].Two_score;
cin>>student[i].Three_score;
}当学生的信息都输入之后,需要先求出每门成绩的总和才能求平均成绩,这里为了让代码简短一些,所以求每门成绩的总和与每个学生自己总成绩的代码写在了一起,计算完这些成绩后即可输出,代码如下:
for(i=0;i<N;i++)
{
Ane_sum+=student[i].Ane_score;
Two_sum+=student[i].Two_score;
Three_sum+=student[i].Three_score;
student[i].Sum_score=student[i].Ane_score
+student[i].Two_score
+student[i].Three_score;
}
//定义新的变量保存每门成绩的平均成绩
double Ane_aver=Ane_sum/N;
double Two_aver=Two_sum/N;
double Three_aver=Three_sum/N;
//输出每门课的平均成绩
cout<<Ane_aver<<" "
<<Two_aver<<" "
<<Three_aver<<endl;最后找出总分最高的同学,需要通过for循环遍历所有的同学,然后使用打擂台的方法找出总分数最高的同学。所谓的打擂台即为假设数组中第一个同学是分数最高的,即为擂主,然后和后边的同学一一进行比较,如果后边同学的成绩有更高的,则替换掉现有擂主成为新的擂主,接着和后边的同学继续比较,直到找出分数最高的同学位置,代码如下:
//找到分数最高的同学
for(i=1;i<N;i++)
{
if(student[0].Sum_score<student[i].Sum_score)
{
student[0].Id=student[i].Id;
student[0].Name=student[i].Name;
student[0].Ane_score=student[i].Ane_score;
student[0].Two_score=student[i].Two_score;
student[0].Three_score=student[i].Three_score;
student[0].Sum_score=student[i].Sum_score;
}
}注意事项:
在寻找到分数最高的同学时不要只替换总成绩,应把全部的数据都替换掉。
参考代码:
#include<iostream>
#include<string>
using namespace std;
//创建学生结构体
struct Student
{
string Id;
string Name;
double Ane_score;
double Two_score;
double Three_score;
double Sum_score;
};
int main()
{
int N;
cin>>N;
Student student[N];
double Ane_sum=0;
double Two_sum=0;
double Three_sum=0;
int i;
//输入学生信息
for(i=0;i<N;i++)
{
cin>>student[i].Id;
cin>>student[i].Name;
cin>>student[i].Ane_score;
cin>>student[i].Two_score;
cin>>student[i].Three_score;
}
//求每门成绩的总成绩和每个学生的总成绩
for(i=0;i<N;i++)
{
Ane_sum+=student[i].Ane_score;
Two_sum+=student[i].Two_score;
Three_sum+=student[i].Three_score;
student[i].Sum_score=student[i].Ane_score
+student[i].Two_score
+student[i].Three_score;
}
//定义新的变量保存每门成绩的平均成绩
double Ane_aver=Ane_sum/N;
double Two_aver=Two_sum/N;
double Three_aver=Three_sum/N;
//输出每门课的平均成绩
cout<<Ane_aver<<" "
<<Two_aver<<" "
<<Three_aver<<endl;
//找到分数最高的同学
for(i=1;i<N;i++)
{
if(student[0].Sum_score<student[i].Sum_score)
{
student[0].Id=student[i].Id;
student[0].Name=student[i].Name;
student[0].Ane_score=student[i].Ane_score;
student[0].Two_score=student[i].Two_score;
student[0].Three_score=student[i].Three_score;
student[0].Sum_score=student[i].Sum_score;
}
}
//输出最高分数同学的各项信息
cout<<student[0].Id<<" "
<<student[0].Name<<" "
<<student[0].Ane_score<<" "
<<student[0].Two_score<<" "
<<student[0].Three_score<<endl;
return 0;
}0.0分
12 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
#include<stdio.h> #include<string.h> typedef struct student { char id[50]; char name[50]; int g[3]; int sum; }stu; int sum(stu student) { int sum = 0; sum = student.g[0] + student.g[1] + student.g[2]; return sum; } double avg_s(stu student[], int num, int sub) { int sum = 0; int avg = 0; for (int i = 0; i < num; i++) { sum += student[i].g[sub]; } avg = sum / num; return avg; } void max_s(stu student[], int num) { int cnt = 0; int max = student[0].sum; int max_id = 0; while (cnt < num - 1) { if (student[cnt].sum < student[cnt + 1].sum) { max = student[cnt + 1].suif ((a[0].s1 + a[0].s2 + a[0].s3) > (a[1].s1 + a[1].s2 + a[1].s3)) { strcpy_s(b.id, a[0].id); strcpy_s(b.name, a[0].name); b.s1 = a[0].s1; b.s2 = a[0].s2; b.s3 = a[0].s3; } else { strcpy_s(b.id, a[1].id); strcpy_s(b.name, a[1].name); b.s1 = a[1].s1; b.s2 = a[1].s2; b.s3 = a[1].s3; } if (N > 2) { for (int i = 2; i < N; i++) { if ((b.s1 + b.s2 + b.s3) < (a[i].s1 + a[i].s2 + a[i].s3)) { strcpy_s(b.id, a[i].id); strcpy_s(b.name, a[i].name); b.s1 = a[i].s1; b.s2 = a[i].s2; b.s2 = a[i].s2; } } } cout << b.id << " " << b.name << " " << b.s1 << "@Blank if ((a[0].s1 + a[0].s2 + a[0].s3) > (a[1].s1 + a[1].s2 + a[1].s3)) { strcpy_s(b.id, a[0].id); strcpy_s(b.name, a[0].name); b.s1 = a[0].s1; b.s2 = a[0].s2; b.s3 = a[0].s3; } else { strcpy_s(b.id, a[1].id); strcpy_s(b.name, a[1].name); b.s1 = a[1].s1; b.s2 = a[1].s2; b.s3 = a[1].s3; } if (N > 2) { for (int i = 2; i < N; i++) { if ((b.s1 + b.s2 + b.s3) < (a[i].s1 + a[i].s2 + a[i].s3)) { strcpy_s(b.id, a[i].id); strcpy_s(b.name, a[i].name); b.s1 = a[i].s1; b.s2 = a[i].s2; b.s2 = a[i].s2; } } } cout << b.id << " " << b.name << " " << b.s1 << " " << b.s2 << " " << b.s3 << endl; return 0; }#include<iostream> using namespace std; #include<cstring> struct recording { char id[10]; char name[20]; int s1, s2, s3; }; void input(recording a[],int i) { cin >> a[i].id >> a[i].name >> a[i].s1 >> a[i].s2 >> a[i].s3; } int main() { int N,num1=0,num2=0,num3=0; recording a[100]={ }, b; cin >> N; for (int i = 0; i < N; i++) { input(a,i); } for (int i = 0; i < N; i++) { num1 += a[i].s1; num2 += a[i].s2; num3 += a[i].s3; } cout << num1 / N << " " << num2 / N << " " << num3 / N << endl; if ((a[0].s1 + a[0].s2 + a[0].s3) > (a[1].s1 + a[1].s2 + a[1].s3)) { strcpy_s(b.id, a[0]#include<stdio.h> struct Student { char id[101]; char name[101]; int score_c1; int score_c2; int score_c3; double score_sum; }; int main() { int n; scanf("%d",&n); Student student[n]; int s1,s2,s3,x,ss; ss=s1=s2=s3=0; for (int i=0;i<n;i++) { scanf("%s %s %d %d %d", &student[i].id, &student[i].name, &student[i].score_c1,&student[i].score_c2, &student[i].score_c3); s1+=student[i].score_c1; s2+=student[i].score_c2; s3+=student[i].score_c3; student[i].score_sum=student[i].score