C语言课件-第4章 选择分支结构程序设计
发布时间:2024-10-23
发布时间:2024-10-23
第4章
选择分支结构程序设计
主要内容:关系运算、逻辑运算、二路和多路 分支。 选择结构:根据条件决定执行二路或多路分支 中的一路。 二路分支 if … else … 语句 多路分支 switch语句
举例例:从键盘上输入x、y、z三个整形变量,输出其中的最 小值: #include <stdio.h> main() { int x,y,z,min; scanf(“%d,%d,%d”, &x,&y,&z); if(x<y) min = x; else min = y; if(min>z) min = z; printf(“The least is:%d\n”, min); }
4.1 关系运算符和关系表达式条件:是关系表达式或逻辑表达式,值为逻辑值: 真或假。 C语言用1表示真,用0表示假; 判断时非0为真。 关系运算符 > 大于 < 小于 == 等于 >= 大于等于 <= 小于等于 ! = 不等于
说明: (1) 六个关系运算符都是双目运算符, 如:int a=2,b=3; a< b 值为真, a= = b 值为假。 (2) 由一个关系运算符连接两个对象形成的表达式称 为关系表达式,这两个运算对象可以是算术表达式、 字符表达式等。 如: int i=3,j=6; i*i+j*j>100 结果为假。 运算对象为字符数据时,比较按其ASCII码进行 如: 表达式:’a > b 值为假
(3)关系表达式的值可以作为整数值参与运算
(4)优先级次序:算术运算符、关系运算符、赋值运算符。 (5)与数学表达式的区别 如: 3<x<100 数学解释: 判断x是否在区间(3,100)之内 C语言解释: 按从左向右的次序进行计算 若 x=0 先计算(3<x)得值0,再计算(0<100)得值1 整个表达式结果为1
4.2 逻辑运算符与逻辑表达式要表示判断x是否在区间(3,100)之内 (3<x<100), 可以用逻辑运算符“&&”连接两个关系表达式来表示, 用逻辑运算符连接两个运算对象形成逻辑表达式。 如: 3<x && x<100 在C语言中有三个逻辑运算符 && 逻辑与 || 逻辑或 ! 逻辑非 意义:a && b 当a和b同时为真时,表达式的值为真。 a || b 当a和b之一为真时,表达式的值为真。 ! a 当a的值为真,则表达式的值为假。
说明: 优先顺序: (1)&&和||是双目运算符 ① ! !是单目运算符 (2)&&和||的运算级别低于关系运算符, ② 算术运算 !的运算级别高于关系运算符和算术运算符, ③ < <= > >= 注意: !的结合方向是从右向左。 ④ == != &&和||的结合方向是从左向右, ⑤ && (3)不能确定的情况下,添加括号保证运算次序。 ⑥ || 尽量避免复杂烦琐的逻辑表达式。 ⑦ 赋值运算
(4)参加逻辑运算的运算对象可以是0(“假”)或 任何非0的数值(“真”);但运算后的结果和 关系运算的结果一样,只能是逻辑值0和1。 C语言无专门的逻辑类型,其它类型的数据也可 以参与逻辑运算,在判别时,“非0”作为 “真”, “0”作为“假”。 (5)在逻辑表达式的求解中,并不是所有的逻辑运 算符都被执行,只有在必
须执行下一个逻辑运
算符才能求出表达式的解时,才执行该运算符。例: int x=-1; 执行了++x||++x||++x 后,x的值是?
x=1
关系运算注意:例 若a=0; b=0.5; x=0.3; 则 a<=x<=b的值为0 例 'a'>0 结果为1 'A'>100 结果为0
例 应避免对实数作相等或不等的判断 如 1.0/3.0*3.0==1.0 结果为0 可改写为:fabs(1.0/3.0*3.0-1.0)<1e-6例 注意区分"="与"=="的差别 int a=0,b=1; if(a=b) printf("a equal to b"); else printf("a not equal to b");
4.3 二路分支:if语句1.if/else语句形式: if (表达式) 语句1 else 语句2 执行流程: 如果表达式值非0,执行语句1; 否则,执行语句2; 无论执行了哪一路分支之后, 都执行if的下一条语句; 例 if(x>y) max=x; else max=y;
4.3 二路分支:if语句 简单if语句语句形式: if (表达式) 执行过程:例: main() { int a,b,max; printf(”\n 请输入两个数: ”); scanf(”%d%d”,&a,&b); 语句; max=a; if (max<b) max=b; printf(”max=%d”,max); }
如果表达式值非0,执行该语句, 然后执行if的下一个语句; 否则直接执行if的下一个语句。
例: 输入三个整数x、y、z, 把这三个数由小到大输出。输入x,y,z x>y Y 交换x,y x>z Y 交换x,z y>z Y 交换y,z
N N N
输出x,y,x的值
#include <stdio.h> main() { int x,y,z,t; printf(“Please input the x,y,z: ”); scanf(“%d%d%d”,&x,&y,&z); if (x>y) { t=x; x=y; y=t; } if (x>z) { t=x; x=z; z=t; } if (y>z) { t=y; y=z; z=t; } printf(“Small to big:%d%d%d\n”,x,y,z); }
if-else语句
例 if(x>y) max=x; else max=y; printf(”max=%d”,max);
语句形式: if (表达式) 语句1; else 语句2;
执行流程: 如果表达式值非0,执行语句1; 否则,执行语句2; 无论执行了哪一路分支之后,都执行if的下一条语 句。
#include<stdio.h> main() 例.判断给定的某一年是否是闰年。 { int year,leap=0; 分析:如果某年能被 4整除而不能被 printf("\n请输入年份( yyyy):"); 100整除, scanf("%d",&year); 或者能被400整除,那么该年就是闰年, /*判断该年是否是闰年 */ 否则就是平年。 if(year%4==0&&year%100!=0||year%400==0) if(year%4==0&&year%100!=0||year%400==0) leap=1; if(leap) /*leap=1,即该年是闰年*/ printf("%d年是闰年.\n",year); else /*leap=0,即该年是平年*/ printf("%d年是平年.\n",year); }
if-else-if形式语句形式:if (表达式1) 语句1; else if (表达式2) 语句2; else if(表达式3) 语句3; … else if(表达式m) 语句m; else 语句n;
x (x<1) { y= 2x+1 (1≤ x<10) float x,y; printf("Input x:"); 5x-17 (x≥10) scanf("%f",&x); 若将if编程序 语句改为: , 输入x值 , 输出y值
例: 有一个函数如下: main( )
if (x<1) y=x; if (x<1) y=x; else if (1<=x<10) else if (x<10) y=2*x+1; y=2*x+1; else else y=5*x-17; y=5*x-17; 在x≥10时y值错误 printf("y=%f\n",y); 因 1<=x<10 永为真 }