【详解C语言】深度解剖分支语句和循环语句

💖本文目标

分支语句和循环语句

分支语句

  • if
  • switch

循环语句

  • while
  • for
  • do while

goto语句


💖1. 什么是语句?

C语言中由一个分号; 隔开的就是一条语句。

比如:

printf("hehe"); 
1+2; 

什么是表达式?

C语言中,用各种操作符把变量连起来,形成有意义的式子,就叫做表达式。

C语句可分为以下五类:

  1. 表达式语句

  2. 函数调用语句

  3. 控制语句

  4. 复合语句

  5. 空语句

控制语句用于控制程序的执行流程,以实现程序的各种结构方式,它们由特定的语句定义符组成,C语言有九种控制语句。

可分成以下三类:

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

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

如果选择在学校好好学习,校招时就能拿到一个好offer,走上人生巅峰。 如果选择天天遨游在召唤师峡谷,毕业等于失业,回家卖红薯。这就是选择!

在这里插入图片描述

💌2.1 if语句

那么if语句的语法结构是怎么样的呢?

2.1.1 基本语法

//1 
if(表达式) 
    语句; 

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

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

//4. 嵌套 
if(表达式1)
{
    
    语句1; 
    if(表示式x)
    {
    
        语句x; 
    }
    else
    {
   
        语句y; 
    } 
}
else if(表达式2)
{
    
    语句2; 
}
else
{
   
    语句3; 
}

演示代码:

如果表达式的结果为真,则语句执行。

#include <stdio.h>

int main()
{
   
    int age = 0; 
    scanf("%d", &age); 
    if(age<18)
    {
   
        printf("少年\n");
    }
    else if(age>=18 && age<30)
    {
   
        printf("青年\n");
    }
    else if(age>=30 && age<50)
    {
   
        printf("中年\n");
    }
    else if(age>=50 && age<80)
    {
   
        printf("老年\n");
    }
    else
    {
   
        printf("寿星\n");
    }
}

那么,在C语言中如何表示真假?

结论:

  1. C语言中0表示假,非0表示真。

  2. if语句执行,先执行完成表达式的值,得到逻辑结果,再进行判定。

    • 先执行()中的表达式or函数,得到真假结果(true,false,逻辑结果)
    • 对条件结果 判定功能
    • 对语句进行 分支功能

如果条件成立,要执行多条语句,应该怎么使用代码块?

#include <stdio.h>
int main()
{
   
    if(表达式)
    {
   
        语句列表1}
    else
    {
   
        语句列表2}
    return 0;
}

这里的一对 { } 就是一个代码块。

注意:if 表达式后面";"表示一条语句,若是跟多条语句,必须用花括号 {} 括起来。

2.1.2 else的匹配问题

当你第一次看到下面这个代码,你或许会对他它输出有所争议:

#include <stdio.h>
int main()
{
   
    int a = 0;  
    int b = 2;  
    if(a == 1)
        if(b == 2)
            printf("hehe\n");
    else
        printf("haha\n");  
    return 0;
}
  • 或许你会觉得这里会打印haha,因为第一个if明显判断不成立,所以程序直接跳转到else;
  • 又或者,你会觉得这里会打印hehe,因为你觉得程序会继续往下走,很显然第二个if语句判断成立,所以打印hehe

但事实上,程序的最终结果是:什么都不打印!

在这里插入图片描述

这是因为else的匹配else是和它离的最近的if匹配的。

上述代码的实际效果其实是这样的:

#include <stdio.h>
int main()
{
   
    int a = 0;  
    int b = 2;  
    if(a == 1)//不成立,直接跳到return
    {
   
        if(b == 2)
        {
    
            printf("hehe\n");
        }
        else
        {
     
            printf("haha\n");  
        }
    }
    return 0;
}

改正代码:

#include <stdio.h>
int main()
{
   
    int a = 0;  
    int b = 2;  
    if(a == 1)
    {
   
        if(b == 2)
        {
   
            printf("hehe\n");
        }
    }
    else
    {
   
        printf("haha\n");
    }
    return 0;
}

结论:

  • 适当的使用{}可以使代码的逻辑更加清楚。
  • 代码风格很重要

2.1.2 if书写形式的对比

//代码1
if (condition) 
{
     
    return x;
}
return y;

// 代 码 2  
if(condition)
{
   
    return x;
}
else
{
   
    return y;
}


代码2更好,逻辑更加清晰,不容易出错。

//代码3
int num = 1;  
if(num == 5)
{
   
    printf("hehe\n");
}

//代码4
int num = 1;  
if(5 == num)
{
   
    printf("hehe\n");
}

更推荐使用代码4,将常量放在==左侧,这样写是因为,如果把==忘写成了=,编译器会有报错提示;如果将常量写在==右边,出现上述失误时,

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Morning_Yang丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值