10.if和switch语句

本文介绍了C语言中的流程控制结构,包括顺序执行、选择执行(if语句)、循环执行。详细讲解了if语句的用法,强调了在if和else后使用括号的重要性,并通过示例展示了不加括号可能导致的意外行为。此外,还提到了三目运算符和switch语句的使用,以及switch语句中的break关键字在防止穿透现象中的作用。最后,讨论了default在switch语句中的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.流程控制

流程控制就是指程序应该怎样执行,或者是按照什么样的顺序执行

2.流程控制的分类

1.顺序执行

从上往下执行

2.选择执行

根据特定的条件选择性的执行

3.循环执行

根据条件执行某一行特定的程序

3.if语句

格式:

 if(表达式)
    {
        语句
    }

下面来写一点代码体验一下

    int a = 520;
    int b = 1314;
    if(a == 520 && b == 1314)
    {
        printf("小橙最帅!\n");
    }

    return 0;

运行结果如下

D:\code\C\st04.exe
小橙最帅!

Process finished with exit code 0

补充:只要if后面的括号里面的值不是0,就会执行下面的代码,这里不在写代码展示

if的控制范围

在没有括号的情况下只会执行后面的第一行代码,有括号的时候后面的一般都会执行,来看两行简单的代码

#include <stdio.h>

int main() {
    int a = 520;
    int b = 1314;
    if(a < b)
    {
        printf("小橙最帅!\n");
        printf("小橙最帅了!\n");
    }

    return 0;
}

运行结果如下

D:\code\C\st04.exe
小橙最帅!
小橙最帅了!

Process finished with exit code 0

再来看不带括号的

#include <stdio.h>

int main() {
    int a = 520;
    int b = 1314;
    if(a < b)
        printf("小橙最帅!\n");
        printf("小橙最帅了!\n");
    return 0;
}

运行结果如下:

D:\code\C\st04.exe
小橙最帅!
小橙最帅了!

Process finished with exit code 0

在clion中两个居然是可以同时输出的!!!和书中的情况截然不同,可能是在最新的条例中是后面的都会输出吧,但是不管怎么样在使用if的时候都加上括号,这时候不容易产生歧义,也方便后面的代码查看

查阅资料之后看到的还是只执行后面的一行,后面在遇到这种情况再了解,一句话,都加上括号!

4.if...else的用法

格式:

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

写一点代码熟悉一下:

#include <stdio.h>

int main() {
    int a,b;
    printf("请输入两个数:");
    scanf("%d %d",&a,&b);
    if (a > b)
    {
        printf("小橙非常聪明!\n");
    }
    else
    {
        printf("小橙最帅!\n");
    }
    return 0;
}

运行结果如下

D:\code\C\st04.exe
请输入两个数:45
85
小橙最帅!

Process finished with exit code 0

关于scanf的补充:

之前我们了解到的是,在scanf中双引号内多个输入控制符之间不要加入任何飞输入控制符;

在这里可以加一个符号,这个符号就是空格

空格在scanf中是比较的特殊,虽然是非输入控制符,但是又不是真正的原样输入,因为不加空格在键盘输入的时候还是要加空格或者回车,,而在scanf中添加一个空格,输入的时候输入一百个空格也是正确的

简而言之就是在输入的时候为了好看加一个空格,这个是习惯性的,加不加都可以,对程序的运行没有什么影响

关于if...else的注意事项

1.在if还有else后面的语句中都要加上括号

2.两个不同的功能块之间要加上空行

3.if可以在没有else的情况下单独使用,但是else在没有if的情况下不能够单独使用,else是if的一部分,else绝对不能脱离if

5.三目运算符(三元运算符)

格式:

表达式1?:表达式2:表达式3;

相当于

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

一般情况下用不到这个;

6.if ...else if ...else

格式:

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

这里有一个练习是求分数的等级,但是这个问题时非常的简单在这里就不在过多的练习了;

但是关于求分数的等级的练习题还是应该注意以下几个问题:

1.对于分数有可能是小数的形式,所以应该用float类型的数据;

2.由于分数是float类型所以这时候,在输入的时候scanf中应该用%f

如果是%d只要数据不是非常大的,输出的都是0;

#include <stdio.h>

int main() {
    float a,b,d;
    printf("请输入1个数:");
    scanf("%f", &a);
    printf("%d",a);
    return 0;
}

//运行结果如下:(小数据)
D:\code\C\st04.exe
请输入1个数:99
0
Process finished with exit code 0
//(大数据)
D:\code\C\st04.exe
请输入1个数:99999999999
-536870912
Process finished with exit code 0

3.在printf中无论是float还是double都是可以用%f的,但是在double中用%f会降低精度的;double是8字节,但是%f只是4字节,存储不下时就会丢失精度;

4.int是4字节,%c是1字节

7.if的常见问题

1.空语句

空语句就是只有一个分号的语句,这条语句什么都不执行

#include <stdio.h>

int main() {
    int a,b,d;
    printf("请输入2个数:\n");
    scanf("%d %d", &a ,&b);
    if(a>b);
    {
        printf("小橙最厉害了!");
    }

    return 0;
}

运行结果如下:

D:\code\C\st04.exe
请输入2个数:
45
52
小橙最厉害了!
Process finished with exit code 0

加上if之后if的语句智能控制到分号,后面的不会管if的大小都会输出;

2.if后面最好加上else,分号不要乱加;

3.else后面不能加表达式;

8.swtich语句

switch (表达式)
    {
        case常量表达式1:        语句1
        case常量表达式2:        语句2
          ┇
        case常量表达式n:        语句n
        default:                 语句n+1
    }

注意:

1.Switch后面的括号里面必须是整数类型,可以是int,char,就是负数都行,但是不可以是实数,float,double,全部会是语法错误;

2.Switch之下的case和default必须使用一对大括号括起来;

3.先来看一行代码:

#include <stdio.h>

int main() {
    int a;
    printf("今天星期几(输入数字):\n");
    scanf("%d", &a);
    switch (a) {
        case 1:
            printf("今天好好学习C语言!\n");
        case 2:
            printf("今天好好学习C语言!\n");
        case 3:
            printf("今天好好学习C语言!\n");
        case 4:
            printf("今天好好学习C语言!\n");
        case 5:
            printf("今天好好学习C语言!\n");
        case 6:
            printf("今天好好学习C语言!\n");
        case 7:
            printf("今天好好学习C语言!\n");

    }
}

运行结果如下

D:\code\C\st05.exe
今天星期几(输入数字):
1
今天好好学习C语言!
今天好好学习C语言!
今天好好学习C语言!
今天好好学习C语言!
今天好好学习C语言!
今天好好学习C语言!
今天好好学习C语言!

Process finished with exit code 0

这时候就是会发现当我们只选择第一个语句的时候执行的并不是第一条语句,后面的都会执行,这时候要在后面加个break来跳出循环;

稍微修改一下这个代码:

#include <stdio.h>

int main() {
    int a;
    printf("今天星期几(输入数字):\n");
    scanf("%d", &a);
    switch (a) {
        case 1:
            printf("今天好好学习C语言!\n");
            break;
        case 2:
            printf("今天好好学习C语言!\n");
            break;
        case 3:
            printf("今天好好学习C语言!\n");
            break;
        case 4:
            printf("今天好好学习C语言!\n");
            break;
        case 5:
            printf("今天好好学习C语言!\n");
            break;
        case 6:
            printf("今天好好学习C语言!\n");
            break;
        case 7:
            printf("今天好好学习C语言!\n");
            break;

    }
}

运行结果如下

D:\code\C\st05.exe
今天星期几(输入数字):
1
今天好好学习C语言!

Process finished with exit code 0

这时候就会发现Switch的穿透现象就是不存在了;

4.如果所有的case中的常量表达式的值,都没有都没有与Switch后面的括号内的表达式相等的,就执行default后面的语句,defalut的意思是默认的意思;defalut是最后一个语句后面不用加break;

5.case后面的值必须都不相同;

6.case常亮表达式只是语句标号的作用,不是在这里进行判断,在执行Switch语句的时候,会找到匹配的入口标号,从这里开始执行下去;

7.case和defalut的顺序并不影响程序的运行结果,但是应该将case写在前面,后面写defalut;

8.写Switch语句的时候可以不写defalut语句;defalut后面可以什么都不写,但是后面的冒号和分号不能够省略;

写一行代码看一下default:

#include <stdio.h>

int main() {
    int a;
    printf("今天星期几(输入数字):\n");
    scanf("%d", &a);
    switch (a) {
        case 1:
            printf("今天好好学习C语言!\n");
            break;
        case 2:
            printf("今天好好学习C语言!\n");
            break;
        case 3:
            printf("今天好好学习C语言!\n");
            break;
        case 4:
            printf("今天好好学习C语言!\n");
            break;
        case 5:
            printf("今天好好学习C语言!\n");
            break;
        case 6:
            printf("今天好好学习C语言!\n");
            break;
        case 7:
            printf("今天好好学习C语言!\n");
            break;
        default:
            printf("您输入的数据不存在,请重新输入!\n");

    }
}

运行结果如下:

D:\code\C\st05.exe
今天星期几(输入数字):
45
您输入的数据不存在,请重新输入!

Process finished with exit code 0

后面在学习break和continue的时候再来详细的写一下;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值