前言
本章我们主要结合Python
里面的控制语句来讲解一下C++
中的控制流,以及两者编写方式的不同,同学们在学习的过程中尽量不要按照我写的程序来编写;最好自己先理解,然后再去练习。
正文
判断语句:
所有的编程语言中判断语句大致都是一样的结构体,唯一不同的是编写方式有些不同,如:
Python
if 条件A:
# 执行条件A成立时对应的操作
elif 条件B:
# 执行条件B成立时对应的操作
elif 条件C:
# 执行条件B成立时对应的操作
# elif 可以写多个
else:
# 执行所有条件都不成立时对应的操作
和Python
不同的地方就是C++
的判断语句后面不跟冒号:
,而是以大括号{}
来确定代码块的,并且条件语句必须写在小括号()
中,如:
C++(这里直接把结构体写在main函数里面了)
int main(){
if (条件A) {
// 执行条件A成立时对应的操作
}
else if (条件B) {
// 执行条件B成立时对应的操作
}
else if (条件C) {
// 执行条件C成立时对应的操作
// else if 可以写多个
}
else{
// 执行所有条件都不成立时对应的操作
}
return 0;
}
这里我们结合前面所讲内容使用两种判断来完成一个小任务:(智力测试)小九今天测了以下IQ
智力,我们通常将智力超过130
分(包含130
)的定义为超常智能
,将智力超过120
分(包含120
)但是不超过129
分(包含129
)的定义为优秀
,将智力超过110
分(包含110
)但是不超过119
分(包含119
)的定义为聪明
,将智力超过90
分(包含90
)但是不超过109
分(包含109
)的定义为中等
,将智力超过80
分(包含80
)但是不超过89
分(包含89
)的定义为迟钝
,将智力超过70
分(包含70
)但是不超过79
分(包含79
)的定义为临界状态
,将智力低于70
分的定义为智能缺陷
。
我们需要编写一个程序,来根据输入
的IQ
智力分值直接输出
对应的智商定义
。
Python(Python中的输入是使用input()函数来完成,输出是使用print()函数来完成)
intelligence_quotient = int(input("请输入您的IQ智力分值:"))
if intelligence_quotient >= 130:
print("恭喜您,您的智力定义为超常智能。")
elif 129 >= intelligence_quotient >= 120:
print("恭喜您,您的智力定义为优秀。")
elif 119 >= intelligence_quotient >= 110:
print("恭喜您,您的智力定义为聪明。")
elif 109 >= intelligence_quotient >= 90:
print("恭喜您,您的智力定义为中等,继续加油。")
elif 89 >= intelligence_quotient >= 80:
print("很抱歉,您的智力定义为迟钝,还要继续努力哦。")
elif 79 >= intelligence_quotient >= 70:
print("很抱歉,您的智力定义为临界状态,加倍努力,成就自己。")
else:
print("很遗憾,您的智力定义为智能缺陷,接下来的日子里,您要比别人更加努力,相信自己,一定可以。")
执行结果:
===================== RESTART: C:/Users/小九爱学习/....../.......py ====================
请输入您的IQ智力分值:99
恭喜您,您的智力定义为中等,继续加油。
>>>
C++
#include<iostream>
using namespace std;
int intelligence_quotient; // 声明一个int类型的变量
int main(){
cout << "请输入您的IQ智力分值:";
cin >> intelligence_quotient;
if (intelligence_quotient >= 130) {
cout << "恭喜您,您的智力定义为超常智能。";
}else if (intelligence_quotient >= 120 and intelligence_quotient <= 129) {
cout << "恭喜您,您的智力定义为优秀。";
}else if (intelligence_quotient >= 110 and intelligence_quotient <= 119) {
cout << "恭喜您,您的智力定义为聪明。";
}else if (intelligence_quotient >= 90 and intelligence_quotient <= 109) {
cout << "恭喜您,您的智力定义为中等,继续加油。";
}else if (intelligence_quotient >= 80 and intelligence_quotient <= 89) {
cout << "很抱歉,您的智力定义为迟钝,还要继续努力哦。";
}else if (intelligence_quotient >= 70 and intelligence_quotient <= 79) {
cout << "很抱歉,您的智力定义为临界状态,加倍努力,成就自己。";
}else{
cout << "很遗憾,您的智力定义为智能缺陷,接下来的日子里,您要比别人更加努力,相信自己,一定可以。";
}
return 0;
}
执行结果:
请输入您的IQ智力分值:99
恭喜您,您的智力定义为中等,继续加油。
--------------------------------
Process exited after 1.627 seconds with return value 0
请按任意键继续. . .
循环语句:
在C++中的循环语句一共分为三种,结构体如下:
while语句
while (条件) {
// 循环体内需要执行的语句
}
// 根据条件确定是否进入循环
do……while语句
do{
// 循环体内需要执行的语句
}while(条件); // 这里是有分号的
// 先执行一次循环体内的语句,然后再去判断是否继续进入循环;
// 所以do……while语句循环体内的语句至少执行一次,而while语句可能一次也不会执行。
for语句
for (表达式; 条件; 表达式) {
// 循环体内需要执行的语句
}
// 先执行第一个表达式,然后验证条件是否成立,如果成立进入循环,不成立则结束循环;
// 循环内的语句每次执行完之后会执行一次第二个表达式。
接下来我们通过这三种循环结构体,将上面(智力测试)的程序增加一个重复查询的功能,以下程序会加上注释,方便同学们进行理解:
while语句
#include<iostream>
using namespace std;
int intelligence_quotient; // 声明一个int类型的变量
int main(){
while (true){ // 该位置直接使用true作为条件,true代表成立、false代表不成立,当前为无限循环的情况
cout << "请输入您的IQ智力分值:";
cin >> intelligence_quotient;
if (intelligence_quotient >= 130) {
cout << "恭喜您,您的智力定义为超常智能。" << endl; // 为了下次能够在下一行出现输入的提示语句,这里使用endl进行换行,也可以使用\n来完成
}else if (intelligence_quotient >= 120 and intelligence_quotient <= 129) {
cout << "恭喜您,您的智力定义为优秀。" << endl; // 同上
}else if (intelligence_quotient >= 110 and intelligence_quotient <= 119) {
cout << "恭喜您,您的智力定义为聪明。" << endl; // 同上
}else if (intelligence_quotient >= 90 and intelligence_quotient <= 109) {
cout << "恭喜您,您的智力定义为中等,继续加油。" << endl; // 同上
}else if (intelligence_quotient >= 80 and intelligence_quotient <= 89) {
cout << "很抱歉,您的智力定义为迟钝,还要继续努力哦。" << endl; // 同上
}else if (intelligence_quotient >= 70 and intelligence_quotient <= 79) {
cout << "很抱歉,您的智力定义为临界状态,加倍努力,成就自己。" << endl; // 同上
}else{
cout << "很遗憾,您的智力定义为智能缺陷,接下来的日子里,您要比别人更加努力,相信自己,一定可以。" << endl; // 同上
}
}
return 0;
}
do……while语句
#include<iostream>
using namespace std;
int intelligence_quotient; // 声明一个int类型的变量
int main(){
do{ //先执行一边循环体内的语句,然后在进行判断条件是否成立
cout << "请输入您的IQ智力分值:";
cin >> intelligence_quotient;
if (intelligence_quotient >= 130) {
cout << "恭喜您,您的智力定义为超常智能。" << endl; // 为了下次能够在下一行出现输入的提示语句,这里使用endl进行换行,也可以使用\n来完成
}else if (intelligence_quotient >= 120 and intelligence_quotient <= 129) {
cout << "恭喜您,您的智力定义为优秀。" << endl; // 同上
}else if (intelligence_quotient >= 110 and intelligence_quotient <= 119) {
cout << "恭喜您,您的智力定义为聪明。" << endl; // 同上
}else if (intelligence_quotient >= 90 and intelligence_quotient <= 109) {
cout << "恭喜您,您的智力定义为中等,继续加油。" << endl; // 同上
}else if (intelligence_quotient >= 80 and intelligence_quotient <= 89) {
cout << "很抱歉,您的智力定义为迟钝,还要继续努力哦。" << endl; // 同上
}else if (intelligence_quotient >= 70 and intelligence_quotient <= 79) {
cout << "很抱歉,您的智力定义为临界状态,加倍努力,成就自己。" << endl; // 同上
}else{
cout << "很遗憾,您的智力定义为智能缺陷,接下来的日子里,您要比别人更加努力,相信自己,一定可以。" << endl; // 同上
}
}while(true); // 该位置直接使用true作为条件,true代表成立、false代表不成立,当前为无限循环的情况
// 这里注意加分号!!!
return 0;
}
for语句
#include<iostream>
using namespace std;
int intelligence_quotient; // 声明一个int类型的变量
int main(){
// int i = 0;这个位置声明一个循环变量并且赋值一个初始值
// true;这个位置是循环条件,这里直接写true代表无限循环,如果换为 i < 10 那么循环体就会执行 10 次
// ++i;这个位置会改变循环变量 i ,也可以用 i++ ,后面课程会讲解它们的不同之处
for (int i = 0; true; ++i) {
cout << "请输入您的IQ智力分值:";
cin >> intelligence_quotient;
if (intelligence_quotient >= 130) {
cout << "恭喜您,您的智力定义为超常智能。" << endl; // 为了下次能够在下一行出现输入的提示语句,这里使用endl进行换行,也可以使用\n来完成
}else if (intelligence_quotient >= 120 and intelligence_quotient <= 129) {
cout << "恭喜您,您的智力定义为优秀。" << endl; // 同上
}else if (intelligence_quotient >= 110 and intelligence_quotient <= 119) {
cout << "恭喜您,您的智力定义为聪明。" << endl; // 同上
}else if (intelligence_quotient >= 90 and intelligence_quotient <= 109) {
cout << "恭喜您,您的智力定义为中等,继续加油。" << endl; // 同上
}else if (intelligence_quotient >= 80 and intelligence_quotient <= 89) {
cout << "很抱歉,您的智力定义为迟钝,还要继续努力哦。" << endl; // 同上
}else if (intelligence_quotient >= 70 and intelligence_quotient <= 79) {
cout << "很抱歉,您的智力定义为临界状态,加倍努力,成就自己。" << endl; // 同上
}else{
cout << "很遗憾,您的智力定义为智能缺陷,接下来的日子里,您要比别人更加努力,相信自己,一定可以。" << endl; // 同上
}
}
return 0;
}
执行结果:(以上程序执行效果一样)
请输入您的IQ智力分值:135
恭喜您,您的智力定义为超常智能。
请输入您的IQ智力分值:125
恭喜您,您的智力定义为优秀。
请输入您的IQ智力分值:115
恭喜您,您的智力定义为聪明。
请输入您的IQ智力分值:105
恭喜您,您的智力定义为中等,继续加油。
请输入您的IQ智力分值:95
恭喜您,您的智力定义为中等,继续加油。
请输入您的IQ智力分值:85
很抱歉,您的智力定义为迟钝,还要继续努力哦。
请输入您的IQ智力分值:75
很抱歉,您的智力定义为临界状态,加倍努力,成就自己。
请输入您的IQ智力分值:65
很遗憾,您的智力定义为智能缺陷,接下来的日子里,您要比别人更加努力,相信自己,一定可以。
请输入您的IQ智力分值:55
很遗憾,您的智力定义为智能缺陷,接下来的日子里,您要比别人更加努力,相信自己,一定可以。
请输入您的IQ智力分值:45
很遗憾,您的智力定义为智能缺陷,接下来的日子里,您要比别人更加努力,相信自己,一定可以。
请输入您的IQ智力分值:35
很遗憾,您的智力定义为智能缺陷,接下来的日子里,您要比别人更加努力,相信自己,一定可以。
请输入您的IQ智力分值:25
很遗憾,您的智力定义为智能缺陷,接下来的日子里,您要比别人更加努力,相信自己,一定可以。
请输入您的IQ智力分值:15
很遗憾,您的智力定义为智能缺陷,接下来的日子里,您要比别人更加努力,相信自己,一定可以。
请输入您的IQ智力分值:5
很遗憾,您的智力定义为智能缺陷,接下来的日子里,您要比别人更加努力,相信自己,一定可以。
请输入您的IQ智力分值:0
控制语句:
在上面的循环中因为设置的都是无限循环的效果,所以只能通过手动点击结束程序(右上角的❌)才能结束循环体的执行,这样对于程序设计并不友好,这时候就需要控制语句来干一番大事了;所有的高级计算机语言
都会有break
和continue
这两个控制语句,解析如下:
break语句
break语句常用于循环体内部强制跳出该循环,
需要注意的是,break只强制结束它所在的循环体,对其他的循环体没有影响。
continue语句
continue语句和break语句类似,但是continue语句不能结束循环,
它仅可以跳过循环体内部continue语句之后的语句,直接执行下一次循环。
在这里我们将(智力测试)的程序增加一个输入负数
结束程序的功能,里面的continue
语句我先加上注释,同学们可以将注释取消,就可以看到只能输入
智力分值不能输出
智商定义的效果了。
#include<iostream>
using namespace std;
int intelligence_quotient; // 声明一个int类型的变量
int main(){
for (int i = 0; true; ++i) {
cout << "请输入您的IQ智力分值:";
cin >> intelligence_quotient;
// continue; // 这里直接跳过continue之后的代码,直接进入下一次循环
if (intelligence_quotient < 0){
break; // 当输入的为负数的时候,直接结束break所在的循环体
}else if (intelligence_quotient >= 130) {
cout << "恭喜您,您的智力定义为超常智能。" << endl; // 为了下次能够在下一行出现输入的提示语句,这里使用endl进行换行,也可以使用\n来完成
}else if (intelligence_quotient >= 120 and intelligence_quotient <= 129) {
cout << "恭喜您,您的智力定义为优秀。" << endl; // 同上
}else if (intelligence_quotient >= 110 and intelligence_quotient <= 119) {
cout << "恭喜您,您的智力定义为聪明。" << endl; // 同上
}else if (intelligence_quotient >= 90 and intelligence_quotient <= 109) {
cout << "恭喜您,您的智力定义为中等,继续加油。" << endl; // 同上
}else if (intelligence_quotient >= 80 and intelligence_quotient <= 89) {
cout << "很抱歉,您的智力定义为迟钝,还要继续努力哦。" << endl; // 同上
}else if (intelligence_quotient >= 70 and intelligence_quotient <= 79) {
cout << "很抱歉,您的智力定义为临界状态,加倍努力,成就自己。" << endl; // 同上
}else{
cout << "很遗憾,您的智力定义为智能缺陷,接下来的日子里,您要比别人更加努力,相信自己,一定可以。" << endl; // 同上
}
}
return 0;
}
执行结果:
请输入您的IQ智力分值:150
恭喜您,您的智力定义为超常智能。
请输入您的IQ智力分值:100
恭喜您,您的智力定义为中等,继续加油。
请输入您的IQ智力分值:50
很遗憾,您的智力定义为智能缺陷,接下来的日子里,您要比别人更加努力,相信自己,一定可以。
请输入您的IQ智力分值:0
很遗憾,您的智力定义为智能缺陷,接下来的日子里,您要比别人更加努力,相信自己,一定可以。
请输入您的IQ智力分值:-1
--------------------------------
Process exited after 16.46 seconds with return value 0
请按任意键继续. . .
拓展竞赛小窍门(仅在竞赛可用):
上面讲的两个控制语句break
和continue
都只是针对所在循环体操作的,通常在比赛
中我们不使用循环嵌套的情况很少,所以在结束多层循环的时候上面两个控制语句就有些鸡肋了;这个时候我们可以使用goto
语句,当然这个语句尽量只在比赛
时使用即可,工程项目
中不要使用,会挨打,切记!!!
语法结构:
goto 标签名;
// 这个标签名可以是任意字母,然后在需要跳转到的地方写上这个标签名并且在后面加一个冒号即可,当然同学们也可以在标签后面写一些需要执行的语句,非常方便。
// 但是在工程项目的大量代码中,这样写的话让别人看着很难受,因为没有任何一个人希望经历在你写的大量代码中找这个标签的过程!!!
#include<iostream>
using namespace std;
int intelligence_quotient; // 声明一个int类型的变量
int main(){
for (int i = 0; true; ++i) {
cout << "请输入您的IQ智力分值:";
cin >> intelligence_quotient;
if (intelligence_quotient < 0){
goto break_goto; // 使用goto语句跳转到break_goto标签位置
}else if (intelligence_quotient >= 130) {
cout << "恭喜您,您的智力定义为超常智能。" << endl; // 为了下次能够在下一行出现输入的提示语句,这里使用endl进行换行,也可以使用\n来完成
}else if (intelligence_quotient >= 120 and intelligence_quotient <= 129) {
cout << "恭喜您,您的智力定义为优秀。" << endl; // 同上
}else if (intelligence_quotient >= 110 and intelligence_quotient <= 119) {
cout << "恭喜您,您的智力定义为聪明。" << endl; // 同上
}else if (intelligence_quotient >= 90 and intelligence_quotient <= 109) {
cout << "恭喜您,您的智力定义为中等,继续加油。" << endl; // 同上
}else if (intelligence_quotient >= 80 and intelligence_quotient <= 89) {
cout << "很抱歉,您的智力定义为迟钝,还要继续努力哦。" << endl; // 同上
}else if (intelligence_quotient >= 70 and intelligence_quotient <= 79) {
cout << "很抱歉,您的智力定义为临界状态,加倍努力,成就自己。" << endl; // 同上
}else{
cout << "很遗憾,您的智力定义为智能缺陷,接下来的日子里,您要比别人更加努力,相信自己,一定可以。" << endl; // 同上
}
}
// break_goto:; //这里是后面不加执行语句
break_goto : cout << "我们通过goto语句跳转到这个位置了。"; // 如果需要加执行语句,直接在:后面写就可以了
return 0;
}
执行结果:
请输入您的IQ智力分值:-1
我们通过goto语句跳转到这个位置了。
--------------------------------
Process exited after 6.089 seconds with return value 0
请按任意键继续. . .