在线试读

get_product_contenthtml 第5章循环结构程序设计〖1〗5.1为什么需要循环控制前面介绍了程序中常用到的顺序结构和选择结构,但是只有这两种结构是不够的,还需要用到循环结构(或称重复结构)。因为在日常生活中或是在程序所处理的问题中常常遇到需要重复处理的问题。例如:  要向计算机输入全班50个学生的成绩;(重复50次相同的输入操作) 分别统计全班50个学生的平均成绩;(重复50次相同的计算操作) 求30个整数之和;(重复30次相同的加法操作) 检查30个学生的成绩是否及格。 (重复30次相同的判别操作)要处理以上问题,原始的方法是分别编写若干个相同或相似的语句或程序段进行处理。例如为了统计全班50个学生的平均成绩,可以先编写求一个学生平均成绩的程序段: scanf(″%f,%f,%f,%f,%f″,&score1,&score2,&score3,&score4,&score5);//输入一个学生5门课的成绩aver=(score1 score2 score3 score4 score5)/5;//求该学生平均成绩printf(″aver=%7.2f″,aver);//输出该学生平均成绩然后再重复写49个同样的程序段。这种方法虽然可以实现要求,但是显然是不可取的,因为工作量大,程序冗长、重复,难以阅读和维护。相信每一位读者都会认为这是笨的办法。实际上,几乎每一种计算机高级语言都提供了循环控制,用来处理需要进行的重复操作。在C语言中,可以用循环语句来处理上面的问题: i=1;//设整型变量i初值为1   while(i<=50) //当i的值小于或等于50时执行花括号内的语句{scanf(″%f,%f,%f,%f,%f″,&score1,&score2,&score3,&score4,&score5);//输入一个学生5门课的成绩aver=(score1 score2 score3 score4 score5)/5; //求该学生平均成绩printf(″aver=%7.2f″,aver);//输出该学生平均成绩i ;//每执行完一次循环使i的值加1   } 可以看到: 用一个循环语句(while语句),就把需要重复执行50次程序段的问题解决了。一个while语句实现了一个循环结构。请读者先阅读这个程序段,理解循环结构的执行过程,在下一节将对其执行过程作必要的说明。大多数的应用程序都会包含循环结构。循环结构和顺序结构、选择结构是结构化程序设计的3种基本结构,它们是各种复杂程序的基本构成单元。因此熟练掌握选择结构和循环结构的概念及使用是进行程序设计基本的要求。5.2用while语句实现循环在5.1节中已看到了在C程序中可以用while语句来实现循环结构。上面的while循环结构就是一个while语句,它的执行过程是: 开始时变量i的值为1,while语句首先检查变量i的值是否小于或等于50,如果是,则执行while后面的语句(称为循环体,在本例中是花括号内的复合语句)。在循环体中先输入第1个学生5门课的成绩,然后求出该学生的平均成绩aver,并输出此平均成绩。请思考后一行“i ;”的作用。图5.1它使i的值加1,i的原值为1,现在变成2了。然后流程返回到while语句的开头,再检查i的值是否小于或等于50,由于i的值2小于50,因此又执行循环体,输入第2个学生5门课的成绩,然后求出第2个学生的平均成绩并输出此平均成绩。i 又使变量i的值变为3,处理第3个学生的数据……直到处理完第50个学生的数据后,i的值变为51。由于它大于50,因此不再执行循环体。流程图见图5.1,其中,虚线框内为while循环结构。while语句的一般形式如下: while (表达式) 语句其中的“语句”就是循环体。循环体只能是一个语句,可以是一个简单的语句,还可以是复合语句(用花括号括起来的若干语句)。执行循环体的次数是由循环条件控制的,这个循环条件就是上面一般形式中的“表达式”,它也称为循环条件表达式。当此表达式的值为“真” (以非0值表示)时,就执行循环体语句;为“假” (以0表示)时,就不执行循环体语句。例如“i<=50”是一个循环条件表达式,它是一个关系表达式。它的值只能是“真”或“假”。在执行while语句时,先检查循环条件表达式的值,当为非0值(真)时,就执行while语句中的循环体语句;当表达式为0(假)时,不执行循环体语句。其流程图见图5.2。while语句可简单地记为: 只要当循环条件表达式为真(即给定的条件成立),就执行循环体语句。注意: while循环的特点是先判断条件表达式,后执行循环体语句。通过下面的例子,可以学习到怎样利用while语句进行循环程序设计。【例5.1】求1 2 3 … 100,即∑100n=1n。解题思路: 在处理这个问题时,先分析此题的特点: (1) 这是一个累加的问题,需要先后将100个数相加。要重复进行100次加法运算,显然可以用循环结构来实现。重复执行循环体100次,每次加一个数。(2) 分析每次所加的数有无规律。发现每次累加的数是有规律的,后一个数是前一个数加1。因此不需要每次用scanf语句从键盘临时输入数据,只须在加完上一个数i后,使i加1就可得到下一个数。为了使思路清晰,画出传统流程图和NS结构流程图表示算法,见图5.3。