项目6----指针版多课成绩运算

这是一个C++程序,用于输入学生多科成绩并计算每科的最高分、最低分、平均分和标准差。程序还输出总分最高分和最低分及其对应的学号。
/* 
* Copyright (c) 2011, 烟台大学计算机学院 
* All rights reserved. 
* 作    者:王静  
* 完成日期:2012 年12  月 22 日 
* 版 本 号:v1.0 
* 输入描述:

* 问题描述:

* 程序输出:

* 问题分析:
* 算法设计:略 
*/  

#include <iostream>  #include <string>  #include <cmath>  void input(double (*s)[4],int n); //输入成绩,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);  void output(double (*s)[4],int n);  using namespace std;  int main()  {   int num;  double score[100][4]={0};        cout<<"请输入学生数量:";      cin>>num;  input(score,num);     output(score,num);     cout<<endl;   return 0;  }  void input(double (*s)[4],int n) //输入成绩,n是学生人数 {  string b[4]={"高数","英语","c++","总成绩"};      for(int i=0;i<n;i++){   for(int j=0;j<3;j++)   {    cout<<"请依次输入学号为"<<i<<"的学生的"<<b[j]<<"成绩:";     cin>>s[i][j];   s[i][3]+=s[i][j];   }  } } double max(double(*s)[4],int n,int i) {    double max;      max=-1;      for(i=0;i<n;i++)      {    for(int j=0;j<3;j++)         if(*(s+i)[j]>max)          {              max=*(s+i)[j];    }     }      return max;  } 

double min(double (*s)[4],int n,int i) {     double min=100000;         for(i=0;i<n;i++)      {    for(int j=0;j<4;j++)   {         if(*(s+i)[j]<min)          {              min=*(s+i)[j];          }    }     }   return min;  } 

double avg(double (*s)[4],int n,int i)  {      int sum=0;      for(i=0;i<n;i++)      {    for(int j=0;j<4;j++)         sum+=*(s+i)[j];      }  return sum/n; }

double stdev(double (*s)[4],int n,int i) //求标准差 {        double b,x,sum=0;        b=avg(s,n,i);      for( i=0;i<n;i++)          {        for(int j=0;j<4;j++)         x=*(s+i)[j]-b;              sum+=x*x;       }          return sqrt(sum/(n-1));  } 

void output(double (*s)[4],int n)    {           int c=0;  string b[4]={"高数","英语","c++","总成绩"};  cout<<"输入的学生成绩为:"<<endl;     cout<<"学号"<<'\t'<<b[0]<<'\t'<<b[1]<<'\t'<<b[2]<<'\t'<<b[3]<<'\t'<<b[4]<<"\n";   for(int i=0;i<n;++i)     {      cout<<i<<'\t'<<s[i][0]<<'\t';      cout<<s[i][1]<<'\t';      cout<<s[i][2]<<'\t';      cout<<s[i][3]<<endl;     }     for(i=0;i<4;i++)   {    cout<<b[i]<<"的最高成绩"<<max(s,n,i)<<",";    cout<<"最低成绩是"<<min(s,n,i)<<", ";      cout<<"平均成绩是"<<avg(s,n,i)<<", ";      cout<<"成绩的标准偏差是"<<stdev(s,n,i)<<endl;   }   bool first=true;  int j;    cout<<"总分最高分为"<<max(s,n,j);     for(i=0;i<n;++i)     {      for( j=0;j<4;j++)   if(*(s+i)[j]==max(s,n,j))        ++c;     }     cout<<",有"<<c<<"人达到最高分,他们的学号是:";     for(i=0;i<n;++i)     {      for(int j=0;j<4;j++)   if(*(s+i)[j]==max(s,n,4))                if(first)       {                    cout<<i;                    first=false;                }       else       {                    cout<<"、"<<i;                }     }        cout<<endl;             c=0;        first=true;        cout<<"总分最低分为"<<min(s,n,4);        for(i=0;i<n;++i)        {      for(int j=0;j<4;j++)         if(*(s+i)[j]==min(s,n,4))                ++c;     }        cout<<",有"<<c<<"人达到最低分,他们的学号是:";        for(i=0;i<n;++i)     {      for(int j=0;j<4;j++)   if(*(s+i)[j]==min(s,n,4))     if(first)       {                    cout<<i;                    first=false;       }                else                {       cout<<"、"<<i;                }        }       cout<<endl;    }


  

 


运行结果:
(贴图)


心得体会:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值