判断与决策_选择程序设计(1)
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
关系运算的优先级低于算术运算,高于赋值运
算,而关系运算中比较大小的四个运算>,<, >=,<=的优先级又高于判断相等的两个运 算==,!=。
关系运算的结合性
例2:设有 “int a = 30,b = 20, c = 2, stauts;”,下面语句正确吗?
status = a > b > c; 如果正确status的值会是多少?
if (grade >= 60)
printf("good! you passed!\n");
//}
return 0; }
要讨论的几个问题
逻辑判断如何表达?
grade>=60
关系运算:
大于>,小于<, 大于等于>=,小于等于<=, 还有等于==,不等于!=运算
关系表达式
good! you passed!。
框图(流程图)表示法
从键盘读成绩grade
grade>=60 假
真 输出 “good!you passed!”
代码实现
#include<stdio.h>
int main(void)
{
int grade;
//while( 1 )
//{
scanf("%d",&grade);
巧妙的使用这三种结构就可以解决复杂 的问题
问题
让成绩合格的学生通过
判断成绩是否合格
给定的一个整数是偶数吗?
奇偶判断
按成绩把学生分成两组:合格与不合格
判断成绩是大于等于60还是小于60
按成绩把学生分成多组
判断成绩落在那个范围
判断某年是否为闰年
返回
三种基本结构
关系运算是左结合的
逻辑变量
c99—_Bool逻辑类型 c++—bool逻辑类型, 但要包含
stdbool.h
C/C++如何表示逻辑判断?
选择结构(单分支、双分支、多分支)
单分支选择结构 — if 结构 if (判断条件) 条件为真时执行的语句 其它语句
判断条件
N
bNum = bNum + 1;
}
}
printf("aNum = %d\n", aNum);
printf("bNum = %d\n", bNum);
return 0;
}
分析两个单分支选择结构的执行效率 C/C++提供了双分支选择结构
双分支选择结构 if-else语句
if (判断条件) 语句块1
int grade;
while(scanf("%d",&grade) != EOF)
{
if ( grade >= 60 )
{
printf("you belong in group A\n");
aNum = aNum + 1;
}
if ( grade < 60 )
{
printf("you belong in group B\n");
else 语句块2
其它语句
双分支选择结构流程图
假 语句块2
判断条件 其它语句
真 语句块1”
if (grade>=60) printf(“passed\n”); else printf(“failed\n”);
假 print “failed”
grade>=60
真 print “passed”
false
8
结构化程序的特点
单入口 单出口
问题1:让成绩合格的学生通过
问题描述: 假设有一个计算机打字训练教室,大一刚入学
的同学都要到这个训练教室练习打字。电脑自动 考核,你的成绩在60分以上视为合格。训练教室 的门口有一个电脑控制的栏杆,它是一个“智能 栏杆”,知道每一个参加训练同学的当前训练成 绩,因此当你走进它时,他会获取你的学号,如 果你的成绩大于或等于60,它将自动打开,允许 你路过。可想而知你的成绩要是小于60会是什么 样子。请你一定要认真训练,不然你就不可能从 那个教室里出来噢。你知道这个“智能栏杆”的 程序怎么设计吗?
例1: 设有 “ int a, b, c, status; a = 1; b = 2; c = 3;”,分析一下下面两个语句中各种运算的顺序:
(1) printf(“%d\n”, a+b>c); //算术运算与关 系运算混合
(2) status = a > b; 混合
//赋值运算与关系运算
教师要把参加某次测验的学生按成绩及 格与否分成两组,并统计出各组的人数。
分析
问题1的特点
条件为真时输出信息,条件为假时什么都不做
期望条件为真时输出信息 条件为假时也输出信息
经过判断之后选择不同的分支进行处理, 得到不同的打印结果
算法设计
1 求和变量aNum,bNum初始化为0; 2 输入学生成绩; 3 //如果输入结束,执行(6); 4 如果成绩大于或等于60,输出分到A 组的
其它语句
Y 条件为真时执行的语句
Goto 问题2
if (grade >= 60)
printf("good! you passed!\n");
return 0;
注意写法:缩进格式
if (grade >= 60)后面没有;号
也可以写成单行
if (grade >= 60) printf("good! you passed!\n");
} // 复合语句结束
}
printf("%d\n", nopassed); return 0;
EOF –end of file 当键盘输入CTRL-Z 回车时
scanf函数的值就是EOF, 表示输入结束
思考题:
两个实数如何比较大小?可以比较是否 相等吗?
问题2:按成绩把学生分成两组
算法实现(2) 用双分支选择结构
#include<stdio.h>
int main(void)
{
int aNum = 0, bNum = 0;
int grade;
while(scanf("%d",&grade) != EOF)
{
if ( grade >= 60 )
信息,aNum加1,//循环执行(2); 5 否则(即成绩小于60),输出分到B组信息,
bNum加1, //循环执行(2); 6 输出统计结果,程序结束。
算法实现
可否用单分支选择结构实现 Yes!写出代码
#include<stdio.h>
int main(void)
{
int aNum = 0, bNum = 0;
while( scanf("%d",&grade) != EOF) //循环
{
if ( grade < 60 )
{// 复合语句开始
printf("you are not passed\n");
printf("hope you make great efforts\n");
nopassed = nopassed + 1;
高级语言程序设计
第3章 判断与决策 —选择程序设计
学习目标:判断与决策问题求 解
算法表示方法 决策/判断问题分析 判断决策条件 选择结构 复杂条件表示
回顾前面已经解决过 的问题,分析其特点
顺序处理问题 用顺序结构表示
开始 输入两个整数
求和 输出结果
结束
稍稍复杂一点的问题,只用顺序结构是 不够的,需要用选择结构表示判断与决 策(本章的内容),需要用循环结构表 示重复(下一章)。
例3:判断一个整数不是零
可以直接写出一个整数x不是零为真的条 件 x != 0
不为零的任何数都为逻辑真
写出对应的if语句
上述问题1和例题的扩展
考虑很多同学或者很多数据
重复—使用循环
当条件为真时,不仅输出信息,还要计 数
复合语句/语句块
#include<stdio.h> int main(void) { int grade; int nopassed = 0;
例3:打印两个数中的较大者 int i,j; scanf(“%d%d”,&i,&j); printf(“%d\n”, i > j ? i : j);
例4:返回两个数中的最大者 return( i > j ? i : j) ;
例5: 求两个数的最大值 int a,b,max; scanf(“%d%d”,&a,&b); max = a > b ? a : b; printf(“%d\n”,max);
printf("bNum = %d\n", bNum);
return 0;
}
if-else的特点
双分支结构是对称的,但是对于不同的 条件只能走其中的一个分支。
再看几个例子(大家一起写出代码)
例1.判断一个数num是奇数还是偶数 的双分支选择结构
例2.判断一个数num是大于等于零还 是小于零的双分支选择结构
输入样例1:80 输出样例1:good! you passed! 输入样例2:55 输出样例2:无
分析
一个输入—成绩 判断条件:成绩>=60 一个输出或没有输出
当成绩>=60时,输出good! you passed!
算法设计(描述算法)
伪码表示法: 第一步:输入成绩; 第二步:如果成绩大于或等于60, 输出
否则执行表达式3
几个例子
例1:用条件表达式判断一个数是奇数还是偶数
num%2 ?printf(“num is odd;\n”)
:printf(“num is even;\n”);
例2:用条件表达式判断一个数是正还是负 num >= 0 ? printf(“num is 0 or positive\n”) : printf(“num is a negative number;\n”);
再看几个例子: 例1 .比较两个整数的大小
应该满足下面几个测试用例 测试用例1:2 3
测试用例2:3 2 测试用例3:3 3
例2:判断一个整数是偶数吗?
分析:
一个输入 判断其是否为偶数
判断条件 number%2==0?
如果条件为真,输出“是偶数”
大家一起写出对应的代码
顺序结构、选择结构、循环结构 已经证明,任何程序均可只用这三种结
构实现
堆叠和嵌套
只用这三种结构的程序,叫结构化程序 这样的程序设计就是结构化程序设计
6
流程图
起始框 椭圆 处理框 矩型 判断框 钻石 流向线
三种结构的流程图
顺序结构
选择结构 true
false
循环结构 true
{
printf("you belong in group A\n");
aNum = aNum + 1;
else//if ( grade < 60 )
{
printf("you belong in group B\n");
bNum = bNum + 1;
}
}
printf("aNum = %d\n", aNum);
例3. 判断一个人的体重w是否过大,判 断标准是身体指数t是否大于25,其中 t=w/h2(w 为体重,h为身高),t大于 25体重过大,否则正常
双分支选择结构的简化形式
条件运算:是一个三目运算 表达式1 ?表达式2 :表达式3
表达式1 作为逻辑判断条件
当表达式1为真时执行表达式2
条件运算是右结合的
a>b?a:c>d?c:d
相当于 a > b ? a : ( c > d ? c : d)
小结
逻辑判断如何表达 什么是逻辑真?假? 选择结构 复合语句 条件运算
作业
见课程网站
grade>=60 grade==80
逻辑判断的结果是什么?
逻辑真(true)、逻辑假(false)
关系运算的结果或者为真或者为假 逻辑常量
1 逻辑真(true) 0 逻辑假(false) 关系表达式的值或者为1或者为0
例:输出两个整数的关系表达式的值
关系运算的优先级