第四章程序控制结构精选PPT.ppt

上传人:石*** 文档编号:49724793 上传时间:2022-10-10 格式:PPT 页数:88 大小:4.41MB
返回 下载 相关 举报
第四章程序控制结构精选PPT.ppt_第1页
第1页 / 共88页
第四章程序控制结构精选PPT.ppt_第2页
第2页 / 共88页
点击查看更多>>
资源描述

《第四章程序控制结构精选PPT.ppt》由会员分享,可在线阅读,更多相关《第四章程序控制结构精选PPT.ppt(88页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第四章程序控制结构第1页,此课件共88页哦第2页,此课件共88页哦一、表达式语句n表达式语句是C语言最常见的语句,它由一个表达式加上一个分号“;”构成,语句格式如下:l表达式表达式;l任意一个表达式加上一个分号“;”均可构成表达式语句。l其中,赋值语句和函数调用语句是使用最多的表达式语句。第四章第一节第3页,此课件共88页哦一、表达式语句n1 1.赋值语句赋值语句l赋值语句是由赋值表达式加上分号“;”构成的 表达式语句,其语法格式如下:u变量变量 赋值运算符赋值运算符 表达式表达式;l赋值语句的功能与赋值表达式相同,即具有计算和赋值双重功能,在顺序结构程序中担负着主要的 运算任务。第四章第一节

2、第4页,此课件共88页哦表达式语句的例子 x*=8;/*赋值表达式语句*/a=5,b=7,c=16;/*逗号表达式语句*/xy?x:y;/*条件表达式语句*/-a&+b&+c;/*逻辑表达式语句*/i+;/*算术表达式语句*/第5页,此课件共88页哦一、表达式语句l几点说明:u(1)赋值运算符除“=”外,还包含复合赋值运算符。例如:a-=a*a;u(2)赋值运算符右侧的表达式可以又是一个赋值表达式。例如:a=b=5*3;该语句等效于:a=(b=5*3);,进一步等效于:b=5*3;a=b;。u(3)赋值语句的功能与赋值表达式相同,但性质不同。赋值表达式是一种表达式,它可以出现在任何允许表达式出

3、现的地方,而赋值语句不能出现在表达式赋值语句不能出现在表达式中。例如:if(x=y+5)z=x;/*合法!*/if(x=y+5;)0)z=x;/*非法!*/第四章第一节第6页,此课件共88页哦一、表达式语句n2 2.函数调用语句函数调用语句l函数调用语句是由函数调用加上分号“;”构成的 表达式语句,其一般格式如下:u函数调用函数调用;l通过执行函数调用语句,实现所调用函数特定的 功能。例如:uprintf(Hello!);u执行该语句,调用printf函数输出字符串“Hello!”(不 包括双引号)。第四章第一节第7页,此课件共88页哦二、空语句n仅由一个分号构成的语句为空语句,即:n空语句只

4、是在逻辑上起到一个语句的作用,在编译时不产生任何指令,在执行时不产生任何操作。它常用于:l(1)构成标号语句,标识流程的转向点转向点;l(2)构成循环语句中的空循环体空循环体。第四章第一节第8页,此课件共88页哦n例如 while(getchar()!=n);n本语句的功能是,只要从键盘输入的字符不是回车则重新输入。这里的循环体为空语句.第9页,此课件共88页哦三、复合语句n用一对花括号 将多个语句括起来构成一个整体,该整体称为“复合语句”。即:语句1语句2 语句n第四章第一节第10页,此课件共88页哦三、复合语句n几点说明:l(1)复合语句在语法上是一个语句,而不是多个语句,故凡是单一语句可

5、以出现的地方均可以使用复合语句。l(2)一般将复合语句用在语法上是一个语句而相应操作需多条语句完成的场合。例如作为选择语句某分支内嵌的语句,或作为循环语句的循环体。l(3)复 合 语 句 内 的 各 条 语 句 都 必 须 以 分 号“;”结尾,而右花括号“”后面则不能有分号。l(4)复合语句又称为分程序,它可以有属于自己的数据说明部分。第四章第一节第11页,此课件共88页哦四、控制语句n控制语句用于控制程序的流程。C语言有9种 控制语句:l条件选择语句:if语句;l开关分支语句:switch语句;l当循环语句:while语句;l直到循环语句:dowhile语句;l计数循环语句:for语句;l

6、中止本次循环语句:continue语句;l中止整个循环语句:break语句;l无条件转移语句:goto语句;l函数返回语句:return语句。第四章第一节第12页,此课件共88页哦第13页,此课件共88页哦一、顺序结构 从程序流程的角度来看,程序可以分为三种基本 结构:顺序结构 选择结构 循环结构 这三种基本结构可以组成所有的各种复杂程序。顺序结构是主要由说明语句、表达式语句、函数 调用语句、空语句和复合语句等组成的一种顺序顺序 执行执行的程序结构。第14页,此课件共88页哦一、顺序结构n顺序结构是最简单的程序结构。按照解决问题的顺序编写相应的语句,程序运行时自上而下依次执行语句,这种程序结构

7、称为顺序结构。顺序结构的流程图如图4-1所示。第四章第二节图图4-1 4-1 顺序结构流程图和顺序结构流程图和N-SN-S图图第15页,此课件共88页哦一、顺序结构n一个典型的顺序结构程序由以下三个部分组成:l(1)使操作对象获得原始数据;l(2)进行运算;l(3)输出运算结果。n对应的实现语句通常是输入函数调用语句、赋值语句和输出函数调用语句。n下面给出几个顺序结构程序设计的例子。第四章第二节第16页,此课件共88页哦l例4-4求方程ax2+bx+c=0的根。a、b、c由键盘输入,a0且b2-4ac0。l假设所输入的系数a、b、c已保证a0且b2-4ac0,则一元二次 方 程 两 个 实 根

8、 可 直 接 由 求 根 公 式 求 出,求根公式如下:顺序结构举例第四章第二节第17页,此课件共88页哦顺序结构举例u由于求根公式中所用到的求平方根需调用数学函数库中的sqrt函数,必须在程序的开头加一条包含数学函数头文件math.h的命令:#include。值得说明的是,以后凡在程序中要用到C语言库函数,都应当用#include命令将相应头文件包含到程序中。第四章第二节第18页,此课件共88页哦顺序结构举例u程序代码如下:程序代码如下:#include#include void main()float a,b,c,d,x1,x2;printf(Input a,b,c:);scanf(%f,

9、%f,%f,&a,&b,&c);/*输输入方程的三个系数的入方程的三个系数的值值*/d=b*b-4*a*c;/*求判求判别别式的式的值赋给值赋给d*/x1=(-b+sqrt(d)/(2*a);x2=(-b-sqrt(d)/(2*a);printf(x1=%.4fnx2=%.4fn,x1,x2);运行情况如下:运行情况如下:Input a,b,c:1,3,2 x1=-1.0000 x2=-2.0000第19页,此课件共88页哦l例4-3 取一个16位的二进制数a的7、6、5、4四个位,如图4-2中加阴影的部分。u这是一个涉及位运算的程序。获得运算结果的步骤如下:(1)使a右移4位;(2)设置一个

10、低4位全为1,其余全为0的数,可用(0第二节第20页,此课件共88页哦顺序结构举例u程序代码如下:程序代码如下:#include void main()unsigned a,b,c,d;scanf(%x,&a);/*以十六以十六进进制形式制形式输输入整数入整数a*/b=a4;c=(0第二节第21页,此课件共88页哦第22页,此课件共88页哦一、if语句nif语句用于实现选择结构。它判断给定的条件是否满足,并根据判断结果决定执行某个分支程序段。语言的if语句有三种基本格式。l1 1.单分支单分支if格式:if(表达式表达式)语句语句u该语句只有一个分支(称为“if分支”),其内嵌的语句仅当括号内

11、表达式的值为“真”(非0)时执行,如果表达式的值为“假”(0),则不执行if分支内嵌的语句。第四章第三节第23页,此课件共88页哦一、if语句u两点说明:(1)括号内的表达式语法上允许是任意合法的表达式,只要表达式的值为0,就代表“假”,表示条件不成立;只要表达式的值非0,都代表“真”,表示条件成立。(2)if分支内嵌的语句可以是单个语句,也可以是一个复合语句。第四章第三节第24页,此课件共88页哦一、if语句算法一程序代码如下:#include void main()int a,b,t;scanf(%d,%d,&a,&b);if(ab)t=a;a=b;b=t;/*a、b交交换值换值*/pri

12、ntf(%d,%dn,a,b);运行情况如下:运行情况如下:3,5 3,55,3 3,5第四章第三节例例4.6从从键键盘盘输输入入两两个个整整数数,按按升升序序输输出这两个数。出这两个数。u对该问题可以设计三种不同的算法。算算法法一一如图4-4所示,其中第2步,仅当ab时需要将a、b两数交换以使ab,若是,直接先b后a输出 两数。用两个单分支if语句实现。算法二程序代码如下算法二程序代码如下:#include void main()int a,b,t;scanf(%d,%d,&a,&b);if(ab)printf(%d,%dn,b,a);第四章第三节图图4-6 4-6 例例4.64.6算法二算

13、法二第26页,此课件共88页哦一、if语句l2 2.双分支双分支ifif-elseelse格式:if(if(表达式表达式)语句语句1 1 elseelse 语句语句2 2u该语句有两个分支:if分支和else分支。如果括号内 表达式的值为“真”(非0),则执行if分支内嵌的语句1,否则执行else分支内嵌的语句2。第四章第三节第27页,此课件共88页哦一、if语句算法三程序代码如下:算法三程序代码如下:#include void main()int a,b,t;scanf(%d,%d,&a,&b);if(a第三节第28页,此课件共88页哦一、if语句l3 3.多分支多分支if-else-if

14、当有多个分支供选择时,可采用多分支if-else if语句,其一般格式如下:if(表达式表达式1)语句语句1else if(表达式表达式2)语句语句2else if(表达式表达式3)语句语句3 else if(表达式表达式n)语语句句nelse 语语句句n+1第四章第三节u其功能是:依次判断各分支中括号内表达式的值,一旦某分支的表达式值为“真”(非0),则执行该分支内嵌的语句;如果所有的表达式均为“假”(0),则执行 else 分支内嵌的语句n+1。第29页,此课件共88页哦一、if语句例4.7 输入百分制成绩,要求输出相应的五级制成绩。A 90-100 A 90-100 B 80-89 B

15、80-89 C 70-79 C 70-79 D 60-69 D 60-69 E 0-59 E 0-59u算法分析:用一个多分支if-else-if语句判断所输入的百分制成绩属于哪个分数段,进而输出相应的五级制成绩。第四章第三节第30页,此课件共88页哦一、if语句程序代码如下:#include void main()int score;printf(nPlease input the score(0100):);scanf(%d,&score);if(score=90)printf(An);else if(score=80)printf(Bn);else if(score=70)printf(

16、Cn);else if(score=60)printf(Dn);else printf(En);请注意各分支条件的含义和出现顺序。请注意各分支条件的含义和出现顺序。第四章第三节第31页,此课件共88页哦4.4.在使用在使用ifif语句中还应注意以下问题语句中还应注意以下问题(1)在三种形式的if语句中,在if关键字之后均为表达式。该表达式通常是逻辑表达式或关系表达式,但也可以是其它表达式,如赋值表达式等,甚至也可以是一个变量。例如:if(a=5)语句;if(b)语句;都是允许的。只要表达式的值为非0,即为“真”。n如在if(a=5);中表达式的值永远为非0,所以其后的语句总是要执行的,当然这种

17、情况在程序中不一定会出现,但在语法上是合法的。第32页,此课件共88页哦又如,有程序段:if(a=b)printf(%d,a);else printf(a=0);n不是比较a和b是否相等,而是将b赋值给a,然后测a。n本语句的语义是,把b值赋予a,如为非0则输出该值,否则输出“a=0”字符串。这种用法在程序中是经常出现的。第33页,此课件共88页哦(2)在if语句中,条件判断表达式必须用括号括起来,在语句之后必须加分号。(3)在if语句中,所有的语句应为单个语句,如果要执行一组(多个)语句,则必须把这一组语句用 括起来组成一个复合语句。但要注意的是在之后不能再加分号。例:例:if(ab)a+;

18、b+;else a=0;b=10;if(ab)a+;b+;else a=0;b=10;第34页,此课件共88页哦一、if语句l4 4.if语句的嵌套语句的嵌套当当ifif语句中的执行语句又是语句中的执行语句又是ifif语句时,则构成了语句时,则构成了if if 语句嵌套的情形。语句嵌套的情形。其一般形式可表示如下:其一般形式可表示如下:if(if(表达式表达式)if if语句;语句;或者为或者为:if(if(表达式表达式)if if语句;语句;else else if if语句;语句;在嵌套内的在嵌套内的ifif语句可能又是语句可能又是if-elseif-else型的,这将会出现多个型的,这将

19、会出现多个ifif和多个和多个elseelse重叠的情况,重叠的情况,这时要特别注意这时要特别注意ifif和和elseelse的的配对配对问题。问题。为了提高程序的可读性,建议程序的书写格式采用为了提高程序的可读性,建议程序的书写格式采用“按层缩进按层缩进”的方式。的方式。第四章第三节第35页,此课件共88页哦例如:例如:if(if(表达式表达式1)1)if(if(表达式表达式2)2)语句语句1 1;else else 语句语句2 2;n其中的其中的elseelse究竟是与哪一究竟是与哪一个个ifif配对呢配对呢?应该理解为:应该理解为:if(if(表达式表达式1)1)if(if(表达式表达式

20、2)2)语句语句1 1;else else 语句语句2 2;还是应理解为:还是应理解为:if(if(表达式表达式1)1)if(if(表达式表达式2)2)语句语句1 1;else else 语句语句2 2;n为了避免这种二义性,语言规定,为了避免这种二义性,语言规定,else else 总是与它前面总是与它前面最近最近的的ifif配对,因此对上述例配对,因此对上述例子应按前一种情况理解。子应按前一种情况理解。n即,表达式即,表达式1 1成立且表达式成立且表达式2 2不成立时执行语句不成立时执行语句2 2第36页,此课件共88页哦例例 函数:函数:(1)if(x0)y=-1;else if(x=0

21、)y=0;else y=1输入x开始 X=0)if(x0)y=1;else y=0;else y=-1;(3)y=-1;if(x!=0)if(x0)y=1;else y=0;(4)y=0;if(x=0)if(x0)y=1;else y=-1;第37页,此课件共88页哦其一般形式为:其一般形式为:switch(switch(表达式表达式)case case 常量表达式常量表达式1:1:语句语句1;1;case case 常量表达式常量表达式2:2:语句语句2;2;case case 常量表达式常量表达式n:n:语句语句n;n;default:default:语句语句n+1;n+1;功能功能:(1

22、 1)计算表达式的值,并逐个与其后的常量表达式值相比较。)计算表达式的值,并逐个与其后的常量表达式值相比较。(2 2)当表达式的值与某个常量表达式的值相等时,即执行其后所有的语句)当表达式的值与某个常量表达式的值相等时,即执行其后所有的语句(3 3)如表达式的值与所有)如表达式的值与所有casecase后的常量表达式均不相同时,则执行后的常量表达式均不相同时,则执行defaultdefault后的语句。后的语句。二、switch语句nswitch语句是语言提供的多分支选择结构的另一种形式,它根据一个表达式的不同取值来语句是语言提供的多分支选择结构的另一种形式,它根据一个表达式的不同取值来实现对

23、分支的选择。实现对分支的选择。第38页,此课件共88页哦二、switch语句l例例4 4.9 9 输输入入五五级级制制成成绩绩,要要求输出相应的百分制成绩段。求输出相应的百分制成绩段。void main()char grade;scanf(%c,&grade);switch(grade)case A:printf(“90100n);case B:printf(“8089n);case C:printf(“7079n);case D:printf(6069n);case E:printf(第三节说明:说明:(1)switchswitch后面括号中的表达式后面括号中的表达式可以是任何类型;可以是任

24、何类型;(2)(2)各个各个casecase分支的常量表达式的类分支的常量表达式的类型均要与型均要与switchswitch后面表达式的类型一后面表达式的类型一致。致。(3 3)常量表达式中不能包含变量,)常量表达式中不能包含变量,而且各常量表达式的值互不相同,而且各常量表达式的值互不相同,否则会出现矛盾的错误。否则会出现矛盾的错误。(4 4)各个分支均允许内嵌多个语)各个分支均允许内嵌多个语句,而且可以不用句,而且可以不用 括起来。括起来。第39页,此课件共88页哦二、switch语句 void main()char grade;scanf(%c,&grade);switch(grade)c

25、ase A:printf(“90100n);case B:printf(“8089n);case C:printf(“7079n);case D:printf(6069n);case E:printf(第三节(5 5)各)各casecase和和defaultdefault子句的先后子句的先后顺序可以变动,而不会影响程序执行顺序可以变动,而不会影响程序执行结果。结果。(6)(6)执行完执行完casecase子句中的语句后,子句中的语句后,如果不继续执行下面的关语句,可如果不继续执行下面的关语句,可用用breakbreak语句跳出语句跳出switchswitch语句;语句;(7 7)default

26、default子句可以省略不用子句可以省略不用。第40页,此课件共88页哦(8 8)常量表达式只能是单值,不常量表达式只能是单值,不能是一个区间范围。例:将按能是一个区间范围。例:将按照百分制打印出考试等级。照百分制打印出考试等级。必须进行适当处理和转换。必须进行适当处理和转换。(9 9)多个)多个casecase可共用一组执行语句;可共用一组执行语句;分支语句中没有分支语句中没有breakbreak,则执行完,则执行完该分支内嵌的语句后,自动转去执该分支内嵌的语句后,自动转去执行后续分支内嵌的语句。行后续分支内嵌的语句。运行情况如下:运行情况如下:A 90100e 第三节第42页,此课件共8

27、8页哦三、选择结构的嵌套#include void main()int x,y,a=0,b=0;scanf(x=%d,y=%d,&x,&y);switch(x)case 1:switch(y)case 0:a+;case 1:b+;default:a+;b+;break;第四章第三节case 2:a+=2;b+=2;break;default:a+=3;b+=3;printf(a=%d,b=%dn,a,b);运行情况如下:运行情况如下:x=1,y=0 a=2,b=2x=1,y=1 a=1,b=2x=1,y=2 a=1,b=1第43页,此课件共88页哦三、选择结构的嵌套l例例4 4.1212计计

28、算算器器程程序序。用用户户输输入入运运算算数数和和四四则则运运算算符符,输输出出运运算算结结果果。当当输输入入运运算算符符不不是是“+”、“-”、“*”或或“/”时时提提示示出出错错,当当输输入入除数为除数为0 0时也提示出错。时也提示出错。u算法分析:定义两个浮点型变量存放输入的两个运算数,定义一个字符型变量存放输入的运算符。根据所输入的运算符,利用switch语句完成对应的运算。第四章第三节第44页,此课件共88页哦三、选择结构的嵌套#include#include void main()float a,b;char c;printf(input expression:n);scanf(%

29、f%c%f,&a,&c,&b);switch(c)case+:printf(=%fn,a+b);break;case-:printf(=%fn,a-b);break;case*:printf(=%fn,a*b);break;第四章第三节 case/:if(b=0)printf(Division by zero!n);elseprintf(=%fn,a/b);break;default:printf(Operator error!n);运行情况如下:运行情况如下:input expression:17*2=34.000000运行情况如下:运行情况如下:input expression:17/0

30、Division by zero!运行情况如下:运行情况如下:input expression:17%2 Operator error!第45页,此课件共88页哦四、选择结构程序举例n例例4 4.13 13 输输入入一一个个字字符符,判判别别该该字字符符是是数数字字、英英文文大大写写字字母母、小写字母还是其他字符。小写字母还是其他字符。l算法分析:由ASCII代码表可知,ASCII码在4857(即09)之间的字符为数字字符,在6590(即AZ)之间的字符为大写字母,在97122(即az)之间的字符为小写字母,其余则为其他字符。这是一个多分支选择的问题,用if-else if语句编程,判断所输入

31、字符的ASCII码所在的范围,分别给出不同的输出。第四章第三节第46页,此课件共88页哦四、选择结构程序举例#include void main()char c;printf(input a character:);c=getchar();if(c=0&c=A&c=a&c第三节 程序运行情况如下:程序运行情况如下:input a character:5 This is a digit.input a character:D This is a capital letter.input a character:!This is an other character.第47页,此课件共88页哦四、

32、选择结构程序举例n例例4 4.17 17 求方程求方程ax2+bx+c=0的完全解。的完全解。l算法分析:例4.4给出了所输入的a、b、c满足a0且b2-4ac0条件时求实根的算法,而若不对a、b、c的输入做任何限制,a、b、c为不同的值时,有不同的解:u(1)a=0,方程变成bx+c=0,有三种情况:b=0且c=0,无定解;b=0且c0,无解;b0,有一个根x=-c/b。u(2)a0,有两种情况:b2-4ac0,有两个相等或不等实根;b2-4ac0,有两个共轭复根。第四章第三节第48页,此课件共88页哦四、选择结构程序举例 程序如下:#include#include void main()f

33、loat a,b,c,d,x1,x2,p,q;printf(Input a,b,c:);scanf(%f,%f,%f,&a,&b,&c);if(a=0)if(b=0)if(c=0)printf(“Infinite solution.n);else printf(“NO solution.n);elseprintf(A root:x=%.4fn,-c/b);第四章第三节 else d=b*b-4*a*c;if(d=0)x1=(-b+sqrt(d)/(2*a);x2=(-b-sqrt(d)/(2*a);printf(Two real roots:);printf(x1=%.4f,x2=%.4fn,

34、x1,x2);else p=-b/(2*a);q=sqrt(-d)/(2*a);printf(Two complex roots:n);printf(x1=%.4f+%.4fin,p,q);printf(x2=%.4f-%.4fin,p,q);第49页,此课件共88页哦四、选择结构程序举例l运行情况如下:Input a,b,c:0,2,3 A root:x=-1.5000Input a,b,c:1,2,1 Two real roots:x1=-1.0000,x2=-1.0000Input a,b,c:1,2,2 Two complex roots:x1=-1.0000+1.0000i x2=-

35、1.0000-1.0000i第四章第三节第50页,此课件共88页哦n例例5.7 5.7 运输公司对客户计算运费,路程越远,每吨千米运费越低,具体标准如运输公司对客户计算运费,路程越远,每吨千米运费越低,具体标准如下:下:n里程里程 s s 折扣折扣 d d nS250 0 S250 0 n250=s500 2%250=s500 2%n500=s1000 5%500=s1000 5%n1000=s2000 8%1000=s2000 8%n2000=s3000 10%2000=s3000 10%n3000=s 15%3000=12练习练习第51页,此课件共88页哦第52页,此课件共88页哦一、用w

36、hile语句实现循环nwhile语句的语法格式为:lwhile(表达式)语句(表达式)语句l其中:u表达式是循环条件,通常称为条件表达式,它决定了 循环是否继续。表达式一般是关系表达式或逻辑表达式。u语句为循环体,可以是单个语句,也可以是复合语句。第四章第四节第53页,此课件共88页哦一、用while语句实现循环第四章第四节图图4-13 while4-13 while循环结构流程图和循环结构流程图和N-SN-S图图while语句的执行过程如下:语句的执行过程如下:(1)计算表达式的值,若值为真)计算表达式的值,若值为真(非(非0),执行),执行 循环体语句,执循环体语句,执行后,返(行后,返(

37、1),继续判断;),继续判断;(2)若值为假(非)若值为假(非0),则退出),则退出循环,执行循环,执行while语句的下一条语语句的下一条语句。句。第54页,此课件共88页哦一、用while语句实现循环n例4.18用while语句求1+2+3+100。l用流程图表示算法,见图4-4:l程序代码如下:#include void main()int i,sum=0;i=1;while(i第四节图图4-4 4-4 计算计算1+2+3+1001+2+3+100的程序结构流程的程序结构流程第55页,此课件共88页哦一、用while语句实现循环使用使用whilewhile语句应注意以下几点:语句应注意以

38、下几点:1.1.循环开始前应该相关变量设置初值,如循环开始前应该相关变量设置初值,如i=1;i=1;sum=0 sum=0;2.2.循环体完成各种重复操作,若如包括有一个以上的语句,循环体完成各种重复操作,若如包括有一个以上的语句,则必须用则必须用 括起来,括起来,组成复合语句组成复合语句;3.3.应注意循环控制条件(开始条件和终止条件)的设置,上例应注意循环控制条件(开始条件和终止条件)的设置,上例中中 i i 的变化范围是的变化范围是1100,1100,一般称一般称i i是循环控制变量,是循环控制变量,1 1为循为循环初值,环初值,100100为循环终止值,循环退出后,循环控制变量的为循环

39、终止值,循环退出后,循环控制变量的值已超过循环终止值;值已超过循环终止值;4.4.在循环过程中要有向循环终止条件变化的趋向,否在循环过程中要有向循环终止条件变化的趋向,否则会死循环。则会死循环。第四章第四节#include void main()int i,sum=0;i=1;while(i第四节图图4-15 do-while4-15 do-while循环结构流程图和循环结构流程图和N-SN-S图图第57页,此课件共88页哦例 4-22利 用 格 里 高 公 式:求,直到最后一项的值小于10-6。解题思路解题思路:l可以用n+2实现分母的递增,用符号变量s=-s实现加减的变化。l循环的结束条件

40、也不是由特定的次数决定,而是要运行到某一个精度:最后一项的值小于10-6。l用条件fabs(t)1e-6来控制循环是否结束。二、用do-while语句实现循环第四章第四节#include#include void main()int s;float n,t,pi;pi=0;t=1;n=1.0;s=1;do pi=pi+t;n=n+2;s=-s;t=s/n;while(fabs(t)1e-6);pi=pi*4;printf(pi=%10.6fn,pi);第58页,此课件共88页哦在使用while循环结构和do-while循环结构时,应注意以下几点:l(1)对于同一个问题,可以用while循环结构

41、实现,也可以用do-while循环结构实现。在一般情况下,用两种语句结构处理相同问题时,循环部分是一样的,得到的结果也是相同的。但是,如果循环条件一开始就不成立(为0),那么,两种循环的结果就不相同了。比较下面两个程序,就可以说明这个问题。二、用do-while语句实现循环第四章第四节第59页,此课件共88页哦void main()int sum=0,i;scanf(%d,&i);while(i第四节void main()int sum=0,i;scanf(%d,&i);do sum=sum+i;i+;while(i=10);printf(sum=%d,sum);第60页,此课件共88页哦l(

42、2)不管是while循环,还是do-while循环,在 循环体内必须要有能够改变循环条件的语句,否则将构成死循环。如:i=1;while(i第四节第61页,此课件共88页哦(3)循环条件设置要合理,否则也将构成死循环。如:i=123;while(i第四节第62页,此课件共88页哦(4)不管是while循环还是do-while循环,循环体如果包含一个以上的语句,都应以复合语句的形式出现。二、用do-while语句实现循环第四章第四节(5)在if语句,while语句中,表达式后面都不能加分号,而在 do-while语句的表达式后面则必须加分号。do sum=sum+i;i+;while(i=100

43、);if(maxb)max=b;while(i+第四节第64页,此课件共88页哦1.for循环语句一般形式为:for(表达式1;表达式2;表达3)语句;2.执行过程如下:先求解表达式1。求解表达式2,若其值为真(非0),执行;否则,转到。执行循环体语句;求解表达式3,然后转。循环结束,执行for语句下面的一个语句。三、用for语句实现循环第65页,此课件共88页哦for(表达式1;表达式2;表达3)语句;n“表表达达式式1”1”通常是循环变量的指定初值,在整个循环过程中只运行1次;n“表表达达式式2”2”是循环条件,如果条件为真,则运行循环结构中的“语句”,否则结束循环;n“表达式表达式3”3

44、”在每次执行完循环语句后,用于改变循环条件;n“语句语句”是循环体语句,可以是单个语句,也可以是复合语句。三、用for语句实现循环第四章第四节第66页,此课件共88页哦用用for 循环:循环:void main()int i,s;for(i=1,s=0;i=100;i+)s=s+i;printf(s=%dn,s);用用while 循环:循环:void main()int i,s;i=1;s=0;while(i=100)s=s+i;i+;printf(%dn,s);例例 计算计算s=1+2+3+.+99+100 nforfor语句最简单的应用形式也是最容易理解的形式如下:语句最简单的应用形式也是

45、最容易理解的形式如下:for(for(循环变量赋初值;循环条件;循环变量增量循环变量赋初值;循环条件;循环变量增量)语句;语句;由由此此可可以以看看出出,for语语句句完完全全等等价价于于下下列列形形式式的的 while语语句:句:表达式表达式1;while(表达式(表达式2)语句语句 表达式表达式3;第67页,此课件共88页哦3说明(1)for循环中的“表达式1(循环变量赋初值)”、“表达式2(循环条件)”和“表达式3(循环变量增量)”都是选择项,即可以缺省,但“;”不能缺省。(2)省略了“表达式1(变量赋初值)”,表示不对循环控制变量赋初值。要将表达式1移到for语句之前完成。i=1,s=

46、0;for(;i=100;i+)s=s+i;for(for(表达式表达式1 1;表达式;表达式2 2;表达;表达3)3)语句;语句;第68页,此课件共88页哦(3)省略了“表达式2(循环条件)”,则不做其它处理时便成为死循环。例如:for(i=1;i+)s=s+i;相当于:i=1;while(1)s=s+i;i+;一般不能省略,或在循环体中增加一条退出循环的语句:for(i=1;i+)s=s+i;if(i=100)break;第69页,此课件共88页哦(4)省略了“表达式3(循环变量增量)”,则不对循环控制变量进行操作,这时可在语句体中加入修改循环控制变量的语句。例如:for(i=1;i第四节

47、第72页,此课件共88页哦u第一个月小兔子是一对;u两个月后,生下一对小兔,总数共有两对;u三个月以后,老兔子又生下一对,因为小兔子还没有 繁殖能力,所以一共是三对;u依此类推可以列出下表:经过月数:0 1 2 3 4 5 6 7 8 9 10 11 12兔子对数:1 1 2 3 5 8 13 21 34 55 89 144 233u表中数字1,1,2,3,5,8,13,构成了一个数列。这个数列有十分明显的特点:前面相邻两项之和,构成了后一项。这就是著名的“斐波那契数列”。三、用for语句实现循环第四章第四节第73页,此课件共88页哦u如果分别用x1,x2,xn表示每个月兔子的数量,我们可以得

48、到递推公式如下:x1=1(n=1)x2=1(n=2)xn=xn-1+xn-2 (n3)三、用for语句实现循环第四章第四节第74页,此课件共88页哦l程序代程序代码码如下:如下:#include void main()int i,x1=1,x2=1;for(i=1;i第四节第75页,此课件共88页哦l程序运行结果为:1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 9871597258441816765l如果输出项数更大,则要注意数据溢出问题,x1、x2要使用长整型。三、用for语句实现循环第四章第四节第76页,此课件共88页哦n1.break语语句句l当b

49、reak语句用于循环语句中时,可使程序终止循环而执行循环后面的语句。通常break语句总是与if语句连在一起,满足条件时便跳出循环。lbreak语句的语法格式为:ubreak;四、continue语句和break语句第四章第四节第77页,此课件共88页哦例4.28将数字512表示成两个数的和,这两个数分别为15和13的倍数。u算法分析如下:u假设第一个数为i*15,则第二个数为512-i*15。可以设定一个循环,使i从1开始递增,直到使得512-i*15能够被13整除,就找到答案,终止循环。四、continue语句和break语句第四章第四节#include void main()int i;

50、for(i=1;i+)if(!(512-i*15)%13)break;printf(%d+%d=512n,i*15,512-i*15);程序运行结果为:程序运行结果为:135+377=512第78页,此课件共88页哦使用使用break语句,需要注意的是:语句,需要注意的是:(1)break语语句句不不能能用用于于循循环环语语句句和和开开关关语语句句之之外外的的任任何何语语句句,所以所以break语句对语句对if-else的条件语句不起作用。的条件语句不起作用。(2)在多重循环中,一个)在多重循环中,一个break语句只向外跳一层。语句只向外跳一层。第79页,此课件共88页哦n2.continu

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 资格考试

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁