程序的三大结构
程序的三大结构为:
顺序结构、选择结构、循环结构
顺序结构
意义
顺序结构的程序设计是最简单的,只要按照解决问题的顺序写出相应的语句就行,它的执行顺序是自上而下,依次执行。
例如我们之前写的程序都是顺序结构,越前面的代码越先执行
选择结构
意义
选择结构 选择结构的执行是依据一定的条件选择执行路径,而不是严格按照语句出现的物理顺序。选择结构的程序设计方法的关键在于构造合适的分支条件和分析程序流程,根据不同的程序流程选择适当的选择语句。
逻辑运算符
这里补充逻辑运算,因为上节说逻辑运算而没有分支结构配合没法讲
逻辑运算符号:
# | 运算符 | 描述 | 示例 |
---|---|---|---|
1 | > | 大于 | 8>3(true) |
1 | < | 小于 | 8<3(false) |
1 | >= | 大于等于 | 8>=8(true) |
1 | <= | 小于等于 | 8<=8(true) |
1 | == | 等于 | 8==3(false) |
1 | != | 不等于 | 8!=3(true) |
之前说的条件就是布尔值
布尔运算的结果也是布尔值
例如接下来要讲的if:
if (8 == 8) {
cout << "Welcome";
}
//输出"Welcome"
逻辑运算
与(&&)逻辑运算
逻辑运算,除了我们在之前提到的,大于(>),大于等于(>=),等于(==)之类的以外,还包括了与(&&),或(||),非(!)等
逻辑预算的结果是true(真)或者false(假),下面,我们将介绍与(&&),或(||),非(!)三种逻辑运算。
左边 | 右边 | 结果 |
---|---|---|
true | true | true |
true | false | false |
false | true | false |
false | false | false |
与(&&)运算,有点类似中文"且"的意思,即左右两边表达式必须全部为真,运算结果才为真:
或(||)逻辑运算
||逻辑之所以可以称为或运算,是因为||运算左右两边表达式,只要有一个为true(真),运算结果就为true(真):
左边 | 右边 | 结果 |
---|---|---|
true | true | true |
true | false | true |
false | true | true |
false | false | false |
非(!)逻辑运算
非(!)逻辑运算只有一个作用,就是反转表达式的逻辑状态,即原先为true(真)的,非运算以后为false(假),原先为false(假)的,非运算以后结果为true(真):
右边 | 结果 |
---|---|
true | false |
false | true |
if判断
if用于用于控制代码的执行,如条件为真,可以执行if里面的代码:
if (条件) {
//条件为真的时候执行
}
如果条件成立,则花括号里面的代码块会被执行。
这里的条件是布尔类型
如果条件不成立,则花括号里面的代码块不会被执行,程序会继续执行if花括号以外下面的代码。
当if的判断条件成立(为真)的时候,if里面的代码才会被执行,我们通过一个例子来进一步了解if语句的条件判断:
if (8 > 0) {
cout << "Yes";
}
// 输出"Yes"
8大于0,所以该条件成立(为真),程序将输出"yes",如果条件为-1 > 0,则该条件不成立(为假),cout语句不会执行,程序也不会打印出任何内容。
使用变量控制逻辑运算
if条件的逻辑运算还可以使用变量进行控制,比如,我们可以根绝age变量判断用户是否已经成年:
int age = 18;
if (age >= 18) {
cout << "成年人";
}
// 输出"成年人"
else分支
一个if语句可以跟随一个可选的else语句,当条件为false时执行。
if (条件) {
//条件为true(真)时执行
}else{
//条件为false(假)时执行
}
当if / else中只执行一个语句时,可以省略花括号。
if嵌套语句
if语句的内部依然可以继续添加if语句进行嵌套:
int mark = 100;
if (mark >= 60) {
cout << "及格" << endl;
if (mark == 100) {
cout <<"恭喜,你得了满分!" << endl;
}
}
else {
cout << "不及格" << endl;
}
/*输出
及格
恭喜,你得了满分!
*/
switch的语法
switch语句根据values的值来判断变量是否相等:
switch (条件变量) {
case value1:
//满足value1需要执行的代码
break;
case value2:
//满足value2需要执行的代码
break;
...
case valueN:
//满足valueN需要执行的代码
break;
}
switch语句会从上至下判断条件变量的值是否跟value相等,相等,则执行相关的代码。
switch可以包含任意数量的case(条件分支)。
switch实例
例如 :在0点和12点的时候敲钟
如果我们不使用if语句,而是使用switch实现要怎么写?
int time = 12;
switch (time) {
case 0:
cout << "bell";
break;
case 12:
cout << "bell";
break;
}
这样的代码是不是比许多的if分支要更容易理解一点?但不知道你有没有注意到每个case分支后面的break语句?
break语句
break语句的作用是终止switch语句。
其实,switch语句在寻找到相应case并执行以后,并不会停止,而是会继续向下执行,直到所有case被遍历,所以,我们执行完相应的case以后,可以使用break语句,终止switch语句继续向下执行。
同样的,我们也可以利用break语句控制多个case执行相同的代码:
int month = 7;
switch (month) {
case 1:
case 2:
case 3:
cout << "春季" << endl;
break;
case 4:
case 5:
case 6:
cout << "夏季" << endl;
break;
case 7:
case 8:
case 9:
cout << "秋季" << endl;
break;
case 10:
case 11:
case 12:
cout << "冬季" << endl;
break;
default:
cout <<"不存在该月份" << endl;
}
当月份为7月份,case分支并不会在7月份停止,而是继续往下执行,直到在case9的时候遇到了break,所以在使用switch的时候需要谨慎。
有注意到switch最后的default语句吗?
default语句
我们看到了default语句,default语句其实类似于else语句,就是当所有case都不被满足的时候执行。
我们在上一节的示例中根据月份,判断季节,但是如果月份是由用户进行输入的,那用户的行为是不可测的,可能出现13月,-1月等情况,所以我们就需要default语句对用户进行一个友好的提示。
因为default一般在case的最末尾,所以default语句可以不使用break语句进行退出。
循环结构
while循环
只要满足条件为真,while循环会重复执行一条语句,直到满足某种特定的条件为止
while (条件) {
//需要重复执行的语句
}
当条件不成立(假)时,while里面的语句不执行
while循环的停止
while循环虽然会重复执行花括号内的语句,但是执行完一次以后,while都会检查一次条件,所以我们可以通过控制条件的真假来停止while循环:
int age = 1;
while (age < 7) {
cout << "你才" << age << "岁,还不够学龄" << endl;
age++;
}
//输出
你才1岁,还不够学龄
你才2岁,还不够学龄
你才3岁,还不够学龄
你才4岁,还不够学龄
你才5岁,还不够学龄
你才6岁,还不够学龄
在第6次循环以后,age的值变为7,不满足while循环的条件,所以循环停止。
使用增量运算控制循环次数
增量和减量运算可以用来控制while循环的次数,例如:
int num = 0;
while (num < 8) {
cout << "num的值是: " << num << endl;
num++;
}
// 输出
num的值是: 0
num的值是: 1
num的值是: 2
num的值是: 3
num的值是: 4
num的值是: 5
num的值是: 6
num的值是: 7
计算用户输入总和
我们来看一下while循环的一个综合运用:计算用户5次输入值的总和
int num = 1;//用来控制循环次数
int number;//用户存放用户输入的值
int total = 0;//用来计算用户输入的值的总和
while (num <= 5) {
cin >> number;
total += number;
num++;
}
cout << total << endl;
上面代码将通过num的自增循环5次,每次执行,都会把用户输入的值加到total变量中, 执行以后,total的值就是用户5次输入值的总和
for循环
for循环的作用跟while是一样的,用于多次之执行一些需要重复执行的代码,如果要说区别,for循环可以在定义的时候初始化循环变量,并且可以更直观的控制循环变量的修改,提高了代码的可读性
for (变量定义;循环条件;变量变化) {
//需要重复执行的代码
}
还是上面的例子,使用循环控制,统计用户5次输入的总和,这次我们使用for循环
int number;
int total = 0;
for(int i=0;i<5;i++){
cin >> number;
total += number;
}
在for循环中,先执行变量定义i=0
然后判断是否满足循环条件i<5,满足则执行花括号里面的代码,不满足则结束循环
花括号的循环体执行结束以后,会执行变量自增即i++
不知道你没有注意到,变量定义只执行了1次,在循环开始之前,循环条件每次执行之前都会判断,变量变化每次循环代码结束以后会执行
循环次数的控制
回到上面的例子,在每次循环结束以后,我们执行了i++使i自增,那循环变量的变化只能使用自曾吗?我们来看下下面的示例:
for (int i = 0; i < 50; i+=10) {
cout << i << endl;
}
//输出
0
10
20
30
40
通过控制台的输出,我们可以直观看到,i每次的变化是增加10,所以,for循环中,对循环变量的控制,是可以自定义的
do-while循环
除了while循环和for循环以外,C++还提供了do-while循环。
与while循环和for循环不同,do-while循环先执行循环,再判断循环条件,也就是说,do-while循环能保证循环至少执行一次。
do {
//需要重复执行的代码
} while (循环条件);
实际案例
#include <iostream>
using namespace std;
int main()
{
int choice;//定义变量
cout << "选择测试游戏\n";
cout << "如果你是一位君王,你对你的伴侣有什么要求\n";
cout << "1、我的妻子肯定是一位贤惠的女性!\n";
cout << "2、我要拥有两位以上的伴侣\n";
cout << "3、作为君王我要拥有后宫三千佳丽\n";
do {//do语句先执行再循环,如果do-while()中的条件为错误值,循环将一直执行do内的内容
cout << "请做出您的选择:";
cin >> choice;//输入choice变量的初值
if (choice < 1 || choice > 3)//先用if进行条件锁定,只有选项在1-3之间的时候才能给出答案,否则提示错误
{
cout << "请在规定的选项内选择答案,请重新输入:";
}
} while (choice < 1 || choice > 3);//在条件范围内的开始执行循环,(本题是在不在1-3之间时开始循环)
system("pause");
return 0;
}
输出结果:
选择测试游戏
如果你是一位君王,你对你的伴侣有什么要求
1、我的妻子肯定是一位贤惠的女性!
2、我要拥有两位以上的伴侣
3、作为君王我要拥有后宫三千佳丽
请做出您的选择:6
请在规定的选项内选择答案,请重新输入:请做出您的选择:3
请按任意键继续. . .
以上案例可以看到 这个代码块里的程序是必须要执行的 不管输入的条件如何
小练习
1.使用while循环,打印5次"Hello,C++!"
2.使用for循环,打印5次"Hello,C++!"
3.完善程序,获取用户输入,大于x,则输出"比x大",小于x则输出"比x小"
int x = 20;
int user;
cin >> user;
//完善以下部分
if().....
如果你有兴趣的话,欢迎把你的答案在评论区中发表