收藏 分享(赏)

第04章选择结构程序设计 全国计算机等级考试二级 C语言程序设计培训.ppt

上传人:dcs1276 文档编号:4836836 上传时间:2019-01-15 格式:PPT 页数:61 大小:639.50KB
下载 相关 举报
第04章选择结构程序设计 全国计算机等级考试二级 C语言程序设计培训.ppt_第1页
第1页 / 共61页
第04章选择结构程序设计 全国计算机等级考试二级 C语言程序设计培训.ppt_第2页
第2页 / 共61页
第04章选择结构程序设计 全国计算机等级考试二级 C语言程序设计培训.ppt_第3页
第3页 / 共61页
第04章选择结构程序设计 全国计算机等级考试二级 C语言程序设计培训.ppt_第4页
第4页 / 共61页
第04章选择结构程序设计 全国计算机等级考试二级 C语言程序设计培训.ppt_第5页
第5页 / 共61页
点击查看更多>>
资源描述

1、4.1 关系运算和逻辑运算,4.2 if语句和if语句构成的选择结构,4.3 条件表达式构成的选择结构,第四章 选择结构程序设计,4.4 switch语句,4.4 goto语句,4.1.1、C语言的逻辑值,关系表达式和逻辑表达式的运算结果会得到一个逻辑值。逻辑值只有两个,分别用“真”和“假”表示,C语言 中没有专门的“逻辑值”,在表示逻辑表达式或关系结果 是,以数值1代表“真”,0代表“假”,但在判断一个量是 否为“真”时,以0代表“假”,以非0(不论正负)代表真。,4.1.2、关系运算符和关系表达式,关系运算:比较运算,比较两个操作数,看是否满足给定的关系。,1、关系运算符(6种),:小于

2、,53, 35,=:小于等于,5=3,3=5,与数学上()不同,:大于,53,35,=:大于等于,5 =3,3 =5 ,与数学上()不同,=:等于,5=3 ,与数学上(=)不同,!=:不等于,5!=3 ,与数学上()不同,2、关系表达式和关系表达式的值,用关系运算符将表达式连接起来的式子,优先级, =,高 低,= !=,结合方向,自左向右,表达式的值,关系成立,即为真,结果为1;,关系不成立,即为假,结果为0;,算术 运算符,高 低,C语言中,真:非0值,假:0值,如:ab,a+bc-d,(a=3)=b,(ab)= =(bc),例如,假设num1=3,num2=4,num3=5,则:(1)nu

3、m1num2的值为?。(2)(num1num2)!=num3的值为? 。(3)num1num2num3的值为?。思考题:任意改变num1或num2的值,会影响整个表达式的值吗?为什么?(4)(num1num2)+num3的值为?6.因为num1num2的值=1,1+5=6。再次强调:C语言用整数“1”表示“逻辑真”,用整数“0”表示“逻辑假”。所以,关系表达式的值,还可以参与其它种类的运算,例如算术运算、逻辑运算等。,0,1,1,4.1.3、逻辑运算符和逻辑表达式,1、逻辑运算符(3种),!:逻辑非,一元运算符,运算规则:取反,!真,假,!假,真,&:逻辑与 。又称逻辑乘。,运算规则:两个操作

4、数均为真,结果为真。,|:逻辑或 。又称逻辑加。,运算规则:只要两个操作数有一个为真,结果为真。,2、逻辑量或逻辑表达式的值,非0 值:真,0值:假,整型 实型 字符型 指针类型,0 0.0 0 NULL,3、逻辑表达式,用逻辑运算符将表达式连接起来的式子。,优先级,关系 运算符,高 低,& 逻辑与,算术 运算符,高 低,! 逻辑非,高 低,高 低,| 逻辑或,结合性,!:自右向左,&、|:自左向右,高 低,赋值 运算符,(x=0) & (x5) ,! (x= =0),,例如:,1.假设 int a=5; float b=3.5;,!a,0,!b,0,a&b,1,a|b,1,!a&!b,0,4

5、、注意,在逻辑表达式的求解中,并不是所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符。,例2-7:,a=0; b=1; c=2; d=a+,d=(a+),运算结果: d=0,a=1,b=1,c=2,(1)a & b & c,求解方法:只有a为真(非0),才需要判断b的值,只有a和b都为真,才需要判断c的值。只要a为假,就不必判断b和c,运算立即中止。,(2)a | b | c,求解方法:只要a为真(非0),就不必判断b和c;只有a 为假,才判断b;a和b都为假,才判断c。,例2-8:,a=0; b=1; c=2; d=a+|b+|- -c;,d=(a

6、+)|(b+)|(- -c);,运算结果: d=1,a=1,b=2,c=2,以下的条件如何使用c语言的逻辑和关系表达式表述:,1.0x2,2.x大于5且不能够被7整除,3.y在1到9之间但不能是5,4.ch不是字符q或者k,x0&x2,x5&x%7!=0,y1&y9&y!=5,ch!=q|ch!=k,思考题: 判断一个数n是否为奇数或偶数? 判断一个字母c是否是英文字符? 判断一个年份是否为闰年? 判断一个数n是否被数k整除? 判断三个数是否组成一个三角形? 判断三个数是否组成一个等腰三角形?,(year%4=0)&(year%100!=0)|(year%400=0),1.设有定义:“int

7、a=2,b=3,c=4;”,则以下选项中值为 0的表达式是(05.09) a.(!a=1)&(!b=0) b.(ab)&!c|1 c.a&b d.a|(b+b)&(c-a),A,国家等级考试练习,2.有以下程序 main() int a,b,d=25;a=d/10%9;b=a 程序运行后的输出结果是:2,1,4.已定义“char ch=$;int i=1,j;”,执行“j=!ch 6.在C语言中,逻辑“真”等价于下面哪一项 a.整数1 b.True c.非0数 d.任意常数,1,10 20 0,C,7.有以下程序: main() int a=1,b=2,m=0,n=0,k;k=(n=ba)|(

8、m=ab);printf(“%d,%dn”,k,m); 程序运行后的输出结果是 a.0,0 b.0,1 c.1,0 d.1,1,C,问题提出:,计算分段函数:,y=,3-x x0,2/x x0,C语言用来设计条件选择结构程序的选择语句有两种: if语句、switch语句。,4.2 if语句,1、单分支选择if语句,if语句有三种形式:单分支选择if语句、双分支面具选择if语句、多分支选择if语句。,语句形式:,if (表达式)语句,语句执行流程:,4.2.1 if语句的三种形式,例4-1:从键盘输入两个整数a和b,如果a大于b则交换两数,最后输出两个数。,#include ,输入a,b,ab,

9、交换a、b,输出,结束,真,假,void main()int a,b,t; scanf(“%d,%d“,if(ab) t=a;a=b;b=t;,printf(“a=%d,b=%dn“,a,b); ,注意:,(1)if语句自动结合一个语句,当满足条件需要执行多个语句时,应用一对大括号将需要执行的多个语句括起,形成一个复合语句。,(2)if语句中表达式形式很灵活,可以是常量、变量、任何类型表达式、函数、指针等。只要表达式的值为非零值,条件就为真,反之条件为假。,2、双分支选择if语句,语句形式:,if (表达式) 语句1 else 语句2,语句执行流程:,表达式,语句1,真(非0),假(0),语句

10、2,例4-2 输入两个整数,输出其中较大的数。,#include #include ,void main() int x,y,max; scanf(“%d,%d“,if(xy) max=x;else max=y;,printf(“max=%dn“,max); ,输入x,y,xy,max=x,输出最大值,结束,真,假,max=y,注意,if和else语句之间只能有一个语句,当ifelse之间的语句不只一句时,应用一对将语句括起。,if(ab)a+;b+; else a=0;b=10;,if(ab)a+;b+; else a=0;b=10;,3、多分支选择if语句,语句形式:,if (表达式1)语

11、句1 else if (表达式2)语句2 else if (表达式n)语句nelse 语句n+1,else子句可以省略,语句执行流程:,表达式1,语句1,真(非0),假(0),例4-3:计算分段函数。,#include ,void main() float x,y;printf(“enter x:“);scanf(“ %f “,if (x10) y=3/(x-10); elseprintf(“not definen”);,printf(“x=%.2f,y=%.2fn“,x,y); ,计算分段函数程序,语句含义:,语句形式:,当if语句中又包含若干个if语句时,则构成了if 语句嵌套的情形。,4

12、.2.2 if语句的嵌套,if ( 表达式1)if ( 表达式2)语句1,if ( 表达式1)if ( 表达式2)语句1else语句2,if ( 表达式1) if ( 表达式2)语句1else语句2,if ( 表达式1)if ( 表达式2)语句1else语句2 else语句3,if ( 表达式1)if ( 表达式2)语句1else语句2 elseif(表达式3)语句3else语句4,语句执行流程:,else与if的配对原则:,就近一致原则:,else与同一层最接近它,而又没有其它else语句与之相匹配的if语句配对。,建议:对于嵌套的if语句最好使用“”扩起来 同时采用代码缩进的形式书写,国家

13、级等级考试练习:,1.设变量x和y均已正确定义并赋值,以下的if语句中, 在编译时将产生错误信息的是 a.if(x+); b.if(xy,2.在嵌套使用if语句时,C语言规定else总是 a.和之前与具有相同缩进位置的if配对 b.和之前与其最近的if配对 c.和之前与其最近的且不带else的if配对 d.和之前的第一个if配对,C,C,3.有以下程序程序: main() int a=0,b=0,c=0,d=0;if(a=1)b=1;c=2;elsed=3; printf(“%d,%d,%d,%dn”,a,b,c,d); 程序输出的结果是 a.0,1,2,0 b.0,0,0,3 c.1,1,2

14、,0 d.编译有错,D,5.有以下程序运行后的输出结果是 main() int a=3,b=4,c=5,t=99;if(ba ,4599,6.有以下程序 main() int a=3,b=4,c=5,d=2;if(ab)if(bc)printf(“%d”,d+ + 1);elseprintf(“%d”,+d + 1);printf(“%dn”,d); 程序运行后的结果是 a.2 b.3 c.43 d.44,A,4.3、条件运算符与条件表达式,有两个符号:?、:,它与三个操作数组成三元运算。,一般形式:, ? :,求值规则和表达式的值:,求解 表达式1,真(非0),求解 表达式2,假(0),求解

15、 表达式3,表达式 的值,优先级:,算术关系逻辑 条件 赋值,结合性:,自右至左,例:,int max,a=5;b=3; max=ab?a:b,-a=b+ ? a+ : b+,y = x10 ? x/10 : x0 ? x: -x;,1.有以下计算公式,y=,(x=0),(x0),若程序前面已在命令行中包括math.h文件,不能够正确计算上述公式的程序是 a.if(x=0) y=sqrt(x); b.y=sqrt(x);else y=sqrt(-x); if(x=0) y=sqrt(x); d.y=sqrt(x=0?x:-x);if(x0) y=sqrt(-x);,国家等级考试练习,B,2.若

16、有定义“int x,y;”,并已正确给变量赋值,则以下选 项与表达式“(x-y)?(x+):(y+)”中的条表达式(x-y)等 价的是 a.(x-y0) b.(x-y0) d.x-y=0,C,3.设有条件表达式“(EXP)?i+:j+”,则以下表达式中与 “(EXP)”完全等价的是_ a.(EXP=0) b.(EXP!=0) c.(EXP=1) d.(EXP!=1),B,4.有以下程序段: int k=0,a=1,b=2,c=3; k=ac?c:k; 执行该程序后,k的值是 a.3 b.2 c.1 d.0,B,5.若整型变量a,b,c,d中的值依次为1,4,3,2,则条件表 达式ab?a:cd

17、?c:d的值是 a.1 b.2 c.3 d.4,A,6.以下程序的输出结果是 main() int a=5,b=4,c=6,d;printf(“%dn”,d=ab?(ac?a:c):(b); a.5 b.4 c.6 d.不确定,C,形式:,逗号表达式1,逗号表达式2,逗号表达式n,求值规则:,从左至右依次计算各表达式的值,优先级,所有运算符里最低,结合性:,自左至右,表达式的值,最后一个表达式的值。,逗号运算符与逗号表达式,例:,a b y 逗号表达式y=a=4,b=5,a+b; 4 5 4 9y=(a=4,b=5,a+b); 4 5 9 9y=(a=4,b=5),a+b; 4 5 5 9y=

18、a=(4,b=5),a+b; 5 5 5 10,4.4 switch语句,1、语句形式:,switch (表达式) case 常量表达式1: 语句1;case 常量表达式2: 语句2;case 常量表达式3: 语句3;.case 常量表达式n: 语句n;default : 语句n+1; ,根据表达式的不同值,选择不同的程序分支,又称开关语句。,数值型 或 字符型,常量表达式的值必须互不相同,否则执行时将出现矛盾,即同一个开关值,将对应多种执行方案。,2、语句执行流程:,指语句的最后一条是否为break,简单语句或复合语句,case语句出 现的次序并 不影响执行 结果。,例4-4:假设用0、1、

19、26分别表示星期日、星期一星期六。现输入一个数字,输出对应的星期几的英文单词。如果输入3,输出“Wednesday”。,#include “stdio.h“ void main() int n; scanf(“%d“, ,程序运行情况如下: 3 Wednesday Thursday Friday Saturday error,在“switch”语句中,“case 常量表达式”只相当于一个语句标号,表达式的值和某标号相等则转向该标号执行,但不能在执行完该标号的语句后自动跳出整个switch 语句,因此会继续执行所有后面语句的情况。,为此,语言提供了一种break语句,其功能是可以跳出它所在的sw

20、itch语句。,将上面的例4-4修改如下:,#include “stdio.h“ void main() int n; scanf(“%d“, ,程序运行情况如下: 3 Wednesday,3、说明,多个case语句可以共用一组执行语句。,switch(grade) case 10:case 9:case 8:printf(“A“);break;default:printf(“B“); ,各case和default子句的先后顺序可以变动,而不会影响程序执行结果。,default语句可以省略不用。,case和default与其后面的常量表达式间至少有一个空格。,switch语句可以嵌套,brea

21、k语句只跳出它所在的switch语句。,例4-5 企业发放的奖金根据利润提成。从键盘输入当月利润,求应发放奖金总数?,利润x x=10 10x20 20x40 40x60 60x100 100x,(int )x/10,常量 0,1 1,2 2,3,4 4,5,6 6,7,8,9,10 10以上,用这种方法转换后,n出现了在不同区域有重复数字的情况。解决的方法有很多,其中一种是可以采用当x为10的整数倍时,将计算出的n值减1。,使用switch解题的关键,通过分析找到表达式,将问题分成几种情况。,#include “stdio.h“ void main() double x,y; int n;

22、scanf(“%lf“, ,程序如下:,#include “stdio.h“ void main() float x,y;int a;scanf(“%f“,国家等级考试练习,1.以下叙述中正确的是 a.break语句只能用于switch语句 b.在switch语句中必须使用default c.break语句必须与switch语句中的case配对 d.在switch语句中,不一定使用break语句,D,2.若有定义:“float x=1.5;int a=1,b=3,c=2;”则正确 的switch语句是 a.switch(x) c.switch(a+b) case 1.0:printf(“*n”

23、); case 1:printf(“*n”);case 2.0:printf(“*n”); case 2+1:printf(“*n”); b.switch(int)x); d.switch(a+b) case 1:printf(“*n”); case 1:printf(“*n”);case 2:printf(“*n”); case c:printf(“*n”);,C,3.有以下程序的运行结果是 main() int a=2,b=7,c=5;switch(a0) case 1:switch(b0)case 1:printf(“”);break;case 2:printf(“!”);break;c

24、ase 0:switch(c=5) case 0:printf(“*”);break;case 1:printf(“#”);break;case 2:printf(“$”);break;default:printf(“ ,#&,4.5 语句标号和goto语句,1.语句标号 标号可以是任意的合法的标识符,当在标识符后面加一 个冒号,如:flag1: stop0: ,该标识符就成了一个 语句标号。 2.goto语句 goto语句称为无条件转向语句,一般形式如下: goto 语句标号; 作用:把程序的执行流程转向语句标号所在的位置,这 个语句标号必须与此goto语句同在一个函数之内。 例如:i=1;

25、sum: i=i+1;if(i5) goto sum;printf(“%d”,i);,选择结构程序设计举例,例4-7 将任意三个整数按从大到小的顺序输出。,#include “stdio.h“ void main() int x,y,z,t; scanf(“%d,%d,%d“, ,例4-8 给一个不多于4位的正整数,求出它是几位数,逆序打印出各位数字。,#include “stdio.h“ void main() int x,a,b,c,d; /*a,b,c,d代表千位、百位、十位、个位*/ scanf(“%d“, ,例4-9 任意输入三个数,判断能否构成三角形?若能构成三角形,是等边三角形、

26、等腰三角形还是其它三角形?,#include “stdio.h“ void main() float a,b,c; scanf(“%f,%f,%f“, ,例4-10 从键盘输入一个年份,判断是否是闰年。,#include “stdio.h“ void main() int year; scanf(“%d“, ,1.main() 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:a+;b+; printf(“a=%d,b=%dn”,a,b); ,结果: a=2,b=1,课堂练习,2.程序填空: 以下程序判断输入的整数能否被3或7整除. main() int x,f=0; scanf( “%d”, ,

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

当前位置:首页 > 教育教学 > 计算机等级考试

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


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

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

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