【文档说明】二级C语言程的设计及同步训练第四章.pptx,共(43)页,184.364 KB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-44659.html
以下为本文档部分文字说明:
二级C语言程的设计及同步训练第四章第4章选择结构程序设计4.1关系表达式和逻辑表达式4.1.1关系表达式1.关系运算符2.关系表达式由关系运算符将两个表达式连接起来的有意义的式子称为关系表达式。例如:x>=60a+b<ca>b
==cb+4>c-6关系表达式的值是一个逻辑值,即“真”或“假”。C语言中,用1表示“真”,用0表示“假”。第2页,共42页幻灯片。第4章选择结构程序设计4.1关系表达式和逻辑表达式4.1.2逻辑表达式1.逻辑运算符逻辑运算符是确定两个操作数逻辑关系的符号。两个操作数一般为逻辑型数据。Turbo
C的逻辑运算符及其优先级、结合律如表所示:运算符功能优先级(值小的优先级高)结合律!逻辑非2从右向左&&逻辑与11从左向右||逻辑或12第3页,共42页幻灯片。第4章选择结构程序设计4.1关系表达式和逻
辑表达式4.1.2逻辑表达式1.逻辑运算符各逻辑运算符的运算规则如表所示:数据a数据ba&&ba||b!a!b111100100101010110000011第4页,共42页幻灯片。第4章选择结构程序设
计4.1关系表达式和逻辑表达式4.1.2逻辑表达式1.逻辑运算符2.逻辑表达式由逻辑运算符将两个表达式连接起来的有意义的式子称为逻辑表达式。例如:!a+b&&ca||b==ca>0||b<5a++&&b--逻辑表达式的值也是一个逻
辑值。如果逻辑运算的对象是一个数值型数据,则该数值型数据应被看作逻辑值,C语言中,非零值看作“真”,零值看作“假”。第5页,共42页幻灯片。第4章选择结构程序设计4.1关系表达式和逻辑表达式4.1.2逻辑表达式1.逻辑运算符2.逻辑表
达式注意:由逻辑运算符&&和||构成的逻辑表达式,在特殊情况下会产生“短路”现象。(1)由逻辑运算符&&构成的逻辑表达式,在已经确定一个运算对象的值为0时,其逻辑表达式的值即为0,此时不再处理另一个运算对象。例如:执行:a=
-1;b=5;a++&&b--;结果为:a=0b=5第6页,共42页幻灯片。第4章选择结构程序设计4.1关系表达式和逻辑表达式4.1.2逻辑表达式1.逻辑运算符2.逻辑表达式注意:由逻辑运算符&&和||构成的逻辑表达式,在特殊情况下会产生“短路”现象。(2)同样,由逻
辑运算符||构成的逻辑表达式,在已经确定一个运算对象的值为1时,其逻辑表达式的值即为1,此时不再处理另一个运算对象。例如:执行:a=0;b=5;a++||b--;结果为:a=1b=5第7页,共42页幻灯
片。第4章选择结构程序设计4.2if语句4.2.1简单if语句简单if语句的一般形式为:if(表达式)语句1;else语句2;功能:如果表达式的值为真,则执行语句1,执行完语句1后从语句2后开始继续向下执行;如果表达式的值为假,则跳过语句1而执行语句
2。用流程图表示:真表达式假语句2语句1第8页,共42页幻灯片。第4章选择结构程序设计4.2if语句4.2.1简单if语句注意:(1)表达式是判断的条件,一般是关系表达式或逻辑表达式,也可以是其他表达式。(2)条件执行语句
中“else语句2;”部分是选择项,可以缺省,此时条件语句变成:if(表达式)语句1;其功能是:若表达式的值为真,则执行语句1,否则跳过语句1继续执行。用流程图表示:真假语句1表达式第9页,共42页幻灯片。第4章选择
结构程序设计4.2if语句4.2.1简单if语句注意:(3)如果语句1或语句2有多于一条语句要执行时,必须使用“{“和”}”把这些语句包括在其中,构成一个复合语句,此时条件语句形式为:if(表达式){语句组1;}els
e{语句组2;}第10页,共42页幻灯片。例4.1输出两个数中的较大者。程序1:main(){inta,b,max;scanf("%d%d",&a,&b);if(a>b)max=a;elsemax=b;printf("max=%d\n",max);}程序2:main(){inta,b,max;
scanf("%d%d",&a,&b);max=a;if(max<b)max=b;printf("max=%d\n",max);}第11页,共42页幻灯片。第4章选择结构程序设计4.2if语句4.2.2
嵌套if语句在if语句中又包含一个或多个if语句,称为嵌套if语句。一般形式如下:if(表达式1)if(表达式2)语句1else语句2elseif(表达式3)语句3else语句4第12页,共42页幻灯片。第
4章选择结构程序设计4.2if语句4.2.2嵌套if语句说明:(1)if与else的配对关系从最内层开始,else总是与离它最近的未曾配对的if配对。(2)if与else的个数最好相同,从内层到外层一一对应,以避免出错。(
3)如果if与else的个数不相同,可以用花括号来确定配对关系。例如:if(表达式1){if(表达式2)语句1}else语句2这时花括号限定了内嵌if语句的范围,因此else与第一个if配对。第13页,共42页幻灯片。例4.2对任意x,根据以下函数关系求对应y的值。-1(x<0)y=0(x
=0)1(x>0)程序:main(){intx,y;scanf("%d",&x);if(x<0)y=-1;elseif(x==0)y=0;elsey=1;printf("x=%d,y=%d\n",x,y);}输入:-3结果:x=
-3,y=-1输入:4结果:x=4,y=1第14页,共42页幻灯片。第4章选择结构程序设计4.3条件表达式条件运算符“?”和“:”两个符号组成。由条件运算符构成的条件表达式的一般形式是:<表达式1>?<表达式2>
:<表达式3>;条件运算符的含义是:先求表达式1的值,如果为真,则求表达式2的值并把它作为整个表达式的值;如果表达式1的值为假,则求表达式3的值并把它作为整个表达式的值。第15页,共42页幻灯片。第4章选择结构程序设计4.3条件表达式例4.3用条件表达式改写例4.
1(输出两个数中的较大者)。程序:main(){inta,b,max;scanf("%d%d",&a,&b);max=(a>b)?a:b;printf("max=%d\n",max);}第16页,共42页幻灯片。第4章选择结构程序设计4.4复合语句与空
语句4.4.1复合语句复合语句是由左右花括号括起来的多条语句,一个复合语句在语法上等同于一个语句。复合语句的一般形式如下:{说明部分;语句部分}在程序中,凡是单个语句能够出现的地方,都可以出现复合语句。一个复合语句又可以出现在其他复合语句内部。第17页,共
42页幻灯片。第4章选择结构程序设计4.4.2空语句空语句是只有一个分号的语句,其一般形式为:;空语句在语法上占据一个语句的位置,但不做任何操作。4.4复合语句与空语句第18页,共42页幻灯片。第4章选择结构程序设计4.5开关语句开关
语句的一般形式如下:switch(表达式){case常量表达式1:语句1;case常量表达式2:语句2;…case常量表达式n:语句n;default:语句n+1;}开关语句的功能是:首先计算switch后面圆括号内表达式的值,若此值等于某个case后面的常量表达式的值,则转向该c
ase后面的语句去执行;若表达式的值不等于任何case后面的常量表达式的值,则转向default后面的语句去执行,如果没有default部分,则将不执行switch语句中的任何语句,而直接转到switch语句后面的语句去执行。第19页,共42页幻灯片。第4章选择结构程序设计4.5开
关语句说明:(1)switch后面圆括号内的表达式的值和case后面的常量表达式的值都必须是整型或字符型,不允许是浮点型。(2)同一个switch语句中的所有case后面的常量表达式的值都必须互不相同。(3)swi
tch语句中的case和default的出现次序是任意的,也就是说default也可以位于case的前面,且case的次序也不要求按常量表达式的大小顺序排列。(4)每个case或default后的语句可以是多条语句,但不需要使用“{“和”}”括起来。第20页,共
42页幻灯片。第4章选择结构程序设计4.5开关语句说明:(5)由于switch语句中的“case常量表达式”部分只起标号的作用,而不进行条件判断,所以在执行完某个case后的语句后,将自动转到该语句后面的语句去执行,直到遇到switch语
句的右花括号或break语句为止,而不再进行条件判断。如果在执行完一个case分支后,要跳出switch语句转到下一条语句执行,可在一个case结束后、下一个case开始前插入一个break语句。程序一且执行到braek语句,将立即跳出swi
tch语句。第21页,共42页幻灯片。switch(n){case1:x=1;case2:x=2;}当n=1时,将连续执行下面两个语句:x=1;x=2;例如:switch(n){case1:x=1;braek;case2:x=2;braek;}当n=1时,将只执行一个语句:x=1;第22页,共
42页幻灯片。第4章选择结构程序设计4.5开关语句说明:(6)多个case可以共用一组执行语句。例如:switch(n){case1:case2:case3:x=3;}第23页,共42页幻灯片。第4章选择结构程序设
计4.5开关语句注意:(1)switch的表达式后不能有“;”。(2)case和default与其后面的常量表达式间至少有一个空格。(3)switch语句可以嵌套,break语句只跳出它所在的switch语句。(4)defau
lt语句可以省略。第24页,共42页幻灯片。例4.4给变量a,b,c输入整数,根据a的值确定对b、c的运算:当a=1时:计算b+c的值。当a=2时:计算b-c的值。当a=3时:计算b*c的值。当a=4时:计算b/c的值。其他值时:不做任何操作。m
ain(){inta,b,c;scanf("%d%d%d",&a,&b,&c);switch(a){case1:printf("%d+%d=%d\n",b,c,b+c);break;case2:printf("%d-%d=%d\n",
b,c,b-c);break;case3:printf("%d*%d=%d\n",b,c,b*c);break;case4:printf("%d+%d=%d\n",b,c,b/c);}}程序:第25页,共4
2页幻灯片。第4章选择结构程序设计4.6应用举例例4.5输入三个数,按由小到大的顺序输出。分析:已知:输入的三个数(分别用a,b,c来存放)。求:由小到大的顺序输出的三个数。处理:(1)a,b中的小者存入a,大者存入b。(2)a,c中的小者存入a,大者存入c。(3)b,c中的小者存
入b,大者存入c。流程图:开始结束输入a,b,c输出a,b,ca<b交换a,bNYa<c交换a,cNYb<c交换b,cNY第26页,共42页幻灯片。第4章选择结构程序设计4.6应用举例例4.5输入三个数,按由小到大的顺序
输出。开始结束输入a,b,c输出a,b,ca<b交换a,bNYa<c交换a,cNYb<c交换b,cNY程序:#include"stdio.h"main(){inta,b,c,t;printf("a,b,c=?");scanf("%d
,%d,%d",&a,&b.&c);if(a>c){t=a;a=b;b=t;}if(a>c){t=a;a=c;c=t;}if(b>c){t=b;b=c;c=t;}printf("%d,%d,%d",a,b,c);}第27
页,共42页幻灯片。第4章选择结构程序设计4.6应用举例例4.6输入一个不多于4位的正整数,求出它是几位数,逆序打印出各位数字分析:已知:一个不多于4位的正整数(用x来存放)。求:该正整数是几位数,该正整数的各位数
字(分别用a、b、c、d来存放千位、百位、十位、个位上的数字,由a、b、c、d的值确定该正整数是几位数)。处理:用算术运算/和%取出组成x的各位上的数字,再从高位到低位判断各位上的数字是否不为零,据此确定该正整数是几位数。第28页,共42页幻灯片。流程图:取组成x的各位上的数字(a、b、c
、d)开始结束输入xNY输出4位数及数字NY输出3位数及数字NYc!=0输出2位数及数字d!=0输出1位数及数字a!=0b!=0第29页,共42页幻灯片。程序:#include<stdio.h>main(){intx,a,b,c,d;scanf("%d",&x);a=x/1000;b=x%10
00/100;c=x%100/10;d=x%10;if(a!=0)printf("4:%d%d%d%d\n",d,c,b,a);elseif(b!=0)printf("3:%d%d%d\n",d,c,b
);elseif(c!=0)printf("2:%d%d\n",d,c);elseif(d!=0)printf("1:%d\n",d);}取组成x的各位上的数字(a、b、c、d)开始结束输入xNY输出4位数及数字NY输出3位数及数字NYc!=0输出2位数及数字
d!=0输出1位数及数字a!=0b!=0第30页,共42页幻灯片。第4章选择结构程序设计4.6应用举例例4.7输入一个数字,输出对应的星期几的英文单词。分析:已知:一个数字(1~7,用n来存放)。求:对应的星期几的英文单词(直接输出)。处理:由于一个星期有7天,对输入的数字进行判断,有8
种情况(包括出错),用开关语句进行处理。第31页,共42页幻灯片。开始输出Sun输出Mon输出Tues输出Wednes输出Thurs输出Fri输出Satur输出Error结束n其他=6=5=4=3=2=1=0流程图:第32页,共42页幻灯片。程序:#include<stdio.h>mai
n(){intn;scanf("%d",&n);switch(n){case0:printf("Sunday\n");break;case1:printf("Monday\n");break;case
2:printf("Tuesday\n");break;case3:printf("Wednesday\n");break;case4:printf("Thursday\n");break;case5:printf(
"Friday\n");break;case6:printf("Saturday\n");break;default:printf("Error");}}第33页,共42页幻灯片。第4章选择结构程序设计4.7本章考点•关系运算符和关系表达式。•逻辑运算符和逻辑表达式。•条件运算符和条件
表达式。•简单if语句的格式与功能。•嵌套if语句的格式与功能。•switch语句的格式与功能。第34页,共42页幻灯片。第4章选择结构程序设计4.8典型试题详解1.以下程序运行后的输出结果是________。m
ain(){intp=30;printf("%d\n",(p/3>0?p/10:p%3));}正确答案:3(知识点:条件运算符和条件表达式)试题分析:表达式p/3的值为10,大于0,所以条件表达式(p/3>0?p
/10:p%3)的值取p/10的值3。第35页,共42页幻灯片。第4章选择结构程序设计4.8典型试题详解2.有以下程序:main(){inti=1,j=1,k=2;if((j++||k++)&&i++)printf("%d,%d
,%d\n",i,j,k);}执行后输出结果是________。A)1,1,2B)2,2,1C)2,2,2D)2,2,3正确答案:C(知识点:逻辑运算符和逻辑表达式)试题分析:根据运算规则,对逻辑表达式(j++||k++)&&i
++应先计算表达式j++的值,其结果是表达式j++的值为1,j的值为2,再将表达式j++的值1与k++进行||运算,由逻辑运算符||构成的逻辑表达式在已经确定一个运算对象的值为1时,其逻辑表达式的值即为1,此时不再处
理其另一个运算对象,因此,不再计算k++,k的值仍为2。逻辑表达式(j++||k++)的值为1,再与i++进行&&运算,需要计算表达式i++的值,表达式i++为1,i的值为2,逻辑表达式(j++||k++)&&i++的值1,执行printf("%d,%d,%d\n",i,j,k);语
句,其结果为2,2,2。第36页,共42页幻灯片。第4章选择结构程序设计4.8典型试题详解3.以下程序输出的结果是________。main(){inta=5,b=4c=3,d;d=(a>b>c);printf("%d\n",d);}正确答案:0(知识
点:关系运算符和关系表达式)试题分析:根据运算规则,对表达式(a>b>c)应先计算表达式a>b的值,其结果为1,再计算1>c的值,其结果为0,故d的值为0。第37页,共42页幻灯片。第4章选择结构程序设计4.8典型试题详解4.有定义语句:inta=1,b=2,c=3,x;,则以下选项中各程
序段执行后,x的值不等于3的是________。A)if(c<a)x=1;B)if(a<3)x=3;elseif(b<a)x=2;elseif(a<2)x=2;elsex=3;elsex=1;C)if(a<3)x=3;D)if(a<b)x=b;if(a<
2)x=2;if(b<c)x=c;if(a<1)x=1;if(c<a)x=a;正确答案:C(知识点:简单if语句和嵌套if语句的格式与功能)试题分析:根据嵌套if语句的功能,对各程序段执行后,A)的结果是x=3,B)的结果是x=3,C)的结果是x=2
,D)的结果是x=3。在这类题目中,一定要注意其逻辑关系。第38页,共42页幻灯片。第4章选择结构程序设计4.8典型试题详解5.以下程序运行后的结果是________。main(){inta=1,b=3,c=5;if(c=a+b)
printf("yes\n");elseprintf("no\n");}正确答案:yes(知识点:简单if语句的格式与功能、运算符=和==)试题分析:if语句后判断的条件是c=a+b,即将a+b的值赋给c,再判断c的值是否为真,而不是判断c是否等于a+b。运算符=和==是
不同的。第39页,共42页幻灯片。第4章选择结构程序设计4.8典型试题详解6.若有以下程序:main(){inta=4,b=3,c=5,t=0;if(a<b)t=a;a=b;b=t;if(a<c)t=a;a=c
;c=t;printf("%d%d%d",a,b,c);}执行后的输出结果为________。正确答案:503(知识点:简单if语句的格式与功能\运算符=和==)试题分析:根据a<b的值0,程序执行a=b;b=t;,则a=3,b=0,再根据a<c的值1,程序执行t=a;,
再执行a=c;c=t;,则a=5,c=3。注意,第一个if语句在其后的t=a;后已经结束,其后的a=b;b=t;是第一个if语句语法上下面的语句。同样,第一个if语句也在其后的t=a;后结束。第40页,共42页幻灯片。第4章选择结构程序设计4.8
典型试题详解7.若a,b,c1,c2,x,y均为整型变量,正确的switch语句是________。A)switch(a+b);B)switch(a*a+b*b){case1:y=a+b;break;{case3:case0:y=a-b;break;case1:y=a
+b;break;}case3:y=b-a;break;}C)switchaD)switch(a-b){casec1:y=a-b;break;{default:y=a*b;break;casec2:x=a*d;break;case3:case4:x=a+b;
break;}case10:case11:y=a-b;break;}正确答案:D(知识点:switch语句的格式)试题分析:switch语句格式规定:switch后的表达式后面不能有“;”;case后只能是整型或字符型常量;同一个switch语句中的所有case后面的常量表达式的值都必须互不相同
。第41页,共42页幻灯片。第4章选择结构程序设计4.8典型试题详解8.有如下程序,该程序的输出结果是________。main(){intx=1,a=0,b=0;switch(x){case0:b++;case1:a++;case2:a++;b++;}printf(“a=%d,b=%d\
n”,a,b);}A)a=2,b=1B)a=1,b=1C)a=1,b=0D)a=2,b=2正确答案:A(知识点:switch语句的功能)试题分析:x=1,程序从case1:后执行,case1:后没有break语句,顺序执行case2:后的语句。第42页,共4
2页幻灯片。