15-4的多项成绩操作的完美版。。

/*学校:烟台大学计算机学院

作者:刘晓晓

时间:2013.12.07

问题输入:处理成绩的各项问题

*/

 

 

 

#include<iostream>
#include<cmath>
#include<string>
using namespace std;
void input(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);
double avg(double s[][4],int n,int i);
double stdev(double s[][4],int n,int i);
 int  output_result(double s[][4],int n);

int main()
{
 int i,num;
 string temp;
 double score[100][4]; //设一个班最多100人,实际按输入来
 string course[4]={"高等数学","英语","C++","总分"};
 cout<<"输入学生人数:";
 cin>>num;
 //(1)输入成绩并求出总分
 cout<<"输入学生成绩(按高数、英语、C++的顺序依次输入:)"<<endl;
 for(i=0;i<num;++i)
 {
  cin>>score[i][0]>>score[i][1]>>score[i][2];
  score[i][3]=score[i][0]+score[i][1]+score[i][2];
 }
 cout<<"输入的学生成绩为:"<<endl;
 cout<<"学号\t高数\t英语\tC++\t总分"<<endl;
 for(i=0;i<num;++i)
 {
  cout<<i<<'\t'<<score[i][0]<<'\t';
  cout<<score[i][1]<<'\t';
  cout<<score[i][2]<<'\t';
  cout<<score[i][3]<<endl;
 }
 
 //(2)输出各门课及总分的最高成绩、最低成绩、平均成绩和成绩的标准偏差;
 for(i=0;i<4;++i)
 {
  cout<<course[i]<<"的最高成绩是"<<max(score,num,i)<<", ";
  cout<<"最低成绩是"<<min(score,num,i)<<", ";
  cout<<"平均成绩是"<<avg(score,num,i)<<", ";
  cout<<"成绩的标准偏差是"<<stdev(score,num,i)<<endl;
 }
 //(3)输出考得总分最高、最低同学的人数及对应的学号。
 output_result(score,num);
 return 0;
}

//求第i门课的最高成绩,i=3时是总分,下类似
double max(double s[][4],int n,int j)
{
 double m=s[0][j];
 for(int i=1;i<n;++i)
  if (m<s[i][j])
   m=s[i][j];
  return m;
}
double min(double s[][4],int n,int j)
{
 double m=s[0][j];
 for(int i=1;i<n;++i)
  if (m>s[i][j])
   m=s[i][j];
  return m;
}
double avg(double s[][4],int n,int j)
{
 double sum=s[0][j];
 for(int i=1;i<n;++i)
  sum+=s[i][j];
 return sum/n;
}
double stdev(double s[][4],int n,int j)
{
 double a,x,sum=0;
 a=avg(s,n,j);//平均成绩
 for(int i=0;i<n;i++) 
    { 
        x=s[i][j]-a; 
        sum+=x*x; 
    } 
    return sqrt(sum/(n-1)); 
}

//输出考得总分最高、最低同学的人数及对应的学号。
int  output_result(double s[][4],int n)
{
 double m=max(s,n,3);
 int i,c=0;
 bool first=true;
 cout<<"总分最高分为"<<m;
 for(i=0;i<n;++i)
 {
  if(s[i][3]==m)//直接用s[i][3]==m可能会因精度而错误
   ++c;
 }
 cout<<",有"<<c<<"人达到最高分,他们的学号是:";
 for(i=0;i<n;++i)
 {
  if(s[i][3]==m)
   if(first)
   {
    cout<<i;
    first=false;
   }
   else
   {
    cout<<"、"<<i;
   }
 }
 cout<<endl;
 //关于最低成绩
 m=min(s,n,3);
 c=0;
 first=true;
 cout<<"总分最低分为"<<m;
 for(i=0;i<n;++i)
 {
  if(s[i][3]==m)
   ++c;
 }
 cout<<",有"<<c<<"人达到最低分,他们的学号是:";
 for(i=0;i<n;++i)
 {
  if(s[i][3]==m)
   if(first)
   {
    cout<<i;
    first=false;
   }
   else
   {
    cout<<"、"<<i;
   }
 }
 cout<<endl;
}

心得:这是借鉴的老师的。一对比,的确知道自己到底错在了哪里,才不能达到自己想要的结果啊。。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值