第6章循环结构程序设计本章的学习重点◆for循环语句◆嵌套的for循环语句◆while语句◆do…while语句◆break语句◆continue语句◆goto语句6.1循环语句的提出循环语句主要由控制反复执行的循环条件和循环体构成。循环结构主要分为如下两种形式:1.当型循环当型循环的执行规则为:首先判断循环条件,若循环条件为真(非0),则反复执行循环体。若循环条件为假(0),则结束循环。C语言提供了两种当型循环语句:for语句和while语句。下图为当型循环的流程图:循环条件循环体开始真(非0)假(0)结束6.1循环语句的提出2.直到型循环直到型循环的执行规则为:首先执行循环体,然后判断循环条件,若循环条件为真(非0),则继续执行循环体,若循环条件为假(0),则结束循环。C语言提供了do-while循环语句作为直到型循环语句。下图为直到型循环的流程图:循环条件循环体开始真(非0)假(0)结束6.2for循环语句for语句由初始表达式、循环控制表达式、循环置位表达式和循环体构成,其一般形式为:for(表达式1;表达式2;表达3)语句段其中:表达式1为初始表达式,通常作为for循环的初始操作,常用来给循环变量赋初值,一般是赋值表达式。表达式2为循环控制表达式,通常设为循环条件。表达式3为循环置位表达式,也称为迭代表达式,通常用于修改循环变量的值。例如:for(a=0;a5;a++)b=b+a;6.2.2for语句的执行for语句的执行逻辑顺序:按照自左到右,自上到下,自两边到中间的执行顺序。for语句的执行规则为:1.首先执行表达式1,计算表达式1的值。2.计算表达式2的值,若为真(非0),则执行循环体,否则跳出循环。3.执行完循环体后,将执行表达式3,然后返回步骤2,继续判断表达式2是否为真(非0),若为真,则继续执行循环体,否则,退出循环。右图为for循环的执行流程图:表达式1开始真(非0)假(0)结束表达式2循环体表达式36.2.2for语句的执行for循环中,不论表达式2的值为真或假,表达式1总会被执行,并仅执行1次。如图所示为for循环的执行示意图:其中,步骤1最先执行,且仅执行1次,程序循环过程中顺次执行步骤2、3和4。当表达式2为假时,跳出整个循环。例如,计算1到10的和,使用sum保存结果,可使用for语句实现:inti=0,sum=0;for(i=0;i=10;i++)sum=sum+i;for(表达式1;表达式2;表达式3)语句段12346.2.3for语句的应用范例6.1CalcFactorial.c计算10!,使用for循环语句实现。使用facto保存结果,并打印在屏幕上。注意定义facto时赋初值。facto=facto*n表示阶乘的计算。范例6.2CalcEvenSumFrom1To100.c编写程序,计算1到100之间的偶数和,使用for循环语句实现。使用Sum保存结果,并打印在屏幕上。注意定义Sum时赋初值。使用语句:Sum=Sum+i表示阶乘的计算,i为循环变量,注意i值的递增步长。范例6.3DivOKby7And11.c编写程序,计算100到1000之间能被7和11整除的数,打印在屏幕上,每3个数为1行。判断使用if语句,使用模除%判断是否被7和11整除,使用i作循环变量,for循环遍历100到1000中的每个数。6.3for循环嵌套语句for循环嵌套语句的一般形式为:for(表达式01;表达式02;表达式03)for(表达式11;表达式12;表达式13)for(表达式21;表达式22;表达式23)循环体for循环嵌套语句的表达形式可转化为:for(表达式01;表达式02;表达式03){for(表达式11;表达式12;表达式13){for(表达式21;表达式22;表达式23){循环体}}}6.3.2for循环嵌套语句的应用使用for循环一定注意,避免出现不必要的无限循环(死循环)。范例6.4CalcPrimeBetween1To100.c计算1到100之间的素数。所谓素数:指在所有比1大的整数中,除了1和它本身以外,不再有别的约数,这种整数叫做素数,又叫做质数。将判断出的数打印到屏幕上,每5个数为1行。程序使用2层for循环实现,第1层循环用于遍历2到100的数,第2层循环用于判断是否为素数。实训6.1——打印九九乘法表九九乘法表是小学数学中最基本的知识,经常印到我们的文具盒上面,编写程序,使用for循环将九九乘法表输出到屏幕上,并且打印行列对齐,效果美观大方。实现方法为,采用2层循环结构,外层循环控制行输出及换行,内层循行控制列输出。1.需求分析需求1:打印九九乘法表需求2:行列对齐2.技术应用对于需求1,使用嵌套for循环实现。对于需求2,使用printf输出格式控制,每个打印数字采用%3d格式。源代码:PrintMultiplexTable.c实训6.2——打印三位数水仙花数“水仙花数”是指一个n位数(n≥3),它的每位数字的n次幂之和等于它本身。例如:13+53+33=153,因此,153是一个“水仙花数”。编写程序,求三位数的水仙花数,使用for循环,并尽量减少循环嵌套层数。1.需求分析:需求1:分析三位数字是否为水仙花数需求2:若查找到符合要求的数,则打印需求3:尽量减少循环次数2.技术应用对于需求1,定义变量i,j,k,分别代表三位数的个位、十位和百位。使用公式:i+10*j+100*k=i*i*i+j*j*j+k*k*k判断某i,j,k的组合是否符合要求,使用3层for循环实现。对于需求2,使用if语句判断是否符合要求,若符合要求,则打印。对于需求3,设计更加合理方案,使用1层循环实现,遍历100-999之间的数,并分别获取每个数的各位数字,以减少循环开销。源代码:WaterFlower1.cWaterFlower2.c6.4while循环语句while循环的一般表达形式为:while(表达式)循环体while循环的执行规则为:首先计算表达式的值,判断表达式的值是否为真,若值为真(非0),则执行循环体语句,否则,退出循环。如图所示为while循环的流程图。表达式循环体开始真(非0)假(0)结束6.4.2while循环语句的应用范例6.5CalcSumOfN.c编写程序,输入数字n,计算前n项和。当数字n比较小时,可以容易的使用数列公式计算,但当数字n比较大时,人工计算就显得很困难,而使用while循环则可以很容易解决这一问题。键盘输入n的值,使用while循环实现该计算。范例6.6CalcSumOfx.c编写程序,计算sum=x+xx+xxx+xxxx+xx...x的值,其中x为1-9之间的数字,例如:3+33+333+3333+33333。键盘输入x的值和和项的值,如上述算式中x的值应为3,共5项和数,则应输入参数为3和5。实训6.3——记录键盘输入字符数从键盘不停输入字符,记录并打印键盘输入的字符数,同步输出键入的字符,直到键盘输入!则退出。调用getchar函数用于接收键盘输入字符数,使用while循环,只要输入字符非!号符,则继续等待键盘输入。1.需求分析:需求1:键盘输入字符需求2:判断是否为!号符,若不是,则继续等待需求3:每输入一个字符,则打印输入字符个数2.技术应用对于需求1,调用函数getchar,用于接收来自键盘的字符。对于需求2,使用关系表达式’!’!=c判断是否为!号符,while循环用于等待对于需求3,对输入字符数作统计。源代码:CalcInputCharacterNum.c6.5do…while循环语句do…while循环语句的一般表达形式为:do{循环体}while(表达式);do…while语句的执行规则为:首先执行循环体,然后判断表达式是否为真(非0),若表达式为真,则继续返回执行循环体,否则退出循环。如图所示为do…while循环流程图:表达式循环体开始真(非0)假(0)结束6.5.2do…while循环语句的应用范例6.7_1CompareWhileAndDowhile1.c编写程序,输出前n个非负整数中的偶数部分,n由键盘输入,使用while循环实现。由于n为输出数据个数,因此需要对该参数作入参检查,使用n--作为表达式控制while循环的循环次数。范例6.7_2CompareWhileAndDowhile2.c编写程序,输出前n个非负整数中的偶数部分,n由键盘输入,使用do…while循环实现。由于n为输出数据个数,因此需要对该参数作入参检查,使用n--作为表达式控制do…while循环的循环次数。范例6.8Capital2Lowercase.c编写程序,键盘输入字符,判断是否为大写字母,若是则将其转换为小写字母并输出,否则,不转换,也不输出。输入!结束输入。6.6goto语句goto语句是一种无条件转移语句。其一般表达形式为:goto标签goto语句的执行规则为:程序执行到goto语句,则跳转到“标签”所在的位置继续执行程序。其中,“标签”的定义类似于变量的定义,其命名规则需遵守用户标识符的命名规则。goto语句只能用于本函数内部的程序跳转,不能跳转到其他函数体。范例6.9CalcFactorialSum.c编写程序,计算sum=1!+2!+3!+…+n!,其中n为不大于10的正整数,并由键盘输入。程序使用goto语句实现程序跳转,并使用for循环计算加和及求阶乘计算。6.7break语句和continue语句break用于循环语句中,其作用是跳出本层循环,转去执行后面的程序。该语句不带任何参数,其一般形式为:break;break后需要跟分号。当程序含有多层循环时,break仅用于跳出本层循环。范例6.10CalcPrimeBetween1To100.c编写程序,计算1到100之间的素数。使用break语句实现终止程序执行,并尽量减少程序循环次数。为减少程序执行次数,使用数学规则:当大于1的正整数数n不能被小于等于sqrt(n)的所有除1之外的正整数除尽时,则n为素数。6.7.2continue语句continue语句只能在循环体中使用,其一般表达形式为:continue;continue后需要跟分号,其执行规则为:终止本次循环而不再执行循环体中continue语句之后的语句。程序执行continue语句之后,将继续转入下一次循环条件的判断与执行。需要注意的是,continue语句只结束本层本次程序的循环,但不跳出循环。范例6.11CalcNumDivBy7.c编写程序,计算1到1000以内能够被7整除的所有正整数,并打印在屏幕上,使用continue语句控制程序执行,每行打印10个数字