资源预览内容
第1页 / 共40页
第2页 / 共40页
第3页 / 共40页
第4页 / 共40页
第5页 / 共40页
第6页 / 共40页
第7页 / 共40页
第8页 / 共40页
第9页 / 共40页
第10页 / 共40页
亲,该文档总共40页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
1,第三章 选择结构,C语言程序设计,华北电力大学计算机科学系 周蓉,2,学习目标,掌握关系运算与逻辑运算的规律及规则; 掌握if语句的语法规则、执行过程和使用方法; 理解if语句的嵌套; 掌握switch语句的语法规则和用法; 掌握条件运算符和条件表达式; 掌握选择结构程序设计方法及技巧。,3,3.1选择结构概述,【例3-1】输入x的值,求分段函数y=f(x)的值,函数表示如下: x2 x0 y= 0 x=0,#include void main(void) int x, y; /*定义变量x和y*/ printf(“请输入x的值:“); scanf(“%d“, /*输出y的值*/ ,请输入x的值:5 y=25 Press any key to continue,请输入x的值:0 y=0 Press any key to continue,选择结构,4,3.2关系运算与逻辑运算,3.2.1 关系运算 1关系运算符 设变量 x=-2,表3-1关系运算符,5,3.2.1 关系运算,2优先级 (1)在关系运算符中,、= 这4个运算符的优先级相同。 (2)=和!= 这2个运算符的优先级也相同,但比上述4个运算符优先级低。 (3)关系运算符的优先级,低于算术运算符,但高于赋值运算符。 (4)关系运算符都是双目运算符,其结合性均为左结合。 例如:表达式x+yx*y等价于(x+y)(x*y)。,6,3.2.1 关系运算,3关系表达式 关系表达式的一般形式为: 表达式 关系运算符 表达式,例如: a+bc-d x3/2 0=x=5,注意:若x=10, 0=x=5的值?,0=x=5根据左结合性,它等价于(0=x)=5。 0=x的值为1, (1)=5的值为1。 关系表达式:0=x=5其数学含义为x在0,5区间上,显然x=10不在0,5区间,而C语言的表达式却为1(真),我们得到了一个与数学相违背的结论。,7,3.2.3 逻辑运算,1逻辑运算符,表3-2逻辑运算符,2运算规则 & 当且仅当两个运算量的值都为“真”时,运算结果为“真”,否则为“假”。 | 当且仅当两个运算量的值都为“假”时,运算结果为“假”,否则为“真”。 ! 当运算量的值为“真”时,运算结果为“假”;当运算量的值为“假”时,运算 结果为“真”。 逻辑表达式的值只有“真”和“假”两种,用“1”和“0”来表示。,8,3.2.3 逻辑运算,3优先级 逻辑非的优先级最高,逻辑与次之,逻辑或最低,即:! & | 与其它种类运算符的优先关系为: ! 算术运算 关系运算 & | 赋值运算 & 和 | 均为双目运算符。具有左结合性。 ! 为单目运算符,具有右结合性。,例1: 判断x是否在0,5区间,写出逻辑表达式 x=0 & x=0为1,x=0 & x=0为1,x=0 & x=0为0,x=0 & x=5的值为0;,9,3.2.3 逻辑运算,例2: x5 当x=10时 ,x5为0,则x5的值为1; 当x=3时, x5为0,则x5的值为0; 当x=-5时, x5为0,则x5的值为1; 注意:表达式x5的数学含义为:x0,5区间,与逻辑表达式x=0 & x=5 值正好相反。,例3: !( x5) 与 x=0 & x=0 & x5 等价,10,3.2.3 逻辑运算,注意: C语言中逻辑量的真假判定的规则: 0 为“假” 非0 为“真”,例4:5&3 ,5|0 都是正确的逻辑表达式 5&3 的值为1。 5|0 的值为1。,11,3.2.3 逻辑运算,注意: 在C语言中有逻辑运算的短路问题,在计算exp1 & exp2 或 exp1 | exp2 表达式时,为了提高计算效率,计算总是从左到右进行,一旦能确定结果就终止计算。 对于逻辑与运算,如果第一个操作数被判定为“假”,系统不再判定或求解第二操作数。 对于逻辑或运算,如果第一个操作数被判定为“真”,系统不再判定或求解第二操作数。,12,3.2.3 逻辑运算,【例3-2】逻辑运算举例 #include void main(void) int c,x=0,y=-5; printf(“%d,%dn“, !x*y, x ,-5,0 2,1,1 1,0,0 Press any key to continue,c=x|y x=x+1,+x:先执行x=x+1,再将x的值作 为表达式+x的值。 x+:先将x的值作为表达式x+的 值,再执行x=x+1。,c=x&y x=x+1,13,3.2.3 逻辑运算,常用的条件判断表达式: int x; 判断x是偶数:x%2 = 0; char c; 判断 c 是否为数字: c= 0 ,14,3.2.3 逻辑运算,【例3-3】 x是float型变量,判断x是否等于1/3。,#include void main(void) float x; x=1/3.0; if(x=1./3.0) printf(“x 等于1/3n“); else printf(“x不等于1/3n“); ,x不等于1/3 Press any key to continue,#include #include void main(void) float x; x=1/3.0; if(fabs(x-1./3.0)=1e-6) printf(“x 等于1/3n“); else printf(“x不等于1/3n“); ,x 等于1/3 Press any key to continue,15,3.2.3 逻辑运算,常见的编程错误: 1、将关系运算符=误写为=。例如if(x=5)误写为if(x=5)因为赋值运算表达式是有效的,所以编译器不会产生警告和错误信息。为了避免这类错误发生,在编写程序时,建议将所有等于判断条件表达式写成常数在左边。例如:if(5=x),这样如果你误写成if(5=x),编译器将产生一个错误,从而防止了这类错误的发生。 2、对于区间判断。例如:x在0,5区间上,经常会写成if(0=0&x1e-6)的形式。,16,3.3 两个分支的if 语句,3.3.1 ifelse语句的基本形式 if(表达式) 语句1; else 语句2; 执行过程,17,3.3 两个分支的if 语句,【例3-4】随机的输入两个数,输出其中的大数。,#include void main(void) int a, b; printf(“input two numbers: “); scanf(“%d%d“, ,input two numbers: 0 3 3 是最大数 Press any key to continue,18,3.3 两个分支的if 语句,【例3-5】输入三角形的三边的边长,输出三角形的面积。,#include #include void main(void) float a,b,c,s,area; printf(“请输入三角形的三边:n“, ,请输入三角形的三边: 3 4 5 area=6.000000 Press any key to continue,请输入三角形的三边: 1 2 3 输入数据错误! Press any key to continue,判断输入数据的有效性,即a,b,c是否能构成三角形。我们利用公式任意两边之和大于第三边,任意两边之差小于第三边,19,3.4 一个分支的语句,3.4.1 if语句的基本形式 if(表达式) 语句; 执行过程:,表达式,语句,真(非0),假(0),20,3.4 一个分支的语句,【例3-6】从键盘上随机的输入三个数,输出最大数。,#include void main(void) int a, b, c, max; printf(“输入三个数: “); scanf(“%d%d%d“, ,输入三个数: 3 5 8 8 是最大数 Press any key to continue,21,3.4 一个分支的语句,【例3-7】从键盘上随机的输入三个数,从大到小输出三个数,开始,输入a,b,c,ba?,a b,ca?,a c,cb?,b c,输出a,b,c,结束,N,Y,N,Y,Y,N,设:a=b=c,22,3.4 一个分支的语句,#include void main(void) int a, b, c, t; printf(“输入三个数: “); scanf(“%d%d%d“, ,输入三个数: 3 5 7 7,5,3 Press any key to continue,23,3.5 多个分支的if语句,3.5.1 ifelse if语句的基本形式 if(表达式1) 语句1; else if(表达式2) 语句2; else if(表达式3) 语句3; else if(表达式m) 语句m; else 语句n;,表达式1,语句1,真(非0),假(0),语句2,表达式3,表达式2,语句3,表达式m,语句m,语句n,假(0),假(0),假(0),真(非0),真(非0),真(非0),24,3.5 多个分支的if语句,【例3-8】从键盘上输入一个字符,判断该字符是数字、大写字母、小写字母或其它字符。,#include void main(void) char c; printf(“请输入一个字符: “); c=getchar(); if(c=0 ,请输入一个字符: b b是小写字母 Press any key to continue,25,3.5 多个分支的if语句,【例3-9】从键盘上输入学生的成绩,输出学生成绩的等级。,#include “stdio.h“ void main(void) int score; printf(“请输入学生的成绩: “); scanf(“%d“, ,请输入学生的成绩: 88 良好 Press any key to continue,思考: 对于 score100和score0的情况,可以认为是输入数据错误。那么程序将如何改写?,26,总结,if语句的语法规则: 1、在if语句中,条件判断表达式必须用括号括起来,在语句之后必须加分号。 2、在三种形式的if语句中,条件判断表达式通常是逻辑表达式或关系表达式, 但也可以是其它表达式,如算术表达式、赋值表达式等,甚至也可以是一个变量。只要其值非0即为“真”,0则为假。 3、else子句(可选)是if语句的一部分,必须与if配对使用,不能单独使用。 4、在if语句的三种形式中,所有的语句应为单个语句,如果要想在满足条件时执行一组(多个)语句,则必须把这一组语句用 括起来组成一个复合语句。但要注意的是在 之后不能再加分号。,27,总结,If语句常见的编程错误: 1、在不该出现分号的地方加了分号。 例如: if(xy); printf(x is larger than y.n); 2、复合语句的花括号后不应再加分号,否则将会画蛇添足。 例如: if (ba) t=a ;a=b ;b=t; 3、对于复合语句,忘记加花括号。,28,3.6 if语句的嵌套,其一般形式可表示如下: if(表达式1) if(表达式2) 语句1; else 语句2; else if(表达式3) 语句3; else 语句4;,29,3.6 if语句的嵌套,注意:if和else的配对问题。 例: if(表达式1) if(表达式2) 语句1; else 语句2;,if(表达式1) if(表达式2) 语句1; else 语句2;,计算机理解为,else 与if语句的配对规则: else 总是与它前面最近的、等待与else配对的if配对。,30,3.6 if语句的嵌
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号