实验内容:用循环控制语句编写程序,完成表达式的计算
* 程序头部注释开始
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生
* All rights reserved.
* 文件名称:
* 作
* 完成日期:
* 版本号:
* 对任务及求解方法的描述部分
* 输入描述:学生人数和成绩
* 问题描述:(函数及数组的简单应用) 在数组score中将要存储某小组C++程序设计的成绩,请设计完成下面功能函数,并将它们组合成一个完整的应用:
(1)输入小组人数及成绩;
(2)输出该小组的最高成绩、最低成绩、平均成绩和成绩的标准偏差;
(3)输出考得最高成绩和最低成绩的同学的人数及对应的学号(设成绩对应的下标即学号,可能有相同的成绩)
* 程序输出:小组的最高成绩、最低成绩、平均成绩和成绩的标准偏差;最高成绩和最低成绩的同学的人数及对应的学号
* 程序头部的注释结束
#include <iostream>
#include<Cmath>
using namespace std;
int score[50];
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 main(void)
{
int max_score, min_score;
cout << "小组共有多少名同学?";
cin >> num;
cout << endl << "请输入学生成绩:" << endl;
input_score();
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);
system("PAUSE");
return 0;
}
void input_score()
{
int i;
for(i = 0; i < num; i++)
do
{
cout << "输入第 " << i + 1 << " 位同学的成绩:";
cin >> score[i];
}while(score[i] < 0 || score[i] > 100);
return;
}
int get_max_score()
{
int i, max;
for(i = 0; i < num; i++)
{
while(max < score[i])
{
max = score[i];
}
}
return max;
}
int get_min_score()
{
int i, min = 100;
for(i = 0; i < num; i++)
{
while(min > score[i])
{
min = score[i];
}
}
return min;
}
double get_avg_score()
{
int i;
double sum, avg;
for(i = 0, sum = 0; i < num; i++)
{
sum = sum + score[i];
}
avg = sum / i;
return avg;
}
double get_stdev_score()
{
int i;
double sum, avg, stdev;
for(i = 0, sum = 0; i < num; i++)
{
sum = sum + score[i];
}
avg = sum / i;
for(i = 0, sum = 0; i < num; i++)
{
sum = pow(score[i] - avg, 2);
}
stdev = sqrt(sum / (num - 1));
return stdev;
}
int count(int s)
{
int i, j;
for(i = 0, j = 0; i < num; i++)
{
if (s == score[i])
j = j + 1;
else
continue;
}
return j;
}
void output_index(int s)
{
int i;
for(i = 0; i < num; i++)
{
if (s == score[i])
cout << " " << i + 1;
else
continue;
}
}
运算结果:
1.很多个函数的调用,了解调用机制很重要。
2.把自己想象成计算机,一步一步走查很有用,特别是在程序既没有语法错误也没有逻辑错误时,有利于问题的解决。
3.程序越来越长,要解决的问题也越来越多,分解问题,逐一击破理念的实用性显现无疑,毕竟即使是人类这种复杂的生命体,要想一次同时思考多个问题也是很困难的。
上机感言:
老师布置的作业的难度是越来越大了那,显然程序的长度也在成倍的增长,所以真的是很容易自己把自己搞晕,可是当把这个看似很复杂的程序分解,一个一个函数的拆开来看,每一个问题又都是我们学过也练习过的,问题就不会显得那么困难了。
我就是这样,一开始看老师给的模板,真的是一个头两个大,光是给的程序头就那么长,仔细数数,需要调用函数的数量也是前所未有的,我自己承认现在还是个菜鸟,所以真的开始就有些丧失信心了,可是我做的很满意的一件事是,把主函数和第一个需要调用函数外的函数全部删掉,只专注于仅留的简单问题,解决起来还是得心应手的,然后慢慢一个一个增加要用的被调函数,每次只做一小步,然后回过头,却发现,自己走过的路程是那么的漫长,成就感油然而生,一开始不知如何下手的问题也便迎刃而解了,这算是我的一点心得吧,真的很管用。