前言
C++程序中循环与分支的存在使部分代码可以多次执行,直到达到某些条件后,退出循环提高了效率,使编程更加灵活、得心应手。
循环结构
让特定代码重复执行。主要包括for循环、while循环以及do while循环。
for循环
for循环形式如下:
for (表达式1; 表达式2; 表达式3)
{
语句;
}
表达式1是循环的初始化部分,表达式2是循环测试部分,表达式3是循环更新部分,花括号内的是循环体,是程序接下来将会执行的语句。
for循环在执行时,首先会执行表达式1,进行初始化,之后会执行表达式2,进行判断,为真则执行循环体内的代码;为假则跳过循环,执行循环后面的代码。如果为真在执行完循环体内的代码后,将会执行表达式3,然后再执行表达式2进行判断。
#include<iostream>
using namespace std;
int main(){
for(int i=0;i<10;i++)
{
cout<<"i="<<i<<"\n";
}
return 0;
}
首先要讲的时for循环后括号内的三个表达式可以不写,即for(; ;)这时会一直执行循环体的内容,这种情况称为死循环,可以在循环体里加上break或者continue跳出循环。其次,表达式3i++,用于更新用来测试的值,++运算符是递增运算符,它将操作数的值加一。(这里补充一个知识,++运算符可以放在操作数前和后,两者意义不同,优先级不同。i++的优先级大于++i,前者为先用后加,后者为先加后用。很多人搞不清楚i++的值到底什么时候加,这里需要提到两个概念副作用和顺序点,副作用是指改变了某些变量的值。顺序点的意思是在一系列步骤中的一个“结算”的点,语言要求这一时刻的求值和副作用全部完成,才能进入下面的部分。例如",",";"都是一个顺序点,一个完整的表达式后也是一个顺序点)。
while循环
while循环可以在条件表达式为真的情况下,循环执行指定的一段代码,直到表达式不为真的时结束。
while循环形式如下:
while(条件表达式){
//循环体代码
}
在执行while循环时,首先执行条件表达式,如果结果为true,则执行循环体代码;如果为false,则退出循环,执行后面代码;循环体代码执行完毕后,程序会继续判断执行条件表达式,如条件仍为true,则会继续执行循环体,直到循环条件为false时,整个循环过程才会结束。
#include<iostream>
using namespace std;
int main(){
int n = 0;
while (n < 10) {
cout<<"n="<<n<<"\n";
n++;
}
return 0;
}
值得一提的是,在for循环中可以声明并初始化一个局部变量,而while循环不可以。当不知道需要循环的次数时,程序员更喜欢使用while循环。
do while循环
不同于for循环和while循环,do…while循环是先执行一次循环体,然后判断条件是否成立,是否继续执行循环体(先执行后判断)。
do…while循环形式如下:
do {
循环体语句;
} while(条件判断语句);
在执行do while循环时,首先执行一次指定的循环体语句,然后判别表达式,当表达式的值为真(非0)时,返回重新执行循环体语句,如此反复,直到表达式的值等于0为止,此时循环结束。其特点是:先执行循环体,然后判断循环条件是否成立 。
#include<iostream>
using namespace std;
int main(){
int i = 0;
do
{
cout<<"i="<<i<<"\n";
i++;
} while (i < 10);
return 0;
}
需要注意的是大家在使用do while循环时一定要记得,循环是先执行再判断。
分支结构
如果条件满足才能做某件事情,如果条件不满足就做另外一件事情,或者什么也不做。分支语句又被称为“判断语句”,正因为有了判断,才让程序有了很多的分支。主要包括if语句、switch语句。
if语句
if语句形式如下:
单分支:
if(表达式){
语句;
}
双分支:
if(表达式){
语句1;
}
else{
语句2;
}
多分支
if(表达式1){
语句1;
}
else if(表达式2){ //此处else if语句可以有多个
语句2;
}
else{
语句3;
}
在执行if语句时,会判断表达式是否为真,为真时则执行其语句体,为假则跳过其语句体,继续执行下一条语句。
#include<iostream>
using namespace std;
int main(){
int i = 1;
if(i==1)
cout<<"军哥很帅!"<<"\n";
else
cout<<"军哥一般帅!"<<"\n";
return 0;
}
计算机判断if是真还是假时,认为0为假,非0即为真,所以你在表达式的位置写个非0的常数,也会判断为真。当需要判断的情况过多,即分支太多时,使用if语句就显得太麻烦了,这里就需要用到switch语句了。
switch语句
switch语句形式如下:
switch(整型表达式)
{
case 整形常量表达式:
语句;
case 整形常量表达式:
语句;
case 整形常量表达式:
语句;
......
default:
语句;
}
当执行switch语句时,若整形表达式值为整型常量表达式值时,则执行其语句。执行完该语句后,接着执行下面的语句。
#include<iostream>
using namespace std;
int main()
{
int day = 0;
cin>>day;
switch (day) \\day必须是整数
{
case 1: \\标签必须是常数或者枚举量
printf("星期一\n");
break;
case 2:
printf("星期二\n");
break;
case 3:
printf("星期三\n");
break;
case 4:
printf("星期四\n");
break;
case 5:
printf("星期五\n");
break;
case 6:
printf("星期六\n");
break;
case 7:
printf("星期天\n");
break;
default:
break;
}
return 0;
}
代码中的default用于前面的条件都不符合时,此时就会执行default后的语句。在使用switch时一定要用break进行跳出,否则当一条语句判断成功,执行完后面的语句之后,其之后所有标签后的代码都会执行。