C语言学习NO.3-分支_if和switch

分支语句-if语句

一、if语句的语法结构

if(表达式)//注意if语句后不加分号
    语句

if语句中表达式(为真),则语句执行,表达式不成立(为假),则语句不执行。

#include <stdio.h>

int main()
{
    int a = 0;
    //输入
    scanf("%d",&a);
    //判断
    if(a % 2 == 1)
    {
        printf("%d是奇数",a);
    }
    return 0;
}

二、else语句

if语句分为单分支语句和多分支语句。单分支语句就是执行单个语句,if语句和else语句也可以多个同时使用(多分支语句),但是无论有多少个if语句或else语句,程序只会执行其中的一个语句。


现在输出的值,当它不是奇数时,也能告知我们了。可以注意到程序中{}的存在,为了不引起歧义,建议在对应的if,else后都加上其所有的{},以免语句过多时,自己分不清该执行的语句。

#include <stdio.h>

int main()
{
    int a = 0;
    //输入
    scanf("%d",&a);
    //判断
    if(a % 2 == 1)
    {
        printf("%d是奇数",a);
    }
    else
    {
        printf("%d不是奇数",a);
    }
    return 0;
}

三、嵌套if

在if-else语句中,else可以与另一个if语句连用,构成多重判断。

if()//现在if-else语句时不时很多?如果不用花括号括起来很难分辨吧
{
    if()
    else()//如果不用{},并将else顶格显示出来,你觉得他是和那个if搭配?
}//正确答案是即使else的格式与他和哪个if搭配无关
else
{//他会优先与距离自己最近的if组成if-else语句(这就是常说的悬空else问题)
    if()
    else()
}
if()

else  if()

else()

switch语句

一、switch语句

除了if语句,C语言还提供了switch语句来实现分支结构。
switch语句是一种特殊形式的if…else结构,用于判断条件有多个结果的情况,它把多重的else if改成更易用、可读性更好的形式。

switch (expression){
    case value1:statement
    case value2:statement
    default:statement
 }

根据表达式expression不同的值,执行相应的case分支。如果找不到对应的值就执行default分支。
【注】

  • switch后的expression必须是整型表达式;
  • case后的值,必须是整型常量表达式

二、switch语句中的break

break的作用是跳出switch循环,如果某个case语句的后边没有break语句,代码会继续玩下执行,有可能执行其他case语句中的代码,直到遇到break语句或者switch语句结束。

#include <stdio.h>

int main()
{
    int n = 0;
    scanf("%d",&n);
    if(n%3 == 0)
        printf("余数为0\n")else if(n%3 == 1)
        printf("余数为1\n")else
        printf("余数为2\n")return 0;
}

使用switch语句改写:

#include <stdio.h>

int main()
{
    int n = 0;
    scanf("%d",&n);
    switch(n%3)
    {
        case 0://case和后面的数字要有空格
            printf("余数为0\n");
            break;
        case 1:
            printf("余数为0\n");
            break;
        case 2:
            printf("余数为0\n");
            break;
    }//每个case语句中的代码执行完成,需加上break,才能跳出switch语句
    return 0;
}

如果去掉break,switch的每个语句都会往下滑执行遇到的语句,直到遇到break语句或者switch语句结束。break的存在并不是每个case语句都得有,要根据实际情况来看。
:::info
比如,打印出1到7对应的星期几。
:::

#include <stdio.h>

int main()
{
    int day = 0;
    scanf("%d",&day);
    switch(day)
    {
        case 1:
            printf("星期一\n");
            break;
        case 2:
            printf("星期二\n");
            break;
        case 3:
            printf("星期三\n");
            break;
        case 4:
            printf("星期四\n");
            break;
        case 5:
            printf("星期五\n");
            break;
        case 6:
            printf("星期六\n");
            break;
        case 7:
            printf("星期天\n");
            break;
    }
    return 0}

如果需求发生变化,变为:
:::info
1.输入1-5,输出的是“工作日”
2.输入6-7,输出“休息日”
:::
参考代码如下:

#include <stdio.h>

int main()
{
    int day = 0;
    scanf("%d",&day);
    switch(day)
    {
        case 1:
        case 2:
        case 3:
        case 4:
        case 5:
            printf("工作日\n");
            break;
        case 6:
        case 7:
            printf("休息日\n");
            break;
    }
    return 0}

三、sxitch语句中的default

在使用switch语句的时候,我们经常可能遇到一种情况,比如switch后的表达式中的值无法匹配代码中的case语句的时候,这时候要不就不做处理,要不就得在switch语句中加入default子句。

switch (expression) {
	case value1: statement
	case value2: statement
	default: statement
}

switch 后边的 expression 的结果不是 value1 ,也不是 value2 的时候,就会执行default 子句。
:::info
如果day的输入不是1-7的值,如果我们要提示:输入错误。
:::

#include <stdio.h>

int main()
{
    int day = 0;
    scanf("%d",&day);
    switch(day)
    {
        case 1:
        case 2:
        case 3:
        case 4:
        case 5:
            printf("工作日\n");
            break;
        case 6:
        case 7:
            printf("休息日\n");
            break;
        default:
            ptintf("输入错误\n")
                break;
    }
    return 0}

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

在switch语句中case子句和default子句的顺序是没有要求的,只要最后达到需求即可。
不过我们通常把default子句放在最后处理。

  • 13
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值