C语言程序设计:第3章 循环结构与应用

上传人:夏** 文档编号:569556687 上传时间:2024-07-30 格式:PPT 页数:48 大小:1.29MB
返回 下载 相关 举报
C语言程序设计:第3章 循环结构与应用_第1页
第1页 / 共48页
C语言程序设计:第3章 循环结构与应用_第2页
第2页 / 共48页
C语言程序设计:第3章 循环结构与应用_第3页
第3页 / 共48页
C语言程序设计:第3章 循环结构与应用_第4页
第4页 / 共48页
C语言程序设计:第3章 循环结构与应用_第5页
第5页 / 共48页
点击查看更多>>
资源描述

《C语言程序设计:第3章 循环结构与应用》由会员分享,可在线阅读,更多相关《C语言程序设计:第3章 循环结构与应用(48页珍藏版)》请在金锄头文库上搜索。

1、第三章第三章 循环结构与应用循环结构与应用 循环结构是程序中一种很重要的结构。它会根据条件反复执行某程序段,当然不能无限的执行下去,在给定条件不成立时,循环就会停止。给定的条件称为循环条件,反复执行的程序段称为循环体。语言提供了多种循环语句,可以组成各种语言提供了多种循环语句,可以组成各种不同形式的循环结构:不同形式的循环结构:(1)for循环语句;循环语句;(2)while循环语句;循环语句;(3)do-while循环语句;循环语句;3.1循环的概述循环的概述for一般形式为:一般形式为:for(设置初始值;循环条件判断;设置循环设置初始值;循环条件判断;设置循环增减量增减量) 语句语句1;

2、 语句语句2; 语句语句n;3.2for循环循环for语句的执行流程:图3-1for语句执行流程图 例3-1 使用for循环求整数1加到100的值。图3-2高斯级数运算的流程图#includevoidmain(void)intnSum;/*用于保存计算和*/inti;/*循环控制变量,也是参与运算的操作数*/nSum=0;for(i=1;i101;i+)nSum+=i;printf(1+2+3+99+100=%dn,nSum);程序清单3-1progression.c新知识点双目复合赋值运算符序号序号复合运算符复合运算符复合运算符的含义复合运算符的含义1 1+=+=相加并赋值相加并赋值2 2-

3、=-=相减并赋值相减并赋值3 3*=*=相乘并赋值相乘并赋值4 4/=/=相除并赋值相除并赋值5 5%=%=求模并赋值求模并赋值6 6&=&=按位按位ANDAND并赋值并赋值7 7|=|=按位按位OROR并赋值并赋值8 8=按位按位XORXOR并赋值并赋值9 9=右移并赋值右移并赋值复合赋值表达式的一般形式为: 表达式表达式1 Op= 表达式表达式2Op表示参与构成复合赋值运算符的双目运算符,它和下面的赋值表达式等价: 表达式表达式1 = (表达式(表达式1) Op (表达式(表达式2) 例如:x+=y-3等价于x=x+(y-3),而不是x=x+y-3。注意:+i和i+等价于i=i+1,但是,

4、这两个表达式在参与其他运算的时候是有区别的。+i表示i自增1后再参与其它运算,而i+表示i参与运算后,i的值再自增1。-i表示i自减1后再参与其它运算,而i-是i参与运算后,i的值再自减1。 例如: int x=0, i=1; x=i+; printf(“x=%d,i=%d”,x,i); 输出的结果为x=1,i=2新知识点 例3-2 使用逗号运算符在for循环中初始化变量。#includevoidmain(void)intnSum;/*用于保存计算和*/inti;/*循环控制变量,也是参与运算的操作数*/*在循环开始时,初始化变量nSum*/for(i=1,nSum=0;i101;i+)nSu

5、m+=i;/*求和*/printf(1+2+3+99+100=%dn,nSum);程序清单3-2progression-1.c新知识点 例3-3 很多web网站限制登陆次数,如果输入的密码在指定次数内错误,就拒绝登陆。实现一个程序,模拟验证密码的过程,判断用户输入密码的次数,若3次输入密码错误,则结束输入。图3-3控制密码输入次数程序流程图#includestdio.hvoidmain(void)intnPwd=0;/*用于保存输入的密码*/inti;/*循环控制变量*/intnFlag=1;/*密码匹配成功的标志*/*默认设定密码为87569,可以根据需要进行设定*/for(i=0;(nFl

6、ag=(87569!=nPwd)&i3);+i)printf(pleaseinputthepassword:);scanf(%d,&nPwd);if(nFlag=0)printf(thepasswordisright!n);elseprintf(overthetimesandthepasswordyouinputiserror!n);程序清单3-3checklogon.cwhile(条件判断)(条件判断) 语句语句1; 语句语句2; 语句语句n;3.3while循环循环while一般形式为:一般形式为:图3-8while循环执行过程例3-5用while循环实现从1加到100的计算。#inclu

7、devoidmain(void)intnSum;/*用于保存计算和*/inti;/*循环控制变量,也是参与运算的操作数*/nSum=0;i=1;/*初始化循环控制变量*/while(i101)nSum+=i;i+;/*改变循环控制变量的值*/printf(1+2+3+99+100=%dn,nSum);程序清单3-6progression-2.cdo 语句语句1; 语句语句2; 语句语句n; while(条件判断);(条件判断);3.4dowhile循环循环do while一般形式为:一般形式为:图3-11dowhile循环执行过程 例3-7 使用do while循环实现1到100的计算。图3-

8、12dowhile循环实现高斯级数计算的流程图#includevoidmain(void)intnSum;/*用于保存计算和*/inti;/*循环控制变量,也是参与运算的操作数*/nSum=0;i=1;/*初始化循环控制变量*/donSum+=i;i+;/*改变循环控制变量的值*/while(i101);printf(1+2+3+99+100=%dn,nSum);程序清单3-7progression-3.c3.5 循循环语句的句的选择 当确定要使用循环时,该使用哪个呢?1)首先确定需要的循环是先进行条件判断,后执行循环;还是先执行循环,然后判断条件。2)在for循环和while循环的选择上,如

9、果涉及到初始化一些变量或者更新一些操作,那么使用for循环比较合适,否则使用while循环。v 三种循环特性列表三种循环特性列表 循环特性循环特性循环种类循环种类forfor循环循环whilewhile循环循环do whiledo while循环循环前置条件检查前置条件检查是是是是否否后置条件检查后置条件检查否否否否是是循环体中是否需要循环体中是否需要自己更改循环控制自己更改循环控制变量的值变量的值否否是是是是循环重复的次数循环重复的次数一般已知一般已知未知未知未知未知最少执行循环体次最少执行循环体次数数0 0次次0 0次次1 1次次何时重复执行循环何时重复执行循环循环条件循环条件成立成立循环

10、条件循环条件成立成立循环条件成立循环条件成立 一个循一个循环体内又包含另一个完整的循体内又包含另一个完整的循环结构,称构,称为循循环的嵌套。内嵌的循的嵌套。内嵌的循环中中还可以嵌套循可以嵌套循环,这就是多就是多层循循环。 3.6循环的嵌套循环的嵌套 (1) for(;)(;) (2) for(;)(;) for(;)(;) while()() (3) while()() (4) do do while()() while();(); while();(); (5) while()() (6) do do for(;)(;) while();(); while();();首先看九九乘法表的内容,

11、如下所示:首先看九九乘法表的内容,如下所示:1*1=12*1=22*2=43*1=33*2=63*3=98*1=88*2=168*3=248*4=328*5=408*6=488*7=568*8=649*1=99*2=189*3=279*4=369*5=459*6=549*7=639*8=729*9=81 例3-8 在屏幕上输出九九乘法表图3-14九九乘法表的程序流程图#includevoidmain(void)intnRow;/*行数的循环控制变量*/intnCol;/*列数循环控制变量*/for(nRow=1;nRow10;nRow+)/*外层循环控制行数*/for(nCol=1;nCol=

12、nRow;nCol+)/*内层循环控制列数*/printf(%d*%d=%d,nRow,nCol,nRow*nCol);printf(n);/*输出一行后换行*/程序清单3-8multiplication-table.c beak语句语句 break语句的一般形式为:语句的一般形式为:break; 例3-11 循环接收有效的学生成绩数据,如果数据大于100或小于0,则结束过程,输出总成绩和平均分。图3-19例3-11程序实现的流程图#includevoidmain(void)floatfScore;/*用于保存输入的成绩*/floatfMin=0.0f;floatfMax=100.0f;flo

13、atfTotal=0.0f;/*保存总成绩*/intnCount=0;/*对输入的成绩个数进行计数*/while(scanf(%f,&fScore)=1)/*使用scanf()函数的返回值作为循环执行的条件*/if(fScorefMax|fScore0)printf(Totalscoreis%0.1fn,fTotal);printf(Averageof%dscoreis%0.1fn,nCount,fTotal/nCount);elseprintf(NovalidscroewasInput!);程序清单3-11break.c注意:注意:(1)break(1)break语句语句只只用于用于循环语句

14、循环语句和和switchswitch语句语句中。中。(2)(2)在在嵌嵌套套循循环环中中,breakbreak语语句句只只能能终终止止它它所所在在的的循环的执行。循环的执行。break语句的作用就是结束循环的执行,强制退语句的作用就是结束循环的执行,强制退出循环,程序继续执行循环后的程序语句。出循环,程序继续执行循环后的程序语句。 continue语句语句 continue的作用与的作用与break语句相似,也有结语句相似,也有结束循环的作用,但是束循环的作用,但是continue语句是语句是结束本次结束本次循环循环,即跳过循环体中下面尚未执行的语句,即跳过循环体中下面尚未执行的语句,接着进行

15、下一次是否执行循环的判定。接着进行下一次是否执行循环的判定。continue语句的一般形式为:语句的一般形式为:continue;#includevoidmain(void)floatfScore;/*用于保存输入的成绩用于保存输入的成绩*/floatfMin=0.0f,fMax=100.0f;floatfTotal=0.0f;/*保存总成绩保存总成绩*/intnCount=0;/*对输入的成绩个数进行计数对输入的成绩个数进行计数*/while(scanf(%f,&fScore)=1)/*使用使用scanf()函数的返回值作为循环执行的条件函数的返回值作为循环执行的条件*/if(fScoref

16、Max|fScore0)printf(Totalscoreis%0.1fn,fTotal);printf(Averageof%dscoreis%0.1fn,nCount,fTotal/nCount);elseprintf(NovalidscroewasInput!);程序清单3-12continue.c将程序清单将程序清单3-113-11进行一下简单的修改,将进行一下简单的修改,将breakbreak语句替换成语句替换成continuecontinue语句。请读者分语句。请读者分析程序执行的结果,体会这两种跳出循环体语句的作用和对程序流程的影响。析程序执行的结果,体会这两种跳出循环体语句的作用

17、和对程序流程的影响。 注意:注意:(1)(1)breakbreak语句则是结束整个循环过程,语句则是结束整个循环过程,不再判断执行循环的条件是否成立。不再判断执行循环的条件是否成立。(2)(2)continuecontinue语句只结束本次循环,而不语句只结束本次循环,而不是终止整个循环的执行。是终止整个循环的执行。2005年4月 (选择题 )(41)有以下程序main() int a=1,b; for(b=1;b=8)break; if(a%2=1)a+=5;continue; a-=3; printf(%dn,b); 程序运行后的输出结果是_。A3 B4 C5 D6答案:答案:答案:答案:

18、B B2006年4月 (选择题)(32)有以下程序 main() int i,j,x=0; for(i=0;i2;i+) x+; for(j=0;j=3;j+) if(j2)continue;x+; x+; printf(x=dn,x); 程序执行后的输出结果是( ) A)x=4 B)x=8 C)x=6 D)x=12 答案:答案:答案:答案:B B2004年4月 (选择题)(25) 有以下程序 main( ) int i,n=0; for(i=2;i5;i+) do if(i%3) continue; n+; while(!i); n+; printf(“n=%dn”,n); 答案:答案:答案

19、:答案:D D程序执行后的输出结果是An=5Bn=2Cn=3Dn=4Break和 continue假假真真break表达式1表达式2循环语句的下一条语句循环语句的下一条语句假假真真contiue表达式1表达式2continue3.7 程序程序举例例例:下面对计算器做如下功能的扩充:例:下面对计算器做如下功能的扩充: (1) (1) 增加菜单增加菜单循环执行的功能;循环执行的功能; (2) (2) 实现三角函数正弦函数的功能实现三角函数正弦函数的功能(sin(sin函数函数) ); (3) (3) 实现三角函数余弦函数的功能实现三角函数余弦函数的功能(cos(cos函数函数) )。3.7.1计算

20、器计算器(1)菜单反复执行功能既然是要菜单反复执行,它必然是个重复性的工作,自然可以使用这章讲解的循环语句来实现。在此采用while循环语句实现该功能。图图3-22 3-22 重复使用菜单功能的流程图重复使用菜单功能的流程图#include#includevoidmain()intnFun=1;while(nFun!=9)system(cls);/clrscr();printf(-n);/*构造功能菜单*/printf(加法运算加法运算-1n);printf(减法运算减法运算-2n);printf(除法运算除法运算-3n);printf(乘法运算乘法运算-4n);printf(退出退出-9n)

21、;printf(-n);printf(请输入功能选择:请输入功能选择:);/*在屏幕上显示提示信息*/scanf(%d,&nFun);switch(nFun)case1:/*加法运算过程*/break;case2:/*减法运算过程*/break;/*此处省略其他计算过程的case选项*/case9:break;default:printf(输入的选项编码错误输入的选项编码错误!按任意键返回菜单按任意键返回菜单.n);getch();程序清单3-13AppCalc.c(2)三角函数sin函数和cos函数的实现在高等数学中实现sin函数和cos函数的方法不止一种。在这里,采用的是泰勒(Taylor

22、)公式进行实现。首先分别看下它们的泰勒展开式的形式:图3-23sin函数的实现流程图#include#include#includevoidmain(void)intnFun=1;doubledSin=0.0,dCos=0.0,dTemp=1.0,dArc=0.0;/*变量声明初始化*/intk=0;doublepi=3.1415926,dMin=0.000001,dDegree=0.0;while(nFun!=9)system(cls);/clrscr();printf(-n);/*构造功能菜单*/printf(加法运算加法运算-1n);printf(减法运算减法运算-2n);printf(

23、除法运算除法运算-3n);printf(乘法运算乘法运算-4n);printf(sinx运算运算-5n);printf(cosx运算运算-6n);printf(退出退出-9n);printf(-n);printf(请输入功能选择:请输入功能选择:);/*在屏幕上显示提示信息*/scanf(%d,&nFun);switch(nFun)这里只给出sin函数和cos函数实现的程序片段,如程序清单3-15AppCalc.c所示。case1/*省略加法运算过程*/break;case2:/*省略减法运算过程*/break;case3:/*省略乘法运算过程*/break;case4:/*省略除法运算过程*

24、/break;case5:/*sinx运算过程*/dSin=0.0;dTemp=1.0;dArc=0.0;k=0;dDegree=0;printf(请输入弧度:请输入弧度:);scanf(%lf,&dDegree);dTemp=dDegree*pi/180;/*进行角度度量转换*/dArc=dDegree*pi/180;while(fabs(dTemp)dMin)/*泰勒展开项是否达到精度*/dSin+=dTemp;/*sin函数的泰勒展开式*/k+=2;/*利用前次运算结果计算泰勒展开项的值*/dTemp=(-1)*dTemp*dArc*dArc/(k+1)*(k);printf(sin(%

25、f)=%lfn,dDegree,dSin);printf(按任意键返回菜单按任意键返回菜单.n);getch();break;case6:/*cosx运算过程*/dCos=0.0;/*变量初始化*/dTemp=1.0;/*变量初始化*/dArc=0.0;/*变量初始化*/k=0;dDegree=0;printf(请输入弧度:请输入弧度:);scanf(%lf,&dDegree);/*输入计算的弧度数据*/dArc=dDegree*pi/180;/*进行角度度量转换*/while(fabs(dTemp)dMin)/*泰勒展开项是否达到精度*/dCos+=dTemp;/*cos函数的泰勒展开式*/

26、k+=2;/*利用前次运算结果计算泰勒展开项的值*/dTemp=(-1)*dTemp*dArc*dArc/(k-1)*(k);printf(cos(%f)=%lfn,dDegree,dCos);printf(按任意键返回菜单按任意键返回菜单.n);getch();break;case9:break;default:printf(输入的选项编码错误输入的选项编码错误!按任意键返回菜单按任意键返回菜单.n);getch();在在第第1 1章章,学学生生成成绩绩档档案案管管理理系系统统已已经经具具备备了了数数据据的的输输入入和和成成绩绩分分类类分分析析的的功功能能。不不过过,它它只只能能进进行行单单

27、独独的的一一次次数数据据处处理理。学学习习过过循循环环结结构构以以后后,结结合合本本章章的的知知识识点点,增增加加系系统统重重复复处处理理数数据据的的能能力力,既既检检验验对对知知识识的的实实际际应应用用能能力力,又又把把系系统统的的功功能能进进一一步步充充实实。下下面面对对学学生生成成绩绩档档案案管管理理系系统统做做如如下下功功能能的的扩充:扩充: (1) (1) 实现可控的数据处理;实现可控的数据处理; (2) (2) 对对 多多 次次 输输 入入 的的 三三 门门 成成 绩绩 (C(C语语 言言 、 英英 语语 和和 高高 数数 ) ) 进行分类求和。进行分类求和。3.7.2学生成绩档案

28、管理系统图3-25循环统计学生总成绩的流程图#includevoidmain(void)floatfMin=0.0f,fMax=100.0f;/*保存总成绩*/floatfTotalc=0.0f,fTotale=0.0f,fTotalm=0.0f;floatfClanguege=0.0,fEnglish=0.0,fMath=0.0;intnCount=0;/*对输入的成绩个数进行计数*/doprintf(-n);fClanguege=0.0;fEnglish=0.0;fMath=0.0;printf(请输入请输入C语言、英语和高数成绩,用逗号分隔:语言、英语和高数成绩,用逗号分隔:);scan

29、f(%f,%f,%f,&fClanguege,&fEnglish,&fMath);if(fClanguegefMax|fClanguegefMax|fEnglishfMax|fMath0)printf(C语言的总成绩为语言的总成绩为%0.1fn,fTotalc);printf(英语的总成绩为英语的总成绩为%0.1fn,fTotale);printf(高数的总成绩为高数的总成绩为%0.1fn,fTotalm);elseprintf(无效的成绩数据输入无效的成绩数据输入n!);(1) 三种循环语句的基本语法 : for语句、while语句、do while语句(2) 复合赋值运算符(3) 逻辑运算的“短路”现象 (1) 如何跳离循环结构: break语句、continue语句 (2) 循环语句的选择知识层面方法层面3.8 本章小结

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号