C语言是一种结构化的程序设计语言,共可实现三种语言结构:顺序结构、选择(分支)结构和循环结构。
C语言中用if和switch实现分支结构,用for、while和do while实现循环结构。
下面介绍分支结构:
1.分支结构
分支结构中分为if语句的实现和switch语句的实现,下面介绍if语句:
1.1 if语句
if语句的语法形式:
当表达式的结果为真时,语句将被执行,否则将跳过执行语句。
当有多个分支时,可以有多个if:
有了“如果(if)”,当然就有“否则(else)”。有了else,我们可以将除if之外的表达式结果归在else中,而且不用再在else中写条件。上面的代码也就可以写成如下形式:
int a=0;
scanf("%d",&a);
if(a%2==1)
printf("a为奇数");
else
printf("a为偶数");
当表达式结果有三种及以上,需要执行不同语句时,可以加入else if等嵌套语句。
在if中或else中继续嵌套if或else语句。
int a=0;
scanf("%d",&a);
if(a>0)
{
if(a%2==1)
printf("a为奇数");
else
printf("a为偶数");
}
else
printf("a为非正数");
需要注意的是,当不加花括号时,if和else等语句只能执行一条语句,剩下的语句将不归入分支语句中。
int age;
scanf("%d",&age);
if(age>=18)
printf("成年了\n");
printf("可以服兵役\n");
当输入18以下时仍会输出“可以服兵役”。
注:C语言中的缩进一般不会对代码运行结果产生影响,因此若if前无花括号,else将与最近的if结合。
1.2 switch语句
switch语句的语法形式:
switch(表达式)
{
case 常数值1:
语句
break;
case 常数值2:
语句
break;
case 常数值3:
语句
break;
.
.
.
default:
语句
break;
}
根据表达式的结果,选择性地进入不同case或default。default表示的是除上面case后跟的常数值外的情况,当以上case都没有被进入时,进入default。
注:
1.default和不同的case之间没有顺序要求,可以任意排布case和default。
2.当任一语句后未跟着break;时,switch语句将继续向下执行,直到遇到break或到语句末尾时。
2.循环语句
2.1 for循环
for循环的语法形式:
for(表达式1;表达式2;表达式3)
{
循环语句;
}
//表达式1:对循环变量进行初始化,
//表达式2:进行判断,决定循环是否继续进行
//表达式3:对循环变量进行调整
进入for循环时,先进行初始化,再对循环变量进行判断,若使表达式2为真,则进入循环,循环语句结束之后再进入表达式三进行调整,然后再次进行(判断——循环——调整)的重复,直到表达式结果为假时或遇到break时,结束循环。
不同部分的表达式需要以分号;隔开,不同部分的表达式可以有零个及以上。
2.2 while循环
while循环的语法形式:
表达式1;
while(表达式2)
{
循环语句;
表达式3;
}
不同于for循环,while循环的循环变量的初始化在while语句外,while语句只有表达式2判断循环的进行和表达式3对循环变量的调整。总体上与for循环差别不大。
2.3 do while循环
do while循环的语法形式:
表达式1
do
{
循环语句;
表达式2;
}while(表达式3);
do while循环与其他两种循环最大的差异是,do while循环会先进入循环体,执行循环语句,再进行调整和判断,而其他部分差异不大。所以其至少被执行一次
2.4 break和continue语句
一般来讲,循环语句只会在判断表达式为假时结束循环。而为了能够符合实际要求,C语言中设计了break和continue语句,可以跳出循环,而两种语句也有差别。
2.4.1 break语句
break语句可以跳出本层循环,且不再执行之后的语句。需要注意的是,根据需要我们可能会有嵌套循环,而break语句只能跳出一层循环。
运行结果为输出0 1 2 3 4
2.4.2 continue语句
与break不同的是,continue语句只能跳过continue之后的语句,仍然会进入下次循环。
运行结果为输出0 1 2 3 4 6 7 8 9
2.5 goto语句
在遇到多层的嵌套循环时,如果想跳出整个循环,多次执行break的效率太慢,这时候我们可以使用C语言提供的goto语句及其的跳转标号。goto语句可以实现在同一个函数内跳转到设置好的标号处。
for()
{
for()
{
for()
{
if()
goto next;
}
}
}
next:
伪代码中的next即为跳转标号,其名称可以随意定义。goto语句将会直接跳转到跳转标号的位置。