选择结构(理论)
选择/分支结构:根据条件判定的结果,选择执行不同的程序代码。现实中有大量类似的例子,例如根据红绿灯的颜色决定前进、停止等。
文章目录
- 一、关系运算符与关系表达式
- 1、关系运算符:
- 2、关系表达式
- 二、逻辑运算符与逻辑表达式
- 三、选择结构
- 1、单分支
- 2、双分支
- 3、条件表达式(三目运算符?:)
- 4、分支嵌套
- 5、多分支
- 6、switch
一、关系运算符与关系表达式
1、关系运算符:
| 小于 | 大于 | 小于等于 | 大于等于 | 等于 | 不等于 |
|---|---|---|---|---|---|
| < | > | <= | >= | == | != |
注意:
▶ \blacktriangleright ▶ == 与 = 的区别(a=5是赋值语句;a==5是逻辑运算,结果为True或False)
▶ \blacktriangleright ▶ <、>、<=、>=的优先级大于== 、!=
▶ \blacktriangleright ▶ 优先级:算术运算符 > 关系运算符 > 赋值运算符
2、关系表达式
概念:用关系表达式将表达式连接起来称为关系表达式。
\space\space\space\space\space\space\space 关系表达式的值非真既假,在C++语言中,用非0代表真,用0代表假。关系表达式的结果只有两个,真为1,0为假。
\space\space\space\space\space\space\space 一般格式为:<项目1><关系运算符><项目2>
注意:
▶ \blacktriangleright ▶ 表达式的值:如果关系表达式成立,其值为1,表示真;否则为0,表示假
▶ \blacktriangleright ▶ 字符与字符比较时按位依次比较他们的ASCII码
ASCII码规律:
(1)小写字母的ASCII码值>大写字母的ASCII码值>数字的ASCII码值
(2)同类字符的ASCII码值递增
(3)‘0’:48 ‘A’:65 ‘a’:97,同一英文字符小写-大写=32
#include
using namespace std;
int main(){int a=10,b=20;cout<<(a<b)<<" "<<(a>=b)<<" "<<(a!=b)<<endl;cout<<('a'>'0')<<endl;cout<<('a'<'b')<<endl;return 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 |
注意: 例题:输入n,判断某年n是否为闰年 代码执行流程:首先计算表达式的值,若为真,则执行语句;否则,不执行语句。 例如,求一个数的绝对值 例如,求一个数的绝对值 形式:条件?值1:值2 例如,求分段函数,如下所示: 例:输入3个整数,从小到大排序后输出 分析:a,b,c这三个数排序一共有6种可能:abc、acb、bac、bca、cab、cba,最简单的思路就是使用六个if语句,如下 上述程序看上去没有错误,而且能够通过样例,但是输入"1 1 1得不到任何输出"!这个例子说明,即使通过了题目中给出的样例,程序仍有可能存在问题。 此时输入"1 1 1",我们会发现仍然存在一个问题,没有输出,因此一般多分支的最后一个分支只写else(当上面所有“如果”都不成立的的情况下执行),这样可以保证此分支结构必有输出。 switch语句根据条件的不同取值来执行不同的语句。格式如下: 如果表达式的值是值1,就执行代码段A;如果表达式的值是值2,就执行代码段B……否则执行代码段N。 【问题描述】输入一个日期,判断它所在年份是否为闰年,并输出所在月份的天数。闰年的判断方法:四年一闰,百年不闰,四百年又闰。
▶ \blacktriangleright ▶ 逻辑运算符的优先级:非>与>或
▶ \blacktriangleright ▶ 总优先级:! → \rightarrow → 算术 → \rightarrow → 关系 → \rightarrow → 逻辑 → \rightarrow → 赋值 → \rightarrow → 逗号
▶ \blacktriangleright ▶ 作为条件时,所有非0值均为真;作为结果,只有0和1两种
▶ \blacktriangleright ▶ 数学条件:1
分析:n为闰年的情况有两种:
1、能被4整除且不能被100整除(2200不是闰年)
2、能被400整除
逻辑表达式:(n%4==0 && n%100!=0) || n%400==0
三、选择结构
1、单分支
if(条件){语句或语句组
}
int a;
cin>>a;
if(a<0)a=-a;
cout<<a<<endl;
2、双分支
if(条件){语句或语句组1
}
else{语句或语句组2
}
int a;
cin>>a;
if(a>=0)cout<<a<<endl;
elsecout<<-a<<endl;
3、条件表达式(三目运算符?:)
当条件成立时,表达式的值为值1,否则为值2
例如,求ab中的最大值的公式如下:a>b?a:b4、分支嵌套
if(条件1)语句1
else{if(条件2)语句2else语句3 //语句3亦可是双分支
}
y = { 0 ( x < 0 ) x ( 0 < = x < = 5 ) x 2 ( x > 5 ) y=\begin{cases} 0\space(x<0)\\ x\space(0<=x<=5)\\ x^2\space(x>5) \end{cases} y=⎩ ⎨ ⎧0 (x<0)x (0<=x<=5)x2 (x>5)
根据用户输入的x的值计算函数y的值#include5、多分支
if(条件1)语句1
else if(条件2)语句2
else if(条件3)语句3
...
else语句n
输入样例:20 7 33
输出样例:7 20 33#include
提示:算法竞赛的目标是编程对于任意输入均可以得到正确的结果,而不仅仅是样例。
将程序稍作修改:把所有的"<“改成”<=“。尝试后会发现仍然存在问题。对于"1 1 1”,程序会输出六行"1 1 1"。
解决方案:将多个单分支改为多分支,将if改为else if,else if可读作“再如果”,即上一个“如果”不成立才会去判断下一个“如果”,所有“如果”后的语句中只执行一个。#include#include6、switch
switch (值或表达式)
{case 值1:代码段Abreak;case 值2:代码段Bbreak;……default:代码段Nbreak;
}
注意:
1、default部分可以省略。
2、如果不使用break,那么紧随其后的case部分代码也会被执行,直到遇到break或switch语句结束为止!
3、switch结尾要有一个分号。#include
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
