清华大学C语言教程第7章

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

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

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

资源描述

C语言程序设计基础教程第七章循环结构程序设计第一节概述第二节goto语句第三节while语句第四节for语句C语言程序设计基础教程第五节循环控制语句第六节几种循环语句的区别第七节程序举例本章小结习题七C语言程序设计基础教程循环结构是3种基本结构之一,是处理问题的基本框架。C语言提供了4种类型的循环语句,即while语句、do…while语句、for语句和goto语句。虽然循环语句在处理问题时的执行顺序、执行次数、定义格式及关键字不同,但它们都是由循环条件和循环体两部分组成的,相互之间可以进行转换。第一节概述C语言程序设计基础教程goto语句为无条件转向语句,它是由语句组和语句标号组成的,其一般格式如下:语句标号goto语句标号其中,语句标号用标识符表示,它的定义规则与定义变量相同。第二节goto语句C语言程序设计基础教程例7.1计算从1加到10的结果:1+2+3+…+10。程序#includestdio.hmain(){inti,num;i=1;num=0;loop:if(i=10)C语言程序设计基础教程{num=num+i;i++;gotoloop;}printf(“1+2+3+…+10=%d\n”,num);}输出C语言程序设计基础教程例7.2计算从1乘到10的结果:1×2×3×…×10,即求10!。程序#includestdio.hmain(){longi,num;i=num=1;loop:num=num*i;C语言程序设计基础教程i++;if(i=10)gotoloop;printf(“1×2×3×…×10=%ld\n”,num);}输出C语言程序设计基础教程分析本程序中使用了当型循环结构,即当满足“i11”时执行大括号内的循环体。本程序除了使用goto语句外,还可以使用for语句、while语句、do…while语句实现。使用for语句实现的具体程序如下:C语言程序设计基础教程#includestdio.hmain(){longi,num;num=1;for(i=1;i=10;i++)num=num*i;printf(“1×2×3×…×10=%ld\n”,num);}C语言程序设计基础教程注意:一般情况下,不主张使用goto语句,因为滥用goto语句可能导致程序流程无规律,可读性差。goto语句的所有功能可以由其他循环语句代替实现。C语言程序设计基础教程在C语言循环控制结构中,while循环和do…while循环功能强大、操作简单、易于理解,本节将结合实例详细介绍这两种循环结构。第三节while语句C语言程序设计基础教程一、do…while语句do…while语句用来实现“直到型”循环结构,其一般格式如下:do{循环体语句;}while(表达式);C语言程序设计基础教程do…while语句的执行过程是先执行一次循环体语句,然后判断表达式,如果表达式成立,则重新执行循环体,如此往复,直到表达式不成立为止;如果表达式不成立,则退出循环体。其执行流程如图7.3.1所示。C语言程序设计基础教程循环体语句表达式成立(非零)不成立(0)图7.3.1do…while语句流程C语言程序设计基础教程例7.3使用do…while语句求10!。程序#includestdio.h#includestdlib.hmain(){inti;longnum;C语言程序设计基础教程i=1;num=1;do{num=num*i;i++;}while(i11);C语言程序设计基础教程printf(“1×2×3×…×10=%ld\n”,num);}输出C语言程序设计基础教程分析本程序中使用了直到型循环结构,首先执行循环语句中的语句,然后判断i是否满足“i11”,如果满足,则重新返回到循环体继续执行;否则退出循环体。C语言程序设计基础教程注意:在使用do…while语句时,应注意以下几点:(1)在书写该循环语句时,为了使结构明了,关键字“do”应独立成行。(2)关键字while中的表达式书写必须合法且合理,以免使程序出现死循环,还有表达式要用“()”括起来,后面一定要加“;”。(3)在循环体中,一定要有趋于循环结束的语句(如在例7.3中语句“i++;”)。C语言程序设计基础教程二、while语句while语句用来实现“当型”循环结构,其一般格式如下:while(表达式){循环体语句;}C语言程序设计基础教程while语句的执行过程是先进行循环条件判断,一般是逻辑表达式或关系表达式,如果表达式成立(即非零),则执行一次循环体语句,然后再判断表达式,如此往复,直到表达式不成立为止;当表达式不成立(即0)时,则退出循环体。其执行流程如图7.3.2所示。C语言程序设计基础教程表达式循环体语句不成立(0)成立(非零)图7.3.2while语句流程C语言程序设计基础教程例7.4国王的许诺问题。相传国际象棋是古印度舍罕王的宰相达依尔发明的。舍罕王非常喜欢象棋,决定让宰相自己选择奖赏。聪明的宰相指着共64格的象棋说:“陛下请赏给我一些麦子吧,就在棋盘的第1个格子放1粒,第2个格子放2粒,第3个格子放4粒,依次类推,以后每个格子都比前一个格子增加1倍,依次把棋盘放满”。请问舍罕王要赏宰相多少粒麦子,合多少立方米(已知1立方米约有麦子1.42e8粒)。C语言程序设计基础教程算法这是一个典型的等比数列问题,麦子总数sum=1+2+22+23+…+264。对于此类问题,可以采用累加的方法,即可求累加和sum。依题可得累加项的通式为term=2n-1(即term=pow(2,n-1),其中pow表示库函数,2表示底数,(n-1)表示指数)。于是可得麦子总数sum=sum+pow(2,n-1),其中,sum的初值为0,n∈[1,64]。其流程图如图7.3.3所示。C语言程序设计基础教程计数器count赋初值0|term|10-4?sum=sum+termcount++输出sum值(真非零)(假0)图7.3.3国王的许诺问题流程C语言程序设计基础教程程序#includemath.h#includestdio.h#defineCONST1.42e8main(){intcount;doubleterm,sum;count=0;sum=0;C语言程序设计基础教程while(count64){term=pow(2,count);sum=sum+term;count++;}printf(“Thetotalofwheatis%e\n”,sum);printf(“Thevolumeofwheatis%e\n”,sum/CONST);C语言程序设计基础教程}输出C语言程序设计基础教程注意:在使用while语句时,应注意以下几点:(1)在开始执行循环体前,如果不满足判断条件,则不执行循环体语句。(2)如果循环体中包含一个以上的语句,即复合语句时,应该用“()”括起来。(3)在循环体中,一定要有趋向于循环结束的语句。C语言程序设计基础教程三、while语句与do…while语句的区别在C语言中,while语句和do…while语句在处理同一个循环问题时,它们的结果是相同的,尽管如此,它们之间也存在以下不同点:(1)while循环表达式的圆括号外没有“;”,而do…while循环表达式圆括号外有“;”。C语言程序设计基础教程(2)while循环是当型循环结构,而do…while循环是直到型循环结构。(3)如果while循环表达式的值一开始就为假(即0),则两种循环体的结果是不同的。C语言程序设计基础教程例7.5while语句与do…while语句的区别实例。程序#includestdio.h/*while语句实例*/main(){inti=1;while(i1){C语言程序设计基础教程i=10;}printf(“i=%d\n”,i);}输出C语言程序设计基础教程程序#includestdio.h/*do…while语句实例*/main(){inti=1;{i=10;C语言程序设计基础教程}while(i1);printf(“i=%d\n”,i);}输出C语言程序设计基础教程for语句用于实现当型循环结构,其使用方法灵活,在C程序设计过程中应用频率最高。其一般格式如下:for(表达式1;表达式2;表达式3){循环体语句;}第四节for语句C语言程序设计基础教程其中,表达式1用于初始化循环控制变量;表达式2用于判断循环是否重复执行,即判断循环结束标志;表达式3用于增加循环控制变量。C语言程序设计基础教程for语句的执行过程如下:(1)求解表达式1。(2)求解表达式2,如果它的值为真(即非零),则执行for循环体中的语句,同时执行第(3)步;否则执行第(5)步。(3)求解表达式3。(4)执行第(2)步。(5)结束循环,退出for循环体。其执行流程如图7.4.1所示。C语言程序设计基础教程表达式1表达式3表达式2循环体语句真假图7.4.1for语句流程C语言程序设计基础教程对于for循环语句,应该注意以下两点:(1)这3个表达式之间用分号隔开,表达式可以省略不写,但是分号不能省略。(2)这3个表达式可以是任意合法的C语言表达式。当程序需要对多个变量赋初始值时,表达式1可用逗号表达式顺序地执行多个操作;表达式3也相同。C语言程序设计基础教程例如:inti,j,num=0;for(i=1,j=1;i10;i++,j++){num=num+i+j;}C语言程序设计基础教程一、简单for语句例7.6检测给定的某个整数是否为质数。算法质数又称为素数,指除1和它本身外不能被其他任何数整除的整数,如2,3,5,7,11等。因而测试某个数n是否为质数,只须测试n能否被2,3,4,…,n-1整除,如果不能被整除,则是质数,否则不是质数。C语言程序设计基础教程程序#includestdio.hmain(){inti,num,flag;flag=0;printf(Inputanumber:);scanf(%d,&num);C语言程序设计基础教程if(num2)printf(Thenumber%disnotaprimenumber.\n,num);else{for(i=2;inum;i++)if(num%i==0){C语言程序设计基础教程flag=1;break;}printf(“Thenumber%dis,num);if(flag==1)printf(notaprimenumber.\n);elseC语言程序设计基础教程printf(“aprimenumber.\n”);}}输入Inputanumber:13↙输出C语言程序设计基础教程分析一般情况下,n若不能被2,3,4,…,整除,则n是质数。由于≤n,因而程序中第11行的inum可以改为i=sqrt(num),可以减少循环的次数,提高程序执行的效率。由于sqrt()函数在math.h中定义,因此在程序执行前要加预处理命令#includemath.h。C语言程序设计基础教程二、for语句的嵌套在C语言中,经常需要把一个循环结构作为另一个循环结构的循环体,这种语句称为循环的嵌套。循环的嵌套包括二重循环和多重循环,一般情况下循环的嵌套都是由for语句来完成的。本小节将重点介绍for语句的二重循环。for语句二重循环的一般格式如下:C语言程序设计基础教程for(表达式1;表达式2;表达式3){循环体语句1;for(表达式4;表达式5;表达式6){循环体语句2;}循环体语句3;}C语言程序设计基础教程for语句嵌套的执行过程如下:(1)求解表达式1。(2)求解表达式2,如果它的值为真(即非零),则执行循环体语句1,接着执行第(3)步,最后执行表达式3,依次类推;否则执行第(5)步。C语言程序设计基础教程(3)求解表达式4,然后执行并判断表达式5,如果它的值为真(即非零),则先执行循环体2,然后执行表达式6,依次类推;否则退出第2层for循环体。(4)先执行循环体语句3,然后执行第(2)步

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

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

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

×
保存成功