C-12 分支语句

C语言是结构化的程序设计语言,这无非也就包含了三种结构,分别是顺序结构、选择结构、循环结构。这三种结构从字面上来看都不难理解,

所谓顺序结构就是有先后之分,要先干什么,后干什么,比如我要写代码就要先打开电脑。

选择结构就是有不同的选择,比如我今天可以选择努力学习写代码,也可以躺平摆烂睡大觉,这就是选择。

最后的循环结构可以用一些实际的例子来理解,这就好像学习一样,需要日复一日,不断重复。

在C语言中,代码是有顺序的,不需要着重讲解。而分支语句和循环语句是接下来要着重讲解的,他们分别对应着选择结构和循环结构。

在C语言中由一个分号隔开的就是一条语句。比如:

printf("Hello,world\n");

1+2;

; //空语句

分支语句包括 if 语句和 switch 语句。 

=========================================================================

if 语句

语法结构

在C语言中 0 表示假,非零表示真

if (表达式)

    语句;

这个第一种写法中,表达式中的内容如果为真,则执行下面的语句。如果为假,则不执行。

if (表达式)

    语句1;

else

    语句2;

这种写法中相比第一种多了 else ,相当于是多了一条路可以走。如果 if 后的表达式为真,则执行语句1,如果为假,则执行语句2。

当然也可以实现多分支:

if (表达式1)

     语句1;

else if (表达式2)

    语句2;

else

    语句3;

当表达式1为真,则执行语句1。如果表达式1为假,则继续向下看表达式2,如果表达式2为真,则执行语句2,否则就只能执行语句3。

---------------------------------------------------------------------------------------------------------------------------------

写法注意

#include<stdio.h>

int main()
{
    int age = 20;

    if (age >= 18)
        printf("成年\n");
    else
        printf("未成年\n");
        printf("不能谈恋爱\n");   

//成年
//不能谈恋爱

    return 0;
}

当这种写法运行时得到的结果是:

成年

不能谈恋爱

这和最开始设想的是不相符的。原因在于 if else 都指默认执行后面的一条语句,而这段代码中第二个打印被认为是独立的。实际是这样的

#include<stdio.h>

int main()
{
    int age = 20;

    if (age >= 18)
        printf("成年\n");
    else
        printf("未成年\n");

    printf("不能谈恋爱\n");   

    return 0;
}

如果想要打印两条,那么就需要加入大括号括起来,这样括起来的部分就会被整体执行了。

#include<stdio.h>

int main()
{
    int age = 20;

    if (age >= 18)
    {
        printf("成年\n");
    }
    else
    {
        printf("未成年\n");
        printf("不能谈恋爱\n");   
    }
 
//成年

    return 0;
}

这样写出来的代码执行起来输出的就是最开始想要的那样了。

这是对于语句需要注意的地方,另外还有表达式中需要注意的。

#include<stdio.h>

int main()
{
    int age = 60;

    if (age < 29)
        printf("青年\n");
    else if (29 <= age < 30)
        printf("中青年\n");

//中青年

    return 0;
}

 这时60岁得出的结果却是中青年,显然是不对的。原因在于 else if 表达式判断逻辑中,是先判断前部分 60 >= 29 ,得出结果为真,真就是1,然后判断后半段 1 < 30 得出结果为真,执行下面语句,最终输出为中青年。所以这种写法是不对的,要想表达原本的效果,应该使用操作符 && 来完成操作。

#include<stdio.h>

int main()
{
    int age = 60;

    if (age < 29)
        printf("青年\n");
    else if (age >= 29 && age < 39)
        printf("中青年\n");
    else if (age >= 39 && age < 49)
        printf("中年\n");
    else if (age >= 49 )
        printf("中老年");

//中老年

    return 0;
}

这里用到了操作符 && 后,表达的含义就是大于29且小于39...这样就可以如预想的那样执行了。同时也可以借助这段代码了解到,可以出现多个 else if 从而实现多分支的目的。

---------------------------------------------------------------------------------------------------------------------------------

if 与 else 匹配问题

#include<stdio.h>

int main()
{
    int a = 0;
    int b = 2;

    if (a == 1)
        if (b == 2)
            printf("hello\n");
    else
        printf("world\n");

    return 0;
}

这段代码最终输出的结果是什么呢?答案是什么都没有。

else 只与距离最近的 if 匹配,也就是说这段代码的逻辑应该是这样的

#include<stdio.h>

int main()
{
    int a = 0;
    int b = 2;

    if (a == 1)
        if (b == 2)
            printf("hello\n");
        else
            printf("world\n");

    return 0;
}

这也从侧面反映了,代码的书写是需要规范的。甚至可以更清晰一些,给上大括号。 

#include<stdio.h>

int main()
{
    int a = 0;
    int b = 2;

    if (a == 1)
    {
        if (b == 2)
        {
            printf("hello\n");
        }
        else
        {
            printf("world\n");
        }
    }

    return 0;
}

========================================================================= 

switch 语句

当想要实现多分支时,一直重复使用 else if 太过于繁琐了,这时就可以使用 switch 语句。

---------------------------------------------------------------------------------------------------------------------------------

语法结构

switch (整形表达式)

{

    语句项;

}

而语句项中都是一些 case 语句

case 整形常量表达式:

    语句;

---------------------------------------------------------------------------------------------------------------------------------

break

在 switch 语句中,case 就代表了入口,而 break 就代表了出口。

#include<stdio.h>

int main()
{
    int day = 0;
    
    scanf("%d", &day);

    switch (day)
    {
    case 1:
        printf("星期一\n");
    case 2:
        printf("星期二\n");
    case 3:
        printf("星期三\n");
    case 4:
        printf("星期四\n");
    case 5:
        printf("星期五\n");
    case 6:
        printf("星期六\n");
    case 7:
        printf("星期日\n");
    }
    return 0;
}

这时当输入1,得到的输出结果会是

星期一

星期二

星期三

星期四

星期五

星期六

星期日

当输入2,得到

星期二

星期三

星期四

星期五

星期六

星期日

这样达不到选择分支的目的。所以要在每个 case 语句项最后加上 break 跳出去,是相当于出口的作用,这样就可以达成目标了。

#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;
}

这样就不会将后面 case 语句项一起顺序执行出来了。

case 语句项后面需不需要加 break 不是必须要求的,是根据需求决定的。例如下段代码:

#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;
}

如果在其他 case 语句项中加入了 break 反而达不到想要的效果。

-------------------------------------------------------------------------------------------------------------------------------- 

default

依旧以上段代码为例,只有1-7的入口,但如果输入其他数,程序就不会反应,default 就可以解决。

default:
    printf("输入错误");
    break;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
探索全栈前端技术的魅力:HTML+CSS+JS+JQ+Bootstrap网站源码深度解析 在这个数字化时代,构建一个既美观又功能强大的网站成为了许多开发者和企业追逐的目标。本份资源精心汇集了一套完整网站源码,融合了HTML的骨架搭建、CSS的视觉美化、JavaScript的交互逻辑、jQuery的高效操作以及Bootstrap的响应式设计,全方位揭秘了现代网页开发的精髓。 HTML,作为网页的基础,它构建了信息的框架;CSS则赋予网页生动的外观,让设计创意跃然屏上;JavaScript的加入,使网站拥有了灵动的交互体验;jQuery,作为JavaScript的强力辅助,简化了DOM操作与事件处理,让编码更为高效;而Bootstrap的融入,则确保了网站在不同设备上的完美呈现,响应式设计让访问无界限。 通过这份源码,你将: 学习如何高效组织HTML结构,提升页面加载速度与SEO友好度; 掌握CSS高级技巧,如Flexbox与Grid布局,打造适应各种屏幕的视觉盛宴; 理解JavaScript核心概念,动手实现动画、表单验证等动态效果; 利用jQuery插件快速增强用户体验,实现滑动效果、Ajax请求等; 深入Bootstrap框架,掌握移动优先的开发策略,响应式设计信手拈来。 无论是前端开发新手渴望系统学习,还是资深开发者寻求灵感与实用技巧,这份资源都是不可多得的宝藏。立即深入了解,开启你的全栈前端探索之旅,让每一个网页都成为技术与艺术的完美融合!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值