当前位置:文档之家› 第3章 选择结构

第3章 选择结构

西南交通大学
单分支if语句 举例
【例3.1】比较a、b两个数的大小,将较大数赋给max。 法一: #include <stdio.h> 演示例3.1.1 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; } 该法思路较明确,接近我们平时的思维模式。
西南交通大学
单分支if语句 举例
法二: #include <stdio.h> int main(void) 演示例3.1.2 { 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 的值。 西南交通大学
演示例3. 3
该题可用“条件运算”、“单分支if”、“双分支if”三种方法来做, 下面列出这几种语句的部分程序,请读者比较其语法结构上的区别: 用条件运算符做 max=(a>b)? a:b 用if单分支做 max=b; if(a>b) max=a; 用if双分支做 if(a>b) max=a; else max=b;
若 int a=3,b=2,c=1,f ;
表达式 a>b 结果 真 说明 a大于b,关系成立,即为真 先判断a>b,结果为真,即为1; 再判断1==c,关系成立,结果为真 先判断a>b,结果为真,即为1; 再判断1>c,关系不成立,结果为假 ,即为0; 最后将0赋给f
a>b==c

f=a>b>c printf(“%d”, 1>2);
西南交通大学
3.5.1 单分支if语句
1.语法格式 if(条件) 语句 2. 说明 (1)执行过程: 当条件为“真”时,执行语句; 为“假”时,跳过语句,而直接 执行整个if语句后的其它语句。 (2)条件中的结果为逻辑值。 (3)语句如果有多条语句,要用 一对花括号“{ }”将其括起来, 成为一个复合语句。
f=0
输出结果 1>2关系不成立,结果为假 为:0
西南交通大学
3.3 逻辑运算符与逻辑表达式
C语言提供了 三种逻辑运算符,分别为: ! 逻辑非 && 逻辑与 || 逻辑或
西南交通大学
3.3.1 逻辑表达式的值
逻辑表达式计算的结果为逻辑值,即“真”或“假”。 在C中表示逻辑运算结果, 1代表“真”;0代表“假”。 判断一个量是否为“真”时,非0为“真”; 0为“假”。 表达式 !a a&&b a||b 结果 当a为假时,结果为真;当a为真时,结果为假 当a和b都为真时,结果为真;其它情况都为假 当a和b都为假时,结果为假;其它情况都为真
西南交通大学
3.5.3 多分支if语句
1. 语法格式 if(条件1) 语句1 else if(条件2) 语句2 else if(条件3) 语句3 „„ else if(条件n) 语句n else语句n+1
西南交通大学
3.5.3 多分支if语句
2. 说明 (1)执行过程 当条件1成立时,执行语句1; 当条件1不成立时判断条件2; 当条件2成立时,执行语句2; 当条件2不成立时判断条件3; 以此类推;如果一直到条件n都不成立就执行语句n+1。 条件的判断有层级关系,是在前面条件不成立的情 况下才会判断后面的条件,比如当条件1成立后,执 行语句1,然后就直接跳出if语句,执行后面的其它 程序语句了,条件2、3等根本就不会被执行到。
如何用C语言的语句来描述呢? 借助关系表达式和逻辑表达式来实现:
(x>=30&&x<=100&&x%2==1)
如果x满足条件,整个表达式的的结果就为真; 如果x不满足条件,整个表达式的的结果就为假。
西南交通大学
3.2 关系运算符与关系表达式
1. C语言提供了六种关系运算符:
运算符 < <= 含义 小于 小于或等于 优先级相同 高 优先级
通过设计结构良好的程序,以程序的静态良好结构保 证程序动态执行的正确,使程序易理解、易调试、易 维护,以提高软件开发的效率,减少出错率。
2. 结构化程序设计的三个基本步骤 (1)分析问题
(2)画出程序的基本轮廓 (3)编写源码程序
西南交通大学
3.1 结构化程序设计
3.三种基本结构
西南交通大学
单分支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; }
西南交通大学
3.3.2 逻辑运算符的优先级和结合性
!→算术运算符→关系运算符→&&→||→赋值运算符 优先级相同时: &&和||从左向右算,即左结合; !为单目运算符,是右结合
例如: a=!b+2>=3||c+1<3 等效于 a=( ( ( (!b)+2)>=3) || ( (c+1)<3) ) 设b=3,c=1,则运算后a=1。
西南交通大学
3.5.2 双分支if语句
1. 语法格式 if(条件) 语句1 else 语句2 2. 说明 (1)执行过程: 当条件为“真”时, 执行语句1; 为“假”时,执行语 句2 。 (2)语句1和语句2都 可为复合语句。
西南交通大学
双分支if语句 举例
【例3.3】比较a、b两个数的大小,将较大数赋给max。 int a,b,max;a=1;b=2; if(a>b) max=a; else max=b; printf("%d",max);
3.关系运算符的结合性
优先级相同时,从左往右算,即左结合。如: a>b>c==d等效于((a>b)>c)==d
西南交通大学
3.2 关系运算符与关系表达式
4.关系表达式的值
关系表达式的结果为逻辑值,即“真”或“假”。
在C中表示逻辑值,1代表“真”;0代表“假”。
西南交通大学
3.2.3 举例
西南交通大学
3.4 条件运算符和条件表达式
条件运算符 ? : 是C语言中唯一的三目运算符。 表达式形式为: 表达式1? 表达式2: 表达式3 例如: 两个数a、b求最大,将较大数赋给max。 表达式为:max=(a>b)? a:b
西南交通大学
3.4.2 条件运算符的优先级和结合性
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 )
有缩进 if(a>b) max=a; else max=b;
推荐写法,这样层次 结构更清晰
西南交通大学
双分支if语句 举例
【例3.4】判断用变量year表示的某年是否为闰年。
#include <stdio.h> 演示例3. 4 int main(void) if{ 后的条件可以不用写==1,直接写成: int year; if(year%4==0&&year%100!=0||year%400==0) printf("请输入年份:"); scanf("%d",&year); if((year%4==0&&year%100!=0||year%400==0)==1) printf("是闰年\n"); else printf("不是闰年\n"); return 0; }
西南交通大学
3.3.3 举例
用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
本章介绍选择结构。
选择结构也叫分支结构,它的作用是根据给定的条 件是真还是假,决定后面的操作或做进一步的判断。
相关主题