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

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

介绍

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

我们可以使⽤ifswitch实现分⽀结构,使⽤for whiledo while 实现循环结构。

分支结构

if语句

if(表达式)
    语句1
else
    语句2

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

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

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

#include<stdio.h>

int main()
{
    int age=0;
    scanf("%d",&age);
    if(age<18)
        printf("已成年\n");
    else
        printf("未成年\n");
    return 0;
}

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

分支中包含多条语句

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

#include<stdio.h>

int main()
{
    int score=0;
    scanf("%d",&score);
    if(score>=80)
    {
        printf("您已达良好:>\n");
        printf("考得好,下次继续:>\n");
    }
    else
    {
        printf("您未达良好:<\n");
        peintf("下次加油:>\n");
    }
    return 0;    
}

嵌套if

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

if(表达式1)
    语句1;
else if()
    语句2;
else
    语句3;

悬空else

这里就随便举一个例子吧:

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

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

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

switch语句

一般结构:

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循环

while(表达式)
    语句;

while语句具体执行流程:

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

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

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

题目解析:

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

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 循环

一般形式:

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的倍数的数字之和

#include <stdio.h>
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循环

一般形式:

do
   语句;
while(表达式);

do-while循环执行流程:

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

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

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

eg:输入:24534 输出:5

#include <stdio.h>
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循环中的breakforwhile非常相似。那continue呢?上代码

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

目录
相关文章
|
6月前
|
C语言
用while语句实现循环
用while语句实现循环
64 1
|
5月前
|
存储 Java
JavaSE——流程控制-循环结构(for循环、while循环、小案例、do-while循环、死循环、循环嵌套)
JavaSE——流程控制-循环结构(for循环、while循环、小案例、do-while循环、死循环、循环嵌套)
36 0
|
5月前
|
C++
C++一分钟之-循环结构:for与while循环
【6月更文挑战第18天】在C++中,`for`循环适合已知迭代次数,如数组遍历;`while`循环适用于条件驱动的未知次数循环。`for`以其初始化、条件和递增三部分结构简洁处理重复任务,而`while`则在需要先检查条件时更为灵活。常见错误包括无限循环和逻辑错误,解决办法是确保条件更新和正确判断。了解两者应用场景及陷阱,能提升代码效率和可读性。
65 6
|
6月前
|
C语言
用do…while语句实现循环
用do…while语句实现循环
56 1
|
6月前
|
C语言
用for语句实现循环
用for语句实现循环
51 1
|
6月前
|
程序员 Python
循环控制语句
循环控制语句
|
6月前
|
Python
使用while语句实现循环
在编程中,循环是一种常用的控制结构,它允许代码块重复执行,直到满足某个条件为止。Python中的while语句是实现循环的常用方法之一。下面,我们将详细介绍如何使用while语句来实现循环,并附上示例代码。
59 2
|
6月前
|
存储
用do while语句实现循环
用do while语句实现循环
55 0
|
6月前
|
存储 Python
使用for语句实现循环
在编程中,循环结构是一种非常重要的控制流机制,它允许我们重复执行一段代码,直到满足特定的条件为止。在Python中,for语句是实现循环的一种常用方法。它通常用于遍历序列(如列表、元组、字符串)或迭代器,对序列中的每个元素执行相同的操作。本文将详细介绍如何使用for语句实现循环,并附上示例代码。
35 0
循环结构-用do-while循环按S=1+1/1!+1/2!+1/3!+…+1/n
循环结构-用do-while循环按S=1+1/1!+1/2!+1/3!+…+1/n
267 0