配色: 字号:
计算机程序设计基础(C语言)第4章 选择结构
2022-11-06 | 阅:  转:  |  分享 
  
第4章 选择结构 问题的提 出:求一元二次方程的根 ax2+bx+c=0(a≠0) 当△>=0时,为实根 当△<0时,为
虚根考虑两个问题:在C语言中如何表示判断条件? 答案:用任意合法的表达式,一般用关系表达式和逻辑表达式。怎么实现分支结构?
答案:用if语句和switch语句。第4章 选择结构 4.1 关系运算 4.2 逻辑运算 4.3 if语句 4.
4 switch语句 本章小结 巩固练习 本章要点“关系运算”就是“比较运算”。关系运算的结果如果符合或满足给定的条件,则结
果为逻辑值“真”;如果不符合或不满足给定的条件,则结果为逻辑值“假”。例如,x>0 4.1 关系运算 4.1.1 关系运
算符 例如:c>a+b a==bc 关系运算符的优先级低于算术运算符,高于赋值运算符。 4.1.2 关系表
达式 格式: 表达式 关系运算符 表达式其中的〈表达式〉可以是任意合法的表达式,但其类型应相同.
如:a>=b (a=3)>(b=4) a>c==c 关系表达式的值为逻辑值0(假)1(真)【例
4.1】关系运算符示例。 ① 应避免对实数作相等或不等的判断。② 注意从写法和含义上区分赋值运算符“=”与相等关系运算符“==”
。③ 对于形如“10<=x<=20” 的关系表达式,从语法上来说C语言是允许的,但是在程序设计时它并不能正确地表示用户的意图。 应
写为:x>=10 && x<=20 注 意 4.2 逻辑运算 双目:逻辑与 (&&) ; 逻辑
或 (||) 单目:逻辑非 (!)优先级(由高到低): !,算术,关系,&&,||,赋值结合性:从左
到右逻辑运算真值表4.2.1 逻辑运算符C编译系统以“1”代表“真”,“0 ”代表“假”。 判断一个量为“真”还是“假”时,以
数值“0”代表“假”,以“非0”的数值作为“真”。 如:5&&2 !5||0 逻辑真值表4.2.2 逻辑运算的值
格式: 表达式 逻辑运算符 表达式 例如: x>10 && x<20 4&&0||(a=2)
‘c’ &&’d’ 逻辑表达式的值只能是0或1。参与逻辑运算的运算对象可以是任意类型的表达式。当参与运算的表达式是逻辑表达式时
,形成逻辑表达式的嵌套情形。例如:a&&b&&c 4.2.3 逻辑表达式 【例4.2】逻辑运算示例(1)C语言中没有逻辑型数据类
型。(2)整型、字符型、 逻辑型通用。(3)在求逻辑表达式的值时,右边部分是根据左边部分的值有条件地执行。例如逻辑表达式:
a&&b 在求其值时有以下几种情况:当a为真时,才判别b的值;当a为假时,整个表达式已经确定为假,不必判别b。说 明
:举例:已知定义语句:int a=1,b=2,c=3,d=4,m=1,n=1;则表达式(m=a>b)&&(n=c>d)的值和m,n
的值分别是什么? a||b 的情形类似(3)表达式中含有++、--时,注意表达式的值和变量的值的不同 如:a++
&& b++ (若a=0,b=1) a++ || b++ (若a=1,b=1或a=0,b=1)练习:判
断某一年是否闰年。(闰年的条件是符合下面两个条件之一):(1)能被4整除,但不能被100整除;(2)能被400整除。(
) ( )( ) ( )(4)表示数学中的0 明:4.3 if语句 其中:if是关键字标识符;表达式可以是任何类型的表达式,两侧的括号不能省略;if的内嵌语句也叫if子句,是
逻辑上的一条语句,所以,应为单条语句或复合语句 语义:4.3.1 if语句的三种形式 1. 基本if语句(单分支结构) 格式: i
f(表达式) 语句 if (x>0) printf("%f\n",sqrt(x)); 【例4.3】输入两个整数,输出其中的大数。
思考: 如何求3个整数中的最大数或最小数?#include “stdio.h”main(){ int a,b,
max; printf("\n input two numbers: "); scanf("%d,%d",&a,&b); max=
a; if (max else     语句2 语义:2. if-else 语句两路分支【例4.3】输入两个整数,输出其中的大数。 3. i
f-else if-else语句格式: if(表达式1) 语句1; else if(表达式2) 语句2; else if
(表达式3) 语句3; … else if(表达式n-1) 语句n-1;
else 语句n; 多分支【例4.6】
已知学生的百分制成绩,编写程序按百分制分数进行分段评定,给出相应的等级。 分数大于等于90,则评定为”A”; 分数在80~89
之间,则评定为”B”; 分数在70~79之间,则评定为”C”; 分数在60~69之间,则评定为”D”; 分数小于60,则评定
为”E”;在if语句的三种形式中,表示判断条件的表达式:必须用括号括起来可以是任意表达式、变量、常量一般是关系表达式或逻辑表达式4
.在使用if语句时应注意的问题例如: if (a=b) printf("%d",a); else p
rintf("a=0"); 4.3.2 if语句的嵌套 嵌套结构的一般形式可表示如下: if(表达式1)
if( 表达式2 ) 语句1     else 语句2 else
if(表达式3) 语句3     else 语句4注意:if与e1se的配对关系。从最内层开始,e
1se总是与它上面最近的(未曾配对的)if 配对。【例4.7】用if语句的嵌套形式完成下列分段函数的计算:思考:使用if-else
if-else语句改写该程序。练习1.以下程序执行后输出结果是( )。 main() { int i=1,
j=1,k=2; if((j++||k++)&&i++) printf("%d,%d,%d\n",i,j,k);
} A.1,1,2 B.2,2,1 C.2,2,2 D.2,2,3
C.2,2,2练习2.下列各语句序列中,能够将变量u、s中的较大值赋值到变量t中的是( )。A. if(u>s)t=u ;
t=s; B. t=s ; if(u>s)t=u; C. if(u>s)t=s ; else t=u; D. t=u
; if(u>s)t=s; B. t=s ; if(u>s)t=u; 练习3.以下程序执行后输出结果是( )。#include
“stdio.h” main() {int a=5,b=4,c=3,d=2; if(a>b>c)
printf("%d\n",d); else if ((c-1>=d)==1)
printf("%d\n",d+1); else printf("
%d\n",d+2); } A.2 B.3 C.4 D.编译时有错,无结果 B.3练习4.下
列程序段执行后,变量k、x、y、z值依次为 ( )。 int k,x,y,z; x=y=z=1; k=x++&&y+
+||z++; A. 1、2、2、1 B. 1、2、2、2 C. 0、2、2、1 D. 0、2、2、2
A. 1、2、2、14.3.3 条件运算符和条件表达式 条件运算符:三目运算符(? :)结合性:从右到左优先级:高于赋值运算
符,低于逻辑、算术和关系运算符。条件表达式格式: 表达式1? 表达式2 :表达式3求值规则: 先求表达式1的值,非
0时,条件表达式的值为表达式2的值,否则为表达式3的值 如:x>y ? 1:1.5 例
:求两数中较大者max=a>b ? a:b(1)以下程序的输出结果是______。#include "stdio.h"main()
{int a=5,b=4,c=6,d;printf("%d\n",d=a>c?(a>c?a:c):(b));}A)5 B)4 C)
6 D)不确定练习B)4与y=(x>0?1:x<0?-1:0);的功能相同的if语句是( )A) if (x>0) y=1;
B) if(x) else if(x<0) y=-1; if(x>
0) y=1; else y=0; else if(x<0)y=-1;
else y=0; C) y=
-1; D) y=0; if(x)
if(x>=0) if(x>0) y=1; if(x>0)y=1
; else if(x= =0) y=0; else y=-1; else y=-
1;练习A)一般形式为:switch(表达式){  case 常量表达式1: 语句1;  case 常量表达式2: 语句2;  …
 case 常量表达式n: 语句n;  default : 语句n+1; } 4.4 switch语句 (多分支选
择语句/开关语句 )说明: 1.表达式可是整型、字符型表达式。 2.case和常量表达式间一定要有空格,case后的语句可以没
有,也可以有多个(可以不用“{ }”括起来 )。 3.每个case的常量表达式的值必须互不相同。 4.default子句的位置
随意。功能: 先计算表达式的值,若该值与case后某一常量表达式的值相等,则执行此case后的所有语句,直至switch语句体
结束。 若不等,则执行default后的语句。4.4 switch语句 (多分支选择语句/开关语句 )一般形式为:
switch(表达式){  case 常量表达式1: 语句1;  case 常量表达式2: 语句2;  …  case 常量表达式
n: 语句n;  default : 语句n+1; } switch ( cj/10){ case 9: printf ("
A \n"); case 8 : printf ("B \n"); case 7 : printf ("C\n"); case
6 : printf ("D\n"); default : printf("E\n");}若cj=85,则将输出:BCDE
如: switch ( cj/10) { case 10: case 9: printf
(“A \n”); break; case 8 : printf (“B \n”); break ;
case 7 : printf (“C\n”); break; case 6 : p
rintf (“D\n”); break; default : printf(“E\n”);
}关于break语句1.break语句又称间断语句。2.可以用在case语句之后,跳出switch语句体。若cj=85,则将输出
:B【例4.8】编写程序,输入1~10之间的任意一个数字,输出相应的英文单词。 【例4.11】若x为实型量,计算分段函数: 巩固练
习1、若变量c为char类型,能正确判断出c为小写字母的表达式是_______。  A)''a''<=c<=''z''      B)(c
>=''a'')‖(c<=''z'')  C)(''a''<=C)and(''z''>=C)  D)(c>=''a'')&&(c<=''z'')D)(c>
=''a'')&&(c<=''z'')巩固练习2、设有如下程序段: int x=6, y=4; printf("%d\n",(
x%y,x&&y));则以下叙述中正确的是__________。 A)输出语句中格式说明符的个数少于输出项的个数,不能正确输
出 B)运行时产生出错信息 C)输出值为2 D)输出值为1D)输出值为1巩固练习3、以下程序运行后的输出结果是
_________#include “stdio.h”main() { int i=1, j=2,k=3; if(i++==
j&&k--==j) printf("%d,%d,%d",i++,j,k); else printf("%d,%d,%d",+
+i,++j,k--);}A)l,2,3  B)2,2,3  C)2,3,2  D)3, 3,3D)3, 3,3巩固练
习4、以下程序运行后的输出结果是_________。#include "stdio.h"main(){ int a=16,b=2
1,m=0; switch(a%3) { case 0: m++; break; case 1:
m++; switch(b%2) { default: m++;
case 0: m++; break; } } p
rintf("%d\n",m);}A)1  B)2  C)3  D)4C)3巩固练习5、若从键盘输入58,则以下程序的输出结
果是( )。#include “stdio.h”main(){ int a; scanf("%d",&
a); if(a>50)printf("%d",a); if(a>40)printf("%d",a); if(a>30)pr
intf("%d",a);}585858巩固练习6、以下程序运行后的输出结果是( )。#include ”stdio.h”main(){ int x=10,y=20,t=O; if(x==y)t=x;x=y;y=t; printf("%d,%d\n",x,y);}20,0本章小结逻辑运算的值为逻辑型数据“真”和“假”。C编译系统在给出逻辑运算值时,以“1”代表“真”,“0 ”代表“假”;判断一个量为“真”还是“假”时,以数值“0”代表“假”,以“非0”的数值作为“真”关系运算和逻辑运算关系表达式和逻辑表达式的值只能是0或1。 条件运算符:条件表达式经常用与替代if-else语句,实现给同一个变量赋值的目的。这样不但使程序简洁,也提高了运行效率。选择结构的实现 (1) 基本if语句主要用于单向选择。 (2) if-else语句主要用于双向选择。 (3) if-else if-else语句、嵌套的if语句和switch语句用于多向选择。本章小结
献花(0)
+1
(本文系籽油荃面原创)