【二维数组】15周项目四(带名字)。多科成绩单

上机内容:C++程序的编写和运行
上机目的:掌握简单C++程序的编辑、编译、连接和运行的一般过程
我的程序:

文件grade.txt

86 87 76 77 96 94 80 64 63 87
96 88 80 60 65 64 78 77 65 89
65 98 67 77 87 88 85 56 59 70


 

/*
Copyright (c) 2013, 烟台大学计算机学院
.* All rights reserved.
.* 作    者:赵玲玲
.* 完成日期:2013 年 12 月 6 日
.* 版 本 号:v1.0
.* 输入描述: 文件
.* 问题描述: 多科成绩单
.* 程序输出:略
.* 问题分析:按照要求,用函数调用,数组等来完成
.*/
#include <iostream>
#include <cmath>
#include <cstdio>
#include <string>
using namespace std;
int input_s(double score[][4],int n);           //成绩是double型的
void output_s1(double score[][4],int n);
void output_s2(double score[][4],string student[],int n);
int main()
{
    int num;
    double score[100][4];
    string student[100]={"玲0","玲1","玲2","玲3","玲4","玲5","玲6","玲7","玲8","玲9"};
    cout<<"请输入学生人数:";
    cin>>num;
    //调用函数,求出总分
    input_s(score,num);                         //调用时写数组名
    output_s1(score,num);
    output_s2(score,student,num);
    return 0;
}
int input_s(double score[][4],int n)
{
    int i,j,sum=0;
    //输入各科成绩
    freopen("grade.txt","r",stdin);              //打开含有成绩的文件
    cout<<"请输入所有同学的高数成绩:"<<endl;
    for(i=0; i<n; i++)
    {
        cin>>score[i][0];
    }
    cout<<"请输入所有同学的英语成绩:"<<endl;
    for(i=0; i<n; i++)
    {
        cin>>score[i][1];
    }
    cout<<"请输入所有同学的c++成绩:"<<endl;
    for(i=0; i<n; i++)
    {
        cin>>score[i][2];
    }
    //求出各科总分保存在score[i][3]里面
    for(i=0; i<n; i++)
    {
        for(j=0; j<3; j++)
        {
            sum+=score[i][j];                    //本来是直接存到数组里面的,不可行,只能借助中间变量了
        }
        score[i][3]=sum;
        sum=0;
    }
    cout<<endl;
    return 0;
}
//各科各种成绩
void output_s1(double score[][4],int n)
{
    int i,j;
    double max=0,min=101,ave,dve,sum=0,summ,ssum;
    for(j=0; j<4; j++)
    {
        for(i=0; i<n; i++)
        {
            if(max<score[i][j])                  //最大值
            {
                max=score[i][j];
            }
            if(min>score[i][j])                  //最小值
            {
                min=score[i][j];
            }
            sum+=score[i][j];                    //求和

        }
        summ=sum;
        sum=0;
        ave=summ/n;                              //平均数
        for(i=0; i<n; i++)                       //循环来求得标准偏差
        {
            ssum+=(score[i][j]-ave)*(score[i][j]-ave);
        }
        dve=sqrt(ssum/(n-1));
        switch(j)
        {
        case 0:
            cout<<"高数最高成绩是:"<<max<<"  "<<"最低成绩是"<<min<<"  "<<"平均成绩是:"<<ave<<"  "<<"标准偏差是"<<dve<<endl;
            break;
        case 1:
            cout<<"英语最高成绩是:"<<max<<"  "<<"最低成绩是"<<min<<"  "<<"平均成绩是:"<<ave<<"  "<<"标准偏差是"<<dve<<endl;
            break;
        case 2:
            cout<<"c++最高成绩是:"<<max<<"  "<<"最低成绩是"<<min<<"  "<<"平均成绩是:"<<ave<<"  "<<"标准偏差是"<<dve<<endl;
            break;
        case 3:
            cout<<"总分最高成绩是:"<<max<<"  "<<"最低成绩是"<<min<<"  "<<"平均成绩是:"<<ave<<"  "<<"标准偏差是"<<dve<<endl;
            break;
        }
        ave=0;max=0; min=101;ssum=0;                //归零
    }
    cout<<endl;
    return ;
}
//总分最值,人数,学号
void output_s2(double score[][4],string student[],int n)
{
    int i,max=0,min=1000,k=0,l=0;
    for(i=0; i<n; i++)                             //最高最低
    {
        if(max<score[i][3])
        {
            max=score[i][3];
        }
        if(min>score[i][3])
        {
            min=score[i][3];
        }
    }
    for(i=0; i<n; i++)                              //人数
    {
        if(max==score[i][3])
        {
            k++;
        }
        if(min==score[i][3])
        {
            l++;
        }
    }
    cout<<"总分最高为:"<<max<<"  ."<<"有"<<k<<"人."<<"  "<<"名字是:";
    for(i=0; i<n; i++)                              //最高的学号
    {
        if(max==score[i][3])
        {
            cout<<student[i]<<","<<endl;
        }
    }
    cout<<"总分最低为:"<<min<<"  ."<<"有"<<l<<"人."<<"  "<<"名字是:";
    for(i=0; i<n; i++)                              //最低的学号
    {
        if(min==score[i][3])
        {
            cout<<student[i]<<",";
        }
    }
    return ;

}

 

我的结果:

心得体会:略

知识点总结:略

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值