第四篇选择结构程序设计
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
以某表达式的值等于0作为条件时可写成对该表达式 取反的形式。
例如,语句:if(x==0) printf(“x=0”);可以简写成:
if(!x) printf(“x=0”);
4.3 if语句
说明: (3)无论是if语句中的语句还是if-else语句中的语
句1、语句2,都可以是任何语句。当它们中的某 一个是有多条语句组成时,必须写成复合语句的 形式。例如,语句:
优先级: 高 算术运算符
< ,<=, >, >=
低
==, !=
赋值运算符
4.2 关系运算与逻辑运算
2.关系表达式
一般形式为:〈表达式〉〈关系运算符〉〈表达式〉
合法的关系表达式:
a>b
a+b<c-d
(a=3)<=(b=5)
‘a’>=‘b’
(a>b)==(b>c)
关系表达式的值:
——逻辑值
“真” “1”表示
else
printf(“n=%d NO\n”,n); }
➢多分支if语句
4.3 if语句
当if-else语句中的语句2是另一条if语句时,就构成了多分支if语句。
语句的一般形式为: 表 达 式
1
if(表达式1) 语句1 真
假 执行过程:
假 表达式2
else if(表达式2) 语句2
真
假
else if(表达式3) 语句3
用N-S流程图表示例4.1的算法 输入weight
成立
weight≤50
不成立
pay=weight*0.35
pay=50*0.35+(weight50)*0.5
输出 pay
4.2 关系运算与逻辑运算
➢关系运算 1.关系运算符 < (小于) <= (小于或等于) == (等于)
> (大于) >= (大于或等于) != (不等于)
“假” “0”表示
4.2 关系运算与逻辑运算
例如:假设num1=3,num2=4,num3=5,则: (1)num1>num2的值=0。 (2)(num1>num2)!=num3的值=1。
思考:改变num1或num2的值,会影响整个表达式的值 吗?
注意:关系表达式的值,还可以参与其它种类的运算 (为什么?) (4)(num1<num2)+num3的值=6。
1
一般形式为:
计算表达式2,
表达式1?表达式2:表达式取3其值作为条件
计算表达式3, 取其值条件运算符与条件表达式
【例 4.4】 从键盘上输入一个字符,如果它是大写字 母,则把它转换成小写字母输出;否则,直接输出。
void main() { char ch;
优先级:
1) ! → && → ||
2) !→ 算术运算符 → 关系运算符 → &&→ || → 赋值运算符
4.2 关系运算与逻辑运算
2. 逻辑表达式
用逻辑运算符将运算对象连接起来的式子 。
合法的逻辑表达式:
(x>=0)&&(x<10)
(x<1)||(x>5)
!(x==0)
(year%4==0&&year%100!=0)||(year%400==0)
void main()
{ double x,y;
printf(“Enter x:”);
scanf(“%lf”,&x);
if(x<=2) y=x*(x-3)+2.5;
else if(x<=7) y=sqrt(7-x)+log(x-2);
else y=(x-5)/3;
printf(“x=%5.2f y=%5.2f\n”,x,y);
4.1 算法及其描述方法
➢ 算法的表示方法 1.自然语言与伪代码表示方法 (1)自然语言表示法 将解决问题的步骤用自然语言表示。 【例4.1】计算火车行李托运费。输入行李重量,
计算并输出托运费。 收费标准:
(1)不超过50公斤,每公斤0.35元; (2)超过50公斤,其中50公斤同(1),超过部 分每公斤0.50元。
➢ 逻辑运算 4.2 关系运算与逻辑运算
1. 逻辑运算符
&& 逻辑与 (相当于“并且”)
||
逻辑或 (相当于“或者”)
!
逻辑非 (相当于“不是”)
运算规则:
1)a&&b:当且仅当a和 b的值都为真时,结果为真,否则为假。
2)a||b :当且仅当a和 b的值都为假时,结果为假,否则为真。
3) !a :当a的值为真时,结果为假;当a的值为假时,结果为真。
a 条件
不成立
A b
4.1 算法及其描述方法
(3)循环结构。包括两类循环结构。
当(while)型循环:
a
条件 成立
不成立
A
b (a)while型循环
直到(until)型循环:
a A
条件 成立 b
不成立
(a)until型循环
4.1 算法及其描述方法
用流程图表示例4.1的算法 开始
成立
输入 weight
4.1 算法及其描述方法
➢ 算法: 把为解决一个问题而采取的方法和步骤称为“算法”。
➢ 有三种控制结构: 顺序结构、选择结构和循环结构。
顺序结构:计算机自动按照语句编写的顺序一句一句执 行语句。
选择结构:也称分支结构。根据输入的数据或中间结果 的情况,选择一组语句执行。
循环结构:又称重复结构,即当给定条件满足时,反复 执行某一部分语句。
4.1 算法及其描述方法
算法: 步骤1: 输入行李的重量 步骤2:根据行李的重量计算费用 若重量<=50 则 费用=weight*0.35
否则 费用=50*0.35+(weight-50)*0.5 步骤3:输出费用的值
4.1 算法及其描述方法
(2)伪代码表示法 伪代码: 是不能由计算机执行的,但可以很容易地转化 为高级语言的程序。
出最大数存入变量max中,
float型。
输出 max
结束
4.3 if语句
这种方法即擂台法,对从3 个以上的数中找最大数的
(3)程序清单
改为:
处理,非常有效。
void main()
max=n1;
{ float n1,n2,n3,max; printf(n1,n2,n3= );
if(n2>max) max=n2; if(n3>max) max=n3;
switch语句的一般形式为:
switch(表达式)
{case 常量表达式1:语句1 case 常量表达式2:语句2
执行过程:
.
.
case 常量表达式n:语句n
表达 式
default:
printf("Input a character: "); scanf("%c",&ch); ch=(ch>='A' && ch<='Z') ? (ch+32) : ch; printf("ch=%c\n",ch); }
4.5 switch语句
在C语言中,用switch语句描述多路按值选择结构。
if(i!=j)
{i+=1;
j+=2;
}
else
i-=j;
4.3 if语句
【例4.2】求三个数中的最 大者。
(2)算法设计:
开始 输入n1,n2,n3
真 n1≥n2 假
(1)问题分析及变量设置: max=n1
max=n2
从键盘读入三个数分别
存入变量n1,n2,n3中,求
真 n3≥max 假
max=n3
if语句
4.3 if语句
➢ 简单if语句 1.if语句
语句的一般形式为: if(表达式) 语句
if语句的执行过程是:
表达 式1(真)
语句
0(假)
例如:
if(score>=90) printf(“Good! ”);
printf(“Your score is %d.\n”,score);
思考:若score的 值是95,输出时 什么?若score的
weight≤50
不成立
weight*0.35=> pay
50*0.35+(weight-50)*0.5=> pay
输出pay 结束
4.1 算法及其描述方法
3 N-S流程图表示方法
A
(1)顺序结构
B
(2)选择结构
(3)循环结构 当型循环
成立 A
p 不成立
B
直到型循环
当p成立 A
A 直到p成立
4.1 算法及其描述方法
结束
例题3:输入一个数,判断它是否能被3整除,若能被3 整除,打印YES;不能被3整除,打印NO
#include <stdio.h> void main( )
程序有错吗??
{ int n; printf(“input n:”);
scanf(“%d”,&n);
if(n%3=0)
printf(“n=%d YES\n”,n);
本章要点
➢内容要点提示:
➢什么是算法?算法是如何描述的?
➢程序的三种基本控制结构是什么? 执行流程怎样?
➢如何用关系表达式和逻辑表达式表 示简单条件、复杂条件?
➢if语句有几种形式?条件如何判断?
➢switch语句一般形式如何?执行过 程怎样?
本章内容
4.1 算法及其描述方法 4.2 关系运算与逻辑运算 4.3 if语句 4.4 条件运算符与条件表达式 4.5 switch语句 4.6 选择结构程序举例 *4.7 if语句嵌套
2 传统的流程图表示方法 流程图是用称为“流线”的箭头将具有专门含义的表示各 种操作的符号连接而成的。 流程图常用的符号 :
起止框
输入/输出框
判断框
处理框
流程线
连接点
注释框
4.1 算法及其描述方法
用流程图表示的程序的三种基本控制结构
(1)顺序结构。 A
(2)选择结构。
B
a
成立
条件
不成立
A
B
b
成立
数值与逻辑量的对应:
逻辑表达式的值:
(1)逻辑值 真
数值 1
例如:num=12,
假
0
则: !num的值为 0;
(2)数值 0
逻辑值 假
num>=1 && num<=31的值为 1;非0
真
num || num>31的值为 1。
注意:
1. 5<x<10 应该写成x>5&&x<10
2. x≥5 写成x>=5 y≤10写成 y<=10
例4.1的伪代码算法: begin
input weight if weight is less than or equal to 50
set pay to weight*0.35 else set pay to 50*0.35+(weight-50)*0.5 output pay end
4.1 算法及其描述方法
开始
scanf(%f%f%f ,&n1,&n2,&n3);
输入n1,n2,n3
if (n1>n2)
max=n1
max=n1;
假
n2≥max
真
else max=n2;
max=n2
if ( n3>max)
max=n3;
假
printf(max=%.2f\n,max);
n3≥max
真 max=n3
}
输出 max
3. ==与=的完全不同
如 a=10;
if( a=20) x=x+1;
else y=y+1
4.关系表达式和逻辑表达式的运算结果得到一 个逻辑值:真或者假。
C语言中没有专门的逻辑值,也没有专门 的逻辑变量用零表示假,用非零值表示真--非零 即为真!!!!
4.3 if语句
➢例4.1的程序清单 void main() { float weight,pay; printf(weight= ); scanf(%f ,&weight); if (weight<=50) pay=weight*0.35; else pay=50*0.35+(weight-50)*0.5; printf(pay :%.2f\n,pay); }
}
4.4 条件运算符与条件表达式
➢ 条件运算符
?:,
C语言中唯一的一个三目运算符
➢ 优先级与结合性 (13级)
算术运算符 → 关系运算符 → 条件运算符 → 赋值运算符
右结合性
➢ 常用方式
max=(a>b)?a:b 等价于 if (a>b)真max=a;
假
➢ 条件表达式
else max=b; 表达式
值是85,输出怎
样?
4.3
2. if-else语句 语句的一般形式为: if(表达式)
语句1
else
语句2
例如: if(x<y) min=x; else min=y; printf(“min=%d\n”,min);
if语句
语句执行的过程:
真
表达式
语句1
假设x的值是5,y的 值是7,这段程序执 行后会输出:?
表达式3
.
真
假
.
表达式4
. else if(表达式n) 语句n else 语句n+1
真 表达式5 真
语句1
语句2
语句3
语句4
语句5
假 语句6
4.3 if语句
➢【例4.3】求如下函数
式y的值。
4.3 if语句
➢【例4.3】求如下函数
式y的值。
程序代码:
#include <stdio.h>
#include <math.h>
假 语句2
说明:
4.3 if语句
(1)if语句中,括号内的表达式用来表示条件,一 般为关系表达式或逻辑表达式。
(2)当if语句以某表达式的值不等于0作为条件时, 可直接简写成表达式作为条件。
例如,语句:if(x!=0) printf(“x!=0”);可以简写 成:if(x) printf(“x!=0”);