详解分支和循环结构(剖析if语句,switch语句,while循环,for循环,do

admin | 女足世界杯预测

介绍C语⾔是结构化的程序设计语⾔,这⾥的结构指的是顺序结构、选择结构、循环结构,C语⾔是能够实现这三种结构的,其实我们如果仔细分析,我们⽇常所⻅的事情都可以拆分为这三种结构或者这三种结构的组合。

我们可以使⽤if、 switch实现分⽀结构,使⽤for 、 while、 do while 实现循环结构。

分支结构if语句代码语言:javascript复制if(表达式)

语句1

else

语句2表达式成⽴(为真),则语句执⾏,表达式不成⽴(为假),则语句不执⾏

在C语⾔中,0为假,⾮0表⽰真,也就是表达式的结果如果是0,则语句不执⾏,表达式的结果如果是不是0,则语句执⾏。

就以判断是否成年来演示吧:

代码语言:javascript复制#include

int main()

{

int age=0;

scanf("%d",&age);

if(age<18)

printf("已成年\n");

else

printf("未成年\n");

return 0;

}当然这只是最基本的结构,下面还有三种稍复杂一点的:

分支中包含多条语句上面无论是if还是else后都只有一条语句,那如果更多呢?则需要用{}将语句括起来

代码语言:javascript复制#include

int main()

{

int score=0;

scanf("%d",&score);

if(score>=80)

{

printf("您已达良好:>\n");

printf("考得好,下次继续:>\n");

}

else

{

printf("您未达良好:<\n");

peintf("下次加油:>\n");

}

return 0;

}嵌套if利用嵌套if可以实现多重判断,结构如下:

代码语言:javascript复制if(表达式1)

语句1;

else if()

语句2;

else

语句3;悬空else这里就随便举一个例子吧:

可以看出什么都没有打印,这是因为第一个if后表达式虽为真,但第二个if后表达式为假。

还有一个要点就是:当else悬空时,else总是跟最接近的if匹配。

虽然知道了对齐规则,但带上适当的⼤括号,代码的逻辑就会更加的清晰,所以以后在写代码的时候要注意括号的使⽤,让代码的可读性更⾼。

switch语句一般结构:

代码语言:javascript复制switch(expression)

{

case value1:statement

case value2:statement

default:statement

}若expression没有与之对应的value则执行default

switch语句中的case和default的顺序问题

在 switch语句中 case ⼦句和 default⼦句有要求顺序吗?default只能放在最后吗?其实,在 switch 语句中 case语句和default语句是没有顺序要求的,只要你的顺序是满足实际需求的就可以。

不过我们通常是把 default ⼦句放在最后处理的。

注:

• switch 后的 expression 必须是整型表达式

• case 后的值,必须是整形常量表达式

为什么输入4会出现图中的错误呢?这是因为进入case4走完后并没有结束,而是继续进入case5···,所以使用switch语句时还要注意:

• case 和后边的数字之间必须有空格

•每⼀个 case 语句中的代码执⾏完成后,需要加上 break ,才能跳出这个switch语句。

循环结构while循环代码语言:javascript复制while(表达式)

语句;while语句具体执行流程:

首先上来就是执行判断表达式,表达式的值为0,循环直接结束;表达式的值不为0,则执⾏循环语句,语句执行完后再继续判断,是否进行下一次判断。

我们就以一个例题来深入了解一下吧。输入一个正的整数,逆序打印这个整数的每一位

eg:输⼊:1234,输出:4 3 2 1

题目解析:

要想得到n的最低位,可以使⽤n%10的运算,得到的余数就是最低位,如:1234%10得到4要想去掉n的最低位,找出倒数第⼆位,则使⽤ n=n/10 操作就可以去掉最低位的,如:n=1234/10得到123,123相较于1234就去掉了最低位,123%10就得到倒数第⼆位3。循环1和2两个步骤,在n变成0之前,就能到所有的位。代码语言:javascript复制#include

int main()

{

int num=0;

scanf("%d",&num);

while(n)

{

printf("%d ",n%10);

n/=10;

}

return 0;

}while循环中的break和continue

我们看下面一段代码:

打印了1,2,3,4后,当i等于5的时候,循环正 break 的地方终止,不再打印,不再循环。

所以 break的作用就是永久的终止循环,只要 break被执行,break外的第⼀层循环就终止了。那以后我们在循环中,想在某种条件下终止循环,则可以使用 break 来完成我们想要的效果。

那我们在思考一个问题,如果我们将break换成continue呢?

到这里我们就能分析出来, continue可以帮助我们跳过某⼀次循环continue 后边的代码,直接到循环的判断部分,进行下⼀次循环的判断,如果循环的调整是在 continue 后边的话,可能会造成

死循环。

for 循环一般形式:

代码语言:javascript复制for(表达式1;表达式2;表达式3)

语句;表达式1 ⽤于循环变量的初始化

表达式2 ⽤于循环结束条件的判断

表达式3 ⽤于循环变量的调整

for循环执行流程:

首先执行表达式1 初始化循环变量,接下来就是执行表达式2 的判断部分,表达式2 的结果如果==0,则循环结束; 表达式2 的结果如果!=0则执行循环语句,循环语句执行完后,再去执行表 达式3 ,调整循环变量,然后再去表达式2的地方执行判断,表达式2 的结果是否为0,决定循环是否继续。

整个循环的过程中,表达式1初始化部分只被执行1次,剩下的就是表达式2、循环语句、表达式3在循环。

让我们来一道练习吧:计算1~100之间3的倍数的数字之和

代码语言:javascript复制#include

int main()

{

int i = 0;

int sum = 0;

for(i=1; i<=100; i++)

{

if(i % 3 == 0)

sum += i;

}

printf("%d\n", sum);

return 0;

}for循环中的break和continue

其实和 while 循环中的 break⼀样, for循环中的break也是用于终止循环的,不管循环还需要循环多少次,只要执行到了 break,循环就彻底终止。

那break呢?我们直接上代码

我们看调试结果少了5,所以在 for 循环中 continue的作用是跳过本次循环中 continue 后的代码,直接去到循环的调整部分。未来当某个条件发⽣的时候,本次循环无需再执行后续某些操作的时候,就可以使用continue来实现。

do-while循环一般形式:

代码语言:javascript复制do

语句;

while(表达式);do-while循环执行流程:

在 do while循环中先执⾏图上的“语句”,执行完语句,在去执⾏“判断表达式”,判断表达式的结果是!=0,则继续循环,执行循环语句;判断表达式的结果==0,则循环结束。

所以在 do while 语句中循环体是⾄少执行一次的,这是 do while循环比较特殊的地⽅。

我们继续以一个题目来练习一下吧:输入一个正整数,计算这个整数是几位数?

eg:输入:24534 输出:5

代码语言:javascript复制#include

int main()

{

int num = 0;

scanf("%d", &num);

int cnt = 0;

do

{

cnt++;

num = num / 10;

} while (num);

printf("%d\n", cnt);

return 0;

}这⾥并非必须使⽤ do while 语句,但是这个代码就比较适合使用 do while循环,因为num即使是0,也是1位数,要统计位数的。

do-while循环中的break和continue

do-while循环中的break和for,while非常相似。那continue呢?上代码

可以看出程序死循环了,这是因为continue跳过了后面代码,使得i一直为5,所以在do-while循环中 continue的作用是跳过本次循环中 continue 后的代码,直接去到循环的判断部分。