02程序的选择结构
2025年2月15日...大约 8 分钟
02程序的选择结构
运算符
- 关系运算符
- 关系运算符用于比较数值的大小。包括大于(>)、小于(<)、等于(==)、大于等于(>=)、小于等于(<=)和不等于(!=)六种,它们都是双目运算符。
- 关系运算符的结果是整形,值只有两种:0或1,0代表关系不成立,1代表关系成立。
运算符 | 含义 | 说明 | 示例 |
---|---|---|---|
> | 大于 | 比较两数大小,如果前面的数大于后面的数,则运算的结果为1,否则为0 | (a=5,b=6) c = a > b,c的值为0;c = b > a,c的值为1; |
< | 小于 | 比较两数大小,如果前面的数小于后面的数,则运算的结果为1,否则为0 | (a=5,b=6) c = a > b,c的值为1;c = b > a,c的值为0; |
== | 等于 | 比较两数大小,如果两数相等,则运算的结果为1,否则为0 | (a=5) c = a == 5,c的值为1;c =a == 4,c的值为0; |
>= | 大于等于 | 比较两数大小,如果前面的数大于等于后面的数,则运算的结果为1,否则为0 | (a=5,b=6) c = a >= b,c的值为0;c = b >= a,c的值为1; |
<= | 小于等于 | 比较两数大小,如果前面的数小于等于后面的数,则运算的结果为1,否则为0 | (a=5,b=6) c = a >= b,c的值为1;c = b >= a,c的值为0; |
!= | 不等于 | 比较两数大小,如果两数不相等,则运算的结果为1,否则为0 | (a=5) c = a != 4,c的值为1;c =a != 5,c的值为0; |
- 例1.1
#include <iostream>
using namespace std;
int main()
{
int n1 = 4, n2 = 5, n3;
n3 = n1 > n2; //n3的值为0
n3 = n1 < n2; //n3的值变为1
n3 = n1 == 4; //n3的值变为1
n3 = n1 != 4; //n3的值变为0
n3 = n1 == 1 + 3; //n3的值变为1
return 0;
}
- 逻辑运算符
- c++中共有三种逻辑运算符:与运算(&&)、或运算(||)、非运算(!)。与运算(&&)和或运算(||)为双目运算符,具有左结合性。非运算(!)为单目运算符,具有右结合性。逻辑运算符的值也只有两种:“真”或者“假”分别用“1”和“0”来表示。
运算符 | 含义 | 说明 | 示例 |
---|---|---|---|
&& | 与 | 两个操作数都为真时,结果才为真,否则为假 | 5 > 0 && 4 > 2, 由于5 > 0为真,4 >2也为真,相与的结果也为真 |
或 | |||
! | 非 | 操作数为真时,结果为假,操作数为假时,结果为真 | !5 > 0, 由于5 > 0为真,取反后结果为假 |
- 几种运算符的优先级排序:赋值运算符 < 逻辑运算符 < 关系运算符 < 算术运算符
例1.2 n = a + b > c && x + y < b 等价于 n = (((a + b) > c) && ((x + y) < b))
单分支结构(if语句)
- 如果条件表达式的值为真,即条件成立,语句1将被执行。否则语句1被忽略(不被执行)。
- 单分支结构格式1:
if(条件表达式)
语句1;
例2.1 输入一个整数a,如果a是偶数在屏幕上输出"yes"。
#include <iostream>
using namespace std;
int main()
{
int a;
cin >> a;
if(a % 2 == 0) //用模运算计算余数是否为0
cout << "yes" << endl;
return 0;
}
注意:关系运算符"=="用来判断两边变量是否相等,不要用成赋值符号"="。
#include <iostream>
using namespace std;
int main()
{
int a;
cin >> a;
if (a > 1 && a < 100)
cout << "yes" << endl;
return 0;
}
- 若条件成立时,要执行的操作由多个句子组成,我们必须将这些句子括在一对花括号{ }里。这样的形式被称为语句块或复合语句。
- 单分支结构格式2:
if(条件表达式)
{
语句1;
语句2;
...
}
例2.3输入三个整数,将它们按从大到小的顺序输出。
#include <iostream>
using namespace std;
int main()
{
int a, b, c, temp;
cin >> a >> b >> c >> temp;
if(a < b) //确保a大于b
{
temp = a;
a = b;
b = temp; //交换a与b的值
}
if(a < c) //确保a大于c,让a为最大数
{
temp = a;
a = c;
c = temp; //交换a与c的值
}
if(b < c) //确保b大于c
{
temp = b;
b = c;
c = temp; //交换b与c的值
}
cout << a << " " << b << " " << c << endl;
return 0;
}
双分支结构(if —— else 语句)
- 利用双分支结构可以在条件为真时和条件为假时执行不同的操作
- 类似于单分支结构,双分支结构的格式也有两种
- 若分支结构由多个句子构成,我们也必须把这些句子放在一对花括号{ }中。
if(条件表达式)
{
语句1;
语句2;
...
}
else
{
语句1;
语句2;
...
}
例3.1 输入一个整数,如果这个数大于1小于100则输出"yes"否则输出"no"。
#include <iostream>
using namespace std;
int main()
{
int a;
cin >> a;
if (a > 1 && a < 100)
cout << "yes" << endl;
else
cout << "no" << endl;
return 0;
}
例3.2 一斤水果1.98元钱,如果买到5斤及以上则可以打八折,购买x斤水果需要多少钱(保留两位小数)?
#include <iostream>
using namespace std;
int main()
{
float x, s; //将x,s定义为浮点型
scanf("%f",&x);
if(x<5)
{
s = 1.98 * x;
printf("%.2f\n",s); //格式化输出保留两位小数
}
else
{
s =1.98 * x * 0.8;
printf("%.2f\n",s); //格式化输出保留两位小数
}
return 0;
}
- if语句允许嵌套,即语句1和语句2可以还是if语句,此时的else语句配对规则如下:
if(条件1)
{
if(条件2)
{
if(条件3)
{
语句1
}
else //与if(条件3)相配对
{
语句2
}
}
else //与if(条件2)相配对
{
语句3
}
}
else //与if(条件1)相配对
{
语句4;
}
例3.3输入三个数,输出其中最大的数。
【方法1】用max存放三个数中的最大的数,输入的三个数放入a、b、c中,如果a比b和c大,则最大的数是a,如果b比a和c大,则最大的数是b,否则最大的数是c。
if(a > = b && a >= c)
{
max = a;
}
else if (b >= a && b >= c)
{
max = b;
}
else
{
max =c
}
【方法2】用max存放三个数中的最大的数,输入的三个数放入a、b、c中,假设a为最大,令max = a;如果b>max,则此时最大数应该为b即max = b;如果c>max,则此时最大数应该为=c即max = c
max = a;
if(b > max)
{
max =b;
}
if(c > max)
{
max =c;
}
三目运算符
- c++里有一个常用来代替if-else语句的操作符,这个操作符被称为三目运算符( ? : ),它是唯一一个需要三个操作数的操作符,其通用格式为:
== b ? a : c ==
- 如果b的结构为真,这整个表达式的值为a;否则,整个表达式的值为c。示例如下:
x = 5 > 3 ? 10 : 12; // 5 > 3为真,所以x的值为10
x = 5 == 3 ? 25 : 18; //5 == 3为假,所以x的值为18
例4.1 使用三目运算符编写程序:
输入两个整数,输出它们中较大的一个。
#include <iostream>
using namespace std;
int main()
{
int a, b, c;
cin >> a >> b;
c = (a > b)? a : b; //相对于 if(a > b) c = a; else c = b;
cout << c << endl;
return 0;
}
- 与if-else语句相比,三目运算符更为简洁。三目运算符可以返回一个值,可以将其赋给变量或放到另一个表达式中,如:
x = a > b ? (c > d ? e : f) : g;
相当于
if(a > b)
{
if(c > d)
{
x = e;
}
else
{
x = f;
}
}
else
{
x = g;
}
- 三目运算符最适合于简单关系和简单表达式的值,当代码变得复杂时,使用if-else语句更为清晰。
switch语句
- 应用条件语句可以很方便地使程序实现分支,但是出现分支比较多的时候,虽然可以用嵌套的if语句来解决,但是程序结构会显得复杂,其至凌乱。为方便实现多情况选择,C++提供了一种switch开关语句。
语法:
switch (表达式) {
case 值1:
// 当表达式等于值1时执行的代码
break;
case 值2:
// 当表达式等于值2时执行的代码
break;
...
default:
// 当没有匹配的情况时执行的代码
}
示例:
int grade = 2;
switch (grade) {
case 1:
cout << "一年级学生" << endl;
break;
case 2:
cout << "二年级学生" << endl;
break;
default:
cout << "未知年级" << endl;
}
根据grade
的值,输出不同的年级信息。