考研计算机基础构造算法的实例研究
2015-06-01 15:58 along_may 阅读(228) 评论(0) 编辑 收藏 举报构造算法:实例研究1(计数器控制重复)
要演示如何开发算法,我们要解决几个全班平均成绩的问题。考虑下列问题:
班里有10个学生参加测验,可以提供考试成绩(0到100的整数值),以确定全班平均成绩。
全班平均成绩等于全班成绩总和除以班里人数。计算机上解决这个问题的算法是辅人每人的成绩,进行平均计算,然后打印结果。
下面用伪代码列出要执行的操作,指定这些操作执行的顺序。我们用计数器控制重复(counter-conttrolled repetition)一次一个地输人每人的成绩。这种方法用计数器(counter)变量控制一组语句执行的次数。本例中,计数器超过10时,停止重复。本节介绍伪代码算法(如图2.6)和对应程序(如图2.7)。下节介绍如何开发这个伪代码算法。计数器控制重复通常称为确定重复(definiterepetition),因为循环执行之前,已知重复次数。
注意算法中引用了总数(total)和计数器。总数变量用于累计一系列数值的和。计数器变量用于计数,这里计算输人的成绩数。存放总数的变量通常应先初始化为0之后再在程序中使用,否则总和会包括总数的内存地址中存放的原有数值。
Set total to zero Set grade counter to one While grade counter is less than or equal to ten Input the next grade Add the grade i.to the total Add one to the grade counter Set the class average to the total divided by ten Print the class average
图2.6 用计数器控制重复解决全班平均成绩问题的伪代码算法
// Fig. 2.7: fig0207.cpp // Class average program with counter-controlled repetition #include <iostream.h> int main() { int total, // sum of grades gradeCounter, // number of grades entered grade, // one grade average; // average of grades // initialization phase total = 0; // clear total gradeCounter = 1; // prepare to loop // processing phase while ( gradeCounter <= 10 ) { // loop 10 times cout << "Enter grade: "; // prompt for input cin >> grade; // input grade total = total + grade; // add grade to total gradeCounter = gradeCounter + 1; // increment counter } // termination phase average - total / 10; // integer division cout << "Class average is "<< average << endl; return 0; // indicate program ended successfully }
输出结果:
Enter grade: 98 Enter grade: 76 Enter grade: 71 Enter grade: 87 Enter grade: 83 Enter grade: 90 Enter grade: 57 Enter grade: 79 Enter grade: 82 Enter grade: 94 Class average is 81
图2.7 用计数器控制重复解决全班平均成绩问题的C++程序和示例输出
根据使用情况,计数器变量通常应先初始化为0或1(下面会分别举例说明)。未初始化变量会包含垃圾值“garbage”value),也称为未定义值(undefined
value),为该变量保存内存地址中最后存放的值。
常见编程错误2.6
如果不初始化计数器和总和变量,则程序的结果可能不正确.这是一种逻辑错误。
编程技巧2.7
一定要初始化计数器和总和变量。
编程技巧2.8
每个变量在单独一行中声明。注意程序中的平均计算产生一个整数结果。实际上,本例中的成绩总和是817,除以10时应得到81.7,是个带小数点的数,下节将介绍如何处理这种值(称为浮点数)。
常见编程错误2.7
在计数器控制循环中,由于循环计数器(每人循环加1时)比最大合法值多1(例如,从1算到10时为11).因此在循环之后用计数器值进行计算通常会出现差1的错误。
图2.7中,如果第21行用gradeCounter而不是10进行计算,则这个程序的输出显示数值74。
2016考研政策http://www.kyjxy.com/yuanxiao/zhengce/
2016考研数学资料http://www.kyjxy.com/shuxue/ziliao/
2016考研专硕复习方法http://www.kyjxy.com/zhuanshuo/