c语言分支语句

前言

今天开始我们就开始系统化的学习C语言,我们分为两个阶段初级和进阶,两个阶段相辅相成,内容由浅到深,再次声明我的风格是知识点跟着具体案例搭配讲解,这样可以将抽象的知识具体化便于小伙伴们吸收

1.介绍:BIT-2-分支语句和循环语句

1.1 分支语句

if

switch

1.2 循环语句

while

for

do while

goto语句(次语句我们使用的较少,但是在一些情况下此语句有意想不到方便之处)

2.什么是语句?

2.1 C语句可分为以下五类:

表达式语句
函数调用语句
控制语句
复合语句
空语句
本周后面介绍的是控制语句。 控制语句用于控制程序的执行流程,以实现程序的各种结构方式,它们由特定的语句定义符组成,C语言有九种控制语句。 可分成以下三类:

1.条件判断语句也叫分支语句:if语句、switch语句;

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

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

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

如果你好好学习,校招时拿一个好offer,走上人生巅峰。 如果你不学习,毕业等于失业,回家卖红薯。 这就是选择!

看图说话

这就是选择结构图,那么我们用代码怎么实现神圣的选择呢

3.1 if语句

那if语句的语法结构是怎么样的呢?再初始c语言博客中我已经介绍过了,再来复习一下吧

if语句一共分为三种,每种情况都有不同的应用场景,可根据具体情况来选择

3.1.1 if语句

语法结构:
if(表达式)
    语句;
3.1.1.1 例
//代码1
int main()
{
 int age = 0;
    scanf("%d", &age);
    if(age<18)
   {
        printf("未成年\n");
   }
}

3.1.2 if-else语句

if(表达式)
    语句1;
else
    语句2;
3.1.2.1 例
//代码2
#include <stdio.h>
int main()
{
 int age = 0;
    scanf("%d", &age);
    if(age<18)
   {
        printf("未成年\n");
   }
    else
   {
        printf("成年\n");
   }
}

3.1.3 if-else if-else

//多分支    
if(表达式1)
    语句1;
else if(表达式2)
    语句2;
else
    语句3;
3.1.3.1 例
//if-else if-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语言中如何表示真假?    0表示假,非0表示真。

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

这里的一对 { } 就是一个代码块。当有多于一条语句时就要加上{ },我建议就算我们只有一条语句,也加上,这样代码逻辑不容易出错,代码阅读性更强

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

3.1.4 悬空else

当你写了这个代码:

很明显这样的代码阅读起来很麻烦,没有明确的逻辑指向性,还有else适合那个if配对使用的很模糊

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

改正

当我们加上代码块之后,逻辑明显清晰许多

小提示:else的匹配:else是和它离的最近的未配对的if匹配的。

//适当的使用{}可以使代码的逻辑更加清楚。
//代码风格很重要
#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;
}

3.1.5 if练习

练习1 

判断一个数是否为奇数
代码解读,判断是不是奇数主要在于n%2==0判断条件的书写,当一个数%求余数为零时,肯定不是奇数

//1. 判断一个数是否为奇数
int main()
{
  int n = 0;
  printf("请输入一个数:");
  scanf("%d",&n);
  if (n%2==0)
  {
    printf("不是奇数\n");
  }
  else
  {
    printf("是奇数\n");
  }
}

练习 2

输出1-100之间的奇数
这里利用了一个while循环,我们在初识c语言中有过介绍,忘记了,回去看看

循环100此判断并将符合条件的i % 2 == 1,就是奇数输出

//2. 输出1-100之间的奇数
int main()
{
  int i = 1;
  while (i <= 100)
  {
    if (i % 2 == 1)
      printf("%d ", i);
    i++;
  }
  return 0;
}

 3.2 switch语句

switch语句也是一种分支语句。 常常用于多分支的情况。

比如:

输入1,输出星期一

输入2,输出星期二

输入3,输出星期三

输入4,输出星期四

输入5,输出星期五

输入6,输出星期六

输入7,输出星期日

那我没写成 if...else if ...else if 的形式太复杂,那我们就得有不一样的语法形式。这就是switch 语句。

switch-case语句常用于做菜单
 

switch(整型表达式)
{
    语句项;
}

而语句项是什么呢?

//是一些case语句:
//如下:
case 整形常量表达式:
    语句;

3.2.1 在switch语句中的 break

在switch语句中,我们没办法直接实现分支,搭配break使用才能实现真正的分支。break的作用是中断循环跳出当前循环

switch语句的用法就是当我们再switch( )中输入条件时,它会自动给我们匹配想要输出的结果语句项

比如:

#include <stdio.h>
int main()
{
    int day = 0;
    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;
}

有时候我们的需求变了:

输入1-5,输出的是“工作日”;

输入6-7,输出“休息日”

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:
    printf("输入错误\n");
    break;
  }
  return 0;
}

提示

编程好习惯

break语句 的实际效果是把语句列表划分为不同的分支部分。

在最后一个 case 语句的后面加上一条 break语句。 (之所以这么写是可以避

免出现在以前的最后一个 case 语句后面忘了添加 break语句)。

3.2.2 default子句

如果表达的值与所有的case标签的值都不匹配怎么办? 其实也没什么,结构就是所有的语句都被跳过而已。 程序并不会终止,也不会报错,因为这种情况在C中并不认为是个错误。 但是,如果你并不想忽略不匹配所有标签的表达式的值时该怎么办呢? 你可以在语句列表中增加一条default子句,把下面的标签

default:

写在任何一个 case 标签可以出现的位置。

当 switch 表达式的值并不匹配所有 case 标签的值时,这个 default 子句后面的语句就会执行。 所以,每个switch语句中只能出现一条default子句。 但是它可以出现在语句列表的任何位置,而且语句流会像执行一个case标签一样执行default子句。

编程好习惯

在每个 switch 语句中都放一条default子句是个好习惯,甚至可以在后边再加

一个 break 。

例 switch-case语句判断输出

代码解释,此时我们没有在每一条case语句下面加break也没有输出语句,此时switch的执行规则就是依次输出匹配到输入的语句条件后的每条语句直到碰到break或者结束
 

//switch-case语句判断输出
int main()
{
  int n = 1;
  int m = 2;
  switch (n)
  {
  case 1:
    m++;//3
  case 2:
    n++;//2
  case 3:
    switch (n)
    {
      //switch允许嵌套使用
    case 1:
      n++;
    case 2:
      m++;//4
      n++;//3
      break;
    }
  case 4:
    m++;//5
    break;
  default:
    break;
  }
  printf("m = %d, n = %d\n", m, n);//5  3
  return 0;
}

留言

如果有不正确的希望小伙伴们指正,欢迎评论区交流,如果喜欢就点赞收藏支持一下吧

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值