C语言分支和循环语句

       

目录

1. 分支语句 ( 选择结构 )

        1.1 if 语句

1.2 switch 语句

2. 循环语句

2.1 while 循环语句

2.1.1  while 语句的基本语法:

2.1.2  while 语句中的 continue 和 break

2.2 for 循环语句

2.2.1  for 语句的基本结构 

2.2.2  for 循环中的 break 和 continue

2.2.3  for 循环的一些变种

3.1 do while 循环语句

3.3.1 do while 语句的语法与基本结构

3.3.2 do while 语句中的 break 和 continue

4.1 goto 语句

4.1.1 goto 语句的基本语法


                C语言是一门结构化程序设计语言。支持三种结构

                        1. 顺序结构        2.选择结构        3.循环结构

这三种结构可以实现所有的代码逻辑。它们由特定的语句定义符组成,C语言有九种控制语句

分以下三类:

  1.  条件判断语句也叫分支语句:  if 语句 、switch 语句;
  2.  循环执行语句: do while 语句 、 while 语句 、for 语句;
  3.  转向语句:  break 语句 、goto 语句 、continue 语句 、return 语句

1. 分支语句 ( 选择结构 )

        1.1 if 语句

                if 语句的语法结构如下。 其中 如果表达式的结果为真,则执行块中的语句。

在C语言中如何表示真假呢? 不止 if 所有的判断表达式都是:  0 表示假 ,非0 表示真

//单分支
if (表达式)
{
    语句;
}

//多分支
if (表达式)
{
    语句1;
}
else
{
    语句2;
}

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

        在写代码时应注意一一对应,养成良好的代码风格。else 与最近的 if 相对应。

1.2 switch 语句

        switch 也是一种分支语句。常常用于多分支的情况。switch 的语法结构 还需搭配 break 才能真正实现分支。

switch (整型表达式)   // 只能是 整型 !!
{
    语句项;
}

// 案例
#include <stdio.h>
int main()
{
    int day = 0;
    scanf("%d", &day)  //输入一个日期
    
    switch(day)
    {
        case 1:
            printf("星期一");
            break;
        case 2:
            printf("星期2");
            break;
        case 3:
            printf("星期3");
            break;
        case 4:
            printf("星期4");
            break;
        case 5:
            printf("星期5");
            break;
        case 6:
            printf("星期6");
            break;
        case 7:
            printf("星期7");
            break;
        default:
            printf("wrong")
            break;

    }
    return 0;
}


//或者直接写成
int main()
{
    int day = 0;
    scanf("%d", &day)  //输入一个日期
    
    switch(day)
    {
        case 1:                //如 day 为1 ,首先执行case 1: 而case 1无表达式,无break
        case 2:                // 故继续执行 case 2: case 3: 一直到 case 5:
        case 3:                //程序输出 工作日。 同理,day = 2 时也是输出 工作日
        case 4:                // day = 6 或者 day = 7时输出 休息日
        case 5:
            printf("工作日");
            break;
        case 6:
            printf("休息日");
            break;
        case 7:
        default:              // 输入除了1 - 7 的数时,输出 wrong
            printf("wrong")
            break;

    }
    return 0;
}

breakdefault 的作用。

        break 的实质作用就是把语句列表划分为不同的分支部分。如果不加break, 语句执行完case1 的内容时不会跳出 switch 而是会继续向下执行,直到遇到 break 或者执行完全部代码结束程序才会停止。例子可见上述代码。

        default 的作用。我们指导首先要通过 switch (整型表达式) 进入case 语句。如果case的值与表达式的值都不一样怎么办呢? 实际上程序并不会报错,也并不会结束,只是所有语句都被跳过,其实也没什么问题。但是为了程序效果的完整性,可以加入一个 default 子句。 如上述例子中,假设表达式的值为 8 。则会输出 wrong 。 如不设置,程序什么都不输出。


2. 循环语句

        循环语句有 while 、for  、do while 语句。

2.1 while 循环语句

2.1.1  while 语句的基本语法:

int main()
{
    int i = 10;           // 初始化部分
    while (i < 10)        // 条件判断部分
    {
        printf("%d", i);
        i++;              // 调整部分
    }
}

2.1.2  while 语句中的 continue 和 break

        1. breakwhile 中的作用。 只要在循环中遇到 break ,就停止后期所有的循环,直接终止循环,跳出循环。

int main()
{
    int i = 10;           // 初始化部分
    while (i < 10)        // 条件判断部分
    {
        if (i == 5)
        {
            break;        // 直接跳出循环,不执行后面代码。
        }
        printf("%d ", i);
        i++;              // 调整部分
    }
}
     // 最后的输出结果为  1 2 3 4 

        2. continuewhile 中的作用。只要在循环中遇到 continue ,就直接跳过后面的代码,回到 while 语句的判断部分。进行下一次循环判断。

int main()
{
    int i = 10;           // 初始化部分
    while (i < 10)        // 条件判断部分
    {
        if (i == 5)
        {
            continue;    // 直接跳到while的判断部分,跳过本次循环,                                
        }                // 进入下次循环,不执行后面代码。
        printf("%d ", i);
        i++;              // 调整部分
    }
}
     // 最后的输出结果为  1 2 3 4 6 7 8 9 

2.2 for 循环语句

2.2.1  for 语句的基本结构 

int main()
{
    int i = 0;                      
    for (i = 1; i < 10; i++)    // 初始化部分   // 条件判断部分  // 调整部分
    {
        printf("%d ", i);
    }
}
//输出结果: 1 2 3 4 5 6 7 8 9 

可知 for 循环 的 初始化部分, 条件判断部分, 调整部分都在一起,结构优于 while 循环,比 while 循环应用的场景更多。

2.2.2  for 循环中的 break 和 continue

 与  while 循环 中效果类似

int main()
{
    int i = 0;                      
    for (i = 1; i < 10; i++)    // 初始化部分   // 条件判断部分  // 调整部分
    {
        if (i == 5)
        {
            break;              //直接跳出循环,不执行后面代码。
        }
        printf("%d ", i);
    }
}
//输出结果: 1 2 3 4 

continue:

int main()
{
    int i = 0;                      
    for (i = 1; i < 10; i++)    // 初始化部分   // 条件判断部分  // 调整部分
    {
        if (i == 5)
        {
            continue;          //跳过后面代码不执行,直接跳到for的判断部分
        }
        printf("%d ", i);
    }
}
//输出结果: 1 2 3 4 6 7 8 9

注意:  不能再for循环体内修改循环变量, 不然 for 循环可能失去控制 !

2.2.3  for 循环的一些变种

int main()
{
    int i = 0;                      
    for (; ; )    // 初始化部分   // 条件判断部分  // 调整部分
    {
        printf("aa");
    }
}


//
for (; i < 10; i++ )    // 初始化部分   // 条件判断部分  // 调整部分
{
    printf("aa");
}

//
int x = 0;
int y = 0;
for (x = 0, y = 0; x < 2 && y < 5; x++, y++) // 初始化部分   // 条件判断部分  // 调整部分
{
    printf("sa");
}

如上 for 可以省略各个部分。但需注意,省略条件判断部分可能导致死循环。

3.1 do while 循环语句

3.3.1 do while 语句的语法

do
{
    循环语句;
}while (表达式)   //条件判断部分

do while 语句的特点: 循环至少执行一次,所使用的场景有限,不常使用。

循环语句的使用频率:  for > while > do while

3.3.2 do while 语句中的 break 和 continue

break :

int main()
{
    int i = 1;                      
    do
    {
        if (i == 5)
        {
            break;          //跳出循环
        }
        printf("%d ", i);
    }while (i <= 10)           //循环判断部分
}
//输出结果: 1 2 3 4 

​

continue:

int main()
{
    int i = 1;                      
    do
    {
        if (i == 5)
        {
            continue;          //跳过后面代码不执行,直接跳到 do while的判断部分
        }
        printf("%d ", i);
    }while (i <= 10)           //循环判断部分
}
//输出结果: 1 2 3 4 6 7 8 9

​

4.1 goto 语句

4.1.1 goto 语句的基本语法

int main()
{
    int flag;
    int i = 0;
flag:
    while(1)
    {
        i++;
        if (i == 5)
        {
            goto flag;    
        }
    }
    return 0;
}

4.1.2 go 语句的适用场景

        goto 语句一般不用,因为有时候会打乱原来程序运行的顺序和逻辑性。没有 go 语句也能实现代码效果,但是 go 语句也有自己适用的场景。 比如,可以一次跳出多个循环。在多循环中若出现错误,可以一次性跳出所有循环,对错误进行处理。例子如下代码:

int main()
{
    int flag;
    
    for (...)
    {
        for (...)
        {
            for (...)
            {
                if (disaster)   //发生错误
                    goto flag;
            }
        }
    }

flag:                           //之间跳出多个for循环,来到此处处理问题
    if(disaster)
        //  处理错误


    return 0;
}​

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值