代码改变世界

考研计算机基础构造算法的实例研究

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/