第4章 选择结构程序设计 (1)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1.逻辑运算符及其运算规则 (1)C语言提供三种逻辑运算符: && “且”) || !
2013-7-9
逻辑与(相当于“同时”、
逻辑或(相当于“或者”) 逻辑非(相当于“否定”)
9
例如,下面的表达式都是逻辑表达式:
(x>=0) && (x<10) ,(x<1) || (x>5) ,! (x= =0), (year%4==0)&&(year%100!=0)||(year%400==0)
为明确匹配关系,避免匹配错误,建议:将内嵌的if语句,一律 用花括号括起来。
条件 表达式
2013-7-9
19
[例3] 写一程序,从键盘上输入一个年份year(4位十 进制数),判断其是否闰年。 算法设计要点:
1)闰年的条件是:能被4整除、但不能被100整除,或者能被 400整除。 2)如果X能被Y整除,则余数为0,即如果X%Y的值等于 0,则表示X能被Y整除! 3)首先将是否闰年的标志leap预置为0(非闰年),这样仅当 year为闰年时将leap置为1即可。这种处理两种状态值的方法,对 优化算法和提高程序可读性非常有效。
(2)else子句(可选)是if语句的一部分,必须与if配对使用,不 能单独使用。
(3)当if和else下面的语句组,仅由一条语句构成时,也可不使 用复合语句形式,即去掉花括号“{ }”。
2013-7-9
18
2.if语句的执行过程
(1)缺省else子句时(P89) 当“表达式”的值不等于0(即判定为“逻辑真”)时,则执行语 句组1,否则直接转向执行下一条。
例如, (year%4==0)&&(year%100!=0)||(year%400==0) 是一个判断一个年份是否是闰年的逻辑表达式。
逻辑表达式的值也是一个逻辑值(非“真”即 “假”)。
2013-7-9
12
2.逻辑量的真假判定──0和非0
C语言用整数“1”表示“逻辑真”、用“0”表示 “逻辑假”。 判断一个数据的“真”或“假”时,却以0和非0为 根据:如果为0,则判定为“逻辑假”;如果为非0, 则判定为“逻辑真”。
2013-7-9 16
[例2]输入任意三个数n1、n2、n3,按从小到大的顺序排序输出。
#include <stdio.h> void main() {int n1,n2,n3,temp; printf("Please input three numbers:"); scanf("%d,%d,%d",&n1,&n2,&n3); if (n1>n2) {temp=n1;n1=n2;n2=temp;} if (n2>n3) {temp=n2;n2=n3;n3=temp;} if (n1>n2) {temp=n1;n1=n2;n2=temp;} printf("Three numbers after sorted: %d,%d,%d\n",n1,n2,n3); }
程序运行情况如下: Please input three numbers: 22,18,11↙ Three numbers after sorted: 11,18,22
2013-7-9 17
1.if语句的一般格式
if(表达式) {语句组1;} [else {语句组2;} ]
(1)if语句中的“表达式”必须用“(”和“)”括起来。
2013-7-9 2
第4章
选择结构程序设计
根据选择结构的组成特点,分析问题时着重明 确以下两点: 1)条件是什么
2)条件成立和不成立时分别执行什么操作。
2013-7-9
3
引例
计算函数值: sin(x)/x x≠0 y= 1 需考虑: x=0 关系运算
Enter x: 2 x=□2.00 y=□0.4546
1)对于逻辑与运算,如果第一个操作数被判定 为“假”,系统不再判定或求解第二操作数。 2)对于逻辑或运算,如果第一个操作数被判定 为“真”,系统不再判定或求解第二操作数。
2013-7-9 14
3、逻辑型变量
• 这是C99所增加的一种数据类型_Bool • 可以将关系运算和逻辑运算的结果存到一个 逻辑型变量中,以便于分析和运算。
例如,假设num=12,则: 0 !num的值 num>=1 && num<=31的值 1 num || num>31的值 1
2013-7-9
13
3.说明 例如,假设n1=1、n2=2、n3=3、n4=4、x=1、 y=1则求解表达式“(x=n1>n2)&&(y=n3>n4)”后, (1)逻辑运算符两侧的操作数,除可以是0 x=?,y=?,表达式的值=? 和非0的整数外,也可以是其它任何类型的数 据,如实型、字符型等。 0 0 1 (2)在计算逻辑表达式时,只有在必须执行 下一个表达式才能求解时,才求解该表达式 (即并不是所有的表达式都被求解)。即:
(2)运算规则 1)&&:当且仅当两个运算量的值都为“真”时,运算
结果为“真”,否则为“假”。 2) || :当且仅当两个运算量的值都为“假”时,运算结 果为“假”,否则为“真”。 3) ! :当运算量的值为“真”时,运算结果为“假”; 当运算量的值为“假”时,运算结果为“真”。
例如,假定x=5, 则(x>=0) && (x<10)的值为“真”, (x<-1) || (x>5)的值为“假”。
P378
2013-7-9
15
1、if语句
三、 if语句和条件运算符
程序运行情况如下: Please input three numbers:11,22,18↙ The three numbers are:11,22,18 max=22
[例1] 输入任意三个整数n1、n2、n3,求三个数中的最大值。
0 1 1 6
思考题:任意改变n1或n2的值,会影响整个表达式的值吗?
再次强调:C语言用整数“1”表示“逻辑真”,用整数“0” 表示“逻辑假”。所以,关系表达式的值,还可以参与其它 种类的运算,例如算术运算、逻辑运算等。
2013-7-9
8
二、逻辑运算及其表达式
关系表达式只能描述单一条件,例如: “x>=0”。如果需要描述“x>=0”、同时“x<10”, 就要借助于逻辑表达式了。 1、 逻辑运算及其优先次序
2013-7-9 20
参考程序如下: /*功能:说明if语句的嵌套格式和用法。*/
#include <stdio.h> 利用逻辑运算能描述复杂条件的特点,可将上述程序优化如下:
main() #include <stdio.h> {int year,leap=0; /* leap=0:预置为非闰年*/ main() printf("Please input the year:"); scanf("%d",&year); {int year; if (year % 4==0) printf("Please input the year:"); { if (year % 100 != 0) leap=1; scanf("%d",&year); } if(year%400==0) ((year%4==0 && year%100!=0)||(year%400==0)) if printf("%d is a leap year.\n",year); leap=1; } if (leap) printf("%d is a leap year.\n",year); else else printf("%d is not a leap year.\n",year); printf("%d is not a leap year.\n",year); }
2 . 关 系 表 达 式 的 值 —— 逻 辑 值 ( 非 “ 真 ” 即
由于C语言没有逻辑型数据,所以用: 整数“1”表示“逻辑真”;用整数“0”表示“逻辑 假”。
2013-7-9 7
例如,假设n1=3,n2=4,n3=5,则:
(1)n1>n2的值 (2)(n1>n2)!=n3的值 (3)n1<n3<n2的值 (4)(n1<n2)+n3的值
}
2013-7-9
21
4.说明
(1)if后面的“表达式”,除常见的关系表达式或逻辑表达式外,也允 许是其它类型的数据,如整型、实型、字符型等。 (2)if语句允许嵌套,但嵌套的层数不宜太多。在实际编程时,应适当 控制嵌套层数(2~3层)。 (3)“语句组1”和“语句组2”,可以只包含一个简单语句,也可以是复 合语句。
#include <stdio.h> int main() {int n1,n2,n3,max; printf(“Please input three numbers:”); scanf(“%d,%d,%d”,&n1,&n2,&n3); if (n1>n2) max=n1; max=n1; if(n2>max) 这种优化形式的基本思想是: else 首先取一个数预置为max(最大 max=n2; max=n2; 值),然后再用max依次与其余 if (n3>max) 的数逐个比较 ,如果发现有比 max=n3; printf(“The three numbers are:\ max大的,就用它给max重新赋 值,比较完所有的数后,max中 %d,%d,%d\n",n1,n2,n3); 的数就是最大值。这种方法,对 printf("max=%d\n",max); 从3个或3个以上的数中找最大值 return 0; 的处理,非常有效。 }
2013-7-9
5
1、 关系运算符及其优先次序
1.关系运算符 C语言提供6种关系运算符: < (小于) <= (小于或等于) > (大于) >= (大于或等于) == (等于) != (不等于) 2.优先级 (1)在关系运算符中,前 4个优先级相同,后2个也相同, 且前4个高于后2个。 (2)与其它种类运算符的 优先级关系 关系运算符的优先级,低 于算术运算符,但高于赋值运 算符。(P379)
注意:在C语言中,“等于”关系运算符是双等号 “= =”,而不是单等号“= ”(赋值运算符)。
2013-7-9
6
2、关系表达式
1.关系表达式的概念: 用关系运算符将两个表达式连
接起来,进行关系运算的式子。
例如,下面的关系表达式都是合法的:
a>b, a+b>c-d, ‘a‟>=„b‟, “假”)。 (a=3)<=(b=5), (a>b)= =(b>c)
2013-7-9 10
2.逻辑运算符的运算优先级(P93) (1) 逻辑非的优先级最高,逻辑与次之,逻辑或最低, 即: !(非) → &&(与) → ||(或) (2) 与其它种类运算符的优先关系 !→ 算术运算 → 关系运算 → &&→ || → 赋值运算
2013-7-9
11
2、逻辑表达式 1.逻辑表达式:是指用逻辑运算符将1个或多个表 达式连接起来,进行逻辑运算的式子。在C语言中, 用逻辑表达式表示多个条件的组合。
①输入x
②判断x的值
选择结构
ຫໍສະໝຸດ Baidu
③根据x值,计算y值
④输出y值 显然,②③顺序程序不能够实现,须 引入选择结构程序。 2013-7-9
4
一、 关系运算及其表达式P91
所谓“关系运算”实际上就是“比较运算”,即将 两个数据进行比较,判定两个数据是否符合给定的关系。 例如,“a > b”中的“>”表示一个大于关系运算。 如果a的值是5,b的值是3,则大于关系运算“>”的结 果为“真”,即条件成立;如果a的值是2,b的值是3, 则大于关系运算“>”的结果为“假”,即条件不成立。
第4章 选择结构程序 设计
2013-7-9
1
第4章
选择结构程序设计
要设计选择结构程序,要考虑两个方面的问 题:一是在C语言中如何来表示条件,二是在C 语言中实现选择结构用什么语句。 在C语言中表示条件,一般用关系表达式或 逻辑表达式,实现选择结构用if语句或switch语 句。 1 关系运算及其表达式 2 逻辑运算及其表达式 3 if语句 4 switch语句 5 选择结构程序举例 良好的源程序书写风格──注释
(2)指定else子句时 当“表达式”的值不等于0(即判定为“逻辑真”)时,则执行语 Y N 句组1,然后转向下一条语句;否则,执行语句组2。
3.if语句的嵌套与嵌套匹配原则
if语句允许嵌套。所谓if语句的嵌套是指,在“语句组1”或(和) 真(非0) 语句1 语句2 假 “语句组2”中,又包含有if语句的情况。 if语句嵌套时,else子句与if的匹配原则:与在它上面、距它最近、 (0) 且尚未匹配的if配对。 语句1
相关文档
最新文档