第04章选择结构程序设计 全国计算机等级考试二级 C语言程序设计培训_第1页
第04章选择结构程序设计 全国计算机等级考试二级 C语言程序设计培训_第2页
第04章选择结构程序设计 全国计算机等级考试二级 C语言程序设计培训_第3页
第04章选择结构程序设计 全国计算机等级考试二级 C语言程序设计培训_第4页
第04章选择结构程序设计 全国计算机等级考试二级 C语言程序设计培训_第5页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

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

文档简介

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)n

3、um1num2的值为?。 (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种),!:逻辑非,一元运算符,运算规则:取反,!真,假,!假,真, float b=3.5;,!a

4、,0,!b,0,a b=1; c=2; d=a+,d=(a+),运算结果: d=0,a=1,b=1,c=2,(1)a b=1; c=2; d=a+|b+|- -c;,d=(a+)|(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”,则以下选项中值为 0的表达式是(05.09) a.(!a=1) a=d/10%9; b=a 程序运行后的输出结果是:2,1,4.已定义“char ch=$;int i=1,j;”,执行“j=!c

5、h 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)|(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语

6、句、多分支选择if语句。,语句形式:,if (表达式) 语句,语句执行流程:,4.2.1 if语句的三种形式,例4-1:从键盘输入两个整数a和b,如果a大于b则交换两数,最后输出两个数。,#include ,输入a,b,ab,交换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语句中表达式形式很灵活,可以是常量、变量、

7、任何类型表达式、函数、指针等。只要表达式的值为非零值,条件就为真,反之条件为假。,2、双分支选择if语句,语句形式:,if (表达式) 语句1 else 语句2,语句执行流程:,表达式,语句1,真(非0),假(0),语句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语句之间只能有一个语句,当ifels

8、e之间的语句不只一句时,应用一对将语句括起。,if(ab) a+;b+; else a=0;b=10;,if(ab) a+;b+; else a=0;b=10;,3、多分支选择if语句,语句形式:,if (表达式1) 语句1 else if (表达式2) 语句2 else if (表达式n) 语句n else 语句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); else

9、 printf(“not definen”);,printf(x=%.2f,y=%.2fn,x,y); ,计算分段函数程序,语句含义:,语句形式:,当if语句中又包含若干个if语句时,则构成了if 语句嵌套的情形。,4.2.2 if语句的嵌套,if ( 表达式1) if ( 表达式2) 语句1,if ( 表达式1) if ( 表达式2) 语句1 else 语句2,if ( 表达式1) if ( 表达式2) 语句1 else 语句2,if ( 表达式1) if ( 表达式2) 语句1 else 语句2 else 语句3,if ( 表达式1) if ( 表达式2) 语句1 else 语句2 els

10、e if(表达式3) 语句3 else 语句4,语句执行流程:,else与if的配对原则:,就近一致原则:,else与同一层最接近它,而又没有其它else语句与之相匹配的if语句配对。,建议:对于嵌套的if语句最好使用“”扩起来 同时采用代码缩进的形式书写,国家级等级考试练习:,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

11、,3.有以下程序程序: main() int a=0,b=0,c=0,d=0; if(a=1) b=1;c=2; else d=3; printf(“%d,%d,%d,%dn”,a,b,c,d); 程序输出的结果是 a.0,1,2,0 b.0,0,0,3 c.1,1,2,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); else printf(“%d”,+d + 1)

12、; printf(“%dn”,d); 程序运行后的结果是 a.2 b.3 c.43 d.44,A,4.3、条件运算符与条件表达式,有两个符号:?、:,它与三个操作数组成三元运算。,一般形式:, ? :,求值规则和表达式的值:,求解 表达式1,真(非0),求解 表达式2,假(0),求解 表达式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

13、.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.若有定义“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.(

14、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?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,求值规则:,从左至右依次计算

15、各表达式的值,优先级,所有运算符里最低,结合性:,自左至右,表达式的值,最后一个表达式的值。,逗号运算符与逗号表达式,例:,a b y 逗号表达式 y=a=4,b=5,a+b; 4 5 4 9 y=(a=4,b=5,a+b); 4 5 9 9 y=(a=4,b=5),a+b; 4 5 5 9 y=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; ,根

16、据表达式的不同值,选择不同的程序分支,又称开关语句。,数值型 或 字符型,常量表达式的值必须互不相同,否则执行时将出现矛盾,即同一个开关值,将对应多种执行方案。,2、语句执行流程:,指语句的最后一条是否为break,简单语句或复合语句,case语句出 现的次序并 不影响执行 结果。,例4-4:假设用0、1、2.6分别表示星期日、星期一.星期六。现输入一个数字,输出对应的星期几的英文单词。如果输入3,输出“Wednesday”。,#include stdio.h void main() int n; scanf(%d, ,程序运行情况如下: 3 Wednesday Thursday Friday

17、 Saturday error,在“switch”语句中,“case 常量表达式”只相当于一个语句标号,表达式的值和某标号相等则转向该标号执行,但不能在执行完该标号的语句后自动跳出整个switch 语句,因此会继续执行所有后面语句的情况。,为此,语言提供了一种break语句,其功能是可以跳出它所在的switch语句。,将上面的例4-4修改如下:,#include stdio.h void main() int n; scanf(%d, ,程序运行情况如下: 3 Wednesday,3、说明,多个case语句可以共用一组执行语句。,switch(grade) case 10: case 9: c

18、ase 8:printf(“A);break; default:printf(“B); ,各case和default子句的先后顺序可以变动,而不会影响程序执行结果。,default语句可以省略不用。,case和default与其后面的常量表达式间至少有一个空格。,switch语句可以嵌套,break语句只跳出它所在的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以上,用这种

19、方法转换后,n出现了在不同区域有重复数字的情况。解决的方法有很多,其中一种是可以采用当x为10的整数倍时,将计算出的n值减1。,使用switch解题的关键,通过分析找到表达式,将问题分成几种情况。,#include stdio.h void main() double x,y; int n; scanf(%lf, ,程序如下:,#include stdio.h void main() float x,y; int a; scanf(%f, ,国家等级考试练习,1.以下叙述中正确的是 a.break语句只能用于switch语句 b.在switch语句中必须使用default c.break语句必

20、须与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”); 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; case 0:switch(c=5) case 0:printf(“*”);break; case 1:printf(“#”);break; case 2:printf(“$”);break;

温馨提示

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

评论

0/150

提交评论