目录
前言
一、分支结构
(一)if语句
1.if语句
if语句的基本结构:
if语句通过对一个条件判断,当条件为真时,执行{}
中的语句,否则,则不执行该语句。
if语句的语法格式如下:
if(表达式)
{
执行语句;
}
注意:if()
后面不加入分号,在其之后直接加入{}
2.if—else语句
if-else语句通过对一个条件进行判断,当条件为真时,执行一个操作,否则执行另一个不同的操作。
if-else语句的语法格式如下:
if(表达式)
{
语句1;
}
else
{
语句2;
}
注意:
(1)if()后面没有分号!如果不小心在后面加了分号,会有语法错误,错误提示会指向else:非法的else,没有与之匹配的if
(2)如果if和else后的语句只有一句,可以去掉{}
,当语句超过两句时,必须要加入{}
。加入花括号可以明确表示if 或else的控制范围。
(3)else子句不能单独使用,必须与if配对,且一个if只能配对一个else。
3.多重if—else语句
多重if-else语句通过依次判断表达式的值,当出现某个表达式的值为真时,则执行表达式所对应的操作,否则则执行else所对应的操作。
多重if-else语句的语法格式:
if(表达式1)
{
语句1;
}
else if(表达式2)
{
语句2;
}
······
else if(表达式m)
{
语句m;
}
else
{
语句n;
}
注意:当某一个表达式为真时,则不会向下执行该分支结构的其他语句。
4.嵌套if—else语句
通常将一个if-else语句放在另一个if-else语句中形成嵌套的if-else语句。
嵌套if-else语句的语法格式:
if(表达式1)
{
if(表达式2)
{
语句2;
}
else
{
语句3;
}
}
else
{
语句4;
}
注意:在嵌套的if—else语句结构层次中,必然会产生else部分和哪一个if部分配对的问题,配对的原则是else部分应属于最靠近且未配对的“if”。
(二)switch语句
当问题需要处理的分支情况比较多时(一般大于3种),通常使用开关语句代替条件语句来简化程序设计。开关语句就像多路开关一样,使程序控制流程形成多个分支,根据一个表达式的不同取值,选择一个或几个分支执行。C语言的开关语句也称为switch语句。
switch语句的最常用格式:
switch(表达式)
{
case 常量表达式1:语句序列1 break;
case 常量表达式2:语句序列2 break;
……
case 常量表达式n:语句序列n break;
default : 语句序列 n+1
}
switch 语句往往比多分支if语句更容易阅读。另外,switch语句往往比if语句执行速度快,特别是在有许多情况需要判定的时候。
注意:
(1)在case后的各常量表达式的值不能相同,否则会出现错误
(2)在case后面,如果没有break,会一直执行直到遇见break,才会跳出switch语句
(3)switch后面的表达式语句只能是整形或字符型。
(4)在case后,允许有多个语句,可以不用{}括起来
(5)各case和default语句的先后顺序可以变动,而不会影响程序的执行结果。
(6)default语句可以省略不用。
二、循环结构
在C语言中,反复不停的执行某个动作就是我们常称的循环,C语言提供了循环语句来实现重复处理。在C语言中,每个循环都有一个控制表达式,每执行一次循环体,都对控制表达式进行求值,如果表达式非0,则继续执行循环。C语言有三种循环语句,即while语句,do语句和for语句。while循环再执行循环体之前测试控制表达式,do循环在循环体执行之后测试控制表达式,for循环则非常适合那些指定循环次数的循环。
1.while循环
while循环适用于如果某个条件为真的情况下,希望反复执行一个操作,那么while语句最为简单易用。
while语句的一般格式如下:
while(表达式)
{
循环体语句;
}
功能:当表达式值非0时,重复执行循环体语句。
执行过程:首先计算圆括号中的表达式的值,如果值非0,则继续执行循环体语句,接着再判定表达式。这个过程持续到表达式值为0时才结束。
注意:
(1)对控制语句头所控制的内部语句要进行缩进,控制语句的前后都要留出空行,能使程序具有二维的层次感,极大地提高了程序的可读性。
(2)如果while循环的循环体中,没有最终将条件改变为假的操作,那么循环将永远不会终止——这就是所谓的死循环(也就是为无限循环)。
2.do—while循环
do-while循环是先执行循环中的语句,再判断while中的表达式是否为真,如果为真,则继续循环;如果为假,则终止循环。因此,do-while循环至少要执行一次循环语句。
do-while语句的一般格式如下:
do
{
语句1;
}while(表达式);//注意分号
注意:当使用do-while语句时,while的括号后面必须加分号。
3.for循环
for循环语句能够处理计数控制的所有细节,是功能最强大的一种循环语句,是编写许多循环的最佳方法。
for语句的标准格式如下:
for(表达式1;表达式2;表达式3)
{
语句;
}
执行过程:
(1)执行表达式1,对循环变量做初始化,只执行一次。
(2)判断表达式2,若其值为真(非0),则执行for循环中的语句,然后向下执行;若其值为假(为0),则结束循环。
(3)每次循环中最后一个被执行的操作。设置循环的步长,改变循环变量的值,从而可改变表达式2的真假性。
(4)当循环结束时,程序向下执行。
在绝大多数情况下,上述for语句可以表示成如下的while语句
表达式1
while(表达式2)
{
语句;
表达式3;
}
在for循环中:
(1)表达式1是一个或多个赋值语句,它用来控制变量的初始值;
(2)表达式2是一个关系表达式,他决定什么时候退出循环;
(3)表达式是循环变量的步进值,定义控制循环变量每循环一次后按什么方式进行变化。
(4)这三个部分用分号;隔开;千万记得不要写成逗号。
for语句的注意事项:
(1)for语句头中的三个表达式:初始化,循环继续条件和增量操作都可以包含算术表达式
例如:
for(i=0;i<=10*n;i+=n/5)
(2)控制变量的增量可以是负值,在这种情况下,循环计数是递减的。
(3)for语句中的三个表达式是可选的。如果将表达式2省略,则认为循环继续条件总是真,这将导致一个无限循环。如果对循环控制变量的初始化工作已经在程序的其他地方完成了,那么表达式1可以省略。如果循环控制变量的增值工作是由for循环体中的语句完成的,或者根本不需要增量工作,那么表达式3也可以省略。for循环语句中的增量表达式可以用循环体末尾的单独一句来替换。
(4)表达式1和表达式3可以是一个简单的表达式也可以是多个表达式以逗号分隔
int sum,num;
for(sum=0,num=0;num<=3;num++,sum++)
{
sum+=num;
printf("num=%d,sum=%d\n",num,sum);
}
(5)如果循环范围多于一个语句,必须加{}
构成复合语句,初学者很容易忘掉{}
,结果造成错误。
4.三种循环的比较
while,do-while和for三种循环在具体使用场景中是有区别的:
1.在知道循环次数的情况下更适合使用for循环
2.在不知道循环次数时适合使用while或do-while
(1)如果有可能一次都不循环应该考虑使用while循环
(2)如果至少有一次循环应考虑使用do-while循环