项目要求:
某班不超过100名同学。用二维数组score[][4]保存同学们的高数、英语、C++成绩及总成绩(在此假设学生的学号为整型的连续值,用数组的行下标作学号)。在此基础上,完成下面的操作:
(1)输入学生的实际人数num,在输入各科的成绩时,输入3科成绩后可以自动求出总分,并将数据全保存到数组中;
(2)输出各门课及总分的最高成绩、最低成绩、平均成绩。
(3)增加用数组string name[]表示同学们的姓名,使姓名与成绩的下标保持一致(例如name[1]和score[1][0]、score[1][1]、score[1][2]和score[1][3]表示同一位同学的数据)。请在写上面的程序的基础上,输出获得最高成绩的同学的名单(可能有并列第一名哦)。
问题及代码:
#include <fstream>
#include<iostream>
#include<cstdlib>
#include<string>
using namespace std;
void input(double s[][4],int n); //输入成绩
void output(double s[][4],int n); //输出成绩
double max(double s[][4],int n,int i); //求第i门课的最高成绩,i=3时是总分
double min(double s[][4],int n,int i); //求第i门课的最低成绩
double avg(double s[][4],int n,int i); //求第i门课的平均成绩
string course[4]= {"高等数学","英语","C++","总分"};
string name[100];
int main()
{
int i,num;//num为学生人数
string temp;
double score[100][4]; //设一个班最多100人,实际按输入来
cout<<"输入学生人数:";
cin>>num;
//(1)输入成绩并求出总分
input(score,num);
//(2)输出成绩
output(score,num);
//(3)输出各门课及总分的最高成绩、最低成绩、平均成绩和成绩的标准偏差;
cout<<endl;
for(i=0; i<3; ++i)
{
cout<<max(score,num,i)<<", ";
cout<<"最低成绩是"<<min(score,num,i)<<", ";
cout<<"平均成绩是"<<avg(score,num,i)<<". ";
cout<<endl;
}
return 0;
}
void input(double s[][4],int n)
{
int sum=0;
for (int j=0; j<n; ++j)
{
cout<<endl<<"请输入学生姓名:";
cin>>name[j];
cout<<"该生高等数学、英语、C++分数:";
for(int i=0; i<3; ++i)
{
cin>>s[j][i];
sum+=s[j][i];
}
s[j][3]=sum;
sum=0;
cout<<"该生总分为:"<<s[j][3]<<endl;
}
}
void output(double s[][4],int n)
{
for (int j=0; j<n; ++j)
{
cout<<endl<<"姓名:"<<name[j]<<endl;
for(int i=0; i<4; ++i)
{
cout<<course[i]<<"成绩是:"<<s[j][i]<<"分"<<endl;//tring course[4]= {"高等数学","英语","C++","总分"}须为全局变量
}
}
}
double min(double s[][4],int n,int i)
{
double MIN=100;
for(int j=0; j<n; j++)
{
if (s[j][i]<MIN)
MIN=s[j][i];
}
return MIN;
}
double max(double s[][4],int n,int i)
{
int j;
double MAX=0;
cout<<"取得"<<course[i]<<"最高成绩的是:";
//比较出最高成绩
for(j=0; j<n; j++)
{
if (s[j][i]>=MAX)
{
MAX=s[j][i];
}
}
//确定出取得最高成绩的人(考虑并列第一情况)
for(j=0; j<n; j++)
{
if (s[j][i]==MAX)
cout<<name[j]<<", ";
}
cout<<"最高成绩为:";
return MAX;
}
double avg(double s[][4],int n,int i)
{
int sum=0;
double AVG;
for (int j=0; j<n; j++)
{
sum+=s[j][i];
}
AVG=sum/n;
return AVG;
}