收藏 分享(赏)

第4章选择结构、循环结构程序设计.ppt

上传人:tkhy51908 文档编号:8009937 上传时间:2019-06-04 格式:PPT 页数:42 大小:1.43MB
下载 相关 举报
第4章选择结构、循环结构程序设计.ppt_第1页
第1页 / 共42页
第4章选择结构、循环结构程序设计.ppt_第2页
第2页 / 共42页
第4章选择结构、循环结构程序设计.ppt_第3页
第3页 / 共42页
第4章选择结构、循环结构程序设计.ppt_第4页
第4页 / 共42页
第4章选择结构、循环结构程序设计.ppt_第5页
第5页 / 共42页
点击查看更多>>
资源描述

1、,第四章,选择结构、循环结构程序设计,4.1 概述,4.1.1 C语句概述通常一个C程序由若干个函数组成,每一个函数又包括声明部分和执行部分,执行部分又由干条语句组成,每条语句总是以“;”结束。语句是用来对数据进行加工(完成操作任务),是构成程序的基本单位, 注意:C语句都是用来完成一定操作的,出现在函数体的执 行部分,作用是向计算机系统发出操作指令。声明部分的内容不应称为语句。如int a;不是一个C语句。,C语句,控制语句,函数调用语句,由一次函数调用加一个分号构成一个语句。,表达式语句,空语句,复合语句,if () else switch( ) for () while ( ) do w

2、hile( ) continue break goto return,if (xy)z=x; elsez=y;,printf(“Hello!“);,由表达式加一个分号构成一个语句。,a=3;,;,由 将一些语句括起来。,t=a; a=b;b=t; ,C语句分类,4.1.2 结构化程序设计方法自顶向下,逐步细化 模块化设计,结构化编码,4.2 选择结构程序设计,1.if语句的三种基本形式(1)if (表达式e) 语句例:if(xy) printf(“%d”,x);,(单分支),4.2.1 if语句,注意:在C语言中,表达式e的值为非0时,系统均按“真值”处理 如:if(a) printf(“O.

3、K.”); x=-5; if(x) printf(“O.K.”); y=0; if(y=0) printf(“O.K.”); if(y) printf(“O.K.”);,#include void main() float a,b,t;scanf(“%f,%f”, ,3,43.00, 4.00, if (ab)t=a; a=b; b=t; , if (ab)t=a; a=b; b=t; ,当某些语句作为一个整体出现的时候,必须是复合语句的形式。,3,44.00, 0.00,例4.1 输入两个实数,按代数值由小到大的顺序输出这两个数。,例4.2 输入三个数a,b,c,要求按由小到大的顺序输出。,

4、if(ab)将a和b对换 if(ac)将a和c对换 if(bc)将b和c对换,#include void main ( ) float a,b,c,t; scanf(%f,%f,%f, ,(2)if(表达式) 语句1else 语句2例:if (xy) printf(“%d”,x);else printf(“%d”,y);,双分支,例4.3 输入任意三个整数,求三个数中的最大值。,#include void main() int a,b,c,max;scanf(“%d,%d,%d”, ,#include void main() int a,b,c,max;scanf(“%d,%d,%d”, ,#

5、include #include void main() float a,b,c,p,s;scanf(“%f,%f,%f”, ,例4.4 输入三角形的三边,求三角形的面积。,3,4,5 s= 6.00,3,4,8 Not a triangle!,(3)if(表达式1)语句1else if(表达式2)语句2else if(表达式3)语句3else if(表达式m)语句melse 语句n,多分支,例:if (number500)cost=0.15;else if(number300)cost=0.10;else if(number100)cost=0.075;else if(number50)co

6、st=0.05;else cost=0;,说明: (1)3种形式的if语句中在if后面都有表达式,一般为逻辑表达式或关系表达式。 (2)第二,第三种形式的if语句中,在每个else前面有一个分号,整个语句结束处有一个分号。 (3)在if和else后面可以只含有一个内嵌的操作语句,也可以由多个操作语句,此时用花括号将几个语句括起来成为一个复合语句。,2.if语句的嵌套在if语句中又包含一个或多个if语句称为if语句的嵌套。 形式: if( )if( ) 语句1else 语句2 elseif( ) 语句3else 语句4,内嵌if,匹配规则:else总是与它上面的、最近的、未配对的if配对。,例:

7、 if()if( ) 语句1 elseif( ) 语句2 else 语句3,例: if( )if( ) 语句1 else if( ) 语句2 else 语句3,当if和else数目不同时,可以加花括号来确定配对关系。,if (表达式) if(表达式) 语句else 语句 else if(表达式3) 语句3else 语句4,例,已知a=3 b=4 c=5 d=0, d=?,if (ab) d=a; else if (cb) d=c;else d=b;,if (ab)if (cb) d=c; else d=b ;,if (ab)if (cb) d=c; else d=b ;,if (ab) if

8、(cb) d=c;else d=b; else d=a;,d=5,d=3,d=0,d=4,例4.5 求ax2+bx+c=0方程的解。 基本的算法: a=0,不是二次方程。 b2-4ac=0,有两个相等实根。 b2-4ac0 ,有两个不等实根。 b2-4ac0 ,有两个共轭复根。,#include #include void main ( ) float a,b,c,d,x1,x2,p,q; scanf(“%f,%f,%f”, ,4.2.3 switch语句,1、switch语句的格式: switch (e)case 常量表达式:语句case 常量表达式:语句case 常量表达式 :语句defa

9、ult :语句,注意:1、表达式e一般是整型或字符型,而不能为实型。2、常量表达式c必须与表达式e类型一致。3、常量表达式i仅起语句标号作用,不作求值判断。4、常量表达式的值必须是唯一的,没用先后次序。,2、执行过程 1)计算表达式e 的值; 2)若表达式e的值与case后面的常量表达式i的值语句一致,则从语句i开始执行;直到遇到break或switch语句的“”。 3)若与任何常量表达式值均不一致时,则执行default语句或执行后续语句。,例: 要求按照考试成绩的等级输出百分制分数段,用 switch语句实现: switch(grade) case printf(85100);case p

10、rintf (7084);case printf (6069);case printf (60);default printf ( error);,例4.6,#include void main() char grade; printf(“请输入考试等级AD:”);scanf(“%c”, ,B 7079 6069 60 Error,根据输入的考试成绩等级打印出百分制分数段。 A: 80100 B: 7079 C: 6069 D: 60,说明:应在每一个printf后加break语句,#include void main() char grade; printf(“请输入考试等级AD:”);sc

11、anf(“%c”, ,B 7079,最后一行的break可以省略。,运输公司对用户计算运费。路程(s)越远,每公里运费越低。标准如下:s250 没有折扣250 s300 2%折扣 500 s1000 5%折扣 1000 s2000 8%折扣2000 s3000 10%折扣s3000 15%折扣 设每公里每吨货物的基本运费为p,货物重为w,距离为s,折扣为d,则总运费的计算公式为 F=p*w*s*(1-d),分析折扣变化的规律性: 折扣的“变化点”都是250的倍数 在横轴上加一种坐标,c的值为s/250。 c代表250的倍数。 c1,无折扣; ,折扣=2; ,=5; ,=8; ,=10;,=15

12、。,例4.7,#include void main ( ) int c,s; float p,w,d,f; scanf(“%f,%f,%d“,4.3 循环结构程序设计,4.3.1 while语句while语句用来实现“当型”循环结构。 一般形式:while (表达式) 语句;当表达式为非0值时,执行while语句中的内嵌语句。其特点是:先判断表达式,后执行语句。,循环控制表达式,循环体,例4.8 求1到100的和 #include void main( ) int i=1,sum=0; while (i=100) sum=sum+i; i+; printf(“%dn”,sum); ,说明:(1

13、)循环体如果包含一个以上的语句,应该用花括弧括起来,以复合语句形式出现。(2)在循环体中应有使循环趋向于结束的语句。(3)循环前,必须给循环控制变量i赋初值。,读程序,4.3.2 用do-while语句实现循环,do-while语句的特点:先执行循环体,然后判断循环条件是否成立。一般形式:,执行过程:先执行一次指定的循环体语句,然后判别表达式,当表达式 的值为非零(“真”) 时,返回重新执行循环体语句,如此反复,直到表 达式的值等于0为止,此时循环结束。,do循环体语句 while (表达式);,注意:;不能省,例4.9 求1到100的和 #include void main( ) int i

14、=1,sum=0; do sum=sum+i; i+; while(i=100); printf(“%dn”,sum); ,格式,for (表达式1;表达式2;表达式3) 语句,for (循环变量赋初值;循环条件;循环变量增值) 语句,执行过程,(1)先求解表达式1; (2)求解表达式2,若其值为真,则 执行循环体语句,然后执行第(3)步;若为假,则结束循环,转到第(5)步; (3)求解表达式3; (4)转向步骤(2); (5)循环结束,执行for语句下面的一个语句。,4.3.3 for 语句,例4.10 求1100的累加和,include void main( ) int i,sum;sum

15、=0;for (i=1;i=100;i+)sum=sum+i;printf(“sum=%5dn”,sum); ,表达式2一般是关系表达式或逻辑表达式,但也可以是数值表达式或字符表达式, 只要其值不等于0就执行循环体。 如:for(k=1;k-4;k+) s=s+k; 仅当k的值等于4时终止循环。k-4是数值表达式。,For语句的其他形式:,例: i=1;for(;i=100;i+) sum=sum+i;,例:for(i=1;i=100;)sum=sum+i;i+;,例: for(i=1; ;i+) sum=sum+i;,表达式1;for(;表达式2;表达式3) 语句;,for(表达式1;表达式

16、2;)语句; 表达式3;,for(表达式1;表达式3)语句,表达式1;for(;表达式2;) 语句表达式3;,例: i=1; for(;i=100;) sum=sum+i; i+;,for( ;)语句,include void main( ) int m,n,num1,num2,num3;num1=num2=num3=0;for (n=1;i0) num1+;else if (m=0) num2+;else num3+; printf(“%d,%d,%dn”,num1,num2,num3); ,例4.11 编一个程序,输入10个整数,统计并输出其中正数、负数和零的个数。,4.3.4 循环的嵌套

17、,一个循环体内又包含另一个完整的循环结构称为循环的嵌套。内嵌的 循环中还可以嵌套循环,这就是多层循环。三种循环(while循环、do-while 循环和for循环)可以互相嵌套。,下面几种都是合法的形式: (1) while( ) (2) do (3) for(;) while( ) do for(;) while( ); while( );,(4) while( ) (5) for(; ;) do while( ) for(;) while( ); while( ) ;,循环嵌套的说明1、嵌套的循环控制变量不能相同 2、内循环变化快,外循环变化慢 如:for(i=1;i=9;i+) for(

18、j=1;j=I;j+) printf(“%1d*%1d=%2d ”,i,j,i*j); printf(“n”);,例4.12 试找出满足下列条件的所有三位数 其百位数不大于2; 将个位与百位对换,得到的三位数是原三位数的两倍多 分析: 用三重循环的循环控制变量分别表示百位数、十位数和个位数 百位数i取值12 十位数j取值09 个位数k取值29 n=100*i+10*j+k m=100*k+10*j+i 若m2*n并m3*n 则n为满足条件的三位数,例4.12 试找出满足下列条件的所有三位数 其百位数不大于2; 将个位与百位对换,得到的三位数 是原三位数的两倍多 分析: 用一重循环的循环控制变量

19、i表示原来 的三位数=101209 百位数n1=1/100 十位数n2=(i-n1*100)/10 个位数n3=i-100*n1-10*n2 m=100*n3+10*n2+n1 若m2*i并m3*i 则i为满足条件的三位数,#include void main() int row=1,col; for(;row=5;row+) for(col=1;col=5-row;col+) printf( “ ”); printf(“*n”);,#include void main() int row=1; for(;row=5;row+) printf(“*n”);,例4.13 打印下列图形,1.bre

20、ak语句 break语句可以用来从循环体内跳出循环体,即提前结束循环,接着执行循环下面的语句一般形式:break; 注意:break语句不能用于循环语句和switch语句之外的任何其他语句中。 break语句只能退出本层循环,若要从最内层循环退出外层循环,则 必须用其他方法。,4.3.5 break语句和continue语句,例: float pi=3.14159; for(r=1;r100) break;printf(r=%f,area=%fn,r,area); ,例4.14 判断m是否素数。,#include #include void main() int m,i; scanf(“%d”

21、, ,例 :求100200间的全部素数。 #include # include void main() int m,i,n=0; for(m=101;m=m)printf(“%d ,m);n=n+1; if(n%10=0) printf(n); printf (“n“);,运行结果: 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199,2.continue语句 作用为结束本次循环,即跳 过循环体中下面尚未执行的语句, 接着进行下一次是否执行循环的 判定. 一般形式:continu

22、e;,例4.15 把100200之间的不能 被3整除的数输出。 #include void main( ) int n; for (n=100;n=200;n+) if (n%3=0) continue; printf(“%d ,n); ,continue语句和break语句的区别continue语句只结束本次循环,而不是终止整个循环的执行。break语句则是结束整个循环过程,不再判断执行循环的条件是否成立。,#include void main() long int f1,f2; int i; f1=1;f2=1; for(i=1; i=20; i+) printf(“%12ld %12ld ”,f1,f2); if(i%2=0) printf(“n”); f1=f1+f2; f2=f2+f1; ,例 4.15 按照下面的递推公式, 求fibonacci数列的前40项:F1=1F2=1Fn=Fn-2+Fn-1(n3),

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报