C语言循环结构_第1页
C语言循环结构_第2页
C语言循环结构_第3页
C语言循环结构_第4页
C语言循环结构_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

第五章循

1本章主要内容

5.1工作场景导入

5.2while型循环

5.3do-while型循环

5.4for型循环

5.5其他控制语句

5.6回到工作场景

25.1工作场景导入3【工作场景】北京某毕业生需要贷款100万买房,贷款的银行年利率为7%,由于此同学工资水平有限,欲尽量拖延还款的结束日期,但其认为还款总金额不可超过150万。此外,银行规定,还款期限不得超过30年。试为此人编程求出满足他的要求的最大还款期限,得到如下图所示的输出结果(精确到年)。4【引导问题】(1)

如何通过循环控制结构来解决此问题?(2) 运用何种循环结构来具体描述此场景?(3) 循环结构(while、do-while或者for短语)具体如何使用?55.2while型循环

6例1:模拟一个超市收银系统,计算多件商品的总价格,当输入0时结束价格输入。75.2.1while结构的形式

语句格式:while(条件表达式){语句1;语句2;...语句n;}

语句功能:当条件表达式的值为真时,重复执行循环体中的各语句。其中表达式是循环条件,语句为循环体。先判断,后执行,若条件不成立,循环体有可能一次也不执行其循环结构的基本流程可用右图来表示。85.2.2while循环的语义

先计算表达式的值并判断,若表达式值为“真”(即非零值),则执行循环体中的语句;然后再计算再判断,如此重复,直到表达式值为“假”(即0值)时,则跳出循环。

例编程实现求1+2+3+4+5+…+100的结果。程序代码如下:#include"stdio.h"main(){inti,sum;sum=0;i=1;

//赋初值while(i<=100){sum+=i;

//sum=sum+i,循环一次执行一次加法i++;

//改变被加数的值} printf("sum=%d\n",sum);//输出结果}9运行结果如下图所示。10练习从键盘接收多个学生的C语言程序设计这门课程的成绩,输入-1则结束输入。统计其中及格和不及格的学生人数,并计算平均分。115.3do-while型循环12语句格式:do{语句1;语句2;...语句n;}while(表达式);

--此处有分号语句功能:当条件表达式的值为真时,重复执行循环体中的各语句。若条件不成立,就跳出循环循环体至少执行一次while(表达式)后面的“;”不能少其循环结构的基本流程可用右图来表示。5.3.1结构形式135.3.2do-while循环的含义

do-while型循环是先执行后判断的循环,首先无条件地执行一次循环体中的语句,然后再判断表达式的值,若表达式值为“真”(即非零值),则执行循环体中的语句;然后再计算再判断,如此重复,直到表达式值为“假”(即0值)时,则跳出循环。

14while语句和do…while语句比较while语句是先判断后执行,只要不满足条件,循环体语句根本不会执行do…while语句是先执行后判断,不管条件是否满足,循环体语句总会执行一次#include<stdio.h>intmain(){inti=1,sum=0;while(i<=10){sum+=i; i++;}printf("%d",sum);return0;}#include<stdio.h>intmain(){inti=1,sum=0;do{sum+=i;i++;}while(i<=10);printf("%d",sum);return0;}15练习用do…while语句重新编写超市收银问题。将输入的正整数按逆序输出,例如,输入135,则输出531。165.4for型循环175.4.1for循环的表现形式语句格式:for(表达式1;表达式2;表达式3){语句1;语句2;...语句n;}表达式1:循环初始表达式,用于进入循环体前为循环变量赋初值。由算术、赋值、逻辑和逗号表达式构成。表达式2:循环控制表达式,用于控制循环体语句的执行次数。由关系表达式或逻辑表达式构成。表达式3:修改循环变量表达式,即每循环一次使得表达式1的值就要变化一次。由算术、赋值、逻辑或逗号表达式构成。语句功能:当表达式2的值为真时,执行循环体中的各语句。18上述的for循环格式只是一般的情况。在缺少表达式1或表达式2或表达式3时,我们来看看此时特殊的for循环将如何执行。(1) for(;表达式2;表达式3)该种格式常用于无需给变量赋初值的情况。(2) for(表达式1;;表达式3)即失去了对循环变量的控制,为此将导致无限循环。(3) for(表达式1;表达式2;)

即失去了修改循环变量值的操作,为此,在体内必须设有替代表达式3的功能。(4) for(;表达式2;)该种格式完全等价于while语句,即进入循环体前必须有赋初值语句,而且在体内要有修改循环变量的值的语句。(5) for(;;)完全等价于while(1)循环,是一个死循环。在设计程序时也要借助于本章后面一节要讲的break语句来结束死循环。5.4.2for语句的变型

19练习例:使用for循环实现1到100之和。例:求100-999之间的所有水仙花数。水仙花数:如果一个数的各个数位上的数字之立方和等于该数本身,则次数为水仙花数。如153=13+53+33#include<stdio.h>intmain(){inti,m,n,k;for(i=100;i<1000;i++){ m=i/100; k=i%10; n=(i-100*m)/10; if(i==m*m*m+n*n*n+k*k*k) printf("%d",i);}return0;}205.5其他控制语句

21break语句主要是用于switch结构和循环结构中,强制退出循环或跳出switch选择语句。其执行形式为:break;break语句在循环中,其功能是终止当前的循环,转向后续语句执行。下面给出各种循环语句中break语句的使用例子比较:while() dofor(;;){ { {... ......break; break; break;... ......} }while(); }5.5.1break语句22练习例:输出半径为1到10的圆的面积,若面积超过100,则结束输出。#include<stdio.h>#definePI3.1415926intmain(){intr;doublearea;for(r=1;r<=10;r++){ area=PI*r*r; if(area>100.0) break; printf("%.2lf",area);}return0;}其一般形式为:continue;该语句是专用于循环结构中改变某一次循环流程的语句。其作用是使程序流程提前结束本次循环,从而开始下一次循环。下面给出各种循环语句中continue语句的使用例子比较:while()dofor(;;){{{...... ...continue; continue;continue;...... ...}}while();}5.5.2continue语句

24练习完成下列程序:输出100~200之间不能被3整除的数#include<stdio.h>intmain(){intk;for(k=100;k<=200;k++){ if(k%3==0) continue; printf("%d",k);}return0;}#include<stdio.h>intmain(){intnum;for(num=100;num<=450;num++){if(num>150&&num<400)continue;if(num%9==0)printf("%6d",num);}

return0;}例:说出下列程序的功能:输出100~150之间和400~450之间能被9整除的数5.5.3循环语句的嵌套循环语句的嵌套:一个循环语句的循环体中又包含循环语句while(){……while(){……}…...}do{……do{……}while();…...}while();while(){……do{……}while();…….}for(;;){……do{……}while();……while(){……}…...}三种循环可互相嵌套,层数不限。外层循环可包含两个以上内循环,但不能相互交叉。嵌套循环的执行流程:外层循环执行一次,内层循环要执行完。嵌套循环的跳转:只能跳转出本层循环。禁止从外层跳入内层、禁止跳入同层的另一循环和向上跳转。练习例1:编写C语言程序,输出乘法九九表。练习例2:编写C程序,实现100元人民币换成1元、2元、5元的所有兑换方案。设i、j、k分别代表1元、2元和5元的数量则:i+2j+5k=100#include<stdio.h>intmain(){inti,j,k;for(i=0;i<=100;i++)for(j=0;j<=50;j++) for(k=0;k<=20;k++) if(i+2*j+5*k==100) printf("%d%d%d\n",i,j,k);return0;}5.6回到工作场景29通过对以上各小节内容的学习,我们了解了while语句、do-while语句以及for语句实现循环的过程之后,现在是时候回到我们5.1节的工作场景任务中了。运用循环结构控制的结束条件应该是本金和利息之和超过150万;本金和利息之和通过变量sum得到,即sum+=sum*0.07,循环最大次数可由银行还款最大期限决定,即通过i来控制最大循环次数。此处先用for循环实现该场景。30程序代码如下:#include<stdio.h>main(){inti;floatsum=1000000;//初始化为原贷款金额for(i=1;i<=30;i++){sum+=sum*0.07;//累加得到最终还款额if(sum>1500000)//程序出口,本息之和大于150万时,不满足题意 break;

}printf("最大年限为:%d\n",i-1);//注意为i-1,而非i}程序运行结果如右图所示。3132练习例:从键盘输入一个正整数,判断该数是否为素数。#include<stdio.h>#include<math.h>intmain(){inti,m,n;scanf("%d",&n);if(n<0){ printf("输入数据错误!\n"); exit(0);}m=sqrt(n);for(i=2;i<=m;i++)if(n%i==0)break;if(i>m) printf("%d是素数\n",

温馨提示

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

评论

0/150

提交评论