一个 CPP 程序默认是按照代码书写顺序,从上到下依次执行下来的。但是,有时我们需要选择性的执行某些语句,来实现更加复杂的逻辑,这时候就需要分支结构语句的功能来实现。选择合适的分支语句可以显著提高程序的效率。
if
语句基本if
语句的结构如下所示:
if(条件)
{
语句1;
}
if
语句通过对条件进行求值,若结果为真(非 0),执行语句,否则不执行。如果主体中只有单个语句的话,花括号可以省略。
if...else
语句if...else
语句的结构如下:
if(条件)
{
语句1;
}
else
{
语句2;
}
if...else
语句和if
语句类似,else
不需要再写条件。当if
语句的条件满足时会执行if
里的语句,if
语句的条件不满足时会执行else
里的语句。同样,当主体只有一条语句时,可以省略花括号。
else if
语句if(条件1)
{
语句1;
}
else if(条件2)
{
语句2;
}
else if(条件3)
{
语句3;
}
else
{
语句4;
}
else if
语句是if
和else
的组合,对多个条件进行判断并选择不同的语句分支。在最后一条的else
语句不需要再写条件。以上述代码为例,它实现的逻辑是:
switch
语句switch(选择句)
{
case 标签1:
语句1;
case 标签2:
语句2;
default:
语句3;
}
switch
语句执行时,先求出选择句的值,然后根据选择句的值选择相应的标签,从标签处开始执行。其中,选择句必须是一个整数类型表达式,而标签都必须是整数类型的常量。
switch
语句中还要根据需求加入break
语句进行中断,否则在对应的case
被选择之后接下来的所有case
里的语句和default
里的语句都会被运行。
int i=1;//int为整型的一种
switch(i)
{
case 1:
cout<<"first"<<endl;
break;
case 2:
cout<<"second"<<endl;
break;
default:
cout<<"others"<<endl;
break;
}
char j='A';// 这里的 j 的数据类型是字符型 ,但 char 也是属于整数的类型,满足整数类型的表达式的要求
switch(j)
{
case 'A':
cout<<"first"<<endl;
break;
case 'B':
cout<<"second"<<endl;
break;
default:
cout<<"others"<<endl;
break;
}
处理入口编号不能重复,但可以颠倒。也就是说,入口编号的顺序不重要。各个case
(包括default
)的出现次序可任意。
switch
的case
分句中也可以选择性的加花括号。不过要注意的是,如果需要在switch
语句中定义变量,花括号是必须要加的。例如:
int i=1;
switch(i)
{
case 1:
{
int x;
cout<<"first:"<<x<<endl;
break;
}
case 2:
cout<<"second"<<endl;
break;
default:
cout<<"others"<<endl;
break;
}
有时,我们需要做一件事很多遍,甚至有时候循环次数并不是一个常量,而是与输入的变量或者一些计算结果有关系。为了不写过多重复的代码,高效实现重复的功能,我们需要循环语句来帮助。
for
语句for
循环语句的结构如下所示:
for(初始化;判断条件;更新)
{
循环体;
}
for
循环语句的执行顺序是:
初始化 → 判断条件 → 循环体 → 更新 → 判断条件 → 循环体 → 更新 → 判断条件 . . . 初始化\rightarrow判断条件\rightarrow循环体\rightarrow更新\rightarrow判断条件\rightarrow循环体\rightarrow更新\rightarrow判断条件... 初始化→判断条件→循环体→更新→判断条件→循环体→更新→判断条件...
如果循环体只有一条语句,那么花括号同样也可以省略。除此以外,for
语句的三个部分中,任何一个部分都可以省略。其中,若省略了判断条件,相当于判断条件永远为真。
例如,读入 n n n 个数我们可以采用以下方法:
for(int i=1;i<=n;i++)
{
cin >> a[i];
}
while
语句while
循环语句的结构如下所示:
while(判断条件)
{
循环体;
}
while
循环语句的执行顺序是:
判断条件 → 循环体 → 判断条件 → 循环体 . . . 判断条件\rightarrow循环体\rightarrow判断条件\rightarrow循环体... 判断条件→循环体→判断条件→循环体...
如果循环体只有一条语句,那么花括号同样也可以省略。因为,while
语句没有自带初始化和更新,为了不陷入死循环,需要程序员在其他地方实现这两个功能。
例如,验证冰雹猜想:
while(x>1)
{
if(x%2==1)
x=3*x+1;
else
x=x/2;
}
do...while
语句do...while
循环语句的结构如下所示:
do
{
循环体;
}while(判断条件);
while
循环语句的执行顺序是:
循环体 → 判断条件 → 循环体 → 判断条件 → 循环体 . . . 循环体\rightarrow判断条件\rightarrow循环体\rightarrow判断条件\rightarrow循环体... 循环体→判断条件→循环体→判断条件→循环体...
如果循环体只有一条语句,那么花括号同样也可以省略。do..while
与while
唯一的不同就在于,do..while
不管判断条件如何,都会先执行一遍循环体。
break
与continue
语句break
语句的作用是退出最近一层的循环。continue
语句的作用是跳过本次循环中,循环体的余下部分。
for(int i=1;i<=n;i++)
{
if(i%2==0 || i%3==0)
continue;
cout<<i<<" ";
}//1,4,5,7,...
int x=35;
for(int i=2;i<=n;i++)
{
if(x%i==0)
break;
cout<<i<<" ";
}//2,3,4
【入门2】分支结构
【入门3】循环结构