第05章_循环结构程序的设计

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第五章循环结构程序的设计•本章教学目的:–理解循环的概念,掌握循环的使用方法•本章教学重点:–for语句、while语句和dowhile语句的语义、句法和正确的使用规则,理解break语句和continue语句。•本章教学难点:–嵌套循环结构,循环结构的常用算法•本章作业:内容提要•5.1while语句和do-while语句•5.2for语句•5.3嵌套循环结构•5.4break语句和continue语句•5.5goto语句•5.6循环程序举例循环结构的引入:例:求1~100的累计和求解方法:1+2=3,3+3=6,6+4=10,10+5=15……很明显,步骤是重复累加且繁琐的C语言中这种经常需要进行重复计算的结构称为循环结构改进后的:设置一个累计器sum,其初值为0,利用sum+=n来计算(n依次取1、2、…、100)这时需要考虑以下问题:(1)将n的初值置为1;(2)每执行1次“sum+=n”后,n增1;(3)当n增到101时,停止计算。此时,sum的值就是1~100的累计和。5.1while语句和do-while语句while语句用来实现“当型”循环结构,其一般形式如下:while(表达式)循环体语句其执行过程是:计算表达式的值,若表达式为非0值时,执行while语句中的循环体语句,并再次计算表达式的值,此过程重复执行,一直到表达式的值为0,循环结束。LT5.1求1+3+5+7+…+99的值对于while语句,有几点需要注意:(1)循环体若包含一个以上的语句,应该用花括弧括起来。若不加花括弧,则while循环体语句的范围只到while后面第一个分号处。(2)若表达式的值为0,循环体一次也不执行(3)在循环体中一定要有使循环趋向于结束的语句,否则循环永不结束,形成死循环。do-while语句一般格式:do{循环体语句组;}while(循环继续条件);/*分号不能缺省*/思考题:例题5.1用do-while语句如何来实现?执行过程:(1)先执行循环体语句组。(2)计算“循环继续条件”表达式。若“循环继续条件”表达式的值为非0(真),则转向(1)继续执行;否则,转向(3)。(3)执行do-while的下一条语句。do-while循环语句最重要的特点是:先执行一次循环体语句组,然后再判断循环条件。LT5.2从键盘输入若干个数求和,当和大于200时停止执行。LT5.3从键盘输入一个正整数,各位数码顺序颠倒输出如输入345,输出543本题思路:为了实现逆序输出一个正整数,需要把该数按逆序逐位拆开,然后输出。从一个数中分离一位数,可以对10求余.345num345%10=5digit345/10=34num34%10=4digit34/10=3num3%10=3digit3/10=0num当num最后变成0时,处理过程结束。赋值给5.2for语句构成的循环1、一般格式:for(表达式1;表达式2;表达式3){循环体语句组;}2、执行过程如图:for语句是C语言中最灵活也是应用最广泛的循环结构完全可以替代while和do-while语句思考题:例题5.1用for语句如何实现?LT5.4输入一个1~10间的整数,用for语句求这个数的阶乘main(){inti,sum;for(sum=0,i=1;i=99;i=i+2)sum=sum+i;printf(“thenumis%d”,sum);}1、for后面括号里的3个表达式都可以省略,但其中的两个分号不能省略for(;;)printf(“######”);2、若表达式1被省略,则应在for语句之前给循环变量赋初值。i=1;sum=0;for(;i=10;i++)sum+=i;3、若表达式2被省略,即不判断循环条件,则循环无终止地进行下去。也就是认为表达式2始终为真4、若表达式3被省略,则程序设计者应另外设法保证循环能正常结束。for语句需要注意的是:5、若省略表达式1和表达式3,只有表达式2,即只给循环条件,则在这种情况下,完全等同于while语句i=1;sum=0;for(;i=10;){sum+=i;i++;}6、若3个表达式都省略时,则无终止地循环7、表达式1可以是设置循环变量初值的赋值表达式,也可以是与循环变量无关的其他表达式例如:for(sum=0,i=0;i=10;i++)sum+=i;8、表达式2可以是任何合法的C语言表达式只要其值为非零,就执行循环体LT5.5输入一行字符并计算出字符个数#includestdio.hintmain(){intn=0;printf(Inputastring:);for(;getchar()!='\n';n++);printf(%d\n,n);}/*此例题中for语句非常有特点*/程序中的循环条件为getchar()!=’\n’,判断从键盘输入的字符是不是回车。习题EX-8:打印出所有的“水仙花数”。所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例:153是一个“水仙花数”,因为153=13+53+33思路:将一个三位数整数分解,然后用一个判断语句来判断习题EX-12猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少习题Ex-15.计算并输出a+aa+aaa+…+aaa…a(n个a)之和。n由键盘输入。(例如a=2,,n=3时,是求2+22+222之和)。思路:根据键盘输入a值和n值,用循环语句赋值得到由i个(1=i=n)a组成数的值,再循环累加5.3嵌套循环结构的概念和实现循环的嵌套是指一个循环体内又包含另一个完整的循环结构。内嵌的循环中还可以嵌套循环,这就是多层循环while循环、do-while循环和for循环不仅可以自身嵌套,而且可以互相嵌套LT5.6在屏幕上输出如下的一张九九乘法表1*1=11*2=22*2=41*3=32*3=63*3=91*4=42*4=83*4=124*4=161*5=52*5=103*5=154*5=205*5=251*6=62*6=123*6=184*6=245*6=306*6=361*7=72*7=143*7=214*7=285*7=356*7=427*7=491*8=82*8=163*8=244*8=325*8=406*8=487*8=568*8=641*9=92*9=183*9=274*9=365*9=456*9=547*9=638*9=729*9=81思路:九九乘法表,共有9行:我们可以用一个循环变量i来依次表示第i(1≤i≤9)行;对于第i行来说,它又有i个等式,可以用一个循环变量j来依次表示第j(1≤j≤i)个等式;第i行第j列的等式刚好是j和i相乘的式子。注意每个变量的不同的取值范围。LT5-6LT5.7在计算机屏幕上输出如下图形。*************************思路:上述图形中,共有5行,可以通过循环依次输出每一行。每一行中可分成两部分,前面由若干个空格组成,后面是由若干个星号组成。具体空格和星号由当前的行数来决定5.4break语句和continue语句while(表达式){语句块1if(条件)break;语句块2}1、break语句可以用来从循环体内跳出循环体,即提前结束循环,接着执行循环下面的语句。格式如下:LT5.8输入一个正整数m,判断它是否为素数。思路:判断一个数m否为素数,需要检查该数m是否能被2~m-1之间的整数整除。数学上能证明,只需要检查该数m是否能被2~之间的整数整除即可m设i取[2,]上的整数,如果m不能被该区间上的任何一个数整除,即对每一个i,m%i都不为0,则m是素数;但是只要找到一个i,使m%i为0,则m肯定不是素数m2、continue语句格式如下:while(表达式){语句块1if(条件)continue;语句块2}其作用为结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下一次是否执行循环的判定。思考题:continue语句和break语句的区别?LT5.9输入10个整数,求其中正整数之和。思路:在输入了10个数以后,累加之前判断获得的该数是否是正数,若是则累加,否则则将该数忽略(即跳出本次循环)5.5goto语句和用goto语句构成循环C语言中,goto语句为无条件转向语句一般形式为:goto语句标号;功能:无条件使程序的流程从当前所在的位置,转向标号所指定的语句位置执行使用goto语句,需要注意以下几点:(1)语句标号用标识符表示,它的命名规则与变量名相同,即由字母、数字和下划线组成,其第一个字符必须为字母或下划线。不能用整数来做标号。例如:gotolabel_123(合法)goto123(非法)LT5.10求1+2+3+…+n的值(2)在带标号的语句中,语句标号与语句之间用冒号作分隔。例如:label_123:a=50;(3)goto语句与if语句一起构成循环结构注:goto语句可使程序的流程变的毫无规律、可读性差,在程序设计中尽量不用5.6程序举例LT5.11利用下面的格里高利公式求的近似值,要求精确到最后一项的绝对值小于10-6为止71513114…思路:这是一个求累加和的问题,通过循环,把第i项加到pi中。第i项用变量t表示,在每次循环中其值都会改变。要注意每一项的构成,如分母、分子以及符号类似的,请考虑:习题EX-14.计算1-1/2+1/3-1/4+...+1/99-1/100的值,并显示出来。LT5.12古代某工地需要搬砖块,已知男人一人搬3块,女人一人搬2块,小孩两人搬1块。问用45人正好搬45块砖,有多少种搬法。思路:这是一个组合问题,由3个因数决定组合的数量(即搬法的种数):男人、女人和小孩的人数,人数的取值范围为0~45,各类人数的取值与其他类人数的取值无关,但最后加起来正好45人。因此对于每类人数的取值都要反复地试,最后确定正好满足45人搬45块砖的组合。LT5.13输入两个正整数m和n,求它们的最大公约数和最小公倍数。思路:m和n值分别赋予a,b;a对b求余,即t=a%b;再把除数当被除数(即a=b),余数当除数(b=t),只要b不为0,则重复上述过程;当b为0时,a就是它们的最大公约数把原来的两个数m和n相乘,再除以它们的最大公约就得到它们的最小公倍数EX1.请用二分法求解f(x)=x*x-5*sin(x)-4=0在[2,5]区间内的1个实根思路:先指定一个区间[x1,x2],如果函数f(x)在此区间是单调变化的,则可以根据f(x1)和f(x2)是否同号来确定f(x)=0在区间[x1,x2]内是否有一个实根,若有实根,可采取二分法将区间[x1,x2]一分为二,再判断在哪一个小区间中有实根。循环直到区间足够小为止。x1x2UNTIL|fx0|0.00001EX-1具体算法如下:(N---S图)输入x1和x2,求fx1和fx2,判断是否异号x0=(x1+x2)/2求出fx0Tfx1和fx0不同号Fx2=x0fx2=fx0x1=x0fx1=fx0输出x0作业:5.1阅读程序3,4,55.2编程题6,7,10,14,16

1 / 31
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功