算法的基本控制结构有三种:顺序结构、选择结构和循环结构。其中顺序结构就是平常编写程序时,一条条代码按顺序执行。这里要介绍的是选择语句和循环语句。推荐画出流程图来进行理解。
1.选择语句
当面临两者中间进行二选一时,通常使用if...else...选择语句,
#include <stdio.h>
int main()
{
int a = 1;
int b = 2;
if (a < b)
printf("1.a比b小\n");
else
printf("1.a比b大\n");
if (a > b)
printf("2.a比b大\n");
else
printf("2.a比b小\n");
return 0;
}
if后面接一个表达式,当表达式正确时,就接着执行后面的程序,跳过else后面跟着的程序,当if后表达式错误时,则执行else后面的语句,跳过if后的语句,就像是做出一种选择,称之为选择语句。
如果进行选择中,还需要进行选择的话,可以用嵌套的if语句,需要注意的是if和else一一对应,前万不能对应错了,else对应最邻近的if,然后再下一个else,对应上一个if;
int main()
{
int a = 1;
int b = 2;
if (a != b)
if (a < b)
printf("a小于b");
else
printf("a大于b");
else
printf("a等于b");
return 0;
}
这里仅执行了”a小于b“这个语句,其他的都跳过了;
以上是面临两个选择时,那当面临多选择结果时,可以用if...else if...else...语句进行选择;只要选择足够多,可以接多个else if 语句,也就实现了多种情况,
int main()
{
int a = 2;
int b = 2;
if (a < b)
printf("a小于b");
else if (a > b)
printf("a大于b");
else
printf("a等于b");
return 0;
}
以上是用于需要多次进行判断是否属于当前情况的语句,每一次if后面都需要进行判断表达式是否正确,再执行选择的结果。而有的问题中,虽然需要面临多次判断,但每一次判断都是判断同一表达式值的时候,没必要每一次都嵌套if语句,计算一次表达式的值,c++中就用switch语句来进行处理。switch语句的执行顺序是:先计算switch语句中表达式的值,然后在列举的case语句中寻找常量相同的表达式,选择并开始执行,如果没有相对应的情况,则从default开始执行,
int main()
{
int i = 0;
scanf("%d", &i);
switch (i)
{
case(0):
printf("你输入了0");
break;
case(1):
printf("你输入了1");
break;
default:
printf("你没有输入0和1");
}
return 0;
}
需要注意的是case语句仅作为入口标号,即开始执行程序,但其没有执行的终止点,当执行结束时,需要加上break,来结束整个switch结构,否则会一直执行到switch的结束点,如图所示,注释掉break后,程序由case1入口进入,执行完后面所有代码。
int main()
{
int i=0;
scanf("%d", &i);
switch (i)
{
case(0):
printf("你输入了0");
//break;
case(1):
printf("你输入了1\n");
//break;
default:
printf("你没有输入0和1\n");
}
return 0;
}
2.循环语句
循环语句顾名思义就是循环执行一些代码,其和选择语句很相似,通过某个表达式来进行判断是否继续循环。一直重复执行的代码部分称其为循环体,在循环体中需要存在改变循环条件的某个量,当程序执行循环到一定程度时,会结束循环,否则便会造成无限循环(死循环)。
在C++中有3种循环控制语句:分别是while语句,do...while语句,和for语句。
while语句中while后面跟表达式,当表达式内容为true时,执行循环体内容,否则结束while语句,或结束循环。
int main()
{
int i = 0;
int sum = 0;
while (i < 9)
{
sum = sum + i;
printf("此时i为%d,sum为%d\n", i, sum);
i++;
}
return 0;
}
这是 通过循环实现1~8的一个求和,每个循环先判断再执行,而do...while...语句则是先执行循环体,再判断表达式,为true则执行循环体,为false则结束循环,是否先执行循环体是do...while和while的区别所在。
int main()
{
int i = 0;
int sum = 0;
do
{
sum = sum + i;
printf("此时i为%d,sum为%d\n", i, sum);
i++;
} while (i < 1);
return 0;
}
第三种循环结构为for语句,其使用最为灵活,既可以用于循环次数确定的情况,也可以用于循环次数未知的情况。其执行流程是首先执行初识语句,再计算表达式(循环控制条件),并根据值来判断是否执行循环体。如果表达式值为true则执行一次循环,表达值为false则退出循环。
int main()
{
int i = 0;
int sum = 0;
for (i; i < 9; i++)
{
sum = sum + i;
printf("此时i为%d,sum为%d\n", i, sum);
}
return 0;
}