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\) 的值,运行多次后可以发现,输出只可能是 152535 等,不可能是 12514 等。

还有一些不同级别的嵌套:

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\) 的值,发现输出只可能是 ac5bc5,而不会是 15abc5。读者可以自行理解。

上面代码的执行流程(\(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++ 中,有两种常用的循环语句:whilefor

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 关于循环的关键字

说了这么多,有什么和除 whilefor 外关于循环的关键字呢?作用是什么?

常用的列在下面:

  1. break :退出循环。

  2. continue:上面讲过,该关键字用于重新循环一遍,关键字下面的内容不会执行,跳到本次循环开始位置。

  3. return 0;:大家应该很熟悉,用于终止程序,后面讲到的函数也要用到它。

  4. do-while

框架:

do{
	//循环体
}while(循环条件);

它与 while 不同的是,它不会先判断循环条件是否成立,而是会先执行完一遍循环体。

  1. switch:竞赛中不常用,一般来说 if-else 可以代替它。

有问题可以评论区提问。

posted on 2026-06-30 22:14  lz5332t  阅读(1)  评论(0)    收藏  举报