第五章(课后作业).docx_第1页
第五章(课后作业).docx_第2页
第五章(课后作业).docx_第3页
第五章(课后作业).docx_第4页
第五章(课后作业).docx_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第5章 循环结构及其应用学习目标: 掌握循环结构的应用场合,循环结构的设计,循环语句的用法,设计循环结构程序。学习内容: while循环,do-while循环,for循环,break语句,循环嵌套,循环结构程序设计方法。5.1 一个循环结构程序实例。要在计算机屏幕上输出30个“*”,可以使用输出函数printf()一次完成,但是程序中要重复输入30次“*”。其实同样的操作可以换一个思路完成,那就是让计算机重复30次输出一个“*”的工作,而输出一个“*”的工作很容易用printf()语句来实现。【例5-1】输出30个“*”。【编程思路】(1)定义变量i,并赋初值为1,用i来进行计数器。(2)使用循环结构重复执行输出一个“*”的过程。(3)每次输出一个“*”,让计数器加1,当计数器超过30就停止重复工作。【程序代码】#include main()int i=1;while(i=30) printf(*);i+;printf(n);提示:本例中如果去掉语句i+;,就会出现死循环。5.2 实现循环结构的语句C语言提供了三种实现循环结构的语句:while语句、do-while语句和for语句。虽然3个语句的语法规则不同,但在使用上很相似,一般情况下可以相互转换。当然它们有各自的特点,在实际应用中还是要根据具体情况选择恰当的循环语句。5.2.1 while语句while语句用于当型循环结构,其一般形式为:while(表达式) 循环体语句while语句的执行过程是:首先计算表达式的值,若结果为“真”(非零),则执行循环体语句;然后再计算表达式的值,重复上述过程,直到表达式的值为“假”(零)时结束循环,流程控制转到while语句的下一条语句。小测验:根据while语句的执行过程,下面程序的输出结果为: #include main()int x=0,n=0;while(x30)x=(x+1)*(x+1);n=n+1;printf(n=%dn,n);【例5-2】显示110的平方。【程序代码】#include main()int i=1;while(i=10)printf(%d*%d=%dn,i,i,i*i);i+;使用while循环结构时应注意以下几点:(1)while循环的特点是先判断条件后执行循环体语句。(2)while循环中的表达式一般是关系表达式或逻辑表达式,也可以是其他任何合法的表达式。(3)循环体语句可以是一个语句,也可以是多个语句,当只有一个语句时,外层的大括号可以省略,如果循环体是多个语句时,一定要用花括号“”括起来,以复合语句的形式出现。(4)循环体内一定要有改变循环条件的语句,使循环趋于结束,否则循环将无休止地进行下去,即形成“死循环”。【例5-3】求1到100的自然数之和,即计算sum=1+2+100.【程序代码】#include main()int i,sum=0;i=1;sum=0;while(i=100)sum+=i;i+;printf(sum=%dn,sum);小测验:针对【例5-3】,思考下列问题:(1)是否可以不给sum和i赋初值?(2)是否可以将i+改成i=i+1?(3)是否可以将i+放置在sum=sum+i之前?(4)在循环结束后,i的值是多少?(5)如果求1100之间的奇数和,即计算sum=1+3+5+99,程序该如何修改?(6)求sum=1-2+3-4+5-100,程序该如何修改?5.2.3 do-while语句do-while语句属于直到型循环,其一般形式为:do 循环体语句while(表达式);例如:下面是一个可以输出30个“*”的do-while语句:i=1;doprintf(*);i+;while(i=30);do-while语句的执行过程是:首先执行一次循环体语句,然后计算表达式(循环条件)的值,若结果为“真”(非零),返回执行循环体语句,重复上述步骤,知道表达式的值为“假”(零)时结束循环,流程控制转到while语句的下一条语句。【例5-4】把【例5-3】(求1100的和)用do-while语句改写。【程序代码】#include main()int i=1,sum=0;dosum=sum+i;i+;while(i=100);printf(sum=%dn,sum);使用do-while循环结构是应注意以下几点:(1)do-while循环结构的特点是先执行循环体后判断条件,因此不管循环条件是否成立,循环体语句都至少被执行一次。这是他与while循环的本质区别。(2)不论循环体是一个语句还是多个语句,花括号“”都不要省略。(3)避免出现“死循环”。(4)注意do-while循环最后的分号“;”不能省略。【例5-5】求n!,即求n的阶乘,n由键盘输入。#include main()int i=1,n;long s=1;printf(please input n:);scanf(%d,&n);dos=s*i;i+;while(i=n);printf(%d! = %ldn,n,s);小测验:针对【例5-5】,思考下列问题:(1)为什么不给s赋初值0,而赋初值为1?(2)为什么要把变量s定义为long?(3)当输入的n值较大时,如20,程序会怎么样呢?如何解决?5.2.3 for语句for语句属于当型循环,其一般形式为:for(表达式1; 表达式2; 表达式3)循环体语句 例如:下面是一个可以输出30个“*”的for语句:for(i=1;i=30;i+)printf(*);for语句的执行过程是:(1)首先进行表达式1的计算。(2)判断表达式2的值,若值为“真”(非零),则执行循环体语句,然后转(3)执行;若为“假”(零),循环结束。(3)进行表达式3的计算,然后转至第(2)步重复执行。小测验:根据for语句的执行过程,写出下面程序段的输出结果。(1)for(i=1;i10;x-=2) printf(%dn,x);【例5-6】把例5-3(求1100的和)用for语句改写。【程序代码】#include main()int i,sum=0;for(i=1;i=100;i+)sum=sum+i;printf(sum=%dn,sum);本例中for语句的3个表达式实现了程序中的3个功能,即循环变量赋初值、循环条件和循环变量递增,因此写法更简洁。小测验:针对上面实例,思考下列问题:(1)如果将i=1放置在for循环之前,即在for循环外提前对循环变量赋初值,那么for语句该怎么书写?(2)修改程序,计算1+3+5+99的值。使用for语句时应注意以下几点:(1)for循环相当于下面的while循环:表达式1:while(表达式2)循环体语句 表达式3;(2)for语句有3个表达式,它们之间由分号“;”分隔,不能更换成其他分隔符号。(3)有时根据需要可以将for语句格式中的部分或所有表达式省略,比如可以写成如下形式:for( ;表达式2;表达式3)循环体语句例5-6中代码可以改写为:int i=1,sum=0;for( ;i=100;i+)sum=sum+I;for语句还可以写成其他多种形式,不过建议最好还是使用规范的语句形式。由于经常用表达式1进行循环变量的赋初值,用表达式2控制循环结束,用表达式3控制循环变量的递增或递减,所以规范的for语句形式为:for(循环控制变量赋初值; 循环条件;循环控制变量增/减值)循环体语句【例5-7】把100200之间的不能被3整除的数输出。【程序代码】#include main()int n;for(n=100;n=200;n+)if(n%3!=0)printf(%d ,n);小测验:(1)例5-7中输出的数据比较多,如果要求每行只输出10个数,程序应该如何修改?(2)在所有的两位数中,个位数比十位数大的两位数有多少个?是哪些数?编写程序完成。【例5-8】判断正整数m是不是素数,m由键盘输入。【程序代码】#include main()int m,i,flag=0;scanf(%d,&m);for(i=2;i=m-1;i+)if(m%i=0)flag=1;break;if(flag=0)printf(%d是素数!n,m);elseprintf(%d不是素数! n,m);本例中用到了break语句。在switch语句中我们已经接触过break语句,它的功能是跳出switch语句,那么在循环结构中使用break语句,其作用是跳出循环语句。需要注意的是:一般只有在switch结构和循环结构中使用break语句,其作用是跳出该结构。小测验:素数判断中能否不使用break语句?【例5-9】程序预期输出半径为110的圆的面积,但是如果有面积值超过100时,则停止执行。【程序代码】#include #define PI 3.14main()int r;float area;for(r=1;r100)break;printf(半径为%d的圆面积为:%fn,r,area);5.3 循环嵌套一个循环体内又包含了另一个完整的循环结构,这种循环称为循环的嵌套。使用循环嵌套时,三种循环语句可以自身嵌套,也可以互相嵌套。例如:分析下面程序段,理解循环嵌套。(1)for(k=1;k=5;i+)printf(*);输出结果为:*(2)for(i=1;i=3;i+)for(k=1;k=5;k+)printf(*);输出结果为:*显然,上面程序是for循环中又包含了一个for循环,属于两层循环结构。外层循环用变量i控制,内循环用变量k控制,外循环i从13循环3次,外循环每执行一次,内循环k从15循环5次,所以输出结果为3*5=15个“*”。(3)for(i=1;i=3;i+)for(k=1;k=5;k+)printf(*); printf(n); 输出结果为:*可以看出,上面程序段仍然输出15个“*”,不过因为加入了换行操作,输出的是3行5列的“*”方阵。小测验:如果要输出以下效果,循环该如何设计?*【程序代码】#include main()int i,j;for(i=1;i=5;i+)for(j=1;j=i;j+)printf(*);printf(n);【例5-14】输出100200之间(包括100和200)的所有素数。【程序代码】#include main()int m,i,flag,n=0;for(m=100;m=200;m+)flag=0;for(i=2;im;i+)if(m%i=0)flag

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论