C++ 知识点选讲 3——程序基本分支结构、循环结构(if、while 等)
1 分支结构
有时候,我们会遇到一些事情:你驾驶着一辆车到了一个十字路口,如果是红灯,就停车;如果是绿灯,就通过;如果是黄灯,就减速。
那么,我们的程序如何实现呢?
有一个叫 if 的关键字,意思就是“如果”。在某些情况下,它可以和另一关键字 else 结合。对于刚刚的问题,我们写成代码就是:
if(红灯){//如果是红灯
停车
}else if(绿灯){//否则,如果是绿灯
通过
}else{//最后一种情况,黄灯
减速
}
对于一串 if-else,里面的语句有这样一个特点:
int a=2;
if(a==1){
printf("dog");
}else if(a==2){
printf("cat");
}else if(a==3){
printf("fish");
}else{
printf("ant");
}
任意修改 \(a\) 的值,它只会输出一种动物的名称。即当进入一个分支时,就不会再进入同级别的分支,而是跳转到同级别分支的最后。
如何理解?再来一串代码:
int a=5;
if(a==1){
printf("1");
}else if(a==2){
printf("2");
}else if(a==3){
printf("3");
}else{
printf("4");
}
printf("5");
你可以任意修改 \(a\) 的值,运行多次后可以发现,输出只可能是 15、25、35 等,不可能是 125、14 等。
还有一些不同级别的嵌套:
int a=2,b=1;
if(a==1){
printf("1");
}else if(a==2){
if(b==1) printf("a");
else printf("b");
printf("c");
}else if(a==3){
printf("3");
}else{
printf("4");
}
printf("5");
此处任意修改 \(b\) 的值,发现输出只可能是 ac5、bc5,而不会是 15、abc5。读者可以自行理解。
上面代码的执行流程(\(a=2,b=1\)):
int a=2,b=1;
if(a==1){
printf("1");
}else if(a==2){//符合这个条件
if(b==1) printf("a");//符合这个条件
else printf("b");//同级的 if(b==1) 句已被执行,这一句不可能被执行
printf("c");//输出完 a 后,执行到这里
}else if(a==3){
printf("3");
}else{
printf("4");
}
printf("5");//输出完 c 后,执行到这里
例题(洛谷 B2035)
题目描述
给定一个整数 \(N\),判断其正负。如果 \(N>0\), 输出 positive ; 如果 \(N=0\), 输出 zero ; 如果 \(N<0,\) 输出 negative。
输入格式
一个整数 \(N(-10^9 \le N \le 10^9)\)。
输出格式
如果 \(N>0\), 输出 positive;
如果 \(N=0\), 输出 zero;
如果 \(N<0\), 输出 negative。
输入输出样例 #1
输入 #1
95
输出 #1
positive
这题就是典型的分支实现。参考代码(核心):
long long a;
scanf("%lld",&a);
if(a==0) printf("zero");
else if(a>0) printf("positive");
else printf("negative");
return 0;
2 循环结构
在 C++ 中,有两种常用的循环语句:while、for。
while 语句
我们搬出一个情景:如果一个数小于 \(n\),那么这个数就 \(+1\),直到这个数大于等于 \(n\) 为止。
我们难道要一个个加吗?完全不需要。使用 while 可以快速解决。
while 模版
以上述情景为例:
int num=1;//情景中的数
while(num<n){//小于 n,不符合这个条件会跳出循环
num++;//+1
}
printf("%d",num);//执行到这里,说明这个数大于等于 n,循环已被跳出
for 语句
上述问题也可以用 for 解决。
for 模版
以上述情景为例:
int num=1;//情景中的数
for(num;/*它有一个专业的名字:循环控制变量*/ num<n/*小于 n,不符合这个条件会自动跳出循环*/; num++/*+1*/){
continue;//该关键字用于重新循环一遍,下面的内容不会执行,跳到本次循环开始位置
}
printf("%d",num);//执行到这里,说明这个数大于等于 n,循环已被跳出
当然 for 也是有术语的:
//说的专业点,就是下面这样
for(int i=1;/*循环控制变量,许多 OIer 喜欢用 i,第二层用 j,第三层用 k,以此类推*/ i<=n;/*循环终止条件,不符合这个条件会自动跳出循环*/ i++/*一般写循环控制变量在每次循环中的变化,这里也可以写成 ++i,看个人习惯*/){
//循环体
}
3 关于循环的关键字
说了这么多,有什么和除 while 和 for 外关于循环的关键字呢?作用是什么?
常用的列在下面:
-
break:退出循环。 -
continue:上面讲过,该关键字用于重新循环一遍,关键字下面的内容不会执行,跳到本次循环开始位置。 -
return 0;:大家应该很熟悉,用于终止程序,后面讲到的函数也要用到它。 -
do-while:
框架:
do{
//循环体
}while(循环条件);
它与 while 不同的是,它不会先判断循环条件是否成立,而是会先执行完一遍循环体。
switch:竞赛中不常用,一般来说if-else可以代替它。
有问题可以评论区提问。
浙公网安备 33010602011771号