[cpp]
/*
【項目2- 成績處理】在數組score中將要存儲某小組C++程序設計的成績,請設計完成下面的各功能函數,並將它們組合成一個完整的應用:
(1)輸入小組人數及成績;
(2)輸出該小組的最高成績、最低成績、平均成績和成績的標准偏差(標准偏差公式:,其中為樣本,為均值,為樣本數目);
(3)輸出考得最高成績和最低成績的同學的人數及對應的學號(設成績對應的下標即學號,可能有相同的成績)
(4)(選做)輸出前3名同學的學號——可以先不考慮有並列名次的情況,再考慮有並列的情況。
*/
#include <iostream>
#include<Cmath>
using namespace std;
//在這個問題中,成績和人數是核心數據,適合作為全局變量處理
int score[50]; //將score設為全局變量,在各個函數中可以直接使用
int num; //小組人數也設為全局變量
void input_score();
int get_max_score();
int get_min_score();
double get_avg_score();
double get_stdev_score();
int count(int);
void output_index(int);
int firstthree(int);
int max_score,min_score,i,max,min,mean_score;
int main(void)
{
cout<<"小組共有多少名同學?";
cin>>num;
for(i=0;i<num;i++){
cout<<"請輸入第"<<i<<"位學生成績:"<<endl;
cin>>score[i];
}
input_score();
if((score[i]<0)||(score[i]>100)){
cout<<"error"<<endl;}
//要求成績在0-100之間
else
{
max_score=get_max_score();
cout<<endl<<"最高成績為:"<<max_score<<",共有 "<<count(max_score )<<" 人。";
min_score=get_min_score();
cout<<endl<<"最低成績為:"<<min_score<<",共有 "<<count(min_score )<<" 人。";
cout<<endl<<"平均成績為:"<<get_avg_score();
cout<<endl<<"標准偏差為:"<<get_stdev_score();
cout<<endl<<"獲最高成績的學生(學號)有:";
output_index(max_score);
cout<<endl<<"獲最低成績的學生(學號)有:";
output_index(min_score);
cout<<endl<<"前三名成績:";
}
return 0;
}
//input_score函數提供給同學們參考
//input_score函數的功能是輸入小組成員的成績
void input_score()
{
int i;
for(i=0;i<num;i++)
do
{
cout<<"輸入第 "<<i<<" 位同學的成績:";
cin>>score[i];
}while(score[i]<0||score[i]>100);
return;
}
// get_max_score()函數的功能是求出num名同學的最高成績
int get_max_score()
{
max=-1;
for(i=0;i<num;i++)
if(max<score[i])
max=score[i];
return max;
}
// get_min_score()函數的功能是求出num名同學的最低成績
int get_min_score()
{
min=100;
for(i=0;i<num;i++)
if(min>score[i])
min=score[i];
return min;
}
// get_avg_score()函數的功能是求出num名同學的平均成績
double get_avg_score()
{
double sum=0;
for(i=0;i<num;i++)
sum+=score[i];
return sum/num;
}
// get_ stdev _score()函數的功能是求出num名同學成績的標准偏差
double get_stdev_score()
{
double ave_score,x,sum=0;
ave_score=get_avg_score();
for(i=0;i<num;i++)
{
x=score[i]-ave_score;
sum+=x*x;
}
return sqrt(sum/(num-1));
}
// count(int s)函數的功能是返回值score數組中為s的元素的個數
int count(int s)
{
int iCount=0;
int i;
for(i=0;i<num;i++)
if(score[i]==s)iCount++;
return iCount;
}
// output_index函數的功能是輸出score數組中值為s的元素的下標(index)
//注意:值為s的元素可能有多個
void output_index(int s)
{
int i;
for(i=0;i<num;i++)
if(score[i]==s)cout<<i<<" ";
return;
}
int firstthree(int max2,int max3)
{ www.2cto.com
for(i=0;i<num;i++)
if(max2>score[i]&&max2<max)
max2=score[i];
if(max3>score[i]&&max3<max2)
max2=score[i];
return max,max2,max3;
}
[cpp] view plaincopyprint?