您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 工作计划 > 清华大学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)步
本文标题:清华大学C语言教程第7章
链接地址:https://www.777doc.com/doc-3635643 .html