考研计算机基础:构造算法与自上而下逐步完善:实例研究3(嵌套控制结构)
2015-06-01 16:00 along_may 阅读(280) 评论(0) 编辑 收藏 举报构造算法与自上而下逐步完善:实例研究3(嵌套控制结构)
下面介绍另一个问题。这里还是用伪代码和自上而下逐步完善的方法构造算法,然后编写相应的C++程序。我们介绍过按顺序堆叠的控制结构,就像小孩堆积木一样。这里显示C++中控制结构的另一种方法,称为嵌套控制结构。
考虑下列问题:
学校开了一门课,让学生参加房地产经纪人证书考试。去年,几个学生读完这门课并参加了证 书考试。学校想知道学生考试情况,请编写一个程序来总结这个结果。已经得到了10个学生
的名单,每个姓名后面写1时表示考试通过,写2时表示没有通过。
程序应分析考试结果,如下所示:
1.输入每个考试成绩(即l或2),每次程序请求另一个考试成绩时,在屏幕上显示消息“Enter result"。
2.计算每种类型的考试成绩数。
3.显示总成绩,表示及格人数和不及格人数。
4.如果超过8个学生及格,则打印消息“Raise tuition”。
认真分析上述问题后,我们做出下列结论:
1.程序要处理10个考试成绩,用计数器控制循环。
2.每个考试成绩为数字l或2,每次程序读取考试成绩时,程序要确定成绩是否为数字1或2。
我们的算法中测试1,如果不是l,则我们假设其为2(本章末尾的练习会考虑这个假设的结果)。
3,使用两个计数器,分别计算及格人数和不及格人数。
4.程序处理所有结果之后,要确定是否有超过8个学生及格。
下面进行自上而下逐步完善的过程。首先是上层的伪代码表示:
Analyze exam results and decide if tuition should be raised
我们再次强调,顶层是程序的完整表达,但通常要先进行几次完善之后才能将伪代码自然演变成C++程序。我们的第一步完善为:
Initialize variables lnput the ten quiz qrades and COU~t passes and failures Print a sugary Of the cxam results and decide if tuition should be raised
这里虽然有整个程序的完整表达式,但还需要进一步完善。我们要提供特定变量。要用两个计数器分别计算,用一个计数器控制循环过程,用一个变量保存用户输入。伪代码语句:
Initialize variables
可以细分如下:
Initialize passes to zero lnitialize failules to zero Inltiallze student counter to One
注意.这里只初始化计数器和总和。伪代码语句:
Input the ten quiz grades and count Passes and faiLures
要求循环输入每个考试成绩。我们事先知道共有10个成绩,因此可以用计数器控制循环。在循环中(即嵌套在循环中),用一个双项选择结构确定考试成绩为数字1或2,并递增相应的计数器。上述伪代码语句细化如下:
Initialize passes to zero lnitialize failules to zero Inltiallze student counter to One
注意这里用空行分开if/else控制结构,以提高程序可读性。伪代码语句:
Print a sugary Of the exam results and declde if tuition should be raised
可以细化如下:
Print the number of passes Print the number of filuies if more than eight students Passed Priht "Raise tuition"
图2.10显示了完整的第2步完善结果。注意这里用空行分开while结构,以提高程序可读性。
Initlalize passes to zero Init±a1ize failures to zero lnitlallze student counter to one while student counter is less than or equal to ten Input the next exam result if the student Passed Add one to passes else Add one to failures Add one to student counter Priht the number of passes Prirt the number of filures if more than eight students passed Print”Raise tuition'’
图2.10检查考试成绩的伪代码
这个伪代码语句已经足以转换为C++程序。图2.11显示了C++程序及示例的执行结果。注意,
我们利用C++的一个特性,可以在声明中进行变量初始化。循环程序可能在每次循环开头要求初始
化,这种初始化通常在赋值语句中进行。
// Fig. 2.11: fig02_ll.cpp #include <iostream.h> int main() { // initialize variables in declarations int passes = 0, // number of passes Passes = v; // number or passes failures = 0, // number of failures studentCounter = 1, // student counter result; // oue exam result // process 10 students; counter-controlled loop while ( studentCounter <= 10 ) { cout << "Enter result (1=pass,2=fail): "; cin >> result; if { result == 1 } // if/else nested in while passes = passes + 1; else failures = failures + 1; studentcounter = studentCounter + 1; ) // termination phase cout << "Failed" << failures << endl; if ( passes > 8 ) cout << "Raise tuition "<< endl; return 0; // successful termination
输出结果:
Enter result (l=pass,2=fail}: 1 Enter result (l=pass,2=fail): 2 Enter result (l=pass,2=fail): 1 Enter result (l=pass,2=fail): 1 Enter result (l=pass,2=fail): 1 Enter result (l=pass,2=fail) 1 Enter result (l=pass,2=fail): 2 Enter result {l=pass,2=fail): 1 Enter result (l=pass,2=fail): 1 Enter result )1=pass,2=fail): 2 Passed 6 Failed 4 Enter result (a=pass,2=Fail): 1 Enter result (l=pass,2=fail): 1 Enter result (l=pass,2=fail) 1 Enter result (1-pass,2=fail): 2 Enter result {l=pass,2=fail): 1 Enter result (l=pass,2=fail): 1 Enter result {1=Pass,2=fail):1 Enter result(1=pass,2=fail):1 Enter result(1=pass,2=fail):1 Enter result(1=pass,2=fail):1 Passed 9 Failed 1 Raise tuition
图2.11 检查考试成绩的C++程序及示例执行结果
编程技巧2.13
在声明中进行变量初初化可以帮助程序员避免数据表初始化问题。
软件工程视点2.7
经验表明,计算机问题最难解决的部分是开发解决方案的算法。一旦确定正确算法后,从算法生成C++程序的过程通常是相当简单的。
软件工程视点2.8
许多熟练的程序员不必用伪代码之类的程序开发工具即可编写程序。这些程序员认为其最终目标是解决计算机上的问题,编写伪代码只会延迟最终产品的推出。尽管这种方法在简单和热悉的问题中能行得通,但在大型复杂项目中则可能导致严重的错误和延迟。
2016考研政策http://www.kyjxy.com/yuanxiao/zhengce/
2016考研数学资料http://www.kyjxy.com/shuxue/ziliao/
2016考研专硕复习方法http://www.kyjxy.com/zhuanshuo/