/*
* Copyright (c) 2014, 烟台大学计算机学院
* All rights reserved.
* 文件名称:test.cpp
* 作 者:刘畅
* 完成日期:2014 年 11 月 23 日
* 版 本 号:v1.0
*
* 问题描述:在数组score中将要存储某小组C++程序设计的成绩。(利用函数完成);
* 输入描述:输入学生人数和学生成绩;
* 程序输出:输出该小组的最高成绩、最低成绩、平均成绩、考得最高、低成绩的人数和他们的学号以及所有同学成绩的标准偏差。
#include <iostream>
#include <cmath>
using namespace std;
void input_score(int s[], int n); //将小组中n名同学的成绩输入数组S
int get_max_score(int s[], int n); //返回数组S中n名同学的最高成绩值
int get_min_score(int s[], int n); //返回数组s中n名同学的最低成绩值
double get_avg_score(int s[], int n); //返回数组s中n名同学的平均成绩值
double get_stdev_score(int s[], int n); //返回数组s中n名同学的标准偏差
int count(int x, int s[], int n); //返回在数组s中n名同学中有多少人得x分(实参给出最高/低时,可以求最高/低成绩的人数)
void output_index(int x, int s[], int n); //在函数中输出数组s中n名同学中得x分的学号(下标)
int main(void)
{
int score[50];
int num;
int max_score,min_score;
cout << "小组共有多少名同学?" ;
cin >> num;
cout << endl << "请输入学生成绩:" << endl;
input_score(score, num);
max_score = get_max_score(score, num);
cout << endl << "最高成绩为:" << max_score << ", 共有" <<
count(max_score, score, num) << "人.";
min_score = get_min_score(score, num);
cout << endl << "最低成绩为:" << min_score << ",共有" <<
count(min_score, score, num) << "人.";
cout << endl << "平均成绩为:" << get_avg_score(score, num);
cout << endl << "标准偏差为:" << get_stdev_score(score, num);
cout << endl << "获最高成绩的学生(学号)有:";
output_index(max_score, score, num);
cout << endl << "获最低成绩的学生(学号)有:";
output_index(min_score, score, num);
cout << endl;
return 0;
}
void input_score(int s[], int n)
{
int i = 0;
while (i < n)
{
cout << "输入第" << i << "名同学的成绩: ";
cin >> s[i];
if (s[i] > 100 || s[i] < 0)
continue;
i++;
}
}
int get_max_score(int s[],int n)
{
int i,max;
for (i=1,max=s[0];i<n;++i)
if (s[i]>max)
max=s[i];
return max;
}
int get_min_score(int s[],int n)
{
int i,min;
for (i=1,min=s[0];i<n;i++)
if (s[i]<min)
min=s[i];
return min;
}
double get_avg_score(int s[],int n)
{
int i;
double sum=0,avg;
for (i=0;i<n;++i)
sum+=s[i];
avg=sum/n;
return avg;
}
double get_stdev_score(int s[],int n)
{
int i;
double stdev,total=0,S;
stdev=get_avg_score(s,n);
for (i=0;i<n;++i)
total+=(s[i]-stdev)*(s[i]-stdev);
total/=(n-1);
S=sqrt(total);
return S;
}
int count(int x,int s[],int n)
{
int i,iCount=0;
for (i=0;i<n;++i)
{
if (s[i]==x)
iCount++;
}
return iCount;
}
void output_index(int x,int s[],int n)
{
int i;
for (i=0;i<n;++i)
{
if (s[i]==x)
cout<<i<<" ";
}
return;
}
学习心得:
之前由于做过普通版,这个做起来倒不难,尽管二者标准偏差的结果有所出入,当这是由于数据类型的不同的原因造成的,我也就没去深究,见谅。前面那篇有几位前辈给我提了很多建议,我也正在努力改进,希望这篇也有前辈能指导指导,建议多多益善。