解题思路:
创建结构体将学号,姓名,成绩等不同的数据类型组合在一起形成新的数据类型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分
18 人评分
#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].su
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 << "
#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]
Blank 2022-09-29 22:11:41 |
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<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
C二级辅导-进制转换 (C语言代码)浏览:615 |
C语言训练-求s=a+aa+aaa+aaaa+aa...a的值 (C语言代码)浏览:1031 |
C语言程序设计教程(第三版)课后习题10.5 (C语言代码)浏览:1450 |
C语言程序设计教程(第三版)课后习题6.9 (C语言代码)浏览:543 |
C语言程序设计教程(第三版)课后习题8.3 (C语言代码)浏览:718 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:589 |
【魔板】 (C++代码)(时间超限,希望会的帮我改正一下)浏览:745 |
哥德巴赫曾猜测 (C语言代码)浏览:2352 |
母牛的故事 (C语言代码)浏览:1428 |
最小公倍数 (C语言代码)浏览:1029 |