实用c语言程序设计第3章三种基本结构程序设计详解课件_第1页
实用c语言程序设计第3章三种基本结构程序设计详解课件_第2页
实用c语言程序设计第3章三种基本结构程序设计详解课件_第3页
实用c语言程序设计第3章三种基本结构程序设计详解课件_第4页
实用c语言程序设计第3章三种基本结构程序设计详解课件_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

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

文档简介

1、第三章 三种基本结构程序设计3.1 顺序结构程序设计 3.2 选择结构程序设计 3.3 循环结构 2022/8/203.1 顺序结构程序设计顺序结构程序:就是执行时依语句排列顺序一条接着一条地执行,不发生控制流的转移。 特点:每个程序都是按照语句的书写顺序依次执行的,它是最简单的结构。不可或缺的若干语句,用把它们括起来,这样的语句体称为复合语句。复合语句在逻辑上等价于一条语句,复合语句内部还可嵌套复合语句。 ABab2022/8/20 3.1.1 程序设计简例main()char ch= a; /*定义变量并赋值 */int a= 98; unsigned b=1000;long c= 123

2、456789;float x= 3.14;double y=1.2345678;printf (1) a= % d,a= % c,ch= % d,ch= % cn,a,a,ch,ch);/*输出*/printf (2) b= % u n,b);printf (3) c= % ld n,c);printf (4) x= % f,y= % fn,x,y);printf (5) x= % e,y= % e n,x,y);printf (6) y= % - 10.2fn,y);【例 1】 分析下列程序,观察运行结果 运行结果 (1) a=98,a= b,ch=97,ch= a(2) b=1000(3)

3、 c=123456789(4) x=3.140000,y=1.234567(5) x=3.14000e+00,y=1.23456e+ 00(6) y=1.232022/8/20程序设计简例【例 2】 输入一个三位的整数,分解它的符号、百位数字、十位数字和个位数字,然后依次输出。#include #include /* 程序中使用了数学函数 abs */ main() char c1,c2,c3,c4; /* 定义变量 */int x;printf(please input a numer: n);/* 输入提示信息 */ scanf(%d,&x); /* 键盘输入 x 的值 */c4=x=0?

4、+: -; /* 将 x 的符号赋给 c4 */x=abs(x); /* 取 x 的绝对值 */c3=x%10+48; /* 求得 x 的个位数字,加 48 转换为对应数字字符的 ASCII 码值*/x=x/10; /* 去掉个位数, 取出 x 的高位 */c2=x%10+48; /* 求得 x 的十位数字, 加 48 转换为对应的 ASCII 码值 */c3=x/10+48; /* 求得 x 的百位数字, 加 48 转换为对应的 ASCII 码值 */printf(%cn%cn%cn%cn,c4,c3,c2,c1); /* 输出符号位,百位,十位,个位 */ 程序的执行结果:please i

5、nput a numer:-321-,3,2,12022/8/20程序设计简例【例 3】 在屏幕输出 “please input your name:”,再从键盘上输入一个名字,然后显示“Hello!”,在下一行显示输入的名字。# include main ()char name 10;/* 存放名子的变量在后面章节再详细介绍 */printf(please input you rname: n);/* 输出提示信息 */scanf(% s,name); /* 读入名字 */printf(Hello! n); /* 输出 Hello!*/printf(% s,name); /* 输出读入的名字

6、 */程序的执行结果:please input your name:Li gangHello!Li gang2022/8/20程序设计简例【例 4】 读入一个小写字母,将其转换成大写字母后输出,同时输出其对应的 ASCII 编码。# include main() char ch1, ch2 ;printf ( Enter a lower letter : ) ;ch1=getchar ( ) ; /*利用字符输入函数,实现键盘输入一个字符,赋给字符变量 ch1 */printf (letter: %c , ASCII:%dn,ch1,ch1 );/* 屏幕显示键盘输入的字符,并显示该字符的 A

7、SCII 代码值*/ch2=ch1-32; /*将小写字母转换成对应的大写字母 */ printf (letter: %c , ASCII:%dn,ch2,ch2 );/*屏幕显示转换后的字符,及该字符的 ASCII 代码值*/程序运行情况:Enter a lower letter: aletter: a, ASCII: 97letter: A, ASCII: 652022/8/20程序设计简例【例 5】 在100.0g苯中加入13.76g联苯(MB),所形成溶液的沸点为82.40(t2),计算联苯的相对分子量。已知纯苯的沸点为80.10(t1),Kb=2.57。# include main(

8、) float mA,mB,MB,Kb,t1,t2; /*定义变量*/printf(please input:mA,mB,Kb ,t1,t2n);/*输出“输入数据”提示信息*/scanf(% f,% f,% f,%f,% f,& mA,&mB,&Kb ,&t1,&t2); /*读入数据*/MB= (Kb* mB)/ (t1t2) *mA); /*计算联苯的分子量*/printf (MB= %6.2f , MB ); /*输出联苯的分子量*/printf (g/mol n ); /*打出分子量的单位*/程序运行情况:please input:mA,mB,Kb ,t1,t2100.0,13.76

9、,2.57,80.10,82.40MB=153.75 g/mol2022/8/203.1.2 格式输入输出的一般形式格式、格式输出函数printf()printf() 函数调用的形式: printf(“格式控制字符串”,输出项表) 或 printf(字符串)在该函数调用时,在其后面加上分号,就构成了格式输出语句。printf 中的输出项是和前面的格式控制字符串按顺序一一对应的。“项”可以是常量、变量、表达式、数组和函数调用,其值应和格式说明相容。 1格式控制字符串该字符串放在一对双引号中,它可以包含以下三部分内容。(1)按原样输出的字符:(2)转义字符:(3)与输出项对应的“格式说明符”:要求

10、以%开头,格式说明符在个数和类型上应该与输出项相对应。 2022/8/20 输出格式字符表 格式符输出形式输出项类型数据输出方式-md-mo-mx-mud十进制整数o八进制整数x十六进制整数u无符号整数int, shortunsigned intunsigned shortchar有-,左对齐;无-,右对齐无 m 或总宽度超过位时按实际宽度输出;不足m 位时,补空格-mld-mlo-mlx-mluld十进制整数lo八进制整数lx十六进制整数lu 无符号整数longunsigned long-m.nf-m.nef十进制小数e十进制指数自动选定格式floatdouble有-,左对齐;无-,右对齐

11、无 m.n 或总宽度超过时,则按实际宽度输出;有 m.n 输出 m 位,其中小数 n 位;不足 m 位时,加空格g自动选定f或e格式floatdouble不输出尾数中无效的0 ,以尽可能少地占输出宽度。-mcc单个字符char有-,左对齐; 无-,右对齐无 m 则输出单个字符;有 m 则输出m 位,不足 m 位时补空格-m.nss字符串字符串有-,左对齐;无-,右对齐无 m.n 则按实际输出全部字符串 有 m.n 则输出前n 个字符串注意:m、n 均是正整数, m 主要用于控制输出数据的总宽度,n 用于控制输出实数的小数位数或控制输出字符串时可以输出的实际字符数。2022/8/20格式输入输出

12、的一般形式格式2输出项表 printf函数中的 “输出项表”部分由表达式组成,这些表达式应与 “格式控制字符串”中的格式说明符的类型一一对应,若 “输出项表”中有多个表达式,则每个表达式之间应由逗号隔开,各输出项可以是任意合法的表达式(包括常量、变量和函数调用)。因此 printf 函数也具有计算的功能。 printf ( %dn , 100) ; /*输出显示100*/ printf ( %dn , 1234000+5678) ; /*输出显示:1234+5678*/ printf ( %fn , (x=123.0)+(y=0.4567) ; /*输出显示:123.456700*/ prin

13、tf ( %6.2fn , 123.4567) ; /*输出显示:123.46*/ printf ( %.3fn , 123.4567) ; /*输出显示:123.457*/2022/8/20格式输入输出的一般形式格式3 printf函数的控制字符的附加说明标 记作 用(加号)空格#0*输出的正数前面加“+”号,负数前面加“”号在输出的正数前加一个空格“#o”使输出的八进制数前加 0“#x”或“#X”使输出的十六进制数前加0 x或0X对没有小数部分的浮点数, #迫使 f、e、E、g、G 打印出小数点且“#g”不去掉尾部的无效0用0(零)去填充域宽指定浮点数的输出位数2022/8/20格式输入输

14、出的一般形式格式二. 格式输入函数 scanf()scanf()调用的格式: scanf(格式控制字符串,输入地址项表列);该函数具有按格式字符串中规定的格式,在键盘上输入各输入项的数据,并依次赋给各输入项,且具有对从输入流中接收到的数据进行格式转换的功能。因为要求在内存中保存所接收到的数据,因此,需要提供接收数据的变量的地址。地址运算符&用于取得指定变量的地址。当以数值格式从输入流中读取数据时,scanf()可以跳过空格、换行及跳格符(在输入流中,数值型数据须以这些空白字符 分隔)。2022/8/20格式输入输出的一般形式格式1格式控制字符串格式符输入形式输入项类型数据输入方式mdmomxd

15、十进制整数o八进制整数x十六进制整数int, shortunsigned intunsigned short无 m 按实际位数输入 有 m只能输入 m 位 不足 m 位,以 Enter 键或空格结束mldmlomlxld十进制整数lo八进制整数lx十六进制整数longunsigned longmfmef十进制小数e十进制指数floatdoublemlfmlelf十进制小数le十进制指数floatdouble mcc单个字符char无 m仅取单个字符,以 Enter 结束有 m 输入 m 个字符,仅取第一个 mss字符串字符串无 m 输入字符至回车或空格结束 有 m 仅取前 m 个字符 2022

16、/8/20格式输入输出的一般形式格式2输入地址表列 scanf函数中的 “地址表列”部分是由变量的地址组成的,如果有多个变量,则各变量之间用逗号隔开。地址运算符为 “&”,如变量 a的地址可以写为 &a。输入项表中的各输入项,应该是存放输入数据存储单元的地址。使用时一定注意,各输入项之间用“,”号分隔开,各变量名前一定要加“&”求地址运算符。3说明(1)在 scanf函数 “格式控制”部分中的每个格式说明符都必须在 “地址表”中有一个变量与之对应,格式说明符必须要与相应变量的类型一致。而且,输入的数据必须是常量,不能是表达式,而且按输入项的前后次序顺序输入数据。 (2)在输入数据时,各数据之间

17、要使用 “空格”、“Tab”或 “回车”键(Enter 键)作为分隔;如果格式说明符之间包含其他字符,则输入数据时,应输入与这些字符相同的字符做间隔。 2022/8/20格式输入输出的一般形式格式(3)在输入字符型数据时,由于 “空格”也作为有效字符输入,因此,不需要用 “空格”做分隔,只要输入一个字符即可。故输入字符型数据时,数据之间不用分隔符。 (4)在格式说明符的前面指定输入数据所占的列数时,系统将自动按此列数来截取所需的数据。 (5)如果在格式控制字符串中,含有不属于格式说明的其他字符,在输入数据时,必须在对应位置上原样输入这些字符。 (6)如果在% 后有一个 “*”附加说明符,表示跳

18、过它指定的列数。 (7)在scanf函数中不使用u说明符,对unsigned型数据,以d或o、x格式输入。 (8)在用scanf函数输入数据时,不能规定精度。 2022/8/203.1.3 字符输入、输出函数1字符输入函数格式: getchar()或getch()调用函数时,当程序执行到 getchar 函数调用语句时,将等待输入,只有当用户输入字符,并按 Enter键后,才接收输入的第 1 个字符,并在屏幕上回显该字符,同时送到内存的缓冲区,准备赋给指定的变量。并且对空格符、制表符(Tab 键)和回车符(Enter 键)都被当作有效字符读入。getch()函数是立即接收用户来自键盘上的输入,

19、不把字符回显到屏幕上。 2字符输出函数 putchar格式:putchar(ch) 其作用是将参数代表的字符在标准输出设备(通常是显示器)上加以输出。参数 ch 可以是字符常量、字符变量或整型表达式,其功能等价于:printf(%c,ch)。 2022/8/203.2 选择结构程序设计 分支语句有两类:一类是 if语句,另一类是 switch语句。条件语句的作用是使程序按某种条件有选择地执行一条或多条语句。其中,条件可以用表达式来描述,如关系表达式和逻辑表达式。 选择结构程序中的语句(段)是否执行,取决于某个“条件”是否成立。选择结构的程序又有三种形式:单分支结构、双分支结构和多分支结构。20

20、22/8/203.2.1 程序设计简例【例 6】 输入 2 个数,如果它们的值不相等,则交换并输出它们的值;否则,输出“equal”。 # include void main( ) int a, b, t ; printf(input a, b:n); scanf(d,d, &a, &b); if(a!=b) /*语句 1 是一条复合语句*/ t=a; a=b; b=t; printf(a=d,b=dn,a,b);elseprintf(equaln); /*语句2*/程序的执行结果1:input a, b:10,12a=12,b=10程序的执行结果2:input a, b:10,10equal

21、 2022/8/20程序设计简例【例 7】 输入 3 个整数,输出其中的最大值。# include void main( ) int a,b,c,max; /*max中放最大值*/printf(inputa,b,c:n);scanf(ddd,&a,&b,&c); max=a; /*先假设a是最大的数*/if (maxb) max=b; /*如果 b 比假设的最大值大,再假设 b是最大的数*/if (max0,方程有两个不等的实根;(2)若 b2-4ac=0,方程有两个相等的实根;(3)若 b2-4ac0,方程有两个复根。 yyn开始a= =0这是一次方程x=c/bdelta=b*b4*a*c输

22、入a,b,c方程有两个相等的实根x1,x2=b/(2*a)n方程有两个虚根n方程有两个不相等的实根x1=(-b+sqrt(delta)/(2*a)x2=(-b-sqrt(delta)/(2*a)结束图 3-1 解一元二次方程的流程示意图ydelta= = 0delta 02022/8/20程序设计简例main()float a,b,c,delta,x1,x2,realpart,imagepart;printf(请输入 a,b,c:n);scanf(% f,% f,% f,&a,&b,&c);if(fabs(a) = 1e- 6) printf(这是一次方程 x= % fn,- c/b); el

23、se delta= b*b- 4*a*c; if(fabs(delta)1e-6)2022/8/20程序设计简例 x1= (- b+ sqrt(delta)/(2*a); x2= (- b- sqrt(delta)/(2*a);printf(有两个不等的实根:x1= % 8.4f和 x2= % 8.4fn,x1,x2); else realpart= - b/(2*a); imagepart= sqrt(- delta)/(2*a); printf(有两个虚根:); printf(% 8.4f+ % 8.4fin,realpart,imagepart); printf(% 8.4f- % 8.

24、4fin,realpart,imagepart); 程序运行:请输入 a,b,c:3.00,4.00,5.00有两个虚根:-0.6667+ 1.1055i- 0.6667- 1.1055i2022/8/20程序设计简例【例 9】 从键盘输入一个月份 (1 12),并显示该月份的英文名称。main()int month;printf(Enter a month);scanf(% d,&month);switch(month) /*根据 month 的当前取值,做出多分支选择*/case 1:printf(Januaryn);break; case 2:printf(Februaryn);brea

25、k; case 3:printf(Marchn);break; case 4:printf(Apriln);break; case 5:printf(Mayn);break; case 6:printf(Junen);break; case 7:printf(Julyn);break; case 8:printf(Augusn);break; case 9:printf(Septembern);break; case 10:printf(Octobern);break; case 11:printf(Novembern);break; case 12:printf(Decembern);bre

26、ak; default:printf(Data Error!n);break 2022/8/203.2.2 单分支与双分支结构 1.单分支结构程序 格式: if (表达式) 语句 1; 假(0)真(0)语句1表达式图3-2 单分支结构 语句 1 若多于一条,则需用复合语句。if 语句的功能如图 3-2 所示。语句中的“表达式”项可以是算术表达式、关系表达式或逻辑表达式,甚至可以是任意类型的数值。 if 语句的执行过程是:遇到 if 关键字,首先计算圆括号中的表达式的值,如果表达式的值(或数值的)值不为 0(真)时,就执行其后的语句 1;表达式值为 0(假)时,就跳过其后的语句 1,控制转移到下

27、一条语句。2022/8/20单分支与双分支结构2.双分支结构程序格式:if(表达式)语句 1; else 语句 2; 语句 1、语句 2 若多于一条语句,则应使用复合语句。其执行过程如图 3-3所示。 假(0)真(0)语句1表达式图3-3 双分支结构语句2该语句遇到关键字 if,首先运算小括号中的表达式,如表达式的值为非 0,则执行紧跟其后的语句 1,执行完语句 1 后,执行 if-else 结构后面的语句;如果表达式的值为 0,则执行关键字 else 后面的语句 2,接着执行 if-else 结构后面的语句。2022/8/203.2.3 多分支结构 嵌套形式 1 格式: if(表达式 1)

28、if(表达式 2)语句 1; else 语句 2; else 语句 3;1.if-else 语句嵌套结构 执行流程如图 3-4所示,在if-else 语句中包含另一 if-else 语句,即第一个 else与第二个 if结合,而最后一个 else与第一个 if结合。假(0)真(0)表达式1图3-4 嵌套形式1语句3假(0)真 (0)语句1表达式2语句22022/8/20多分支结构 嵌套形式 2 格式: if(表达式 1) if(表达式 2)语句 1 ; else语句 2;语句1语句2假 (0)真 (0)表达式1图3-5 嵌套形式2假 (0)真 (0)表达式2 执行流程如图 3-5所示,在if-

29、else 语句中包含一个单分支结构复合语句。即else与第一个 if结合。因为第二个 if在复合语句中,复合语句是一条语句,不能与复合语句外的 else结合。如果把去掉,则 else与第二个 if结合。2022/8/20多分支结构 嵌套形式 3 格式: if(表达式 1)语句 1; else if(表达式 2)语句 2; else语句 3; 执行流程如图 3-6所示,在if-else 语句的else后紧跟另一个if-else 语句。C 语言规定:else总是与它前面最近的同一复合语句内的不带 else 的 if结合。在 if语句嵌套形式 2中可以看到,else与 if在同一复合语句内才能结合。

30、图3-6 嵌套形式3语句3语句1假(0)真(0)表达式1假(0)真(0)表达式2语句2 嵌套形式语句结构执行过程是:从上到下逐一对 if 后面的表达式进行运算。当某一个表达式的值为真(非 0) 时,就执行紧跟其后的相关子句中的语句,而后面的其余部分均被跳过。当有 n 个 if 语句,就有 n+1 个分支。2022/8/20多分支结构2switch 语句switch 语句的格式:switch (表达式) case 常量表达式 1: 语句组 1; break;case 常量表达式 2: 语句组 2; break; case 常量表达式 n: 语句组 n; break; default: 语句组 n

31、+1;break; 2022/8/20多分支结构表达式常量表达式1语句组1break常量表达式2语句组2breakdefault语句组n+1break常量表达式n语句组nbreak图 3-7 switch 语句2022/8/20多分支结构注意 (1)switch 关键字后面的表达式,可以是任意合法的表达式。 (2)一定要用圆括号把 switch 后面的(表达式)括起来。否则会给出出错信息。 (3)所有 case 子句后所列的常量表达式值都不能相同,且每个 case 关键字后面的常量表达式的类型,必须与 switch 关键字后面的表达式类型一致。 (4)break 语句的作用是退出 switch

32、 语句。如果“语句组i”的后面没有安排 break 语句,那么执行完后,会继续往下执行。(5)default 可以省略。如果有它,其位置不一定放在整个语句的最后。2022/8/20多分支结构(6)一定要用花括号将 switch 里的 case、default 等括起来。在case后面中虽然包含一个以上执行语句,但可以不必用花括弧括起来,会自动顺序执行本case后面所有的执行语句。当然加上花括弧也可以。(7)执行 switch 语句时,首先计算其后的表达式的值,然后自上而下顺序寻找一个 case 后面的常量与该值相匹配,找到后按顺序执行此 case 后面的所有语句,包括后续的 case 子句,而

33、不再进行判断。如果所有 case 中的常量值都不能与 switch 后面的表达式的值相等,就执行default 关键字后面的语句;若既没有相匹配的 case,也没有 default 关键字,则直接跳过 switch语句。 2022/8/20多分支结构3if 语句与 switch 语句的区别 if 语句的嵌套形式和 switch 语句都能实现多分支选择,在某种场合也可以互换替代,但 if 语句适应于各种条件的选择,能够计算关系或逻辑表达式;switch 语句只适用于检验表达式与哪个值相等的情形。 2022/8/203.3 循环结构for 循环语句while 循环语句do-while 循环语句 c

34、ontinue/break 语句goto 语句和语句标号 2022/8/203.3.1 程序设计简例i=1,s=0i 100s=s+1i+假真图3-8【例 10】计算 1+2+3+99+100。# includestdio.hmain( )int s,i;s=0; /*累加和的变量初值为0 */ i=1; /*累加数从1开始 */loop:if(i=100) /*累加数不大于100 */s= s+ i; /*进行累加* / i+; /*产生下一个累加数*/goto loop;/*使程序流程转到if语句,以便继续累加下一个数*/ printf(s=1+2+100= % d n,s);/*输出累加

35、* /程序运行结果:s=1+2+ +100=50502022/8/20程序设计简例【例 11】输入任意一个大于等于2的自然数n,判断该数是否是素数并输出相应的结果。真真真假假假开始输入ntag=1,i=2ini=i+1tag=0,breaktag=1n输出是素数输出不是素数图3-9结束n%i=0# includestdio.hmain( )int i,n,tag;printf(请输入一个大于2的自然数n:);scanf(% d,&n );tag=1;/*若标志变量 tag等于 0,n不是素数,若 tag不等于 0,则 n是素数。*/for( i=2;i n;i+ ) /*i循环中分别检测n能否

36、被 i整除,i=2,3,n-1 */if( n% i=0 )tag=0;break;/* n能被 i整除,n不是素数,令tag=0 */if(tag=1 )printf(% d 是素数n,n);else printf(% 不是素数 n,n);2022/8/20程序设计简例【例 12】用递推法求菲波拉契(Fibonacci)数列的前 20项。main( )long f,f1,f2;int i;f1 = f2 = 1;printf(% 10ld% 10ld,f1,f2);i=3;while(i=20)/*产生第 3到 20项*/f= f1+ f2;/*递推出第 i项*/printf(% 10ld,

37、f);if( i% 4=0 )printf(n);/*每行输出 4个数换行*/f1= f2;f2= f;/*为下一步递推做准备*/i=i+1 ;运行程序,输出结果是: 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 9871597 2584 4181 67652022/8/20程序设计简例【例 13】将100 元人民币换成面值 1 元、2 元、5 元的钞票,给出所有可能的兑换方案。#include main( ) int i,j,k,n=0; printf(给出所有可能的兑换方案:n); for(i=0;i=100;+i) /*第一层(最外层)循环*/ f

38、or(j=0;j=50;+j) /*第二层(中间层)循环*/ for(k=0;k=20;+k) /*第三层(最内层)循环*/ if (i*1+j*2+k*5=100) printf(方案%8d: %8d(1)%8d(2)%8d(5)n, +n,i,j,k); 2022/8/20程序设计简例【例 14】求自然对数底的近似值,公式为:e=1+1/1!+1/2!+1/n!+。#include main( ) int i=1; double e=1.0,u=1.0; while (u1e-6) /* while 循环语句*/u=u/i; e=e+u; i+; printf(ne=%12.10f,e);

39、 i=1;e=1.0,u=1.0; do /*do while 循环语句*/ u=u/i; e=e+u; i+; while (u1e-6); printf(ne=%12.10f,e); for(i=1,e=1.0,u=1.0;u1e-6;+i) /* for循环语句*/ u=u/i; e=e+u; printf(ne=%12.10f,e); 2022/8/20程序设计简例【例 15】找出两个自然数平方之和的所有三位数。#include stdio.h#include math.hmain ( ) int k,j,m,n,flag;for (n100;n1000; n) /*第一层(最外层)循

40、环*/ ksqrt(1.0*n);/*第一层(最外层)循环复合句开始*/ flag0; j1; while(jk)&(flag0) /*第二层(中间层)循环*/ m1; /*第二层(中间层)循环复合句开始*/ while(mk)&(m*m!nj*j) mm1;/*第三层(最内层)循环*/ if (m*mj*jn) flag1; printf(%d%d*%d%d*%dn,n,j,j,m,m); jj1; /*第二层(中间层)循环复合句结束*/ /*第一层(最外层)循环复合句结束*/2022/8/203.3.2 当型循环与直到型循环 一“当型”循环在执行循环语句时,首先判断循环控制表达式是否为“真

41、”,若为“真”,则反复执行循环体。若为“假”,则结束循环。如图 3-10所示。图3-10假真循环体表达式1while语句格式: while(表达式) 语句(循环体部分)功能:当表达式的值为真时,执行 while语句中的循环体。(1)循环体如果包含一个以上的语句,则必须用花括弧括起来,以复合语句的形式出现,否则 while 语句范围只到while后面第一个分号处。2022/8/20当型循环与直到型循环(2)在循环体中应有使循环趋向于结束的语句,即设置修改循环条件的语句。(3)while语句先判断表达式的值,然后执行循环体中的语句,如果表达式的值一开始为假 (值为 0),则不执行循环体,直接执行循

42、环体以外的语句。表达式是控制循环的条件,它可以是任何类型的表达式。2for语句格式:for (表达式 1;表达式 2;表达式 3)语句功能:首先计算表达式 1 的值;其后检测表达式 2 的值,若其值为“真”,则执行循环体语句,执行完毕后,再计算表达式 3,至此完成了一次循环;然后,再次测试表达式 2 的值是否为“真”,若为“真”,继续执行循环体语句,直到计算表达式 2的值为 0,即为“假”,则终止循环,执行 for语句下面的一个语句。如图 3-11所示图3-11假循环体真表达式2表达式1表达式32022/8/20当型循环与直到型循环(1)for语句中条件测试总是在循环开始时进行;如果循环体部分

43、是多个语句组成的,则必须用左、右花括号括起来,使其成为一个复合语句。(2)for语句中,表达式 1通常是为循环变量赋初值的表达式;表达式2是控制循环的表达式;表达式 3通常是改变循环变量值的表达式。表达式1和表达式3既可以是一个简单的表达式,也可以是逗号表达式。(3)for 语句的表示形式相当灵活,可以部分或全部省略,但 “;”不能省略,如 for (;)。2022/8/20当型循环与直到型循环二“直到型”循环格式: do 语句(循环体部分) while(表达式);(分号必不可少)功能:先执行语句,后判断表达式的值。它的执行过程是:先执行一次指定的语句,然后判断表达式的值,当表达式的值为非零(

44、“真”)时,返回重新执行该语句,如此反复,直到表达式的值等于 0为止,此时循环结束。如图 3-12所示。 图3-12真假循环体表达式2022/8/20当型循环与直到型循环(1)do while语句的表达式是任意表达式,是控制循环的条件。(2)先执行后判断。因此,循环体至少执行一次,直到表达式为“假”才退出循环。因此,在循环体语句中一定要有改变表达式的值的操作,最终使其表达式的值变为 0,结束循环。否则将成为“死”循环。(3)如果 do while语句的循环体部分是多个语句组成的话,则必须用左右花括号括起来,使其形成复合语句。(4)在关键字 while 的小括号的后面,一定要加分号“;”,千万不

45、能忘记,它表示 do while语句到此结束。2022/8/20当型循环与直到型循环三goto 语句格式:goto 语句标号;功能:程序执行到 goto语句时,转到语句标号指定的语句去执行。 (1)使用goto语句时,需要预先指定一个有标号的可执行语句作为目的位置,这个有标号的语句必须与 goto 语句在同一个函数内。语句标号必须用标识符表示,不能用整数作为标号。(2)与 if语句一起构成循环结构。从结构化程序设计角度考虑,大多数现代的编程方法都认为 goto 语句是有害的结构,因此不提倡使用 if和 goto语句构造循环。(3)goto语句为无条件转向语句,会跳过程序中的一段代码并转到一个指

46、定的目的位置。2022/8/203.3.3 各种循环语句的比较(1)4种循环语句均可以用来处理同一问题,一般情况下它们可以互相代替。但一般不提倡用 goto语句和if语句构成的循环。(2)while和 do while循环,只在 while后面指定循环条件,在循环体中包含反复执行的操作语句,包括使循环趋于结束的语句 (如 i+ + ,或 i= i+ 1等)。 for循环可以在表达式 3中包含使循环趋于结束的语句,甚至可以将循环体中的操作全部放到表达式 3中。因此 for语句的功能更强,凡用 while循环能完成的,用 for循环都能实现。(3)while语句和do while语句只有一个表达式,用于控制循环是否进行。for语句有三个表达式,不仅可以控制循环是否进行,而且能为循环变量赋初值及不断修改循环变量的值。 for语句比 while和 do while语句功能更强,更灵活。for语句中三个表达式可以是任何合法的C语言表达式,而且可以部分省略或全部省略,但其中的两个分号不能省略。 2022/8/20各种循环语句的比较(4)用while和 do while循环时,循环变量初始化的操作应在 while和 do while语句之前完成。for语句可以在表达式

温馨提示

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

评论

0/150

提交评论