1.概述
我们写的程序就像我们规定好的步骤,一旦执行,它就会严格按照我们给的步骤执行。就像食谱一样,给出做菜步骤,照着做就能做出美味佳肴。但是这样的菜谱也会有问题。比如说,菜谱上的鱼香肉丝是甜的,但是你喜欢吃咸口的鱼香肉丝,这个时候你就需要根据自己的口味来判断来加不加糖。程序也是一样,流程的控制可以让程序更灵活,程序功能更强大。
2.条件分支语句
if语句:
基本形式: if(表达式){代码块} 如果表达式的值为真就执行代码块内容,为假就不执行。
int main() {
int a=1;
if(a==1){
printf("a=%d",a);
}
}
这里会打印出a=1 因为a==1会返回真,之后执行代码块内容。
int main() {
int a=1;
if(a==0){
printf("a=0",a);
}
}
这里就不会打印出任何内容,因为a==0为假,不会执行代码块内容。
if-else形式: if(表达式){代码块1}else{代码块2} 如果表达式为真就执行代码块1,否则就执行代码块2。
int main() {
int a=1;
if(a==1){
printf("a==1");
}else{
printf("a!=1");
}
}
这里因为a==1为真所以会打印出a==1
int main() {
int a=0;
if(a==1){
printf("a==1");
}else{
printf("a!=1");
}
}
这里因为a==1为假所以会打印出a!=1
if-else-if形式:两个分支使用上述语句即可。更多分支的时候可以使用这种形式,如下所示:
int main() {
int a=1;
if(a==1){
printf("a==1");
}else if(a==2){
printf("a==2");
}else if(a==3){
printf("a==3");
}else{
printf("a==other");
}
}}
这里会打印出a==1,如果a不等于1,2,3的时候,打印出a==other。中间的else if可以有任意多个分支,也可以不需要最后的else。
需要注意的是,if系列语句里面可以随意嵌套if系列语句。
switch语句:
C语言还提供了另一种用于多分支选择的 switch 语句, 其一般形式为:
switch(表达式){
case 常量表达式 1: 语句 1;
case 常量表达式 2: 语句 2;
…
case 常量表达式 n: 语句 n;
default : 语句 n+1;
}
其语义是:计算表达式的值。 并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的 值相等时, 即执行其后的语句,然后不再进行判断,继续执行后面所有 case 后的语句。如表达式的值与所 有 case 后的常量表达式均不相同时,则执行 default 后的语句。
使用switch语句需要注意的是:例如常量表达式为真时,就会执行语句1,并且会继续执行其后的语句2...语句n,语句n+1。如果不需要执行其后的语句,可以使用break跳出。
所有更常用的形式应该是下面这种:
switch(表达式){
case 常量表达式 1: 语句 1;break;
case 常量表达式 2: 语句 2;break;
…
case 常量表达式 n: 语句 n;break;
default : 语句 n+1;
}
3.循环语句
循环语句有三种:while,do-while,for
while语句:
while(表达式){代码块}
如果表达式为真就一直执行代码块。
main()
{
int i,sum=0;
i=1;
while(i<=100)
{
sum=sum+i;
i++;
}
printf("%d\n",sum);
}
上面这段代码会利用while语句求出1到100的和。
do-while语句:
do {代码块} while(表达式);
这个循环语句和上述语句基本一致,不同之处在于无论表达式条件真假,该循环语句至少会执行一次代码块。
for语句:
在 C 语言中,for 语句使用最为灵活,它完全可以取代 while 语句。它的一般形式为:
for(表达式 1;表达式 2;表达式 3)
{代码块}
它的执行过程如下:
1) 先求解表达式 1。
2) 求解表达式 2,若其值为真(非 0),则执行 for 语句中指定的内嵌语句,然后执行下面第 3)步;若其 值为假(0),则结束循环,转到第 5)步。
3) 求解表达式 3。
4) 转回上面第 2)步继续执行。
5) 循环结束,执行 for 语句下面的一个语句
用for语句求解1到100的和的过程如下:
int main() {
int sum=0;
int i=1;
for(i=1;i<=100;i++){
sum+=i;
}
printf("sum=%d",sum);
}
三种循环语句没有优劣之分,要根据合适的场景选择合适的循环语句,三种语句可以互相改写。
但是相对而言for语句更加灵活,使用最为广泛。
需要注意的是break语句和continue语句常常和循环语句配合使用,break语句指的是跳出整个循环,直接执行循环语句后面的内容。而continue语句表示本次循环不在执行,继续执行后续循环。
比如说下列代码用了continue:
int main() {
for(int i=1;i<=10;i++){
if(i==5) continue;
printf("i=%d\n",i);
}
}
下列代码在i==5的时候会执行continue,跳过本次循环,就不会打印5。但是会正常打印后续内容。
对于下面代码则用了break:
int main() {
for(int i=1;i<=10;i++){
if(i==5) break;
printf("i=%d\n",i);
}
}
下列代码在i==5的时候会执行continue,跳出循环,就不会打印5。也不会打印后续内容。