3.分支与循环

一、分支结构

1.概念

一个 CPP 程序默认是按照代码书写顺序,从上到下依次执行下来的。但是,有时我们需要选择性的执行某些语句,来实现更加复杂的逻辑,这时候就需要分支结构语句的功能来实现。选择合适的分支语句可以显著提高程序的效率。

2.if语句

(1)基本 if 语句

基本if语句的结构如下所示:

if(条件)
{
    语句1;
}

if语句通过对条件进行求值,若结果为真(非 0),执行语句,否则不执行。如果主体中只有单个语句的话,花括号可以省略。

(2)if...else语句

if...else语句的结构如下:

if(条件)
{
    语句1;
}
else
{
    语句2;
}

if...else语句和if语句类似,else不需要再写条件。当if语句的条件满足时会执行if里的语句,if语句的条件不满足时会执行else里的语句。同样,当主体只有一条语句时,可以省略花括号。

(3)else if语句

if(条件1)
{
    语句1;
}
else if(条件2)
{
    语句2;
}
else if(条件3)
{
    语句3;
}
else
{
    语句4;
}

else if语句是ifelse的组合,对多个条件进行判断并选择不同的语句分支。在最后一条的else语句不需要再写条件。以上述代码为例,它实现的逻辑是:

  • 若条件 1 为真,执行语句 1;
  • 否则,若条件 2 为真,执行语句2;
  • 否则,若条件 3 为真,执行语句 3;
  • 否则,即所有的条件都为假才执行主体 4。

3.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)的出现次序可任意。

switchcase分句中也可以选择性的加花括号。不过要注意的是,如果需要在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;
}

二、循环结构

1.概念

有时,我们需要做一件事很多遍,甚至有时候循环次数并不是一个常量,而是与输入的变量或者一些计算结果有关系。为了不写过多重复的代码,高效实现重复的功能,我们需要循环语句来帮助。

2.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];
}

3.while语句

while循环语句的结构如下所示:

while(判断条件)
{
    循环体;
}

while循环语句的执行顺序是:
判断条件 → 循环体 → 判断条件 → 循环体 . . . 判断条件\rightarrow循环体\rightarrow判断条件\rightarrow循环体... 判断条件循环体判断条件循环体...
如果循环体只有一条语句,那么花括号同样也可以省略。因为,while语句没有自带初始化和更新,为了不陷入死循环,需要程序员在其他地方实现这两个功能。

例如,验证冰雹猜想:

while(x>1)
{
    if(x%2==1)
        x=3*x+1;
    else
    	x=x/2;
}

4.do...while语句

do...while循环语句的结构如下所示:

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

while循环语句的执行顺序是:
循环体 → 判断条件 → 循环体 → 判断条件 → 循环体 . . . 循环体\rightarrow判断条件\rightarrow循环体\rightarrow判断条件\rightarrow循环体... 循环体判断条件循环体判断条件循环体...
如果循环体只有一条语句,那么花括号同样也可以省略。do..whilewhile唯一的不同就在于,do..while不管判断条件如何,都会先执行一遍循环体。

5.breakcontinue语句

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】循环结构

你可能感兴趣的:(算法竞赛讲义,c++)