/*
***************************************************************************
期末考试,某班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;
}
定义多维数组,存储学生学号、4科成绩
猜你喜欢
转载自blog.csdn.net/weixin_42571882/article/details/80952075
今日推荐
周排行