zl程序教程

您现在的位置是:首页 >  后端

当前栏目

【跟学C++】C++控制程序流程:判断与循环(Study5)

2023-09-14 09:15:09 时间


 ============================ 【说明】 ===================================================
  大家好,本专栏主要是跟学C++内容,自己学习了这位博主【 AI菌】的【C++21天养成计划】,讲的十分清晰,适合小白,希望给这位博主多点关注、收藏、点赞。
  主要针对所学内容,通过自己的理解进行整理,希望大家积极交流、探讨,多给意见。后面也会给大家更新,其他一些知识。若有侵权,联系删除!共同维护网络知识权利!
 =======================================================================================

1、判断

在这里插入图片描述
  大家看到这张图,是不是我们平时也会遇到类似场景,我们同样会考虑如何选择,在选择的前提必然有一定的条件。在现实生活中,经过判断选择不同的路,再去执行不同的操作,在C++中,我们也会遇到类似情形。就好比一个分段函数:
f ( x ) = { 0 x>0 1 x<=0 f(x)= \begin{cases} 0& \text{x>0}\\ 1& \text{x<=0} \end{cases} f(x)={01x>0x<=0

1.1、if…else语句

  首先,对if...else的机构做个总结:

  (1) 基本结构

if(判断条件)
	执行语句1;
else
	执行语句2;

  (2) 执行多条语句时,必须要用{}将多条语句包括在一起,即语句块。若没有加{},那么程序只会执行语句1,下面的语句则不会执行:

if(判断条件){
	执行语句1;
	执行语句2;
}
else
	执行语句3;

  (3) 可以不加else。这种情况,判断条件为真时,执行1和2,否则跳出判断语句。

if(判断条件){
	执行语句1;
	执行语句2;
}

  对于上面的分段函数,我们可以用if...else来表示:

if(x>0){
	y=0;
else
	y=1;
}

1.2、if嵌套

在这里插入图片描述
  看到这图,必然想到俄罗斯套娃(禁止套娃)。嵌套呢,也有这样的意思,在if语句可以在里面再次嵌套if语句,以此类推,结构如下:

if(判断条件1){
	执行1if(判断条件2)
		执行2;
	else
		执行3;
}
else
	y=1;

1.3、多分支if语句

  多分支if语句和if…else类似,只不过多分支语句面临的判断更多,条件更加精细,一般有三个及以上,例如下面的分段函数:
f ( x ) = { 10 x>0 20 x=0 30 x<0 f(x)= \begin{cases} 10& \text{x>0}\\ 20& \text{x=0}\\ 30& \text{x<0}\\ \end{cases} f(x)=102030x>0x=0x<0
  对应的C++实现如下:

if(x>0)
	y=10;
else if(x=0)
	y=20;
else
	y=30;

1.4、switch-case语句

  在有些问题中,需要进行多次判断选择,而每一次判断都是同一个表达式的值, 这样就没有必要在每一个嵌套的i语句中都计算一遍。在C++中就提供了switch-case来解决这类问题,结构如下:

switch(表达式){
	case 常量表达式1:
		语句1;
		break;
	case 常量表达式2:
		语句2break;
	case 常量表达式3:
		语句3break;
	default:
		语句n+1;
		break;
}

  对于switch-case语句而言,它的执行顺序一般是:先计算switch后的表达式,然后在case中寻找表达式值与常量表达式相等的部分,并进入该case后面进行相应语句计算,如没有找到相等的常量表达式,则进入default内部进行执行。
  switch有几个注意点:
  (1) switch语句后的表达式可以为整数、字符型、枚举型等;
  (2) case后的每个常量表达式值不能相同,但是顺序不会有影响;
  (3) 每个case后有多条语句,不需使用大括号{}
  (4) 每个case语句只是一个入口标记, 不能确定执行的终点,每个case分支最后应该加上break语句,用来结束整个switch结构。否则会从某个case入口端开始一直执行到switch结构的结束端。(后面会说到break和continue的区别。)
  通过下面的案例来巩固一下switch-case

#include <iostream>
using namespace std;

int main() {
	//枚举
	enum MonthOfYear {
		January=1,
		February,
		March,
		April,
		May,
		June,
		July,
		August,
		September,
		October,
		November,
		December
	};

	int Year = 0;
	cout << "请输入这个月是哪月?(1-12):" << endl;
	cin >> Year;
	switch (Year)
	{

	case January:
		cout << "This month is January!" << endl;
		break;
	case February:
		cout << "This month is February!" << endl;
		break;
	case March:
		cout << "This month is March!" << endl;
		break;
	case April:
		cout << "This month is April!" << endl;
		break;
	case May:
		cout << "This month is May!" << endl;
		break;
	case June:
		cout << "This month is June!" << endl;
		break;
	case July:
		cout << "This month is July!" << endl;
		break;
	case August:
		cout << "This month is August!" << endl;
		break;
	case September:
		cout << "This month is September!" << endl;
		break;
	case October:
		cout << "This month is October!" << endl;
		break;
	case November:
		cout << "This month is November!" << endl;
		break;
	case December:
		cout << "This month is December!" << endl;
		break;

	default:
		cout << "输入错误,请输入1-12之间的整数。" << endl;
		break;
	}
	return 0;

}

在这里插入图片描述

1.5、条件运算符

  还记得上一篇文章学习运算符的时候,提及了Condition? X:Y条件运算符,它实际上与if…else类似,只不过代码量变少,易读,简单。例如我们想获取两个数中较小的那个数:

int min=(a<b)? a:b;

  那么用,if…else表示就是:

int min=0;
if(a<b)
	min=a;
else
	min=b;

2、循环

  下面就进入到循环部分。循环有很多种,例如while循环、do...while循环、for循环等。

2.1、while循环

  首先,是while循环,while循环的结构如下:

while(表达式)
{
	循环体;
}

  while循环的执行顺序是:先判断表达式的值,若为真(true),则执行循环体部分,例如我们计算1-50的求和。

#include <iostream>
using namespace std;
int main() {
	int i = 1;
	int sum = 0;
	while (i <= 50) {
		sum += i;
		i++;
	}
	cout << "1-50的和为:" << sum << endl;
	return 0;
}

  结果为:
在这里插入图片描述

2.2、do…while循环

  其次,是do…while循环,do...while循环的结构如下:

do{
	循环体;
}while(表达式);

  do...while循环的执行顺序是:先执行循环体部分,然后判断表达式,表达式为true,继续执行,否则,结束循环,例如我们计算1-60的求和。

#include <iostream>
using namespace std;
int main() {
		int i = 1;
		int sum = 0;
		do
		{
			sum += i;
			i++;
		} while (i<=60);
		cout << "1-60的和为:" << sum << endl;
		return 0;
}

  结果为:

在这里插入图片描述

2.3、for循环

  for循环是我们平时用的相对较多的一种循环结构,它的优势在于既可以用于循环次数确定的情况,又可以用于循环次数未知的情况,for循环的结构如下:

for(初始语句;表达式1;表达式2){
	循环体;
}

  for循环的执行顺序是:先执行初始语句,再判断表达式1 (循环控制条件) ;如果为,则执行一次循环体, 否则退出循环。每执行次循环体后,要先计算表达式2的值,再判断表达式1,从而决定要不要继续执行循环体。同样我们计算1-70的求和。

#include <iostream>
using namespace std;
int main() {
	int sum = 0;
	for (int i = 1; i <=70; i++)
	{
		sum += i;
	}
	cout << "1-70的和为:" << sum << endl;
	return 0;
}

  结果为:
在这里插入图片描述
  
  for循环要注意的几个点:
  (1) 初始语句、表达式1、表达式2可以省略,分号;不能省略。如:

for(;;) //相当于while(true)语句,表示将无终止地执行循环体(死循环) 

  (2) 表达式1是循环控制条件,如果省略,循环将无终止地进行下去。
  (3) 当初始表达语句是声明语句时,可以包含多个变量的声明,用逗号隔开。如:

for(int i=0,j=50; i<=j; i++,j--) k=i+j;

3、continue和break区别

  (1) break语句:出现在switch语句或者循环体结构中,使程序从整个循环体和switch语句内跳出,继续执行逻辑上的下一条语句(跳出循环)
  (2) continue:可以出现在循环体中,其作用是结束本次循环(即跳过循环块中后面的代码) ;再重新判断循环条件,决定是否继续执行。(不跳出循环)

4、总结

  最后,长话短说,大家看完就好好动手实践一下,切记不能三分钟热度、三天打鱼,两天晒网。大家也可以自己尝试写写博客,来记录大家平时学习的进度,可以和网上众多学者一起交流、探讨,我也会及时更新,来督促自己学习进度。一开始提及的博主【AI菌】,个人已关注,并订阅了相关专栏(对我有帮助的),希望大家觉得不错的可以点赞、关注、收藏