有5个学生的数据,每个学生的数据包括num(学号)、name(姓名)、score[3] (3门课的成绩)
-
输入5个学生的数据
-
按列表格式输出学生数据以及每人的平均成绩,
例如 No. Name score1 score2 score3 average
101 Li 80 90 85 85 -
分别计算3门课的平均成绩,并打印
-
打印总分最高的学生的数据(包括学号、姓名、3门课总成绩)
- 使用typedef来说明名为STUDENT的结构体变量,有n个人的学号输入sp[i].num,因为一个人有三个分数,所以5个人就有15个分数,为(sp+i)->score[j],每个人只有一个平均分,所以(sp+i)->ave=sum/3要放在for(j=0;j<3;j++)的外面
- avg_score1,avg_score2,avg_score3;计算三门课的平均分,avg_score1+=((sp+i)->score[0]);相当于五个人的第一门课的成绩,输出时除以人数即为单门课的平均分。
- 定义变量temp,通过语句if((sp+i)->ave>(sp+temp)->ave) temp=i;让temp等于总分最高的人的下标,maxsum保存他的总成绩然后输出,其他的信息和前面的语句一样,只是把i换成temp就输出单独总分最高同学的成绩
#include<iostream>//2020.5.2
#include<iomanip>
#include<cstdio>
#define N 5 //5名学生
using namespace std;
typedef struct
{
char num[20];
char name[20];
float score[3];
float ave;
}STUDENT;
void getdata(STUDENT *sp) //输入数据
{
int i,j;
for(i=0;i<N;i++)
{
cin>>(sp[i].num); //5个同学的学号
cin>>(sp[i].name); //5个同学的姓名
for(j=0;j<3;j++) cin>>((sp+i)->score[j]);
}
}
void outdata(STUDENT *sp) //处理,输出数据
{
int i,j;
int temp=0; //总分最高的人的下标
float sum=0; //5个人每个人的总分
float maxsum=0; //总分最高之人的总分
float avg_score1=0,avg_score2=0,avg_score3=0;//三门课平各自的平均分
for(i=0;i<N;i++)
{
sum=0;
cout<<(sp+i)->num<<setw(7)<<(sp+i)->name;
for(j=0;j<3;j++)
{
cout<<setw(9)<<(sp+i)->score[j]; //5个人的3个分数
sum+=((sp+i)->score[j]); //一个人的总分
}
(sp+i)->ave=sum/3; //每位同学的平均分
printf("%10.1f",(sp+i)->ave); //平均分保留小数点后一位
cout<<'\n';
//求每一门课的平均分
avg_score1+=((sp+i)->score[0]);
avg_score2+=((sp+i)->score[1]);
avg_score3+=((sp+i)->score[2]);
//求总分最高分同学的下标=temp
if((sp+i)->ave>(sp+temp)->ave) temp=i;
}
//输出每一门课的平均分
cout<<"\navg_score1 = "<<avg_score1/N<<endl;
cout<<"avg_score2 = "<<avg_score2/N<<endl;
cout<<"avg_score3 = "<<avg_score3/N<<endl;
//输出总分最高分学生的信息
cout<<"\n总分最高:"<<endl;
cout<<"No. Name 总分"<<endl;
cout<<(sp+temp)->num<<setw(7)<<(sp+temp)->name;
for(j=0;j<3;j++)
maxsum+=((sp+temp)->score[j]);
cout<<setw(7)<<maxsum<<endl;
}
int main()
{
STUDENT p[N];
cout<<"Input 5 students' information:"<<endl;
cout<<"Input num,name,3*scores:"<<endl;
cout<<"eg:01 Li 92 91 95\n"<<endl;
cout<<"Input 5 students' information:\n";
getdata(p);
cout<<"\nNo. Name score1 score2 score3 average"<<endl;
outdata(p);
return 0;
}
//测试数据
/*
01 小明 92 87 90
02 小红 89 86 96
03 小华 87 92 89
04 小叶 98 87 91
05 小张 90 87 89
*/