分支循环语句

1.语句有哪些?

(1)表达式语句

(2)函数调用语句

(3)控制语句

(4)复合语句

(5)空语句

本节介绍的是控制语句。C语言有九种控制语句,可分成以下三类:

1.条件判断语句(分支语句):if语句、switch语句;

2.循环执行语句: do while语句、while语句、for语句;

3.转向语句:break语句、goto语句、continue语句、return语句。

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

2.1 if语句

语法结构:

  1. if(表达式)

语句1;

  1. if(表达式)

    语句1;

    else

    语句2;

  2. if(表达式1)//多分支

    语句1;

    else if(表达式2)

    语句2;

    ...

    else if(表达式n)

    语句n;

    else

    语句n+1;

    例如:

    #include<stdio.h>
    int main()
    {
        int grade = 0;
        printf("请输入成绩:");
        do//限制输入成绩范围为0—100
        {
            scanf("%d", &grade);
            if (grade < 0 || grade>100)
                printf("成绩输入有误,请重新输入:");
        } while (grade < 0 || grade>100);
        /*grade<60 不及格
        60<=grade<70 及格
        70<=grade<80 一般
        80<=grade<90 良好
        90<=grade<=100 优秀*/
        if (grade < 60)
            printf("不及格");
        else if (grade >= 60 && grade < 70)//新手常见错误:判断条件写成60<=grade<70
        //这样会导致程序先去判断grade是否>=60再判断grade是否小于70
            printf("及格");
        else if (grade >= 70 && grade < 80)
            printf("一般");
        else if (grade >= 80 && grade < 90)
            printf("优秀");
        return 0;
    }

    *若if语句后需执行多条语句,需用{}括起来,比如上述代码中if(grade<60)后要执行多条语句:

    if(grade<60)
    {
        printf("不及格");
        printf("成绩有待提高");
    }

    *不管执行多条语句还是单条语句,最好都用{}括起来。

    2.2 switch语句

    语法结构:

    switch(整形表达式)

    {

    case 整形常量表达式1:

    语句1;

    break;

    case 整形常量表达式2:

    语句2;

    break;

    ......

    case 整形常量表达式n:

    语句n;

    break;

    default:             //其它情况,可以没有

    语句;

    break;

    }

    例如:

    #include <stdio.h>
    int main()
    {
        int day = 0;
        scanf("%d", &day);
        switch (day)
        {
        case 1:
            printf("Monday");
            break;
        case 2:
            printf("Tuesday");
            break;
        case 3:
            printf("Wednesday");
            break;
        case 4:
            printf("Thursday");
            break;
        case 5:
            printf("Friday");
            break;
        case 6:
            printf("Saturday");
            break;
        default:                   //或者可以case 7: 不用default:
            printf("Sunday");                
            break;
        }
        return 0;
    }

    *常见问题:在使用case语句过程中,每种情况末尾没有加break语句,这样会导致该语句后继续执行后面的语句,例如上述代码改为:

    int main()
    {
        int day = 0;
        scanf("%d", &day);
        switch (day)
        {
        case 1:
            printf("Monday\n");
        case 2:
            printf("Tuesday\n");
        case 3:
            printf("Wednesday\n");
        case 4:
            printf("Thursday\n");
        case 5:
            printf("Friday\n");
        case 6:
            printf("Saturday\n");
        default:                   //或者可以case 7: 不用default:
            printf("Sunday");                
            break;
        }
        return 0;
    }

    当我们输入day为1时,会出现以下结果:

     利用此性质,我们以用多个case语句执行同一种情况:

#include<stdio.h>
int main()
{
    int day = 0;
    scanf("%d", &day);
    switch (day)
    {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
            printf("weekday");
            break;
    case 6:
    case 7:
            printf("weekend");
            break;
    }
    return 0;
}

当我们输入day = 1~5时,均会输出 weekday;

当我们输入day = 6~7时,均会输出 weekend。

3.循环语句

3.1 while语句

语法结构: while(表达式)//当表达式为真时执行下面语句,否则跳出循环执行后面的程序

{

语句; //可以多个语句

}

若不加{},只会循环执行while语句下第一条语句。

如:

#include<stdio.h>
int main()
{
    int n = 1;
    while (n <= 10)   //循环输出1~10
    {
        printf("%d ",n);
        n++;
    }
    return 0;
}

输出结果如下:

                        

 在循环过程中可以用break语句结束循环,如:

#include<stdio.h>
int main()
{
    int n = 1;
    while (n <= 10)   //循环输出n的值
    {
        if(5 == n)    //当n = 5时,结束循环
            break;
        printf("%d ", n);
        n++;
    }
    return 0;
}

输出结果如下:

                                                        

 可以用continue语句跳过某次循环,如:

#include<stdio.h>
int main()
{
    int n = 1;
    while (n <= 10)   //循环输出n的值
    {
        if (5 == n)   //当n的值为5时
        { 
            n++;      //n加1
            continue; //跳过本次循环,执行下次循环
        }
        printf("%d ", n);
        n++;
    }
    return 0;
}

输出结果如下:

                             

3.2 for语句

语法结构:

for(表达式1;表达式2;表达式3)

{

循环语句;

}

若不加{},只会循环执行for语句下第一条语句。

*表达式1为初始化部分,用于初始化循环变量;

表达式2为条件判断部分,用于判断循环什么时候终止;

表达式3为调整部分,用于循环条件的改变调整。

如:

#include<stdio.h>
int main()
{
    int i = 0;
    for (i = 1; i <= 10; i++) //循环打印1-10
    {
        printf("%d ", i);
    }
    return 0;
}

输出结果如下:

                      

3.3 do-while语句

语法结构:

do

{

循环语句;

}while(表达式);

如:

#include<stdio.h>
int main()
{
    int i = 1;
    do                     //打印1-10
    {
        printf("%d ", i);
        i++;
    } while (i <= 10);
    return 0;
}

运行结果如下:

                        

4.转向语句

4.1 goto语句 (不能滥用,易出问题)

常在跳出多循环的场景下使用:

//在二维数组中找到指定的数并指出其下标
#include<stdio.h>
int main()
{
    int num[3][3] = { 1,2,3,4,5,6,7,8,9 };
    int find = 7;//需要寻找的数
    int i = 0, j = 0;
    for (i = 0; i < 3; i++)
    {
        for (j = 0; j < 3; j++)
        {
            if (num[i][j] == find)
                goto Find;
        }
    }
Find:printf("找到了,其下标为(%d,%d)", i, j);
    return 0;
}

运行结果如下:

                                      

*但过多使用goto容易把逻辑弄乱且容易出错,因此不提倡使用。(是否使用根据情况具体判断)

break和continue语句在3.1 while语句中有所说明,此处暂不再介绍。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值