【C++养成计划】控制程序流程——判断与循环(Day5)

写在前面:大家好!我是【AI 菌】,一枚爱弹吉他的程序员。我热爱AI、热爱分享、热爱开源! 这博客是我对学习的一点总结与记录。如果您也对 深度学习、机器视觉、算法、Python、C++ 感兴趣,可以关注我的动态,我们一起学习,一起进步~
我的博客地址为:【AI 菌】的博客

上一篇:【C++养成计划】运算符&运算符优先级(Day4)
昨天,我们学习了C++常用的运算符以及运算符的优先级顺序,从而能够灵活地处理和变换各种数据了。今天我们主要来学习控制程序流程的两大方法:判断和循环



1. 判断

(1) if … else 语句

首先我们思考一下什么需要判断语句?想想在现实生活中,我们会根据不同的情形,经过判断后再去执行不同的操作。那么当我们用C++去解决一个问题的时候,也会遇到这种情况。举一个数学中很简单的例子,有一个分段函数:
y = { 1 ( x > 0 ) 0 ( x 0 ) y=\begin{cases} 1 & (x>0)\\ 0 & (x\le0) \end{cases}
这是一个典型需要判断语句的例子。当我们想去求y时,得首先判断x>0是否为真。当条件为真时,我们令y=1;否则,令y=0。那么用if … else语句实现如下:

if(x>0)
	y=1;  //如果x大于0
else
	y=0;  //如果x小于或等于0

由此,我们就对if…else判断语句有了一个简单的了解。那么下面,我们来了解在实际编程中一些必要的技能吧!

1.最基本的if...else结构
if(判断条件)
	执行1else
	执行22.当要执行多条语句时,需要用{}将多条语句包含视为一个语句块。
(注意:初学者很容易犯的一个错是,没有加{},这样编译器会默认只执行1if(判断条件)
{
	执行1;
	执行2}
else
	执行33.可以不加else。这种情况下,判断条件为真,则执行12,否则直接跳出判断语句
if(判断条件)
{
	执行1;
	执行2}

4.很重要也是很容易被忽略的一点:判断条件只要不为0(false),就视为真true

(2) 嵌套 if 语句

说起嵌套,让我想到最形象的一个例子是:俄罗斯套娃(它是一种木制娃娃玩具,当你打开外面的娃娃,会发现里面套着一个更小的娃娃,再打开里面的娃娃,里面还有更小更小的娃娃…)
if语句也是可以嵌套的,在外面的if语句里面,可以嵌套一个if语句。当然,里面的if语句也可以再嵌套。理论上,可以无穷嵌套下去。下面我们以嵌套一次为例:

if(判断条件1)
{
	执行1if(判断条件2)
		执行2else
		执行3}
else
	执行4

(3) 多分支 if 语句

多分支if语句和if…else语句相似。只不过多分支语句对条件分的更细,所以它会有三个或者3个以上的分支,以下面的分段函数为例:
y = { 1 ( x > 0 ) 0 ( x = 0 ) 1 ( x < 0 ) y=\begin{cases} 1 & (x>0)\\ 0 & (x=0)\\ -1 & (x<0) \end{cases}
我们用C++对它实现如下:

if(x>0)
	y=1;
else if (x==0)  //注意这个地方要用==,而不是赋值符号=
	y=0;
else
	y=-1;

(4) switch-case条件处理

在有些问题中,虽然需要进行多次判断选择,但是每一次都是判断同一表达式的值,这样就没有必要在每一个嵌套的if语句中都计算一遍表达式的值,为此C++中提供了switch语句专门来解决这类问题。switch语句的语法形式如下:

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

switch语句的执行顺序是:首先计算switch语句中表达式的值,然后在case语句中寻找值相等的常量表达式,并以此为入口执行相应的语句。如果没有找到相等的常量表达式,则从default开始执行。
使用switch语句需要注意的问题

  • switch语句后面的表达式可以是整型、字符型、枚举型
  • 每个常量表达式的值不能相同,但是次序不影响执行结果。
  • 每个case分支可以有多条语句,但不必用{}
  • 每个case语句只是一个入口标号,并不能确定执行的终止点,因此每个case分支最后应该加上break语句,用来结束整个switch结构。否则会从入口端开始一直执行到switch结构的结束端。

下面举一个例子,指出输入的数字(1-7之间)对应星期几:

#include<iostream>
using namespace std;
int main()
{
	enum DaysOfWeek  //枚举常量
	{
		Monday=1,
		Tuesday,
		Wednesday,
		Thursday,
		Friday,
		Saturday,
		Sunday
	};
	int day=0;
	cout<<"请输入今天星期几(1-7):";
	cin>>day;
	switch(day)
	{
		case Monday: cout<<"Today is Monday!"; break;
		case Tuesday: cout<<"Today is Tuesday!"; break;
		case Wednesday: cout<<"Today is Wednesday!"; break;
		case Thursday: cout<<"Today is Thursday!"; break;
		case Friday: cout<<"Today is Friday!"; break;
		case Saturday: cout<<"Today is Saturday!"; break;
		case Sunday: cout<<"Today is Sunday!"; break;
		default: cout<<"输入错误,请输入1-7之间的整数"; break; 
	}
	return 0;
}

这里我从键盘输入2,程序输出结果如下:
在这里插入图片描述
程序中定义DaysOfWeek用到了枚举常量,对其还不太了解的同学,可以参见我前面的博客:【C++养成计划】深入浅出——变量作用域(Day3)

(5) 使用运算符?: 条件处理

C++提供了一个有趣且功能强大的运算符——条件运算符,它相当于紧凑的if-else结构。条件运算符也叫三目运算符,因此它使用三个操作数。
下面举一个简单的例子,用运算符?:来获得两个数的较大者:

int Max = (num1>num2)? num1:num2;  //判断表达式num1>num2。如果为真,将num1传给Max,否则将num2传给Max

等效于如下if…else语句:

int Max=0;
if(num1>num2)
	Max=num1;
else
	Max=num2;

想了解更多有关运算符的知识,可以戳戳这里:【C++养成计划】运算符&运算符优先级(Day4)

2. 循环

(1) while循环

while循环的语法形式:

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

执行顺序是:先判断表达式的值,若为真true,则继续执行循环体语句。
下面举一个简单的例子,求自然数1至100的和。

#include<iostream>
using namespace std;
int main()
{
	int i=1,sum=0;
	while(i<=100)
	{
		sum+=i;
		i++;
	}
	cout<<"sum="<<sum<<endl;
	return 0;
}

运行结果如下:
在这里插入图片描述

(2) do … while 循环

do … while的语法形式:

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

执行顺序是:先执行循环体语句,后判断循环条件表达式的值。表达式为true时,继续执行循环体;否则结束循环。
同样,如果要求自然数1至100的和,也可以使用do … while结构,如下所示:

#include<iostream>
using namespace std;
int main()
{
	int i=1,sum=0;
	do{
		sum+=i;
		i++;
	}while(i<=100);
	cout<<"sum="<<sum<<endl;
	return 0;
}

运行结果如下:
在这里插入图片描述

(3) for 循环

for语句的使用最为灵活,既可以用于循环次数确定的情况,可可以用于循环次数未知情况。其语法形式如下:

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

for语句的执行流程是:首先执行初始语句,再判断表达式1(循环控制条件);如果为真,则执行一次循环体,否则退出循环。每执行一次循环体后,要先计算表达式2的值,再判断表达式1,从而决定要不要继续执行循环体。
下面举一个简单的例子,我们用for()还是来实现求自然数1至100的和。

#include<iostream>
using namespace std;
int main()
{
	int sum=0;
	for(int i=1;i<=100;i++)
	{
		sum+=i;
	}
	cout<<"sum="<<sum<<endl;
	return 0;
}

运行结果如下:
在这里插入图片描述
使用for()语句需要注意以下几点

  • 初始语句、表达式1、表达式2都可以省略,但是分号不能省略。比如:
for(;;) //相当于while(true)语句,表示将无终止地执行循环体(死循环) 
  • 表达式1是循环控制条件,如果省略,循环将无终止地进行下去。
  • 当初始表达语句是声明语句时,可以包含多个变量的声明,要用逗号隔开。比如:
for(int i=0,j=10; i<=j; i++,j--) k=i+j;

(4) continue和break的用法

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

(5) 不成熟的goto

goto 语法的形式如下:

JumpToPoint:
	循环体;
	goto JumpToPoint; //转跳回JumpToPoint处,重新执行循环体

这里需要说明的是:由于goto语句不具有结构性,它的频繁使用会使得程序变得混乱,因此不建议使用它

发布了61 篇原创文章 · 获赞 776 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/wjinjie/article/details/105646675