定义多维数组,存储学生学号、4科成绩

/*  
 ***************************************************************************
  期末考试,某班30名同学参加了4门课程的考试,请你编写程序完成以下功能:
  定义多维数组,存储学生学号、4科成绩
  1.求各门课程的平均分
  2.每个同学的平均分
  3.各科分数最高/低分
  4.按各个同学的平均分进行排序并输出(学号与各科成绩
  同时变化)
  5.通过学号查询学生信息,包括学号、各科成绩、总成绩
  平均分、排名结果。
  6.通过课程名查询课程平均分、最高分、最低分及对应的
  学生学号。
  要求:各部分需用函数实现,通过主程序调用各函数输出
  结果。(可以用数组,也可体用结构体)
  ***************************************************************************
*/
#include<iostream>
#include<cmath>
#include<string>         //字符串输入、输出
using namespace std;
const int p_number = 30;   //固定班级人数
const int s_number = 4;   //固定学习科目
double Grade[p_number][s_number + 2];    //创建数组存放每个人的学号,这个二维数组为人数行,学科+2列 多出来的两列为学号和总分 

void Ave_PerGrade();       //声明函数,用来求每个人的平均成绩
void Ave_TotalGrade();     //声明函数,用来求全班每科的平均成绩
void Max_PerGrade();       //声明函数,用来求全班每科最高分
void Min_PerGrade();       //声明函数,用来求全班每科最低分
void Set();                //声明函数,用来输入全班每个人的具体成绩
void Max_PerPeoGrade();    //声明函数,用来求个人最高分(第一名)
void Sno_Select();         //声明函数,用来按照学号查找信息
void instr();              //循环函数,用来判断输入信息有误时重新进行输入
void Sub_Select();         //声明函数,用来按照科目查找信息
void instr1();             //循环函数,用来判断输入信息有误时重新进行输入

struct GradePer            //定义一个结构体  包括4门成绩
{
 double chinese_grade;  //语文成绩
 double math_grade;     //数学成绩
 double english_grade;  //英语成绩
 double history_grade;  //历史成绩
};
GradePer Total_Sub[p_number] =  //创建结构体,初始化所有成绩为0
{
 
};
int main()
{  
 
 Set();                  //手动输入每个人的成绩
 Ave_TotalGrade();       //显示各科目平均成绩
 Max_PerGrade();         //显示各科目最高成绩
 Min_PerGrade();         //显示各科目最低成绩
 
 Ave_PerGrade();         //显示所有学生个人平均成绩
 Max_PerPeoGrade();      //排行
 Sno_Select();           //按照学号查询信息
 Sub_Select();           //按照课程名查询信息
 return 0;
}
void Set()                   
{
 for (int i = 0; i < p_number; i++)      //按学号默认排序123456。。进行输入各科成绩
 {
  cout << "输入学号为" << i + 1 << "的成绩:" << endl;
  cout << "语文成绩:";
  cin >> Total_Sub[i].chinese_grade;// 输入语文成绩
  cout << "数学成绩:";
  cin >> Total_Sub[i].math_grade;   // 输入数学成绩
  cout << "英语成绩:";
  cin >> Total_Sub[i].english_grade;// 输入英语成绩
  cout << "历史成绩:";
  cin >> Total_Sub[i].history_grade;// 输入历史成绩
 }
 for (int i = 0; i < p_number; i++)      
 {
  Grade[i][0] = i + 1;                                                 //第一列为学好列
  Grade[i][1] = Total_Sub[i].chinese_grade;                            //第二列存放语文成绩
  Grade[i][2] = Total_Sub[i].math_grade;                               //第三列存放数学成绩
  Grade[i][3] = Total_Sub[i].english_grade;                            //第四列存放英语成绩
  Grade[i][4] = Total_Sub[i].history_grade;                            //第五列存放历史成绩
  Grade[i][5] = Grade[i][1] + Grade[i][2] + Grade[i][3] + Grade[i][4]; //第六列存放总成绩
 }
 
}

void Ave_TotalGrade()                                 //求平均分
{    
 double total_chinese = 0;                            //初始化各科成绩总分为0
 double total_math = 0;
 double total_english = 0;
 double total_history = 0;
 for (int i = 0; i < p_number; i++)                 
 {
  total_chinese = total_chinese + Grade[i][1];        //计算各科总分 
  total_math = total_math + Grade[i][2];
  total_english = total_english + Grade[i][3];
  total_history = total_history + Grade[i][4];
 }
 double chinese_avegrade=0, math_avegrade=0, english_avegrade=0, history_avegegarde=0; 初始化各科平均分为0
 chinese_avegrade = total_chinese / p_number;          //计算各科平均分
 math_avegrade = total_math / p_number;
 english_avegrade = total_english / p_number;
 history_avegegarde = total_history / p_number;
  
 cout << "该班级评级成绩如下:" << endl;                 //输入各科平均分
 cout <<"语文平均成绩:"<< chinese_avegrade << "\t" 
   <<"数学平均成绩:"<< math_avegrade << "\n" 
   <<"英语平均成绩:"<< english_avegrade << "\t" 
   <<"历史平均成绩:"<< history_avegegarde << endl;
 cout << endl;
}
void Max_PerGrade()                                     //求每科最高分
{
 double max1 = 0;
 double max2 = 0;                                       //初始化每个最高分为0
 double max3 = 0;
 double max4 = 0;
 for (int i = 0; i <p_number; i++)
 {
  if (Total_Sub[i].chinese_grade >= max1)
   max1 = Total_Sub[i].chinese_grade;
 }
 for (int i = 0; i <p_number; i++)
 {
  if (Total_Sub[i].math_grade >= max2)
   max2 = Total_Sub[i].math_grade;
 }
 for (int i = 0; i <p_number; i++)
 {
  if (Total_Sub[i].english_grade >= max3)
   max3 = Total_Sub[i].english_grade;
 }
 for (int i = 0; i <p_number; i++)
 {
  if (Total_Sub[i].history_grade >= max4)
   max4 = Total_Sub[i].history_grade;
 }
 cout << "各科最高分:\n";                       //输入每科最高分
 cout << "语文最高分:" << max1 << "\t"
   << "数学最高分:" << max2 << "\n"
   << "英语最高分:" << max3 << "\t"
   << "历史最高分:" << max4 << endl;
 cout << endl;
}
void Min_PerGrade()                              //求每科最低分
{
 double min1 = 100;
 double min2 = 100;                              //初始化每课最低分为0
 double min3 = 100;
 double min4 = 100;
 for (int i = 0; i <p_number; i++)
 {
  if (Total_Sub[i].chinese_grade <=min1)
   min1 = Total_Sub[i].chinese_grade;
 }
 for (int i = 0; i <p_number; i++)
 {
  if (Total_Sub[i].math_grade <= min2)
   min2 = Total_Sub[i].math_grade;
 }
 for (int i = 0; i <p_number; i++)
 {
  if (Total_Sub[i].english_grade <= min3)
   min3 = Total_Sub[i].english_grade;
 }
 for (int i = 0; i <p_number; i++)
 {
  if (Total_Sub[i].history_grade <= min4)
   min4 = Total_Sub[i].history_grade;
 }

 cout << "各科最低分:\n";                         //输出每课最低分
 cout << "语文最低分:" << min1 << "\t"
   << "数学最低分:" << min2 << "\n"
   << "英语最低分:" << min3 << "\t"
   << "历史最低分:" << min4 << endl;
 cout << endl;
 
 
}
void Ave_PerGrade()                                //求每个人的平均成绩
{ 
 double total_pergrade = 0;                        //初始化个人总分为0
 for (int i = 0; i < p_number; i++)
 { 
  total_pergrade = Total_Sub[i].chinese_grade + Total_Sub[i].english_grade + Total_Sub[i].math_grade + Total_Sub[i].history_grade;
 
  cout << "学号为" << i + 1 << "的学生平均成绩为:" << total_pergrade / s_number << endl;
 }
 cout << endl;
}
void Max_PerPeoGrade()                             //求全班排名(按照总分最高依次排列,要求学号跟着变)
{
 for (int k = 0; k < p_number-1; k++)
 {
  double max_pergrade = 0;
  double sno_ = 0;
  double chinese_ = 0;
  double math_ = 0;
  double english_ = 0;
  double history_ = 0;
  for (int i = p_number - 1; i > 0; i--)
   if (Grade[i][5] > Grade[i - 1][5])
   {
    max_pergrade = Grade[i][5];
    Grade[i][5] = Grade[i-1][5];
    Grade[i-1][5] = max_pergrade;
    sno_ = Grade[i][0];
    Grade[i][0] = Grade[i-1][0];
    Grade[i-1][0] = sno_;
    chinese_ = Grade[i][1];
    Grade[i][1] = Grade[i-1][1];
    Grade[i-1][1] = chinese_;
    math_ = Grade[i][2];
    Grade[i][2] = Grade[i-1][2];
    Grade[i-1][2] = math_;
    english_ = Grade[i][3];
    Grade[i][3] = Grade[i-1][3];
    Grade[i-1][3] = english_;
    history_ = Grade[i][4];
    Grade[i][4] = Grade[i-1][4];
    Grade[i-1][4] = history_;
   }
 }
 cout << "按照成绩依次排名如下:" << endl;               
 cout << "学号" << "\t" 
   << "语文" << "\t"
   << "数学" << "\t" 
   << "英语" << "\t" 
   << "历史" << "\t" 
   << "总分" << endl;
 for (int i = 0; i < p_number; i++)
 {
  
   for (int j = 0; j < s_number + 2; j++)
  {
   cout << Grade[i][j] << "\t";
  }
  cout << endl;
 }
}
void Sno_Select()                        //按照学号查找学生成绩和排名                                         
{
 int sno_number = 0;
 int t = 0;
 cout << "请输入要查询学生的学号" << "(1~~" << p_number << "之间)"<<":";
 cin >> sno_number;
 if (sno_number <= 0 || sno_number > p_number)
 {
  cout << "查无此人" << endl;
  Sno_Select();
 }
 else
 {
  for (int m = 0; m < p_number; m++)
   if (Grade[m][0] == sno_number)
    cout << "学号为" << sno_number << "的学生排名为第" << m + 1 << "名,分数如下:\n"
    << "语文:" << Grade[m][1] << "\t"
    << "数学:" << Grade[m][2] << "\n"
    << "英语:" << Grade[m][3] << "\t"
    << "历史:" << Grade[m][4] << "\n"
    << "总分:" << Grade[m][5] << endl;
 }
 cout << "继续查询请按Y(y),退出请按N(n)" << endl;
 instr();
}
void instr()                             //用来判断是否继续查找
{
 char inst;
 cin >> inst;
 if(inst != 'y'  && inst != 'Y' && inst != 'n' && inst != 'N')
 {
  cout << "请输入正确指令" << endl;
  instr();
 }
 if (inst == 'y' || inst == 'Y')
 {
  Sno_Select();
 }
 else if (inst == 'n' || inst == 'N')
  
 cout << "查找结束。" << endl;

}
void Sub_Select()                       //按照科目查找
{
 string subject;
 cout << "请输入要查询的科目:";
 cin >> subject;
 double max_chinese = 0;
 double max_math = 0;
 double max_english = 0;
 double max_history = 0;
 double chinses_sno = 0;
 double math_sno = 0;
 double english_sno = 0;
 double history_sno = 0;
 
 for (int i = 0; i < p_number; i++)
 {
  if (Grade[i][1] > max_chinese)
  {
   max_chinese = Grade[i][1];
   chinses_sno = Grade[i][0];
  }
  if (Grade[i][2] > max_math)
  {
   max_math = Grade[i][2];
   math_sno = Grade[i][0];
  }
  if (Grade[i][3] > max_english)
  {
   max_english = Grade[i][3];
   english_sno = Grade[i][0];
  }
  if (Grade[i][4] > max_history)
  {
   max_history = Grade[i][4];
   history_sno = Grade[i][0];
  }
 }
 double total_chinese = 0;
 double total_math = 0;
 double total_english = 0;
 double total_history = 0;
 for (int i = 0; i < p_number; i++)
 {
  total_chinese = Grade[i][1] + total_chinese;
  total_math = Grade[i][2] + total_math;
  total_english = Grade[i][3] + total_english;
  total_history = Grade[i][4] + total_history;
 }
 if (subject == "语文")
 {
  cout << "语文成绩平均分:" << total_chinese / p_number << "分" << "\t"
    << "语文成绩最高分:" << max_chinese << "\t"
    << "学号为:" << chinses_sno << endl;
 }
 else if (subject == "数学")
 {
  cout << "数学成绩平均分:" << total_math / p_number << "分" << "\t"
    << "数学成绩最高分:" << max_math << "\t"
    << "学号为:" << math_sno << endl;
  cout << "继续查询请按Y(y),退出请按N(n)" << endl;
        instr1();
 
 }
 else if (subject == "英语")
 {
  cout << "英语成绩平均分:" << total_english / p_number << "分" << "\t"
    << "英语成绩最高分:" << max_english << "\t"
    << "学号为:" << english_sno << endl;
  cout << "继续查询请按Y(y),退出请按N(n)" << endl;
  instr1();
 }
 else if (subject == "历史")
 {
  cout << "历史成绩平均分:" << total_history / p_number << "分" << "\t"
    << "历史成绩最高分:" << max_history << "\t"
    << "学号为:" << history_sno << endl;
  cout << "继续查询请按Y(y),退出请按N(n)" << endl;
  instr1();
 }
 else
 {
  cout << "请输入正确的科目" << endl;
  Sub_Select();
 }
}
void instr1()                          //判断是否继续查找
{ 
 char inst;
 cin >> inst;
 if (inst != 'y'  && inst != 'Y' && inst != 'n' && inst != 'N')
 {
  cout << "请输入正确指令" << endl;
  instr1();
 }
 if (inst == 'y' || inst == 'Y')
 {
  Sub_Select();
 }
 else if (inst == 'n' || inst == 'N')
  cout << "查找结束。" << endl;
}





  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值