学习目标:
了解为什么需要循环控制
掌握用while语句实现循环
掌握用do…while语句实现循环
掌握用for语句实现循环
理解break和continue语句
掌握循环的嵌套
理解循环程序举例
重点:
掌握用while语句实现循环
掌握用for语句实现循环
难点:
理解break和continue语句
掌握循环的嵌套
一、程序设计举例
例1:输入两个正整数m和n,求它们的最小公倍数。
分析:m*n是m和n的一个公倍数,设p是m和n中比较大的数,则p有可能是m和n的公倍数,而小于p的数不可能是m和n的公倍数,所以可以使用循环方法,在m*n到p的范围内找出m和n的最小公倍数。
程序代码如下:
例2:统计成人身高,从键盘输入若干个成人身高(单位公分),分三种范围:>=180公分、>=160并且<180公分、<160公分,统计各个范围的人数。
分析:可以通过while循环实现统计。每次循环输入一个身高值,判断该身高值属于哪一个范围,然后让相应的变量累加。
程序代码如下:
例3:利用下面的格里高利公式计算π的近似值,在逐项累加的过程中,若某一项的绝对值小于10–6,则停止累加,输出π的近似值。
分析:可以通过循环实现逐项累加求和,用变量pi存放各项的和,用变量t存放第i项的值。t的值在每次循环中都会改变,t的值由分母(从1开始的奇数)和正1或负1(轮流出现)组成。
程序代码如下:
注:本题涉及到数学公式fabs(),需要在头部加上#include<math.h>,后续题目中出现此类数学函数的都需要加#include<math.h>。
例4:输入一个正整数存放变量m中,判断m是否为素数。
分析:判断m是否为素数,需要检查该数m是否能被2 ~ m–1之间的整数整除。根据数学理论,只须检查m是否能被2~之间的整数整除即可。设i取[2,
]上的整数,如果m不能被该区间上的任何一个整数整除,即对每一个i,m%i都不为0,则m是素数;但是只要有一个i能使m%i为0,则m不是素数。
程序代码如下:
例5:已知在直角坐标平面上圆的方程是x2+y2=36,从键盘输入100个点的坐标x和y(x和y都是整数),判断每个点在圆内、圆外、还是圆上。
分析:可以用循环来解决此问题。设变量x和y存放点的坐标,输入每一个点的坐标x和y,由平面几何知识可知:若x2+y2的值小于36,则该点在圆内;否则,若x2+y2的值大于36,则该点在圆外;否则,则该点在圆上。
程序代码如下:
例6:从键盘输入一个十六进制正整数(该整数为unsigned int型),将其转换为二进制数。例如,输入十六进制数“fcdef”,输出0000000000001111-1100110111101111。例如,输入十六进制数“5678”,输出0000000000000000-0101011001111000。例如,输入十六进制数“15”,输出0000000000000000-0000000000001111。
分析:对于十六进制整数n,可以从最高位到最低位测试它的二进制(32位)形式的每一位,判断每一位是1还是0。
具体作法为:定义一个标志变量flag(其十六进制形式为0x80000000,二进制为1000 0000 0000 0000 0000 0000 0000 0000),将flag与n进行“按位与”运算,“按位与”运算的结果或者为真、或者为假;若为真,则说明n的最高位值为1;若为假,则说明n的最高位值为0。然后将flag右移一位后,再将flag与n进行“按位与”运算,根据“按位与”运算结果的真假,判断n的第2位是1还是0。∙∙∙∙∙∙。依此类推,循环32次,即可求出n的每一位是1还是0。
程序代码如下:
例7:猜数游戏。让计算机随机生成一个1到100之间的整数,请你猜该数是多少,输出你猜的次数以及该数的值。请你每次从键盘输入所猜的数。若猜大了或猜小了,计算机给出提示,你再重新猜。
分析:可能第一次就猜对了,因此不用进入循环,循环体不被执行,所以选择while循环语句比较好。若某次猜的不对,需要继续猜,则循环体被执行。在循环中,根据所猜的数(number)与被猜的数(guess)的大小关系,显示提示信息,帮助你继续猜。
程序中使用函数srand()设置随机数种子,每次执行程序时该函数产生不同的整数序列,即传递给srand()一个整数,以便决定rand()函数从何处开始生成随机数。函数srand()调用函数time (NULL)返回一个自1970年1月1日以来经历的秒数。函数rand()的值是取值为0到32767之间的随机整数。
程序代码如下:
例8:古典算术问题:搬砖块。某工地需要搬砖块,已知男人一人搬3块,女人一人搬2块,小孩两人搬1块。请问用45个人正好搬45块砖,有多少种搬法。
分析:对于这个组合问题,3个因素决定一种搬法:男人数、女人数和小孩数,每类人数的取值范围为0~45,各类人数的取值之和正好等于45人。
因此,对于每类人数的取值都要反复地试,最后确定正好满足45人搬45块砖的组合。
可以采用三重循环嵌套来解决此问题。
程序代码如下:
二、视频学习借鉴

