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

  • 格式:ppt
  • 大小:521.50 KB
  • 文档页数:45

下载文档原格式

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

选 择 结 构
第五章 选择结构程序设计(1)
公共计算机教学部
张乐
要设计选择结构程序,要考虑两个方面的问题:

一是在C语言中如何来表示条件。
一般用关系表达式或逻辑表达式

二是在C语言中实现选择结构用什么语句。
用if语句或switch语句
本讲主要内容
一、条件的表示 二、 if 语句
1.单分支if 语句 2.双分支if-else语句 3.多分支if-else-if语句 4.选择结构的嵌套
1.单分支if语句
【例】将大写字母转换为对应小写字母 。
#include <stdio.h> void main( ) {char ch; printf("请输入一个字符:\n"); ch=getchar( ); printf("输入的原始字符为%c:\n",ch); if(ch>='A'&&ch<='Z') ch=ch+32; printf("转换后的字符为:%c\n",ch); }
二、 if 语句
1.单分支if 语句(The if statement) 2.双分支if-else语句(The if-else statement) 3.多分支if-else-if语句 4.选择结构的嵌套(Nest)
if语句的三种形式: 1.单分支if语句 只判断及格的分数
if (score>= 60) printf(" Pass\n ");
例: 设整型变量year表示年份,构造一个条件表达式,当 year值为闰年时该条件表达式为“真”,否则为“假”。 分析: 根据数学知识,闰年年份满足的条件为: 1.如果年份能被4整除但不能被100整除,是闰年; 2.年份能被400整除,也是闰年。 所以,判断闰年的条件表达式为下列二者之一: ① year%4==0&&year%100!=0 ② year%400==0 表达式① ②的或运算完整地表示判断闰年的条件: (year%4==0&&year%100!=0)|| year%400==0 等价表示: 或 year%4==0&&year%100!=0|| year%400==0 year%4==0&&year%100|| year%400==0
/*表达式值1*/ /*表达式值1*/ /*表达式值0*/ /*表达式值1*/ /*f=0*/
思考? 能不能10>x>0来 表示x的取值范围
b+c<a
d=a>b f=a>b>c
注意:
(1)字符变量以对应的ASCII码参与运算。
1 (2)对于含多个关系运算符的表达式,根据运算符的左结 例 ‘a’>0 结果为 合性计算. ‘A’>100 结果为0
/*判断x值是否介于1和100之间*/ /*判断x值是否小于1或大于等于100*/ /*判断x和y值是否都大于等于0*/ /*判断三个数是否满足构成三角形的条件*/ /*用于判断变量ch是否为大写字母*/。 x>=1&&x<=100 x<1||x>=100 x>=0&&y>=0 x+y>z&&x+z>y&&y+z>x ch>= 'A '&&ch<=‟Z‟
(三) 条件运算符与条件表达式
条件运算符是C语言中唯一的三目运算符。 一般形式为: 表达式1 ? 表达式2 : 表达式3 条件运算符的优先级低于逻辑运算符,高于赋值操作 符,自右向左结合。 功能: 求解 真(非0) 求解 表达式2 表达式 表达式1 假(0)
求解 表达式3
的值
例,求两数中的较大数: max=(x>y?x:y)
【例】用“假设思想”法求任意两数中的较大 数。(必记算法)
假设思想:先假设某事物成立或不成立,然后判断事实是否 如此,如果事实和假设条件不符,则对假设进行修正。
一、条件的表示
关系运算符与关系表达式 逻辑运算符和逻辑表达式 条件运算符与表达式
(一)关系运算符与关系表达式
关系运算符:比较两个量的运算符,是双目运算符 由关系运算符将操作数连起来的表达式称为关系表达式。 优先级:算术运算符>关系运算符>赋值运算符 结合性:自左向右(左结合) 关系表达式的结果: 表达式成立—逻辑真:1 逻辑值
a && b && c 例 a=1;b=2;c=3;d=4;m=1;n=1; (m=a>b)&&(n=c>d)
注意区分C语言的关系表达式与数学上的比较运
算表达式,并将数学上的比较运算转化为合法的 C关系表达式。
例:判断变量a的值是否在12到30之间。 数学表达式:12<a<30
正确的写法应该是:(12<a)&&(a<30)
上讲回顾
一、信息的输入输出 格式化输入输出函数 字符输入输出函数 字符串输入输出函数 二、C语句概述 简单语句 复合语句 空语句
实验题目
#include<stdio.h> { int num; printf(“请输入一个整数:”); scanf(“%d”,&num); if(num%2==0) printf(“该数是偶数!”); else printf(“该数是奇数!”); }
判断及格和不及格的分数
2.双分支if语句
if (score>= 60) printf("Pass\n"); else printf("Fail\n");
3.多分支if语句
判断优 良 中 差 不及格
if ( score<60) printf(“不及格” ); else if ( score <70) printf(“差”); else if (score <80) printf(“中”); else if (score <90) printf(“良”); else printf(“优”);
(二)逻辑运算符与逻辑表达式
C语言中有3个逻辑运算符:

&&(逻辑与,并且)
||(逻辑或,或者) !(逻辑非,取反)
“!”为单目运算符,“&&”和“||”为双目运算符。
优先级顺序:!>算术>关系>&& >||


“!”的优先级高于算术运算符,右结合性。
“&&”和“||”的优先级低于关系运算符,左结合 性。
1.单分支if语句
if (score>= 60) print(" Pass\n ");
• 语句形式: if (表达式) 语句;
表达式:常用关系表达式和逻辑表达式
语句:单个语句或复合语句 假(0)
表达式
真(非0)
语句执行流程:
语句
2.双分支if语句
if (score>= 60) printf("Pass\n"); else printf("Fail\n");
逻辑运算结果 a&&b a || b 1 1 1 0 !a 0 0 1 1
例:a=4;b=5; 则 短路特性:逻辑表达式求解时,并非所有的逻 !a
辑运算符都被执行,只是在必须执行下一个逻 a&&b 辑运算符才能求出表达式的解时,才执行该运 a||b 算符。
!a||b 4&&0||2 5>3&&2||8<4-!0 例a=0,b=1,c=-2 „c‟&&„d‟
小于等于 x<=y 等于 不等于
X==y 若x等于y,结果为真(1);否则结果为假(0) x!=y 若x不等于y,结果为真(1);否则结果为假(0)

运算符优先级 c>a+b /*c>(a+b)*/ a>b!=c /*(a>b)!=c*/ a==b<c /*a==(b<c)*/ a=b>c /*a=(b>c)*/ 例 int a=3,b=2,c=1,d,f; a>b (a>b)==c
多分支语句执行流程:
假(0) 表达式1 真(非0) 语句1 假(0) 假(0)
表达式2
语句2
真(非0) 表达式n
真(非0) 语句n 语句n+1
注意
(1) if是关键字只能小写。 if语句中表达式形 式很灵活,可以是常量、变量、任何类型表达式 等。只要表达式的值为非零值,条件就为真,反 之条件为假。 • int a=1;
表达式不成立—逻辑假:0
关系运算符
关系运算符 >
名称 大于
案例
含 义
x>y 若x大于y,结果为真(1);否则结果为假(0) 若x大于等于y,结果为真(1);否则结果为假 (0)
优 先 级 高 优 先 级 低
>= < <= == !=
大于等于 x>=y 小于
x<y 若x小于y,结果为真(1);否则结果为假(0) 若x小于等于y,结果为真(1);否则结果为假 (0)
if(a) if(-3) if(a=0) if(a==0) if(a%2)
(2)if语句自动结合一个语句,当满足条件需要 执行多个语句时,应用一对大括号{ }将需要执行的 多个语句括起,形成一个复合语句。
比较:
if ( a>b ) t=a; a=b; b=t;
if ( a>b ) { t=a; a=b; b=t; }

运算符优先级 a<=x && x<=b // (a<=x) && (x<=b) //(a>b)&&(x>y) a>b&&x>y //(a==b)||(x==y) a==b||x==y !a||a>b //(!a)||(a>b)
wenku.baidu.com
逻辑表达式的结果: 值为零—逻辑假:0 逻辑值
非零值—逻辑真:1
运算对象 a 非0 非0 0 0 b 非0 0 非0 0 1 0 0 0
(3)注意“==”和“=”的区别。 例: 5>2>7>8在C中是允许的, 值为0 (4)应避免对实数作相等或不等的判断 (5) 字符串之间的比较不允许使用关系运算符 数学概念: |a-b|<ε 例例 : int i=1, j=7,a; •其中,ε为很小的正数,表示 a和b之间的误差。可 int a=i+(j%4!=0); a=0,b=1; 2 则b) a= printf(“a 以根据要求进行调节, ε越小, aequal 和b之间的差就越 if(a= to b”); 例:#include <stdio.h> 例: #include <stdio.h> else printf(“a not equal to b”); 小。 #include <math.h> void main() void main() • 若该式成立,则认为 a与b之间误差不超过ε, { float d=123.45; { float d=123.45; if(123.45==d) printf("1\n"); if(fabs(123.45-d)<1e-5) printf("1\n"); 近似相等; printf("0\n"); else else printf("0\n"); • } 否则认为a和b不相等。 }
• 语句形式: if (表达式) 语句1; else 语句2 ;
语句执行流程: 表达式
假(0) 真(非0) 语句1 语句2
3.多分支if-else-if 语句
if ( score<60) printf(“不及格” ); else if ( score <70) printf(“差”); else if (score <80) printf(“中”); else if (score <90) printf(“良”); else printf(“优”); • 语句形式: if (表达式1) 语句1; else if (表达式2)语句2; …… else if (表达式n)语句n; else 语句n+1;
( 3 )当 if 语句中出现多个“ if” 与“ else” 的时候 ,要特别注意它们之间的匹配关系,否则就可能 导致程序逻辑错误。 “ else” 与“ if” 的匹配原则是“就近一致原则 ”,即“ else” 总是与它前面最近的“ if” 相匹配 。 if ( score<60) printf(“不及格” ); else if ( score <70) printf(“差”); else if (score <80) printf(“中”); else if (score <90) printf(“良”); else printf(“优”);
【例】从键盘输入一个数,判断其是奇数还是 偶数。
#include<stdio.h> void main(void) { int x; printf(“请输入一个整数: "); scanf("%d",&x); x%2==0? printf(“%d 是偶数 !\n”,x):printf(“%d是奇数 x%2? printf("%d 是奇数 !\n",x):printf("%d 是偶 !\n",x); 数!\n",x); }