版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1第第3章章 结构化程序设计结构化程序设计3.1 基本语句基本语句3.2 顺序结构顺序结构3.3 选择结构选择结构3.4 循环结构循环结构3.5 简单程序设计实例简单程序设计实例23.1 基本语句表达式语句基本语句表达式语句 基本语句主要有表达式语句、空语句、基本语句主要有表达式语句、空语句、goto语句语句、break语句、语句、continue语句、语句、return语句等。基本语句都以分号为结束符。语句等。基本语句都以分号为结束符。1表达式语句表达式语句格式:格式:表达式表达式;例如:例如:k+; k = k+2;33.1 基本语句基本语句空语句空语句2空语句空语句格式:格式:;功能:功
2、能:什么也不做的语句。什么也不做的语句。例如:例如:for( , , ) /* 无循环体无循环体 */ if(条件条件1) if(条件条件2) 语句语句1; else else 语句语句2; 43.1 基本语句基本语句break语句语句3break语句语句格式:格式:break;功能:功能:强制结束它所在的控制结构强制结束它所在的控制结构 (switch或循环结或循环结构构)。例如:例如:for( , , ) /* 大括号内是循环体大括号内是循环体 */ 语句语句1; break; /* 跳出循环,转做语句跳出循环,转做语句2 */ 语句语句2; 53.1 基本语句基本语句continue语句
3、语句4continue语句语句格式:格式:continue;功能:功能:提早结束当前轮次循环体的执行,进入下一提早结束当前轮次循环体的执行,进入下一轮循环轮循环。例如:例如: for( , , ) /* 大括号内是循环体大括号内是循环体 */ 语句语句1; continue; /* 不执行语句不执行语句2 */ 语句语句2; 语句语句3; 63.1 基本语句基本语句return语句语句5return语句语句格式:格式:return;或;或 return 表达式表达式;功能:功能:结束函数的这次执行,将控制返回到函数调用处结束函数的这次执行,将控制返回到函数调用处。说明:说明:return; 只
4、能用于函数不返回结果的函数体中;只能用于函数不返回结果的函数体中; return 表达式表达式; 用于函数有返回结果的函数体中。用于函数有返回结果的函数体中。 例如:例如:void swap(int a, int b) /* 大括号内是函数体大括号内是函数体 */ 语句语句1; return; /* 不执行语句不执行语句2,返回到调用函数,返回到调用函数 */ 语句语句2; 73.1 基本语句基本语句goto语句语句6goto语句语句格式:格式:goto 语句标号;语句标号;功能:功能:控制立即转移到控制立即转移到goto后标号所指定的语句处后标号所指定的语句处继续执行。继续执行。 例如:例如
5、:start: i = 0; . . . goto start;83.2 顺序结构顺序结构目前,结构化程序设计提供三种基本结构:目前,结构化程序设计提供三种基本结构:顺顺序结构、选择结构和循环结构序结构、选择结构和循环结构顺序结构:顺序结构:描述一个计算步骤序列,表示从步描述一个计算步骤序列,表示从步骤序列的第一个计算步骤开始,顺序执行每个计算步骤序列的第一个计算步骤开始,顺序执行每个计算步骤,直至最后一个计算步骤。骤,直至最后一个计算步骤。在在C C程序中,顺序执行的语句序列,用花括号括程序中,顺序执行的语句序列,用花括号括住,就构成住,就构成C C语言的复合语句。语言的复合语句。复合语句中
6、的每个计算步骤可以是单个语句,复合语句中的每个计算步骤可以是单个语句,也可以是一个控制结构。也可以是一个控制结构。 9顺序结构顺序结构 例例【例例】交换变量交换变量x x、y y的值。的值。可分解为以下顺序执行的三个计算:可分解为以下顺序执行的三个计算: temp = x; /* 将将x的值保存到变量的值保存到变量temp */ x = y; /* 变量变量x置置y值值 */ y = temp; /* 变量变量y置置temp的值的值 */ 若把交换变量若把交换变量x、y的值作为一个不可分割的整的值作为一个不可分割的整体来考虑,应把它们写成复合语句:体来考虑,应把它们写成复合语句: /* 本复合
7、语句要求外面为它定义本复合语句要求外面为它定义temp变量变量 */ temp = x; x = y; y = temp; 10顺序结构顺序结构 说明说明在构造复合语句时,为完成指定的工作,在构造复合语句时,为完成指定的工作,可能需要临时工作变量,可能需要临时工作变量,例如,以上述中的例如,以上述中的temptemp变量。在语句序列中插入变量定义,引入变量。在语句序列中插入变量定义,引入只有复合语句内的语句可使用的临时变量。例只有复合语句内的语句可使用的临时变量。例如,将前面的例子改写成以下形式:如,将前面的例子改写成以下形式: int temp; /* 定义自己专用的临时变量定义自己专用的临
8、时变量 */ temp = x; x = y; y = temp; 113.3 选择结构选择结构 选择结构可分为选择结构可分为两路条件选择结构两路条件选择结构和和多路按值选择结构多路按值选择结构两种。两种。3.3.1 两路条件选择结构两路条件选择结构 (if 语句语句) 由一个条件和两个供选择的分支语句组由一个条件和两个供选择的分支语句组成,用于按条件成立与不成立两种情况,成,用于按条件成立与不成立两种情况,作两种选一的控制。作两种选一的控制。12两路条件选择结构两路条件选择结构 (if 语句语句)if 语句的一般形式为:语句的一般形式为: if (表达式表达式) 语句语句1 else 语句语
9、句2 表达式?表达式?语句语句2假(假(0)真(非真(非0)语句语句1例如:例如: if (a b) printf(MAX = %fn, a); else printf(MAX = %fn, b);说明:当说明:当ab成立时,输出成立时,输出a,否则,输出,否则,输出b。 13if 语句语句无无else当当 if 语句中的语句语句中的语句2 2为空语句时,为空语句时,if 语句的形式为:语句的形式为: if (表达式表达式) 语句语句 表达式?表达式?语句语句假(假(0)真(非真(非0)例如:例如: max=a; if (max b) max=b; printf(MAX = %fn, max)
10、;说明:将说明:将a、b中大的数存于中大的数存于max,最后输出,最后输出max。 14if 语句语句例例3.1和和3.2【例例3.1】求求m = max(a, b)。 if ( a b ) /* 如果如果a c & b + c a & c + a b ) float s ; /* 因为是顺序结构,必须写成复合语句因为是顺序结构,必须写成复合语句 */ s = ( a + b + c ) / 2.0; area = sqrt(s * ( s - a ) * ( s - b ) * ( s - c); else area = 0.0; /* 不能构成三角形不能构成三角形 */15if 语句语句例
11、例3.3和和3.4 ( if 嵌套嵌套)【例例3.3】若若ch中的字符为大写字母,则改为对应的小写字母中的字符为大写字母,则改为对应的小写字母。 if (ch=A & ch= 90 ) printf(Excellent.n); else if ( score b ) /* 按小到大排列按小到大排列 */ temp = a; a = b; b = temp;193.3.1 if 语句的说明语句的说明1.1. 如果如果if语句中的语句、语句语句中的语句、语句1 1、语句、语句2 2是一个是一个简单语句,在这些简单语句之后会有一个简单语句,在这些简单语句之后会有一个分号。分号。2.2. 如果如果if
12、语句中的语句、语句语句中的语句、语句1、语句、语句2是由多是由多个语句组成的顺序结构时,则必须将它们个语句组成的顺序结构时,则必须将它们写成复合语句。写成复合语句。if ( a b ) /* 按小到大排列按小到大排列 */ temp = a; a = b; b = temp;203.3.1 if 语句的说明语句的说明3. 3. 在在if语句中,每个语句中,每个else总要与它前面的总要与它前面的if对对应,不可能出现没有对应应,不可能出现没有对应if 的的else。【例例】 if ( a b ) max = b; else max = a; else max = c; /* 错误错误 */ 2
13、1【例例3.5】输入输入3个整数,输出它们中的最大数个整数,输出它们中的最大数为求三个数中的最大者,最简洁的办法是先将其中某一为求三个数中的最大者,最简洁的办法是先将其中某一个预作最大者,然后逐一与其它两个数比较,当发现有更大个预作最大者,然后逐一与其它两个数比较,当发现有更大者时,就以它重置最大者。者时,就以它重置最大者。#include void main() int a, b, c, max; printf(输入输入3个整数个整数. n); scanf(%d%d%d, &a, &b, &c); max = a; if (max b) max = b; if (max = y = zx =
14、 y = z。方法:方法:先调整先调整x x和和y y,使,使 x = yx = y;再调整;再调整x x和和z z,使,使 x = zx = z;至此,至此,x x为最大值。最后再调整为最大值。最后再调整y y和和z z,使,使 y = zy = z。#include void main() int x, y, z, temp; printf(Enter x, y, z.n); scanf(%d%d%d, &x, &y, &z); if (x =y */ if (x =z */ if (y =z */ printf(%dt%dt%dn, x, y, z);23【例例3.7】求一元二次方程的根
15、求一元二次方程的根 设一元二次方程为设一元二次方程为ax2+bx+c=0,对输入的系数,对输入的系数a、b、c,有以下几种情况需要考虑:,有以下几种情况需要考虑:(1) a0:方程有两个根。方程有两个根。(2) a=0, b0:方程退化为方程退化为bx+c=0, 方程根为:方程根为:-c/b。(3) a=0, b=0:方程为同义反复方程为同义反复(c=0), 或或 矛盾矛盾(c0)。由以上分析得到以下程序结构:由以上分析得到以下程序结构: (1) 输入方程系数输入方程系数 a, b, c; if ( a != 0.0 ) (2)求两个根求两个根; else if ( b != 0.0 ) (3
16、) 输出方程根输出方程根 -c/b; else if ( c = 0 ) (4) 输出方程同义反复字样输出方程同义反复字样; else (5) 输出方程矛盾字样输出方程矛盾字样;24【例例3.7】求一元二次方程的根求一元二次方程的根分析分析分析分析1:对步骤、,用对步骤、,用C语言描述非常简单。语言描述非常简单。分析分析2:对步骤,根椐判别式:对步骤,根椐判别式: =b2-4ac0,有两个实根,有两个实根 =b2-4ac0,有两个复根,有两个复根 对于两个复根情况,可分别计算它们的实部和虚部。对于对于两个复根情况,可分别计算它们的实部和虚部。对于实根,也可根据上面给出的公式计算两个根。但是考虑
17、到实根,也可根据上面给出的公式计算两个根。但是考虑到 b2 4ac 时,有一个根就非常接近零。数值计算中,两个非常时,有一个根就非常接近零。数值计算中,两个非常接近的数执行减法求出的值的精度很低。为此先求出一个绝接近的数执行减法求出的值的精度很低。为此先求出一个绝对值大的根对值大的根root1。然后,利用根与系数的关系。然后,利用根与系数的关系: root1*root2 = c/a 即即 root2 = c/(a*root1)求出求出 root2。25【例例3.7】求一元二次方程的根求一元二次方程的根程序程序#include #include /* 使用数学库函数使用数学库函数 */void
18、main() double a, b, c, delta, re, im, root1, root2; printf(输入方程系数输入方程系数 a, b, cn); scanf(%lf%lf%lf,&a,&b,&c); if (a != 0.0) /* 有两个根有两个根 */ delta = b*b-4.0*a*c; /* 求判别式求判别式 */ re = -b/(2.0*a); im= sqrt(fabs(delta)/(2.0*a); /* fabs是求绝对值函数是求绝对值函数 */ if (delta= 0.0) /* 两个实根两个实根, 先求绝对值大的根先求绝对值大的根*/ root1
19、 = re + (b 0.0 ? im : -im); root2 = c/(a*root1); printf(两实根分别是两实根分别是: %7.5f, %7.5fn,root1,root2); 26【例例3.7】求一元二次方程的根求一元二次方程的根程序续程序续 else printf(两复根分别是两复根分别是: %7.5f+%7.5fI, %7.5f-%7.5fIn, re, fabs(im), re, fabs(im); else /* a = 0.0 */ if (b != 0.0) printf(单根单根 %7.5fn, -c/b); else if (!c) printf(方程同义反
20、复方程同义反复.n); else printf(方程矛盾方程矛盾.n); 27l说明:uif后面的表达式类型任意l语句可以是复合语句l if(x) if(x!=0)l if(!x) if(x=0)例 考虑下面程序的输出结果考虑下面程序的输出结果: #include void main() int x,y; scanf(“%d,%d”,&x,&y); if(xy) x=y; y=x; else x+; y+; printf(“%d,%dn”,x,y);Compile Error!28 一般形式:一般形式:if (expr1) if (expr2) statement1 else statemen
21、t2else if(expr3) statement3 else statement4内嵌内嵌if内嵌内嵌ifif (expr1) if (expr2) statement1 else statement2内嵌内嵌ifif (expr1) if (expr2) statement1else statement3 内嵌内嵌ifif (expr1) statement1else if(expr3) statement3 else statement4内嵌内嵌ifif 语句的嵌套语句的嵌套形式形式29 if if 语句中的语句中的“表达式表达式”一定要用一定要用()()括起来,括起来, 如:如:if
22、 if abab ; () 表达式后面只控制一条语句,但可以是一条表达式后面只控制一条语句,但可以是一条 复合语句复合语句 if if else else 配对原则:配对原则:缺省缺省 时,时,elseelse总是总是和它上面离它最近的需配对的和它上面离它最近的需配对的ifif配对配对if()if()if()else.else.else.if 语句的语句的注意要点注意要点实现实现if else 正确配正确配对方法:加对方法:加 30例: if (a= =b) if(b= =c) printf(“a= =b= =c”); else printf(“a!=b”);修改: if (a= =b) if
23、(b= =c) printf(“a= =b= =c”); else printf(“a!=b”);if 语句语句配对原则分析配对原则分析按照配对原则,else与最近的未配对的if配对如果需要如红箭头所示配对的话则应修改如下:31看下面程序,写输出结果看下面程序,写输出结果: : main()/注意程序的缩进规则 int x=100,a=10,b=20; int v1=5,v2=0; if(ab) if(b!=15) if(!v1) x=1; else if(v2) x=10; x=-1;printf(“x=%d”,x); 课堂练习课堂练习 (if 语句语句)答案:答案:x=-132读程序写结果
24、:第1题#includevoid main( ) int a,b,c;int x=35;a=b=c=0;if(!a)x-;else if(b) if(c)x=3;else x=4;printf(x=%d,x);第2题#includevoid main( ) int a,b,c;int x=35;a=b=c=0;if(!a)x-;else if(b) ;if(c)x=3;else x=4;printf(x=%d,x);答案:答案:x= 答案:答案:x= 课堂练习课堂练习 (if 语句语句)33第三题第三题#includevoid main()int m=5;if(m+5)printf(“%dn”
25、,m);else printf(“%dn”,m-);答案:答案:634if 语句的练习(填空)语句的练习(填空) 当当a=1,b=3,c=5,d=4时时,执行下面一段程序后,执行下面一段程序后,x的值是()的值是() /注意程序的缩进规则注意程序的缩进规则if(ab)if(cd)x=1;else if(ac)if(bd)x=2;else x=3; else x=6;else x=7;答案:答案:2353.3.2 多路按值选择结构多路按值选择结构switch语句描述多路按值选择结构。语句描述多路按值选择结构。switch语句的一般形式为:语句的一般形式为: switch (表达式表达式) cas
26、e 常量表达式常量表达式1: 语句序列语句序列1 case 常量表达式常量表达式2: 语句序列语句序列2 . case 常量表达式常量表达式n: 语句序列语句序列n default : 语句序列语句序列n+1 36switch 语句语句执行过程执行过程语句序列语句序列n+1语句序列语句序列1.语句序列语句序列n+1语句序列语句序列2. 表达式表达式=?语句序列语句序列n+1语句序列语句序列n语句序列语句序列n+1值值1值值2值值n所有条件所有条件都不满足都不满足说明:说明:若遇到若遇到break语句,则直接转向语句,则直接转向switch出口出口37switch 语句说明语句说明1. swit
27、ch后面括号内的表达式只限于是整型表达式、字后面括号内的表达式只限于是整型表达式、字符型表达式或枚举型表达式。符型表达式或枚举型表达式。 2.当表达式的值与某一个当表达式的值与某一个“case 常量表达式常量表达式”的值相的值相等时,就执行等时,就执行case后面的语句,只要未遇到后面的语句,只要未遇到break语语句或句或goto语句就一直向下执行,直至语句就一直向下执行,直至switch语句出口。语句出口。3.只有当所有条件都不匹配时,才执行只有当所有条件都不匹配时,才执行default后面的后面的语句序列。语句序列。4.每一个每一个case的常量表达式的值必须互不相同,并与的常量表达式的
28、值必须互不相同,并与switch后面括号内的表达式值的类型相一致。后面括号内的表达式值的类型相一致。5.语句序列由任意条合法的语句构成,也可以没有语句序列由任意条合法的语句构成,也可以没有语句。语句。38 void main() char choice; printf(Enter choice !(A, B, C, .n); scanf(%c, &choice); switch (choice) case A : printf( A chosen!n); case B : printf( B chosen!n); case C : printf( C chosen!n); default :
29、printf( default chosen!n); 如输入字符如输入字符B ,则程序的执行将输出:,则程序的执行将输出: B chosen! C chosen! default chosen!【例例3.8】输入选择,输出相应的选择名称输入选择,输出相应的选择名称39switch 语句语句break语句语句break作用:作用:控制转向控制转向switch语句的后继语句,即跳语句的后继语句,即跳 出出Switch语句。语句。【例例3.9】根据天气情况,安排活动。根据天气情况,安排活动。int w_con; /* 天气情况变量定义天气情况变量定义 */printf(天气如何天气如何? 1:晴天晴
30、天, 2:多云多云, 3:下雨下雨 );scanf(%d,&w_con);switch (w_con) case 1 : printf(上街购物上街购物!n); break; case 2 : printf(去游泳去游泳!n); break; case 3 : printf(在家看电视在家看电视!n);break; default: printf(错误选择错误选择!n); 40【例例3.10】计算计算switch (int) (x+0.5) case 1: y = sin(x); break; case 2: case 3: case 4: y = log(x); break; case 5:
31、 case 6: case 7: y = exp(x); break; default : printf(自变量自变量x值超出范围值超出范围n ); break; sin(x) 0.5 x 1.5y(x) = log(x) 1.5 x 4.5 exp(x) 4.5 x 7.541例例 #include void main() / switch 语句的嵌套语句的嵌套 int x=1,y=0,a=0,b=0; switch(x) case 1: switch(y) case 0: a+; break; case 1: b+; break; case 2: a+;b+; break; case 3:
32、 a+;b+; printf(“na=%d,b=%d”,a,b); 运行结果:运行结果:a=2,b=1 课堂练习课堂练习 (1.读读switch 语句语句)42#includevoid main( ) int a=1,b=2;int y;switch(pow(a,2)+pow(b,2)case 1: case 3:y=a+b;break;case 0:case 5:y=a-b;printf(%5d%d,y,a); 课堂练习课堂练习 (2.switch 语句语句是否有错是否有错)分析:错分析:错因为因为switch后面后面括号内括号内表达式不能表达式不能为为double43void main()
33、 int x=0,y=2,z=1; switch(x)case 0: switch(y=2)case 1:printf(*);break;case 2:printf(%);break;case 1: switch(z)case 1:printf($);case 2:printf(*);break;default:printf(#); 课堂练习课堂练习 (3.读读switch 语句语句)运行结果:运行结果:*$*44循环控制循环控制 为什么需要循环?为什么需要循环?& 编程计算编程计算10的阶乘的阶乘& 现需要把十个同学的成绩输入计算机,并进行统计计现需要把十个同学的成绩输入计算机,并进行统计计
34、算平均值,请用前面学过的知识编程来解决算平均值,请用前面学过的知识编程来解决453.4 循环结构循环结构C语言提供描述三种不同的循环结构的语句:语言提供描述三种不同的循环结构的语句: while语句、语句、do_while语句、语句、for语句语句3.4.1 while语句语句一般形式:一般形式:while (表达式表达式) 语句语句执行过程:执行过程:(1) 计算循环条件表达式的值计算循环条件表达式的值(2) 当表达式的值为非当表达式的值为非0时,转步骤时,转步骤(3); 当表达式的值为当表达式的值为0时,结束循环时,结束循环(3) 执行循环体,并转步骤执行循环体,并转步骤 (1)说明:若循
35、环体由两个以上语句组成,循环体应写成复说明:若循环体由两个以上语句组成,循环体应写成复合语句合语句循环体循环体46v执行流程执行流程:expr循环体循环体假假(0)真真(非非0)while while 循环循环语句语句while while 循环语句循环语句下面的语句下面的语句47例例 用用while循环求循环求 1001nn#include void main() int i,sum=0; i=1; while(i100,用,用i+语句达语句达到此目的;如果无到此目的;如果无i+语句,将导致循环条件永语句,将导致循环条件永远成立,永不结束。远成立,永不结束。3. 当循环体为空时,可用空语句代
36、替。当循环体为空时,可用空语句代替。例:跳过输入的空白类字符:例:跳过输入的空白类字符: while( (c=getchar() ) = | c = t );无循环体,无循环体,用空语句表示用空语句表示49while语句说明语句说明(续)(续)4. 有时很难写出循环条件,可用有时很难写出循环条件,可用 1 代之代之(表示条件为真)(表示条件为真), 但在循环体中必须有但在循环体中必须有 break 语句(用于跳出循环)。语句(用于跳出循环)。 while (1) . if (表达式表达式) break; . 50例例 显示显示110的平方的平方#include void main() int
37、i=1; while(i=10) printf(%d*%d=%dn,i,i,i*i); i+; 运行结果:运行结果:1*1=12*2=43*3=94*4=165*5=256*6=367*7=498*8=649*9=8110*10=10051课堂练习课堂练习 (while 语句)语句)1、设有如下程序:、设有如下程序:#include void main() int n=9; while(n-6) printf(%d,n);printf(%d,n);该程序段的输出结果是该程序段的输出结果是_ A) 987 B)876 C) 8765 D)9876 答案:答案:C解答:解答:不管是否满足循环不管是
38、否满足循环条件,条件,n=n-1都要进行都要进行52【例例3.12】求学生平均成绩,当输入负数时结束求学生平均成绩,当输入负数时结束#include void main() int sum, count, mark; sum = 0; count = 0; while (1) /* 循环条件永远为真循环条件永远为真 */ printf(输入成绩输入成绩(小于小于0 结束结束)n); scanf(%d,&mark); if (mark 0) break; /* 跳出跳出while循环循环 */ sum += mark; /* 累计总分累计总分 */ count+; /* 学生人数计数器增学生人数
39、计数器增1 */ if (count) printf(平均成绩为:平均成绩为:%.2fn, (float)sum)/count); else printf(没有数据输入没有数据输入.n);53#include void main() int c, nwhite, nother, ndigit; nwhite=nother=ndigit=0; printf(Enter string linen); while (c=getchar() != n) switch(c) case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: c
40、ase 8: case 9: ndigit+; break; case : case t: nwhite+; break; default: nother+; break; printf(digit=%dtwhite space=%dtother=%dn, ndigit, nwhite, nother);【例例3.13】统计输入字符行中,空白类字符、数统计输入字符行中,空白类字符、数字符和其它字符的个数字符和其它字符的个数543.3.2 do-while语句语句执行过程:执行过程:(1) 执行循环体执行循环体(2) 求循环条件表达式的值求循环条件表达式的值(3) 当表达式的值为非当表达式的值为
41、非0时,转步骤时,转步骤 (1); 当表达式的值为当表达式的值为0时,结束循环。时,结束循环。注意:注意:分号是分号是do-while语句的结束符,不能省语句的结束符,不能省略。略。循环体循环体& 一般形式:一般形式: do do 循环体语句;循环体语句; while(while(表达式表达式) );55 dowhile语句语句执行流程执行流程& 执行流程:执行流程:do循环体循环体expr假假(0)(0)真真( (非非0)0)while do while do while循环循环下面的语句下面的语句56 dowhile 语句的特点语句的特点 v特点:先执行循环体,后判断条件表达式特点:先执行
42、循环体,后判断条件表达式v说明:说明:l至少执行一次循环体至少执行一次循环体ldowhile可转化成可转化成while结构结构expr循环体循环体假假(0)(0)真真( (非非0)0)循环体循环体whilewhile循环循环57 while和和 dowhile 语句的对照语句的对照 expr循环体循环体假假(0)真真(非非0)whilewhile while 循环循环下面的语句下面的语句do循环体循环体expr假假(0)(0)真真( (非非0)0)while do while do while循环循环下面的语句下面的语句58do-while语句说明语句说明 1. 与与while语句一样,当循环
43、体由多个语句组语句一样,当循环体由多个语句组成时,必须把它们书写成复合语句。成时,必须把它们书写成复合语句。2. while与与do-while区别区别while:先判别表达式,后执行循环体,当先判别表达式,后执行循环体,当 while 表达式第一次为假时,循环体一次也表达式第一次为假时,循环体一次也不执行。不执行。do-while:先执行循环体,后判别表达式。因先执行循环体,后判别表达式。因此,使用此,使用do-while至少执行一次循环体。至少执行一次循环体。59课堂练习课堂练习 (dowhile 语句)语句)选择题:选择题:假定假定a和和b为为int型变量,则执行以下语句后型变量,则执行
44、以下语句后b的值为的值为_ a1; b10; do ba; a; while (b0); A) 4 B)5 C) 1 D)6 答案:答案:A解答:解答:不管是否满足循环不管是否满足循环条件,条件,b=b-1都要进行都要进行60do-while语句例语句例【例例3.15】求方程求方程f(x)=3x3+4x2-2x+5的实根。的实根。说明:说明:1. 用牛顿迭代方法求方程用牛顿迭代方法求方程f(x)=0的根的近似解的根的近似解: xk+1=xk-f(xk)/f (xk), k=0, 1, 2. 当修正量当修正量dk=f(xk)/f(xk) 的绝对值小于某个的绝对值小于某个很小数很小数时,时,xk+
45、1就作为方程的近似解。就作为方程的近似解。3. 下面的程序取迭代初值为下面的程序取迭代初值为-2, = 1.0e-6。61#include #include /* 引用数学函数引用数学函数 */#define Epsilon 1.0e-6void main() double x, d; x = -2.0; do d = (3.0*x+4.0)*x-2.0)*x+5.0)/ (9.0*x+8.0)*x-2.0); /* f(x)/f(x) */ x = x-d; while (fabs(d) Epsilon); /* 未满足精度要求循环未满足精度要求循环 */ printf(The root i
46、s %.6fn, x);【例例3.15】求方程求方程f(x)=3x3+4x2-2x+5的源程序的源程序结果为:结果为: The root is -2.05331962do-while语句语句 例例【例例3.16】查找一个最小整数,要求满足以下条件:查找一个最小整数,要求满足以下条件: 被被3除余除余2,被,被5除余除余3,被,被7除余除余4。#include void main() int i = 2; do i+; while (! (i%3 = 2 & i%5 = 3 & i%7 = 4); printf(被被3除余除余2,被,被5除余除余3,被,被7除余除余4的最小数是的最小数是: %d
47、n, i);结果为:结果为:53 63【例例3.16】 提高运行效率提高运行效率 采用分阶段的办采用分阶段的办法,先让变量在保法,先让变量在保证满足条件被证满足条件被3除余除余2情况下,寻找被情况下,寻找被5除余除余3的解;接着在的解;接着在保证被保证被3除余除余2和被和被5除余除余3的条件下,寻的条件下,寻找被找被7除余除余4的解,的解,这样做能简化循环这样做能简化循环条件,并能加快找条件,并能加快找解的速度。解的速度。#include void main() int i = 2; /* 初值初值i被被3除余除余2 */ do i += 3; /* 保证保证i被被3除余除余2 */ whil
48、e(i % 5 != 3);/* 保证保证i被被3除余除余2, 并被并被5除余除余3 */ while(i % 7 != 4) i += 15; /* 3*5 */ printf(被被3除余除余2,被,被5除余除余3, 被被7除余除余4的最小数是的最小数是: %dn, i);643.4.3 for语句语句执行过程:执行过程:(1) 计算表达式计算表达式1(2) 当表达式当表达式2的值为非的值为非0,转步骤,转步骤(3); 当表达式当表达式2的值为的值为0,结束循环,结束循环(3) 执行循环体语句执行循环体语句(4) 计算表达式计算表达式3(5) 转向步骤转向步骤(2)。循环体循环体v一般形式:
49、一般形式: for(expr1 ; expr2 ; expr3) 循环体语句;循环体语句;65for 语句语句执行流程执行流程 v执行流程:执行流程:expr2循环体循环体假假(0)(0)真真( (非非0)0)forexpr1expr366vforfor语句一般应用形式语句一般应用形式:for(for(循环变量赋初值循环变量赋初值;循环条件循环条件;循环变量增值循环变量增值) ) 循环体语句;循环体语句; & 说明:说明: forfor语句中语句中expr1, expr2 ,expr3 expr1, expr2 ,expr3 类型类型任意且都可省略,但分号任意且都可省略,但分号;不可省不可省
50、无限循环无限循环: for( : for( ;) )67for 语句语句说明说明1. for语句的一般形式中,表达式语句的一般形式中,表达式1、表达式、表达式2 和表达式和表达式3都可以省略。都可以省略。表达式表达式1省略:省略:表示没有赋初值部分,或在表示没有赋初值部分,或在for语句语句前已为有关变量赋了初值。前已为有关变量赋了初值。例:例: 求求 s = 1 + 2 + + 100 s = 0; i = 1; for( ; i = 100; i+) s += i;68表达式表达式2省略:省略:表示循环条件永远为真,可能循环表示循环条件永远为真,可能循环体内有控制转移语句转出体内有控制转移
51、语句转出for语句。语句。例:例: for(s = 0, i = 1; ; i+) s += i; if(i = 100) break; 表达式表达式3省略:省略:表示没有修正部分,对变量的修正表示没有修正部分,对变量的修正已在循环体内一起完成。已在循环体内一起完成。 for(s = 0, i = 1; i = 100;) s += i+;for 语句说明语句说明(续)(续)69 不管表达式不管表达式1、表达式、表达式2和表达式和表达式3省略情省略情况如何,其中两个分号都不能省略。况如何,其中两个分号都不能省略。如果三个表达式都省略,用以下形式表示:如果三个表达式都省略,用以下形式表示: fo
52、r( ; ; ) 语句语句2.2. 表达式表达式1、表达式、表达式2和表达式和表达式3都可包含逗都可包含逗号运算符,由多个子表达式组成。号运算符,由多个子表达式组成。例:例: for(s=0,i=1;i=100;i+) s +=i;for 语句说明语句说明(续)(续)70对于对于 s = 1 + 2 + + 100 的计算的计算下面都是合理的下面都是合理的for语句描述。语句描述。 for(s=0,i=1; i=100; s+=i, i+); for(s=0,i=1; s+=i,i100; i+); for(s=0,i=0; i100; +i, s+=i); for(s=0,i=1; i=10
53、0; s+=i+);for 语句说明语句说明(续)(续)71 归纳总结归纳总结& while 、dowhile和和for循环结构中的循环结构中的“循环循环体体” 都只能是一条语句!如果需要使用多条都只能是一条语句!如果需要使用多条语句来完成的循环体的功能,则应使这些语语句来完成的循环体的功能,则应使这些语句组成一条复合语句!句组成一条复合语句!72答案答案:v1=5,v2=273习习 题题求下列循环体 的执行次数for (int i=0,j=3;i=j+1;i+=2,j-)printf(“%d”,i);答案:两次两次74 课堂练习课堂练习 (for 语句)语句)选择题:选择题:共两题共两题1、
54、若有、若有int x;且有下面程序片段,则输出结果是且有下面程序片段,则输出结果是 _。 for (x=3;x6;x+) printf(x%2)? *%d:#%dn,x);A.*3 B. #3 C. #3 D. *3#4 #4 *4 *4#5 *5 *5 #5 答案:答案:D75 课堂练习课堂练习 (for 语句)语句)2、有以下程序、有以下程序:void main( ) int x,I;for(I=1;I=50;I+)x=I;if(+x%2=0) if(x%3=0) if(x%7=0) printf(“%d”,I);输出结果是输出结果是_A. 28 B. 27 C. 42 D. 41答案:答
55、案:D76辅助控制语句辅助控制语句 1 1、breakbreak语句语句 功能:在循环语句和功能:在循环语句和switch语句中语句中,终止并跳出终止并跳出循环体或开关体循环体或开关体 说明:说明:break只能只能终止并跳出最近一层的结构终止并跳出最近一层的结构break不能用于循环语句和不能用于循环语句和switch语句之外语句之外的任何其它语句之中的任何其它语句之中77语句的应用流程图(语句的应用流程图(1)exprbreak;假假(0)真真(非非0)whiledobreak;.expr假假(0)真真(非非0)while78语句的应用流程图语句的应用流程图expr2break;.假假(0
56、)真真(非非0)forexpr1expr3语句组语句组1break;switchexpr语句组语句组2break;语句组语句组nbreak;语句组语句组break;.const 1const 2const ndefaultcase 79 功能:结束本次循环,跳过循环体中尚未执行功能:结束本次循环,跳过循环体中尚未执行 的语句,进行下一次是否执行循环体的判断的语句,进行下一次是否执行循环体的判断仅用于循环语句中仅用于循环语句中80expr2continue;.假假(0)真真(非非0)forexpr1expr3continue语句的应用流程图(语句的应用流程图(1)81expr continue;
57、假假(0)真真(非非0)whilecontinue语句的应用流程图(语句的应用流程图(2)真真(非非0)docontinue;.expr假假(0)while82语句中语句中 break和和continue的对比的对比expr2break;.假假(0)真真(非非0)forexpr1expr3expr2continue;.假假(0)真真(非非0)forexpr1expr383C+语言的跳转语句中,对于语言的跳转语句中,对于break和和continue说法正确的是说法正确的是( ).A) break语句只使用于循环体中语句只使用于循环体中B) continue语句只应用于循环体中语句只应用于循环体
58、中C) break是无条件跳转语句,是无条件跳转语句,continue不是不是D) break和和continue的跳转范围不够明确,的跳转范围不够明确,容易产生问题容易产生问题 课堂练习课堂练习 (break和和continue语句)语句)答案:答案:B84循环的嵌套循环的嵌套 循环的嵌套:一个循环体内又包含另一个完整的循环结构循环的嵌套:一个循环体内又包含另一个完整的循环结构 三种循环可互相嵌套三种循环可互相嵌套, ,层数不限层数不限 外层循环可包含两个以上内循环外层循环可包含两个以上内循环, ,但不能相互交叉但不能相互交叉 嵌套循环的几种常见形式:嵌套循环的几种常见形式:(1) whil
59、e( ) while( ) . (2) do do while( ); . while( );85 嵌套循环的常见形式举例嵌套循环的常见形式举例 (4) for( ; ;) do while(); while() . 内循环内循环外循环外循环内循环内循环(3) while() do while( ); . 86 循环嵌套中的跳转问题循环嵌套中的跳转问题 禁止:禁止:l从外层跳入内层从外层跳入内层l跳入同层的另一循环中跳入同层的另一循环中l向上跳转向上跳转87 课堂练习课堂练习 (综合题(综合题1 )选择题:选择题:共两题共两题1、有以下程序、有以下程序# includevoid main()
60、/循环的嵌套循环的嵌套 int I,j; for(j=10;j12;j+)for(I=9;Ij) printf(%d,j);输出结果为输出结果为_A. 91011 B. 9910 C. 1011 D. 101011答案:答案:B88 课堂练习课堂练习 (综合题(综合题2)2、有以下程序、有以下程序# includevoid main() int a,b; for(a=1, b=1; a10) break; if (b%3=1) b+=3; continue; printf(%d,b); printf(%dn,a); 输出结果为输出结果为_A) 4710135 B) 4710136 C) 5 D
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025《Young在春晚》招商方案-
- 医学资料档案管理制度
- 人教部编版四年级语文上册第16课《麻雀》精美课件
- 算法设计与分析 课件 5.3-动态规划-原理方法步骤
- 2024年西宁客运资格证培训资料
- 2024年盐城申请客运从业资格证理论考试题
- 2024年曲靖客运从业资格证培训考试资料
- 2024年孝感道路客运输从业资格证理论考题
- 吉首大学《建筑美学》2021-2022学年第一学期期末试卷
- 吉首大学《常微分方程》2021-2022学年第一学期期末试卷
- 电机与电气控制技术课程说课
- 职业生涯报告六篇
- 作业本印制服务投标方案(技术标)
- 上虞净化工程施工方案范本
- 【语文】宁波市小学四年级上册期中试卷
- 辽宁省沈阳市铁西区2023-2024学年七年级上学期期中地理试题
- 环保设施安全风险评估报告
- 建设工程消防验收技术服务项目方案(技术标 )
- 脑梗死恢复期康复临床路径表单
- 拆除桥梁专项施工方案范本
- 【基于活动理论的信息技术课程教学研究8300字(论文)】
评论
0/150
提交评论