c语言选择结构
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
14
四.if语句
if语句也称为条件语句,是用来判定所给的条件是真还是假, 然后决定执行给出的两种操作之一。 C语言提供了三种基本形式的if语句:
单分支、双分支、和多分支,这三种形式可单独使用;
如果if语句(基本型)中又包含一个或多个if语句(基本 型),则为if语句的嵌套。
15
单分支if语句
22
双分支if语句
注意
举例
c语言书写形式比较自由:可写在一行,也可写在多行。 一般为了认读方便,特别是语句较多时,会分多行书写, 还会有缩进,以体现语句结构。如上面的双分支语句可 写成下面3种形式: 单行书写 多行书写 if(a>b) max=a; else max=b; 有缩进 if(a>b) max=a; else max=b;
a 真 b 真 !a 假 !b 假 a&&b 真 a||b 真
真 假 假
假 真 假
假 真 真
真 假 真
假 假 假
真 真 假
8
逻辑运算符的优先级和结合性
!→算术运算符→关系运算符→&&→||→赋值运算符 优先级相同时: &&和||从左向右算,即左结合; !为单目运算符,是右结合
例如: a=!b+2>=3||c+1<3 等效于 a=( ( ( (!b)+2)>=3) || ( (c+1)<3) ) 设b=3,c=1,则运算后a=1。
单分支if语句 举例
法二: #include <stdio.h> int main(void) { int a,b,max; a=1;b=2; max=a; if(a<=b) max=b; printf("%d",max); return 0;} 该法的思路是: 假设max=a,判断if后的条件, 如果a<b,则执行max=b,输出的max为b的值; 如果a>b,则跳过max=b,直接执行print,输出max为a的值。
19
单分支if语句 举例
#include <stdio.h> int main(void) { int x0,x10,x100,x,t,max; printf("请输入一个三位数:"); scanf("%d",&x); x0=x%10,x10=x%100/10,x100=x/100; if(x100<x10) t=x100,x100=x10,x10=t; if(x100<x0) t=x100,x100=x0,x0=t; if(x10<x0) t=x10,x10=x0,x0=t; max=100*x100+10*x10+x0; printf("%d\n",max); return 0; }
举例
该题可用“条件运算”、“单分支if”、“双分支if”三种方法来做,下面列出这几种 语句的部分程序,请读者比较其语法结构上的区别: 用条件运算符做 max=(a>b)? a:b 用if单分支做 max=b; if(a>b) max=a; 用if双分支做 if(a>b) max=a; else max=b;
f=0
printf(‚%d‛, 1<2); 输出结果为:0 1<2关系不成立,结果为假
6
三.逻辑运算符与逻辑表达式
C语言提供了 三种逻辑运算符,分别为: ! 逻辑非 && 逻辑与 || 逻辑或
7
逻辑表达式的值
逻辑表达式计算的结果为逻辑值,即‚真‛或‚假‛。 在C中表示逻辑运算结果, 1代表‚真‛;0代表‚假‛。 判断一个量是否为‚真‛时,非0为‚真‛; 0为‚假‛。 逻辑运算真值表
13
优先级和结合性
2. 结合性 当一个表达式中出现多个条件运算符时,结合方向为自 右至左,即应该将位于最右边的问号与离它最近的冒号 配对,并按这一原则正确区分各条件运算符的运算对象。
例如:
w<x ? x+w : x<y ? x : y 等效于:
w<x ? x+w : ( x<y ? x : y)
5
举
若 int a=3,b=2,c=1,f ;
表达式 a>b a>b==c 结果 真 真
例
说明 a大于b,关系成立,即为真
先判断a>b,结果为真,即为1; 再判断1==c,关系成立,结果为真 先判断a>b,结果为真,即为1; 再判断1>c,关系不成立,结果为 假,即为0; 最后将0赋给f
f=a>b>c
11
条件运算符和条件表达式
条件运算符 ? : 是C语言中唯一的三目运算符。 表达式形式为: 表达式1? 表达式2: 表达式3
例如: 两个数a、b求最大,将较大数赋给max。 表达式为:max=(a>b)? a:b
12
条件运算符的优先级和结合性
1. 条件运算符优先级高于赋值、逗号运算符,低于其它运 算符 。 例如: (1)m<n ? x : a+3 等效于:(m<n) ? x :(a+3) (2)a++>=10 && b-->20 ? a : b 等效于: (a++>=10 && b-->20) ? a : b (3)x=3+a>5 ? 100 : 200 等效于: x= (( 3+a>5 ) ? 100 : 200 )
选择结构
1
一.结构化程序设计
1.三种基本结构
选择结构也叫分支结构,它的作用是根据给定的条件是 真还是假,决定后面的操作或做进一步的判断。
2
引
wk.baidu.com
例
任意输入一个整数,判断这个数是不是位于30到100之间 的一个奇数,如果是则在屏幕上输出‚通过验证‛;如果不 是则在屏幕上输出‚该数不合法‛。
问题
10
逻辑表达式计算优化
注意 在逻辑表达式求值过程中,一旦能确定 逻辑表达式的值,就不再逐步求值。
设int a=0,b=2,c=1; 求下列表达式的值及各变量的值: (1)a&&b++&&--c 结果:表达式的值为0,a=0,b=2,c=1 (2)a||b--||c++ 结果:表达式的值为1,a=0,b=1,c=1 (3)x=a<b||c++ 结果:x=1,a=0,b=2,c=1
if(a>b) max=a;
else max=b;
推荐写法,这样层次结构更清晰
23
双分支if语句
举例
【例4.4】判断用变量year表示的某年是否为闰年。
#include <stdio.h> int main(void) if{ 后的条件可以不用写==1,直接写成: int year; if(year%4==0&&year%100!=0||year%400) printf("请输入年份:"); scanf("%d",&year); if((year%4==0&&year%100!=0||year%400)==1) printf("是闰年\n"); else printf("不是闰年\n"); return 0; }
#include <stdio.h> int main(void) { int a,b,max; a=1;b=2; if(a>b) max=a; if(a<=b) max=b; printf("%d",max); return 0; }
17
该法思路较明确,接近我们平时的思维模式。
1.语法格式 if(条件) 语句 2. 说明 (1)执行过程: 当条件为‚真‛时,执行语句;为‚假‛时, 跳过语句,而直接执行整个if语句后的其它 语句。 (2)条件中的结果为逻辑值。 (3)语句如果有多条语句,要用一对花括号 ‚{ }‛将其括起来,成为一个复合语句。
16
单分支if语句 举例
【例4.1】比较a、b两个数的大小,将较大数赋给max。 法一:
20
双分支if语句
1. 语法格式 if(条件) 语句1 else 语句2 2. 说明 (1)执行过程: 当条件为‚真‛时,执行语句1; 为‚假‛时,执行语句2。 (2)语句1和语句2都可为复合语 句。
21
双分支if语句
【例4.3】比较a、b两个数的大小,将较大数赋给max。 int a,b,max;a=1;b=2; if(a>b) max=a; else max=b; printf("%d",max);
24
多分支if语句
1. 语法格式 if(条件1) 语句1 else if(条件2) 语句2 else if(条件3) 语句3 …… else if(条件n) 语句n else语句n+1
25
多分支if语句
2. 说明 (1)执行过程 当条件1成立时,执行语句1; 当条件1不成立时判断条件2; 当条件2成立时,执行语句2; 当条件2不成立时判断条件3; 以此类推;如果一直到条件n都不成立就执行语句n+1。 注意
18
单分支if语句 举例
【例4.2】输入一个三位数,求其各位上数字能组成最大的 三位数。如:输入263,则输出为:632。 解题思路: (1)输入一个三位数,存入变量x; (2)然后将这个三位数的各位数字分离出来: 个位赋给x0,十位赋给x10,百位赋给x100; (3)用if语句比较三个数的大小,三条if语句执行完后: 最大的放在x100中,次大的放在x10中,最小的放在x0中; (4)计算后将结果赋给max,最后输出max的值。
1. C语言提供了六种关系运算符:
运算符 < <= 含义 小于 小于或等于 优先级相同 高 优先级
>
>=
大于
大于或等于
==
!=
等于
不等于
优先级相同
低
4
二.关系运算符与关系表达式
2.关系运算符与其它运算符优先级关系 算术运算符→关系运算符→赋值运算符 (1)算术运算符优先级高于关系,如: c<a+b 等效于c<(a+b) (2)关系运算符优先级高于赋值,如: a=b<c 等效于a=(b<c) 3.关系运算符的结合性 优先级相同时,从左往右算,即左结合。如: a>b>c==d等效于((a>b)>c)==d 4.关系表达式的值 关系表达式的结果为逻辑值,即‚真‛或‚假‛。 在C中表示逻辑值,1代表‚真‛;0代表‚假‛。
9
举
例
用C语言表达式表示下列条件: (1)x的取值区间为[a,b] 表达式:(x>=a&&x<=b)==1 (2)变量c不是数字字符 表达式:(c<‘0’||c>‘9’)==1 (3)a是大于30,且不大于100的奇数 表达式:(a>30&&a<=100&&a%2!=0)==1 (4)year为闰年 表达式: ((year%4==0&&year%100!=0)||(year%400==0))==1
条件的判断有层级关系,是在前面条件不成立的情况下才会 判断后面的条件,比如当条件1成立后,执行语句1,然后就 直接跳出if语句,执行后面的其它程序语句了,条件2、3等 根本就不会被执行到。
(2) 语句1……语句n+1都可为复合语句。
26
多分支if语句
举例
【例4.5】比较a、b、c三个数的大小,将最大值赋给max。 if(a>b && a>c) max=a; else if(b>a && b>c) max=b; else max=c;
27
多分支if语句
举例
【例4.6】百分制成绩转换成五级计分制成绩。 即用ABCDE分别表示100-90,89-80,79-70,69-60,59-0。 #include<stdio.h> int main(void) { int score; /*保存输入的百分制成绩*/ char grade; /*保存五级计分制成绩 */ printf("输入一个成绩:"); scanf("%d",&score); if(score>100 || score<0) { 判断输入的数据是否有 printf("输入百分制成绩无效\n"); 效,若无效则跳出程序 return 1; }
程序说明: 多分支的if语句,只执行某个条件成立后的语句,其它语句都不执行。 设a=3,b=2,c=1,那么在执行完max=a后就直接执行printf那一句,中间 的else跳过不执行了。 设a=2,b=3,c=1,那么由于第一个条件(a>b&&a>c)不成立,所以才判断 第二个条件(b>a&&b>c),执行完max=b直接执行printf那一句,跳过最 后一个else。
该题要使用选择结构来编程求解,其中的条 件‚30到100之间的一个奇数‛如何用C语言 的语句来描述呢?
借助关系表达式和逻辑表达式来实现: (x>=30&&x<=100&&x%2)==1 如果x满足条件,整个表达式的的结果就为真; 如果x不满足条件,整个表达式的的结果就为假。
3
二.关系运算符与关系表达式