C/C++结构体实现学生成绩统计。用户输入数据,输出学生数据以及每人的平均成绩,3门课的平均成绩,以及打印总分最高的学生的数据

有5个学生的数据,每个学生的数据包括num(学号)、name(姓名)、score[3] (3门课的成绩)

  1. 输入5个学生的数据

  2. 按列表格式输出学生数据以及每人的平均成绩,
    例如 No. Name score1 score2 score3 average
    101 Li 80 90 85 85

  3. 分别计算3门课的平均成绩,并打印

  4. 打印总分最高的学生的数据(包括学号、姓名、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
*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值