第14周項目3-多科成績單
來源:程序員人生 發(fā)布時間:2014-12-17 08:48:44 閱讀次數(shù):2730次
/*
* Copyright (c) 2014, 煙臺大學(xué)計算機學(xué)院
* All rights reserved.
* 文件名稱:test.cpp
* 作 者:劉暢
* 完成日期:2014 年 11 月 26 日
* 版 本 號:v1.0
*
* 問題描寫:某班不超過100名同學(xué),用2維數(shù)組score[ ][4]保存同學(xué)們的高數(shù)、英語、C++成績及總成績(在此假定學(xué)生的學(xué)號為整形的連續(xù)值,用數(shù)組的行下標(biāo)作學(xué)號)。在此基礎(chǔ)上,完成相應(yīng)的要求;
* 輸入描寫:(1)輸入學(xué)生人數(shù)、學(xué)生3科的成績,(2)還要輸入學(xué)生姓名;
* 程序輸出:輸出各門課及總分的最高成績、最低成績、平均成績和最高分?jǐn)?shù)取得者。
(1)輸入學(xué)生的實際人數(shù)num,在輸入各科的成績時,輸入3科成績后可以自動求總分,并將數(shù)據(jù)全保存到數(shù)組中;
輸出各門課的總分的最高成績、最低成績、平均成績;
輸入代碼:
#include <iostream>
#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);
double min(double s[][4], int n, int i);
double avg(double s[][4], int n, int i);
int main()
{
int i, num;
string temp;
double score[100][4];
string course[4] = { "高等數(shù)學(xué)", "英語", "C++", "總分" };
cout << "輸入學(xué)生人數(shù):";
cin >> num;
input(score, num);
output(score, num);
for (i = 0; i < 4; ++i)
{
cout << course[i] << "的最高成績是" << 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 i, j;
for (i = 0, s[i][3] = 0; i < n; ++i)
{
cout<<"第"<<i+1<<"位 ";
for (j = 0; j < 3; ++j)
{
cin >> s[i][j];
s[i][3] += s[i][j];
}
}
}
void output(double s[][4], int n)
{
int i;
for (i = 0; i < n; ++i)
cout << "第" << i +
1 << "位" << " 高等數(shù)學(xué): " << s[i][0] << " 英語: " <<
s[i][1] << " C++: " << s[i][2] << " 總分: " << s[i][3] << endl;
}
double max(double s[ ][4],int n,int i)
{
int m,max=0;
for (m=0;m<n;++m)
{
if (s[m][i]>max)
max=s[m][i];
}
return max;
}
double min(double s[ ][4],int n,int i)
{
int m,min=10000;
for (m=0;m<n;++m)
{
if (s[m][i]<min)
min=s[m][i];
}
return min;
}
double avg(double s[ ][4],int n,int i)
{
int m;
double sum=0;
for (m=0;m<n;++m)
{
sum+=s[m][i];
}
return sum/n;
}
運行結(jié)果:

(2) 增加用數(shù)組string name[ ]表示同學(xué)們的姓名,使姓名與成績的下標(biāo)保持1致。
請在寫上面的程序的基礎(chǔ)上,輸出取得最高成績的同學(xué)的名單( 有可能并列第1名哦);
輸入代碼:
#include <iostream>
#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);
double min(double s[][4], int n, int i);
double avg(double s[][4], int n, int i);
int main()
{
int i, num,m;
string temp;
double score[100][4];
string course[4] = { "高等數(shù)學(xué)", "英語", "C++", "總分" };
cout << "輸入學(xué)生人數(shù):";
cin >> num;
string name[num];
cout<<"順次輸入學(xué)生姓名:";
for (i=0; i<num; ++i)
cin>>name[i];
input(score, num);
output(score, num);
for (i = 0; i < 4; ++i)
{
cout << course[i] << "的最高成績是" << max(score, num, i) << ", ";
cout << "最低成績是" << min(score, num, i) << ", ";
cout << "平均成績是" << avg(score, num, i) << ", ";
cout<< "最高成績?nèi)〉谜?quot;;
for (m=0; m<num; ++m)
if (score[m][i]==max(score,num,i))
{
cout<<name[m]<<" ";
}
cout << endl;
}
return 0;
}
void input(double s[][4], int n)
{
int i, j;
for (i = 0, s[i][3] = 0; i < n; ++i)
{
cout<<"第"<<i+1<<"位 ";
for (j = 0; j < 3; ++j)
{
cin >> s[i][j];
s[i][3] += s[i][j];
}
}
}
void output(double s[][4], int n)
{
int i;
for (i = 0; i < n; ++i)
cout << "第" << i +
1 << "位" << " 高等數(shù)學(xué): " << s[i][0] << " 英語: " <<
s[i][1] << " C++: " << s[i][2] << " 總分: " << s[i][3] << endl;
}
double max(double s[ ][4],int n,int i)
{
int m,max=0;
for (m=0; m<n; ++m)
{
if (s[m][i]>max)
max=s[m][i];
}
return max;
}
double min(double s[ ][4],int n,int i)
{
int m,min=10000;
for (m=0; m<n; ++m)
{
if (s[m][i]<min)
min=s[m][i];
}
return min;
}
double avg(double s[ ][4],int n,int i)
{
int m;
double sum=0;
for (m=0; m<n; ++m)
{
sum+=s[m][i];
}
return sum/n;
}
運行結(jié)果:

學(xué)習(xí)心得:
在寫代碼的時候犯了1個小毛病,對min的初始化設(shè)為了100,沒有斟酌總分的最小值是大于100的,所以運行的時候沒有得到想要的結(jié)果,好在及時發(fā)現(xiàn)并改正。。。
生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機掃描二維碼進行捐贈