分支结构:根据条件判定的结果,选择执行不同的程序代码。现实中有大量类似的例子,例如根据红绿灯的颜色决定前进、停止等。
文章目录
- 一、关系运算符与关系表达式
- 1、关系运算符:
- 2、关系表达式
- 二、逻辑运算符与逻辑表达式
- 三、选择结构
- 1、单分支
- 2、双分支
- 3、条件表达式(三目运算符?:)
- 4、分支嵌套
- 5、多分支
一、关系运算符与关系表达式 1、关系运算符:
| 小于 | 大于 | 小于等于 | 大于等于 | 等于 | 不等于 |
|---|---|---|---|---|---|
| < | > | <= | >= | == | != |
注意:
▶
blacktriangleright
▶ == 与 = 的区别(a=5;赋值运算 a==5;判断是否相等)
▶
blacktriangleright
▶ <、>、<=、>=的优先级大于== 、!=
▶
blacktriangleright
▶ 算术运算符的优先级高于关系运算符的优先级
▶
blacktriangleright
▶ 关系运算符的优先级高于赋值运算符的优先级
概念:用关系表达式将表达式连接起来称为关系表达式。
spacespacespacespacespacespacespace
关系表达式的值非真既假,在C++语言中,用非0代表真,用0代表假。关系表达式的结果只有两个,真为1,0为假。
spacespacespacespacespacespacespace
一般格式为:<项目1><关系运算符><项目2>
注意:
▶
blacktriangleright
▶ 表达式的值:如果关系表达式成立,其值为1,表示真;否则为0,表示假
▶
blacktriangleright
▶ 字符与字符比较时按位依次比较他们的ASCII码
ASCII码规律:
(1)小写字母的ASCII码值>大写字母的ASCII码值>数字的ASCII码值
(2)同类字符的ASCII码值递增
(3)‘0’:48 ‘A’:65 ‘a’:97,同一英文字符小写-大写=32
#includeusing namespace std; int main(){ int a=10,b=20; cout<<(a=b)<<" "<<(a!=b)< '0')<
二、逻辑运算符与逻辑表达式逻辑运算符:非(!)>与(&&)>或(||)
非(!)表示取反,与(&&)表示同时成立(交集),或(||)表示只需要成立一个(并集)
A B !A A&&B A||B 0 0 1 0 0 0 1 1 0 1 1 0 0 0 1 1 1 0 1 1 注意:
▶ blacktriangleright ▶ 逻辑运算符的优先级:非>与>或
▶ blacktriangleright ▶ 总优先级:! → rightarrow → 算术 → rightarrow → 关系 → rightarrow → 逻辑 → rightarrow → 赋值 → rightarrow → 逗号
▶ blacktriangleright ▶ 作为条件时,所有非0值均为真;作为结果,只有0和1两种
▶ blacktriangleright ▶ 数学条件:1例题:输入n,判断某年n是否为闰年
三、选择结构 1、单分支
分析:n为闰年的情况有两种:
1、能被4整除且不能被100整除(2200不是闰年)
2、能被400整除
逻辑表达式:(n%4==0 && n%100!=0) || n%400==0if(条件){ 语句或语句组 }代码执行流程:首先计算表达式的值,若为真,则执行语句;否则,不执行语句。
例如,求一个数的绝对值
int a; cin>>a; if(a<0) a=-a; cout< 2、双分支if(条件){ 语句或语句组1 } else{ 语句或语句组2 }例如,求一个数的绝对值
int a; cin>>a; if(a>=0) cout< 3、条件表达式(三目运算符?:)形式:条件?值1:值2
4、分支嵌套
当条件成立时,表达式的值为值1,否则为值2
例如,求ab中的最大值的公式如下:a>b?a:bif(条件1) 语句1 else{ if(条件2) 语句2 else 语句3 //语句3亦可是双分支 }例如,求分段函数,如下所示:
y = { 0 ( x < 0 ) x ( 0 < = x < = 5 ) x 2 ( x > 5 ) y=begin{cases} 0space(x<0)\ xspace(0<=x<=5)\ x^2space(x>5) end{cases} y=⎩⎪⎨⎪⎧0 (x<0)x (0<=x<=5)x2 (x>5)
根据用户输入的x的值计算函数y的值#includeusing namespace std; int main(){ int x,y; cin>>x; if(x<0) y=0; else{ if(x<=5) y=x; else y=pow(x,2); } cout< 5、多分支 if(条件1) 语句1 else if(条件2) 语句2 else if(条件3) 语句3 ... else 语句n例:输入3个整数,从小到大排序后输出
输入样例:20 7 33
输出样例:7 20 33分析:a,b,c这三个数排序一共有6种可能:abc、acb、bac、bca、cab、cba,最简单的思路就是使用六个if语句,如下
#includeusing namespace std; int main(){ int a,b,c; cin>>a>>b>>c; if(a 上述程序看上去没有错误,而且能够通过样例,但是输入"1 1 1得不到任何输出"!这个例子说明,即使通过了题目中给出的样例,程序仍有可能存在问题。
提示:算法竞赛的目标是编程对于任意输入均可以得到正确的结果,而不仅仅是样例。
将程序稍作修改:把所有的"<“改成”<="。尝试后会发现仍然存在问题。对于"1 1 1",程序会输出六行"1 1 1"。
解决方案:将多个单分支改为多分支,将if改为else if,else if可读作“再如果”,即上一个“如果”不成立才会去判断下一个“如果”,所有“如果”后的语句中只执行一个。#includeusing namespace std; int main(){ int a,b,c; cin>>a>>b>>c; if(a 此时输入"1 1 1",我们会发现仍然存在一个问题,没有输出,因此一般多分支的最后一个分支只写else(当上面所有“如果”都不成立的的情况下执行),这样可以保证此分支结构必有输出。
#includeusing namespace std; int main(){ int a,b,c; cin>>a>>b>>c; if(a



