5 选择结构.

Slides:



Advertisements
Similar presentations
10.2.switch语句.
Advertisements

第6章 基本的程序语句 6.1 基本数据类型及取值范围 6.2 标识符、变量和常量 6.3 基本运算符、表达式及运算的优先级
圆的一般方程 (x-a)2 +(y-b)2=r2 x2+y2+Dx+Ey+F=0 Ax2+Bxy+Cy2+Dx+Ey+ F=0.
第4章 选择结构程序设计 选择结构是计算机科学用来描述自然界和社会生活中分支现象的手段。其特点是:根据所给定选择条件为真(即分支条件成立)与否,而决定从各实际可能的不同操作分支中执行某一分支的相应操作,并且任何情况下恒有“无论分支多寡,必择其一;纵然分支众多,仅选其一”的特性。
四种命题 2 垂直.
常用逻辑用语复习课 李娟.
勾股定理 说课人:钱丹.
C语言实验 第一课 标题:学号+姓名.
第五章 选择结构程序设计 信息管理系.
第4章 选择结构程序设计 在现实生活中,需要进行判断和选择的情况是很多的 如果你在家,我去拜访你 如果考试不及格,要补考
第4章 选择结构程序设计 二分支选择结构 多分支选择结构 P A B 真 假 k A1 A2 Ai An k=k2 k=k1 k=kn
程序设计基础.
C语言程序设计 第五章 选择结构程序设计.
第三章 C语言基础 学习目标: 熟练掌握:C语言的基本数据类型、运算符及表达式 掌握:常见的输入、输出函数使用方法;
第4章 选择结构程序设计.
高级语言程序设计 主讲人:陈玉华.
第2章 分支结构 P if语句 2.2 switch语句 2.3 用条件运算符转换大小写字母 2.4 程序举例
C++程序设计 第二讲 清华大学软件学院.
適用於多選一 可減少if 與 else配對混淆的錯誤.
第4章 选择结构程序设计 4.1 选择结构和条件判断 4.2 用if语句实现选择结构 4.3关系运算符和关系表达式
Chap 10 函数与程序结构 10.1 函数的组织 10.2 递归函数 10.3 宏定义 10.4 编译预处理.
第4章 选择结构程序设计 4.1 选择结构和条件判断 4.2 用if语句实现选择结构 4.3关系运算符和关系表达式
C程序设计.
If … else 選擇結構 P27.
第五章 选择结构程序设计 一、关系运算符和表达式 1、关系运算符 在程序中经常需要比较两个量的大小关系, 以决定程序下一步
第3章 C语言的基本语句 和程序结构设计.
QQ: 李祥 QQ: 欢迎多种方式的学习交流,祝大家学有所成.
走进编程 程序的顺序结构(二).
第4章 选择结构程序设计 4.1 关系表达式和逻辑表达式 关系表达式 1.关系运算符 关系运算符是比较两个操作数大小的符号。
QQ: 李祥 QQ: 欢迎多种方式的学习交流,祝大家学有所成.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
C语言 程序设计基础与试验 刘新国、2012年秋.
Chap 3 分支结构 3.1 统计输入的一批字符中各类字符的数量 3.2 查询自动售货机中商品的价格 3.3 分支结构程序设计.
人教版数学四年级(下) 乘法分配律 单击页面即可演示.
第二章 Java语言基础.
第三章 顺序结构程序设计 主讲教师 贾月乐 电话:
第4章 顺序程序设计.
第四章 选择结构程序设计 计算机科学学院.
第0章作业: 教材P12-练习与实践 1.写出用符号’*’输出描绘汉字”大”的流程图。
第4章 PHP流程控制语句.
1.3 C语言的语句和关键字 一、C语言的语句 与其它高级语言一样,C语言也是利用函数体中的可执行 语句,向计算机系统发出操作命令。按照语句功能或构成的不 同,可将C语言的语句分为五类。 goto, return.
目录 9.1 结构体类型 9.2 共用体类型 9.3 枚举类型 9.4 类型声明符typedef 1.
C语言概述 第一章.
第1讲 C语言基础 要求: (1) C程序的组成 (2) C语言的标识符是如何定义的。 (3) C语言有哪些基本数据类型?各种基本数
Main() { Dfas Asdfasf fasdfa } #include <stdio.h> void main( ) {
12.2全等三角形的判定(2) 大连市第三十九中学 赵海英.
目录 4.1选择结构程序设计的概述 4.2关系运算符和表达式 4.3逻辑运算符和表达式 4.4用if语句实现选择结构程序设计
C语言程序设计 第一章 数据类型, 运算符与表达式 第二章 顺序程序设计 第三章 选择结构程序设计 第四章 循环控制 第五章 数组.
浙江长征职业技术学院—计算机与信息技术系—相方莉制作
C程序设计.
几种基本语句 条件语句 广州市63中 岑光.
第4章 选择结构程序设计 要设计选择结构程序,要考虑两个方面的问题:一是在C语言中如何来表示条件,二是在C语言中实现选择结构用什么语句。
第九节 赋值运算符和赋值表达式.
第2章 数据类型与表达式 学习目的与要求: 掌握C 语言的基本数据类型及使用方法 掌握C程序中常用的运算符和表达式 了解数据类型的转换.
ASP.NET实用教程 清华大学出版社 第4章 C#编程语言 教学目标 教学重点 教学过程 2019年5月5日.
第四章 选择结构程序设计 计算机科学学院.
学习目标 1、了解基本运算符 2、运算符优先级.
C程序设计 实验二 数据类型、运算符和表达式 第6讲
第3章 最简单的C程序设计 3.1 顺序程序设计举例 3.2 数据的表现形式及其运算 3.3 C语句 3.4 数据的输入输出.
第五章 逻辑运算和判断选取控制 §5.1 关系运算符和关系表达式
第四章 分支结构的C程序设计 4.1 if语句 4.2 switch语句 4.3 程序举例.
第1章 数据结构基础概论 本章主要介绍以下内容 数据结构研究的主要内容 数据结构中涉及的基本概念 算法的概念、描述方法以及评价标准.
第二章 数据类型、运算符和表达式 §2.1 数据与数据类型 §2.2 常量、变量和标准函数 §2.3 基本运算符及其表达式 目 录 上一章
选择结构又称为分支结构。 在选择结构程序设计中,根据条件的判断情况需要选择不同的语句组执行。 选择结构类型:
多重條件選擇敘述
第三节 数量积 向量积 混合积 一、向量的数量积 二、向量的向量积 三、向量的混合积 四、小结 思考题.
鸡兔同笼(续) ——选择结构.
Java程序设计 第3章 控制语句.
第三章 流程控制 程序的运行流程 选择结构语句 循环结构语句 主讲:李祥 时间:2015年10月.
C语言基础学习 从外行到入门.
Presentation transcript:

5 选择结构

5.1 关系运算符和关系表达式 关系运算是逻辑运算中比较简单的一种。所谓“关系运算”实际上是“比较运算”。例如,a>3是一个关系表达式,大于号(>)是一个关系运算符,如果a的值为5,则满足给定的“a>3”条件,因此关系表达式的值为“真”(即“条件满足”);如果a的值为2,不满足“a>3”条件,则称关系表达式的值为“假”。

关系运算符及其优先次序 (1) < (小于) (2) <= (小于或等于) (3) > (大于) C语言提供6种关系运算符: (1) < (小于) (2) <= (小于或等于) (3) > (大于) (4) >= (大于或等于)〕 (5) = = (等于) (6) != (不等于)

关于优先次序: 1.前4种关系运算符(<,<=,>,>=)的优先级别相同,后两种也相同。前4种高于后2种。例如,“>”优先于“==”。而“>”与“<”优先级相同。 2.关系运算符的优先级低于算术运算符。 3. 关系运算符的优先级高于赋值运算符。 高 → 低 算术运算符 关系运算符 赋值运算符 例如:c>a+b 等效于 c>(a+b) a>b!=c 等效于 (a>b)!=c a==b<c 等效于 a==(b<c)

关系表达式 用关系运算符将两个表达式(可以是算术表达式或关系表达式、逻辑表达式、赋值表达式、字符表达式)连接起来的式子,称关系表达式。 例如,下面都是合法的关系表达式: a>b, a+b>b+c,(a=3)>(b=5),’a’<’b’,(a>b)>(b<c) 关系表达式的值是一个逻辑值,即“真”或“假”。 例如,关系表达式“5==3”的值为“假”“5>=0”的值为“真”。以1代表“真”,以“0”代表“假”。

若a=3,b=2,c=1,则: a>b的值为”真”,表达式的值为1。 (a>b)==c的值为“真”(因为a>b的值为1,等于c的值),表达式的值为1。 b+c<a的值为“假”,表达式的值为0。 如果有以下赋值表达式: d=a>b d的值为1。 f=a>b>c f的值为0(因为“>”运算符是自左至右的结合方向,先执行“a>b”,得值为1,再执行关系运算:“1>c”得值0,赋给f

5.2 逻辑运算符和逻辑表达式 一、逻辑运算符 有三种: && (与); ¦¦ (或); ! (非) 有三种: && (与); ¦¦ (或); ! (非) a b !a !b a&&b a ¦¦b 真 真 假 假 真 真 真 假 假 真 假 真 假 真 真 假 假 真 假 假 真 真 假 假

逻辑运算符的作用: 可把简单的条件组合成复杂的条件。 例:if (grade>60 && grade <100) if (price>=37.5 ¦¦price<=50.0)

二、逻辑运算符的优先关系 1. !(非)优先于&&(与).&&优先于¦¦ 即: !&& ¦¦ 2. &&和¦¦低于关系运算符。!高于算术运算符 例: !a&&b ¦¦x>y && c ((!a)&&b) ¦¦ ((x>y)&&c) ! 高 && ¦¦ 低

三、逻辑表达式 前面已定义了逻辑表达式,以下看一看逻辑表达式的值及具体的运算。 1. 逻辑表达式的值与关系表达式值一样,真为1,假为0。 例:  a=4 则 !a 值为0. 此处只要a  0为真, 则!a值为0.  a=4, b=5 a&&b为1

 a=4, b=5 a ¦¦b为1  a=4, b=5 !a¦¦ b为1  4&&0 ¦¦2 为1. 注意:  上面各式中的a或b均可以是任何其它表达式。  在逻辑运算中,非0值参加逻辑运算时被看成1处理.

2. 一个逻辑表达式中的逻辑运算符并不是一定全部执行。 如: a&&b&&c. 则当a=0(假)时, b,c不需判断。当a=1,b=0,则不需判c. 又如: a ¦¦b ¦¦c. 当a=1时,b, c均不必判别。

例如: 判断年号是否为润年。 润年必须满足下列条件中的任意一个:  年号能被4整除但不能被100整除。 年号能被400整除。

设用变量year表示年号 则: 当((year%4= =0&& year% 100 !=0) ¦¦(year%400= =0) 为1时,year为润年,否则为非润年。 如果要判别非润年可在上述表达式前加非(!)运算符. 即: 当!( (year%4= =0 && year%100!=0) ¦¦(year% 400= = 0) 为1时,year为非润年。 或者: 当(year%4!=0) ¦¦(year%100= =0&& year%400!=0) 为1时, year为非润年。

5.3 if 选择结构–––条件判断 一、if的三种形式 形式1 if (表达式) 语句体 A 功能: 当表达式值非0时, 执行语句体A, 否则不执行 语句体A.

表达式 语句体A =0 0 其流程图: 例如: if (x%2) { printf(" %d", x); }

形式2 if(表达式) 语句体A else 语句体B 功能: 表达式为非0,执行语句体A 表达式为0,执行语句体B

表达式 语句体A 语句体B 例: if(x>y) printf("%d", x); else printf(" %d", y);  0 = 0 表达式 语句体A 语句体B 例: if(x>y) printf("%d", x); else printf(" %d", y);

形式3 if(表达式1) 语句体1 else if (表达式2) 语句体2 else if (表达式3) 语句体3 … … else if(表达式n) 语句体n else 语句体n +1

流程: … … = 0 = 0 表达1 表达2 表达3 表达n  0  0  0  0 语句n+1 语句体1 语句体2 语句体3

二、注意的问题: 1. 表达式可以是逻辑、关系,甚至是算术表达式。 如: if (3) prinf ("o.k"); if ('a')… 2. 语句必须以分号结束 3. 若语句不止一条,则必须用{ }括起来。在{ }外可以不用分号.

例1 输入两个实数,按代数值由小到大次序输出这两个数。 #include <stdio.h> main ( ) { float a, b, t; scanf ("%f, %f", &a, &b); if (a>b) {t=a; a=b; b=t; } printf ("%5.2f, %5.2f", a, b); } 运行情况如下: 3.6, –3.2 –3.20, 3.60

例2 输入三个数,按大小顺序输出。 3,7,1 1.00, 3.00, 7.00 运行情况如下: #include <stdio.h> main ( ) {float a, b, c,t; scanf(“ %f,%f,%f”, &a, &b,&c); if (a>b) {t=a; a=b; b=t;} if (a>c) {t=a; a=c; c=t;} if (b>c) {t=b; b=c; c=t;} printf("%5.2f, %5.2f, %5.2f", a, b, c); } 3,7,1 1.00, 3.00, 7.00 运行情况如下:

三、 if语句的嵌套 在上述形式的if语句中, 又可以是if语句–––称为嵌套。 一般形式 if (表达式1) if (表达式2) 语句1 else 语句2 else if (表达式3) 语句3 内嵌 else 语句4 注意: else与最近的if 配对.

例: if ( ) if ( ) 语句1 else if ( ) 语句2 else 语句3 所以:必要时加{ }. if ( ) { if ( ) 语句1} else …

例3 有一函数: –1 (x<0) 0 (x=0) 1 (x>0) y= 编一程序,输入一个x值,输出y值。 有以下几种写法,请判断哪些是正确的?

程序1: #include <stdio.h> main ( ) { int x, y; scanf("%d", &x); if (x<0) y= –1; else if (x= =0) y=0; else y=1; printf ("x=%d, y=%d\n", x, y); } 程序2:将程序1的if语句改为:#include <stdio.h> main ( ) { int x, y; scanf("%d", &x); if (x>=0) if (x>0) y=1; else y=0; else y=-1; printf ("x=%d, y=%d\n", x, y); }

程序3:将程序1的if语句改为: #include <stdio.h> main() { int x,y; scanf("%d",&x); y=-1; if(x!=0) if(x>0) y=1; else y=0; printf("x=%d,y=%d\n",x,y); } 程序4:将程序1的if语句改为: #include <stdio.h> main() { int x,y; scanf("%d",&x); y=0; if(x>=0) if(x>0) y=1; else y=-1; printf("x=%d,y=%d\n",x,y); }

结论: y= –1 (x<0) 0 (x=0) 1 (x>0) 1. 程序1 和程序2 是正确的。 它们代表的函数为: y= 0 (x<0) –1 (x=0) 1 (x>0) 2. 程序3 和程序4 是错误的。 它们代表的函数为: 思考练习:分别画出一个程序的流程图

四、条件运算符 C语言提供了一个简单的条件赋值语句或条件表达式。 问题: 当判断条件不论是“ 真”是“ 假”, 均给同一变量赋值时。 问题: 当判断条件不论是“ 真”是“ 假”, 均给同一变量赋值时。 简化条件语句运算符书写方式: ? : 属三目运算符。

一般形式: 表达式1?表达式2: 表达式3 功能: 先判表达式1, 若非0,则值为表达式2的值,否则为表达式3的值。 max=a>b? a:b; 当a>b. max  a. 否则maxb 注意: 1. 条件运算符优先于赋值运算符. 例: max=(a>b? a:b)可去掉( )

2. 条件运算符低于关系运算符和算术运算符。 例: max=a>b? a:b+1 max= a>b? a:(b+1)并不是 max=(a>b? a:b)+1 3. 条件运算符结合性为从右至左。 如: a>b? a:c>d ? c:d 相当于 a>b? a:(c>d? c:d)

4. 条件表达式不能取代一般的if语句,只有当if 的两 个分支为给同一变量赋值时才可替代if. 如: if (a>b) printf("%d", a); else printf ("%d", b); 可写成: printf("%d", a>b? a:b);

5. 表达式1、表达式2、表达式3的类型可以不同。 例4 输入一个字符,判别它是否大写字母,如果是, 将它转换成小写字母;如果不是,不转换。然后输出最后得到的字符。 #include <stdio.h> main ( ) { char ch; scanf ("%c", &ch); ch=(ch>='A' && ch<='Z') ? (ch+32):ch; printf("%c", ch); } 运行结果如下: A a

5.4 switch 多分支选择语句 用if或if/else或它们的嵌套也可使程序实现多路分支,但容易出现下面的问题:  可读性差  破坏结构 解决问题的方法:采用switch语句。

一般形式: switch(变量) { case 常量表达式1: 语句体1 case 常量表达式2: 语句体2  case 常量表达式n: 语句体n default : 语句体(n+1) }

功能:  根据表达式的取值, 判断其与哪一个常量表达式相等。如=表达式i,则自语句i开始执行,直到语句n+1止。  若与所有常量表达式值不相等,则从default后的语句开始执行。 注:default 可有可无。

例: 根据成绩等级打印百分数段. switch (grade) { case 'A': printf ("85~100\n"); case 'B': printf ("70~84\n"); case 'C': printf ("60~69\n"); case 'D': printf ("<60\n"); default: printf ("error\n"); }

程序如下: #include <stdio.h> main() { char grade; scanf("%c",&grade); switch (grade) { case 'A':printf("85-100\n"); case 'B':printf("70-84\n"); case 'C':printf("60-69\n"); case 'D':printf("<60\n"); default:printf("Error\n"); }

运行结果为: 程序运行结果不在预料之中! 产生错误的原因: 没有完全起到分支作用。 A 85-100 70-84 60-69 <60 Error 程序运行结果不在预料之中! 产生错误的原因: 没有完全起到分支作用。

解决办法: 增加break语句, 使之跳出switch结构。 一般形式为: switch (表达式) { case 常表1: 语句1; break; case 常表2 : 语句2; break; … … case 常表n : 语句n; break; default: 语句n+1; }

修改程序为: #include <stdio.h> main() { char grade; scanf("%c",&grade); switch (grade) { case 'A':printf("85-100\n");break; case 'B':printf("70-84\n"); break; case 'C':printf("60-69\n"); break; case 'D':printf("<60\n"); break; default:printf("Error\n"); }

注意: 1. 常量表达式的值必须互不相等,否则会有二异性。 2. case顺序无关紧要。 3. 不一定非用break不可,有时几种情况合并执行一组语句。

例如: switch (grade) {case 'A' : case 'B': case 'C': printf(">60\n"); break; case 'D': printf("<60\n"); }

5.5 程序举例 例1:写一程序,输入年号,判断是否为闰年。 1. 算法: 根据闰年的判断条件为下列条件之一:  当年号能被4整除但不能被100整除时,它为闰年。  当年号能被400整除时,它为闰年。

设用变量year表示年号,leap为待置值变量,当year为闰年:leap1, 否则leap0. yes A No 开始

No leap0 year%400= =0 yes leap1 A yes No leap=0 打印非闰年 打印是闰年 结束

程序1: #include <stdio.h> main ( ) { int year, leap; scanf("%d", &year); if (year%4= =0) { if (year%100= =0) { if (year%400= =0) leap=1; else leap=0;} else leap=1;} else leap=0;

if (leap) printf("%d is", year); else printf("%d is not", year); printf ("a leap year\n"); } 运行结果为: 第一次:1989  1989 is not a leap year 第二次: 2000  2000 is a leap year

程序2: 流程图 开始 输入年号 判断是否为润年? 打印是润年 打印非润年 结束 Y N

#include <stdio.h> main( ) { int year; scanf( " %d", &year); if ( ( year%4= =0)&& year%100!=0) ¦¦(year%400= =0)) printf( " %d is ", year); else printf( " %d is not ", year); printf( " a leap year\n "); }

例2. 从键盘输入三角形的三条边,求三角形面积。 设:分别用a, b, c表示三条边,s=(a+b+c)/2, 用area表示三角形面积 三角形面积计算公式:

程序如下: #include <stdio.h> #include <math.h> main() { float a,b,c,s,area; printf("Please imput three sides' length:\n"); scanf("%f,%f,%f",&a,&b,&c); if ((a+b)>c && abs(a-b)<c) /*三角形构成条件*/ { } else printf("Error sides!"); s=(a+b+c)/2; area=sqrt(s*(s-a)*(s-b)*(s-c)); printf("The area of triangle is %5.2f", area);

运行结果为: Please imput three sides' length: 3,4,5 The area of triangle is 6.00