zoukankan      html  css  js  c++  java
  • 考研计算机基础:构造算法与自上而下逐步完善:实例研究3(嵌套控制结构)

    构造算法与自上而下逐步完善:实例研究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/

  • 相关阅读:
    转:SQL Case when 的使用方法
    转:性能测试知多少
    转:如何让LoadRunner实现多个场景运行?
    转:Loadrunner学习知多少--脚本录制下载操作
    1.3 本章小结
    1.2.5 内部元数据
    1.2.4 创建图像查看应用程序
    1.2.3 使用MediaStore检索图像
    1.2.2 更新CameraActivity以使用MediaStore存储图像和关联元数据
    1.2.1 获得图像的Uri
  • 原文地址:https://www.cnblogs.com/along-may/p/4544155.html
Copyright © 2011-2022 走看看