《选择与循环幻灯片.ppt》由会员分享,可在线阅读,更多相关《选择与循环幻灯片.ppt(41页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、选择与循环第1页,共41页,编辑于2022年,星期三关系运算符与关系表达式关系运算符与关系表达式关系与逻辑运算符及其表达式关系与逻辑运算符及其表达式1.关系运算符关系运算符(比较数值大小运算)(大于)=(大或等于)=(小于或等于)=(等于)!=(不等于)第2页,共41页,编辑于2022年,星期三逻辑逻辑 运算符与逻辑表达式运算符与逻辑表达式2.逻辑运算符逻辑运算符&(逻辑与;并且)|(逻辑或;或者)!(逻辑非;否定;不是)3.C语言表示逻辑判断的方法语言表示逻辑判断的方法任何数值(字符、整数、实数、指针)都可以表示逻辑意义,只要数值不等于数值不等于0,就表示,就表示“真真”,而0表示表示“假假
2、”;关系与逻辑运算表达式的运算结果为“真”,表达式的值为int型整数1,运算结果为“假”,则表达式的值为int型整数0。由可知,C语言的关系运算表达式和逻辑运算表达式应该属于整型表达式范畴。第3页,共41页,编辑于2022年,星期三关系逻辑运算符表达式举例关系逻辑运算符表达式举例:写出下列表达式的求值结果。35 1 !256 1 3=0&21+10 0 问题与思考问题与思考:怎样正确表达双边不等式怎样正确表达双边不等式?如:00&x=5 0 x3)b=1;printf(%d,b);/*则打印的结果是:则打印的结果是:0*/2.双分支双分支if例如例如:int a=3,b=0;if(a%2=0)
3、b=1;else b=0;printf(%d,b);/*则打印的结果是:则打印的结果是:0*/第5页,共41页,编辑于2022年,星期三3.1 选择结构选择结构(续续1)if 语句的执行流程语句的执行流程表达式语句不等于0单分支结构单分支结构等于0表达式语句1双分支结构双分支结构语句2不等于0等于0第6页,共41页,编辑于2022年,星期三3.1 选择结构选择结构(续续2)关于关于if语句的几点说明语句的几点说明:(1)程序流程图方框中的语句,代表一个模块,当模块中所需的语句不止一条时,必须使用复合语句即用一对将它们括起来。(2)模块中可以使用任何简单语句、控制语句及复合语句。(3)注意if语
4、句的书写,可写在一行或分写于多行,但注意配对关系和递进书写。(4)当复合语句嵌套使用时,当复合语句嵌套使用时,else总是与它前面最接近总是与它前面最接近的未配对的的未配对的if配对配对。第7页,共41页,编辑于2022年,星期三3.1 选择结构选择结构(续续3)例如例如:a=1;b=2;if(a1)if(b3)a=2;else a=3;程序执行后,a值应为1,因为else否定的是 if(b1)if(b3)a=2;else a=3;程序执行后,a的值为3。第8页,共41页,编辑于2022年,星期三3.1 选择结构选择结构(续续4)3.一种常用级连嵌套形式一种常用级连嵌套形式if(表达式1)语句
5、1 else if(表达式2)语句2 else if(表达式3)语句3 else .else if(表达式n1)语句n1 else if(表达式n)语句n else 语句n1;第9页,共41页,编辑于2022年,星期三3.1 选择结构选择结构(续续5)第10页,共41页,编辑于2022年,星期三3.1 选择结构选择结构(续续6)4.if语句综合语句综合 举例举例例例3.1 读入两个整数,将大数存于变量a,小数存于b。本例重点学习两个变量交换值的方法。本例重点学习两个变量交换值的方法。#include stdio.hvoid main()int a,b,temp;printf(Input a b
6、:);scanf(%d%d,&a,&b);if(a=b)temp=a;a=b;b=temp;/两个变量交换值两个变量交换值 /printf(a=%d,b=%dn,a,b);问题与思考问题与思考问题与思考问题与思考:变量temp作用是什么?第11页,共41页,编辑于2022年,星期三3.1 选择结构选择结构(续续7)例例3.2 输入a,b,c,d四个整数,输出其中的最小值。本例重点学习多个数求最小值或者最大值的方法本例重点学习多个数求最小值或者最大值的方法。#include stdio.h void main()int a,b,c,d,min;printf(Input integer numbe
7、rs a b c d:n);scanf(%d%d%d%d,&a,&b,&c,&d);min=a;if(bmin)min=b;if(cmin)min=c;if(dmin)min=d;printf(min=%dn,min);第12页,共41页,编辑于2022年,星期三3.1 选择结构选择结构(续续8)例例3.3 输入3个实数,按由小到大的顺序输出它们。算法设计算法设计:设置三个double型变量a,b,c,通过交换变量的值,使得abc。(1)使a是a和b 两个数中的大者;if ab then ab (符号符号表示两个变量交换值表示两个变量交换值)(2)让a和c比较,使a是三个数中的最大值;if a
8、c then ac(3)使b和c按大小次序排列.if bc then bc问题与思考问题与思考:如果先将最小值 放在变量c,算法如何修改?第13页,共41页,编辑于2022年,星期三3.1 选择结构选择结构(续续9)#include stdio.hvoid main()double a,b,c,t;printf(Input real numbers a b c:);scanf(%lf%lf%lf,&a,&b,&c);if(ab)t=a;a=b;b=t;if(ac)t=a;a=c;c=t;if(bc)t=b;b=c;c=t;printf(%.3f%.3f%.3fn,a,b,c);第14页,共41
9、页,编辑于2022年,星期三3.1 选择结构选择结构(续续10)例例3.4 输入一百分制成绩,按下面的要求输出成绩等级。90分100分:等级A 80分89分:等级B 70分79分:等级C 60分69分:等级D 60分以下:等级E 本例主要学习级连嵌套本例主要学习级连嵌套 if 语句的使用。对于这样的分语句的使用。对于这样的分段函数,级连段函数,级连 if 语句能够避免使用双边不等式。语句能够避免使用双边不等式。第15页,共41页,编辑于2022年,星期三3.1 选择结构选择结构(续续11)#include stdio.hvoid main()int score;char level;print
10、f(input score=);scanf(%d,&score);if(score100)printf(Invalid input.n);return;if(score60)level=E;else if(score70)level=D;else if(score80)level=C;else if(score90)level=B;else level=A;printf(level is%cn,level);第16页,共41页,编辑于2022年,星期三3.1 选择结构选择结构(续续12)3.1.2 switch语句语句switch(表达式)case 常量1:语句1;break;case 常量2
11、:语句2;break;.case 常量n:语句n;break;default:语句n+1;break;功能功能:表达式的值等于常量k,则从语句k开始执行,遇到break则跳出switch语句,无break,则执行完语句k后,继续顺序执行语句k+1到语句n,然后自然退出swtich语句;若表达值不等于任何case后面的常量,此时若有default:则执行它后面的语句,否则直接结束switch语句。说明说明:1)case以及default的顺序可以任意;2)冒号:后面的语句有多条 可不使用复合语句。第17页,共41页,编辑于2022年,星期三3.1 选择结构选择结构(续续13)第18页,共41页,
12、编辑于2022年,星期三3.1 选择结构选择结构(续续14)例例3.6 用switch语句改写例3.4程序。#include stdio.hvoid main()int score;char level;printf(input score=);scanf(%d,&score);if(score100)printf(Invalid input.n);return;switch(score/10)case 9:case 10:level=A;break;case 8:level=B;break;case 7:level=C;break;case 6:level=D;break;default:l
13、evel=E;printf(level is%cn,level);第19页,共41页,编辑于2022年,星期三3.1 选择结构选择结构(续续15完完)例例3.7 输入年号y,月份m,输出y年的m月有多少天。#include stdio.h void main()int y,m,days;printf(Input y m:);scanf(%d%d,&y,&m);if(y10000)printf(The year is not correct.n);return;if(m12|m1)printf(The month is not correct.n);return;switch(m)case 2:
14、days=!(y%4)&y%100|!(y%400)?29:28;break;case 4:case 6:case 9:case 11:days=30;break;default:days=31;printf(days=%dn,days);第20页,共41页,编辑于2022年,星期三3.2 循环结构循环结构3.2.1 while 语句语句syntax:while(表达式表达式)语句语句表达式语句(循环体)真(非0)程序流程图假 也称为“当型”循环,其特点是先测循环条件,满足条件执行循环体,不满足条件则退出循环。若条件式一开始就不为真,则循环体一次也不会执行。第21页,共41页,编辑于2022年
15、,星期三3.2 循环结构(续循环结构(续1)例例3.8 计算s=1+2+3+n (n1)#include stdio.hmain()int s,k,n;printf(Input n=);scanf(%d,&n);s=0;k=1;/*L1*/while(k=n)s+=k;k+;/*L2*/printf(s=%dn,s);程序中,/*L2*/行可以简化为 while(k=n)s+=k+;则可省去复合词句。第22页,共41页,编辑于2022年,星期三3.2 循环结构(续循环结构(续2)程序运行分析程序运行分析:设n=5变量初态:k=1;s=0;变量k的值 循环次数 变量s的值 1 1 s=0+1=1
16、 2 2 s=1+2=3 3 3 s=3+3=6 4 4 s=6+4=10 5 5 s=10+5=15 6 循环语句结束 第23页,共41页,编辑于2022年,星期三3.2 循环结构(续循环结构(续3)(1)/*L1*/行中,若令k的初值为0,程序的计算功能不变,请填空:s=0;k=0;while()s+=k+;答:应填入 k=n或kn+1(2)将循环体进行如下改动,要求程序的计算功能不变,请填空:s=0;k=;while()k+;s+=k;答:第一空应填入 0,或1 第二空应填入kn或k=n1第24页,共41页,编辑于2022年,星期三3.2 循环结构(续循环结构(续4)例例3.9 用whi
17、le循环语句完成计算 p=n!=123(n1)n。(n0)#include stdio.hvoid main()int k,n;double p;printf(Input n=);scanf(%d,&n);p=1;k=1;while(k=n)p=k+;printf(p=%.0fn,p);问题与思考问题与思考:1)为什么累乘变量p定义为double型?2)若输入的n0,程序的输出是什么?第25页,共41页,编辑于2022年,星期三3.2 循环结构(续循环结构(续5)程序运行分析:程序运行分析:设n=5变量初态:p=1;k=1;变量k的值 循环次数 变量p的值 1 1 p=11=1 2 2 p=1
18、2=2 3 3 p=23=6 4 4 p=64=24 5 5 p=245=120 6 循环结束第26页,共41页,编辑于2022年,星期三3.2 循环结构(续循环结构(续6)while语句的其它特例语句的其它特例:1)空语句做为循环体 while();2)死循环 while(1)while(任何非0常数)n=0;while(n0)第27页,共41页,编辑于2022年,星期三3.2 循环结构(续循环结构(续7)3.2.2 dowhile语句语句syntax:do 语句语句 while(表达式表达式);表达式语句(循环体)真假dowhile循环仍是一种“当型”循环,可用于实现dountil循环类型
19、,它的特点是先执行循环体,然后测试循环条件,满足条件则继续执行循环体。因此,它的循环体至少要被执行一次。第28页,共41页,编辑于2022年,星期三3.2 循环结构(续循环结构(续8)例例3.10 用dowhile循环语句完成计算s=1+2+3+n。(n1)源程序:#include stdio.hvoid main()int s,k,n;printf(Input n=);scanf(%d,&n);s=0;k=1;do s+=k+;while(k=n);printf(s=%dn,s);问题与思考问题与思考:如果输入为0或负数,程序的输出是?第29页,共41页,编辑于2022年,星期三3.2 循环
20、结构(续循环结构(续9)3.2.2 dowhile语句语句syntax:for(表达式表达式1;表达式表达式2;表达式表达式3)语句语句表达式2语句(循环体)真假表达式1表达式3for循环本质上就是while循环,表达式1常用于循环计数变量赋初值;表达式3则用于循环变量增减计数,表达式2则为循环条件。如:for(i=1;i=9;i+)printf(%d ,i);第30页,共41页,编辑于2022年,星期三3.2 循环结构(续循环结构(续10)说明说明:(1)循环体可以是空语句。比如,for(i=1;i=9;i+);该语句循环9次,循环体为空语句。(2)避免死循环。比如,for(;1;);或者f
21、or(;);都是死循环。(3)缺省表达式缺省表达式1时,循环变量初始化应放在for语句之前进行。例如:i=1;for(;i=9;i+);(4)缺省表达式缺省表达式3时,循环变量的修改应放在循环体中完成。例如:for(i=1;i=9;)i+;(5)缺省表达式缺省表达式2相当于循环条件永真,即死循环。第31页,共41页,编辑于2022年,星期三3.2 循环结构(续循环结构(续11)例例3.12 用用for循环语句完成计算循环语句完成计算s=1+2+3+n。(n1)#include stdio.hvoid main()int s=0,k,n;printf(Input n=);scanf(%d,&n)
22、;s=0;for(k=1;k=n;k+)s+=k;printf(s=%dn,s);第32页,共41页,编辑于2022年,星期三3.2 循环结构(续循环结构(续11)例例3.14 编程求1000以内所有奇数和。#include stdio.hvoid main()long s=0;int k;for(k=1;k1000;k+=2)s+=k;printf(s=%ldn,s);例例3.15 假设变量已有正确定义和合理取值,分析下面循环语句的循环次数(即循环体被执行的次数)。(1)for(i=0;i=0;i);答:n+1次第33页,共41页,编辑于2022年,星期三3.2 循环结构(续循环结构(续12
23、)(3)i=1;while(in)+i;答:n1次(4)i=4;do i;while(i0);答:1次(5)m=5;while(mj;i+,j);答:0次3.2.4 多重循环多重循环 如果在循环体中使用循环语句则称为多重循环或者多重循环或者循环嵌套循环嵌套。三种循环语句都可以自己嵌套或者互相嵌套。循环嵌套的层数仅受系统堆栈容量的限制。第34页,共41页,编辑于2022年,星期三3.2 循环结构(续循环结构(续13)例例3.16 编写程序打印如下三角形。0112223333444445555556666666777777778888888889999999999算法设计算法设计:外循环变量i从1
24、循环到10(每循环一次自加1),表示从第1行打印到第10行。打印第i(i=1,2,10)行时,先打印i次数值i-1;然后换行。#include stdio.hvoid main()int i,j;for(i=1;i=10;i+)for(j=1;j=0);(2)s=0;for(i=0,j=100;i=j;i+,j )s+=i+j;printf(%d,s);答答:210 1答答:5100显然,i+j100,i从0到50,共循环51次第36页,共41页,编辑于2022年,星期三3.2 循环结构(续循环结构(续15)(3)a=0;for(i=1;i1且且i,n都是整型变量都是整型变量 /for(j=0
25、;jn)break;/kn立刻结束循环语句立刻结束循环语句 /printf(s=%dn,s);第38页,共41页,编辑于2022年,星期三3.2 循环结构(续循环结构(续17完)完)2.continue语句语句 syntax:continue;该语句的作用是中止本次循环,开始下一次循环(循环短路语句)。例:例:以下程序的功能是打印100以内能被3整除的数。for(i=1;i100;i+)if(i%3!=0)continue;printf(%5d,i);第39页,共41页,编辑于2022年,星期三第三章重点小结与作业第三章重点小结与作业1.if语句语句(else与与if的配对原则的配对原则)2.switch语句语句 (break有与无的区别有与无的区别)3.while语句语句4.dowhile语句语句5.for语句语句6.break语句和语句和continue语句语句作业作业:P111-112习题习题:5.3 做在书上做在书上5.4,5.5,5.6,5.8 作业本及上机作业本及上机P129-130习题习题:6.2,6.3,6.4,6.14 作业本及上机作业本及上机第40页,共41页,编辑于2022年,星期三第三章完第三章完第41页,共41页,编辑于2022年,星期三
限制150内