【C语言初阶】分支语句If与switch的具体用法,有这篇博客就够了

简介: 【C语言初阶】分支语句If与switch的具体用法,有这篇博客就够了

一.什么是语句?

就像英语有语法语句一样,C语言也同样有语法语句


C语句可分为五类:

42d018de75454a3b964d2b64b9d45316.png

咱们今天要讲的就是这五种语句中的控制语句

控制语句用于控制程序的执行流程,以实现程序的各种结构方式(C语言支持三种结构:顺序结构、选择结构、循环结构),它们由特定的语句定义符组成,C语言有九种控制语句。

可分成以下三类:

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

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

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

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

人生中有有各种各样的选择,每个选择都会走向不同的道路,但是一旦选择了,就没有回头路可走了,我希望在看这篇博客的你,能够慎重的进行人生中的每一个选


不扯远了,画个图让大家理解一下选择语句:

d54ae3f0c0bb45d2ad1c7c038cde5039.png


这就是选择!!!

免责声明:博主不是尬黑原神,博主自己就是开服60级老履刑者

78fd8a7147e941e7a55f971fd0e9a85b.png

1.If语句

if语句最最基础的选择语句

下面是具体的语法结构

if(表达式)


语句;


if(表达式)

语句1;

else

语句2;


多分支

if(表达式1)

语句1;

else if(表达式2)

语句2;

else

语句3;


代码演示

//代码1
int main()
{
  int age = 0;
  scanf("%d", &age);
  if (age < 18)
  {
    printf("未成年\n");
  }
}
//代码2
int main()
{
  int age = 0;
  scanf("%d", &age);
  if (age < 18)
  {
    printf("未成年\n");
  }
  else
  {
    printf("成年\n");
  }
}
//代码3
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语言规定:

在C语言中,0为假,非0为真


if后的括号中是判断是否进入if的条件。如果判断表达式中的结果为真,就执行语句中的内容。

其中,当if中的条件不满足时,当有else if就会进入else if进行第二次判断,如果else if的条件也不满足,才会进入最终的else中。

If语句的嵌套使用

其实没什么难以理解的,就是在if语句中再套一层或者几层if语句实现我们更加精准的选择

int main()
{
  int m = 1;
  int n = 2;
  if (m == 1)
  {
    if (n == 2)
    {
      printf("Hello\n");
    }
    else
    {
      printf("你好\n");
    }
  }
  return 0;
}

If语句中一些需要注意的小细节

1.上面代码中的else都是与最近的if匹配的,可不要在嵌套if中搞错了else匹配的对象。

2.注意哦,在if语句中,后面的“{}”是可以省略的,就像这样:

int main()
{
  int a = 0;
  int b = 2;
  if (a == 1)
  {
    if (b == 2)
      printf("hehe\n");
    else
      printf("haha\n");
  }
  return 0;
}

但是这里博主墙裂不推荐这么写哦,这里指出是防止以后你看到某些代码中没加"{}"以为它是一个错误


不推荐原因:


1)注意这里的if语句只能控制下一行代码的执行,如果你错误的输入了几行代码,就会像这样

1cfae4e5a25046e2bfb7ff4e63323a74.png

看到了嘛,我们的b明明不等于2还是打印了gg,当我们的代码一多起来,就很容易因为不注意这里未加“{}”而写出bug


2)作为一名合格的程序猿,好的代码风格是非常重要的,咱们的代码不仅要让自己看懂,还得让别人看懂。当你写出1)中的代码时,其实就不算一个非常好的代码风格,同时也十分容易出bug。


3.一些好的代码风格分享

比如以下代码就有非常好的代码风格:


int num = 1;
if(5 == num)
{
  printf("hehe\n");

4

我相信你也出现过这种错误,明明判断某个变量是否等于某个值,但是一不小心少写了一个“=”,变成了把某个值直接赋给了某个变量

以上代码出现这种情况时就会直接报错提醒你哦

43509e92c6f541c89381a09829044f9a.png

这种即能让我们看懂又能帮助我们找bug的代码风格就是非常好的代码风格!!!

2.switch语句

switch语句也是一种分支语句。

常常用于多分支的情况


比如:

输入1,输出星期一

输入2,输出星期二

输入3,输出星期三

输入4,输出星期四

输入5,输出星期五

输入6,输出星期六

输入7,输出星期日

如果此时咱们还是写成if else的语句形式当然也可以实现,但是由于咱们的选择分支过多使用if语句是不是有点太复杂了?这时候switch就闪亮登场啦!!!

switch语句的基本语法结构

switch(整型表达式)

{

语句项;

}


什么是语句项呢?

是一些case语句

如下格式:

case 整形常量表达式:

语句;


在switch语句中的 break

在switch语句中,我们没办法直接实现分支,搭配break使用才能实现真正的分支。

示例代码如下:

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

有时候我们的需求变了:

1. 输入1-5,输出的是“weekday”;

2. 输入6-7,输出“weekend”


代码如下:

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

a96959b6add14481b61cfdb4820d8129.png


也就是说在switch-break语句中,不碰到break是不会停下的,我们可以通过以上这种用法来实现几个分支结果的合并。

编程好习惯:

在最后一个 case 语句的后面加上一条 break语句。

(之所以这么写是可以避免出现在以前的case 语句后面忘了添加 break语句最终导致switch语句停不下来的情况)


Switch语句中的default

如果表达值与所有的case标签的值都不匹配怎么办?

其实也没什么,结果就是所有的语句都被跳过而已。

程序并不会终止,也不会报错,因为这种情况在C中并不认为是个错误。

但是,如果你并不想忽略不匹配所有标签的表达式的值时该怎么办呢?


你可以在语句列表中增加一条default子句,把下面的标签

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

当 switch 表达式的值并不匹配所有 case 标签的值时,这个 default 子句后面的语句就会执行。

因此,每个switch语句中只能出现一条default子句。

但是它可以出现在语句列表的任何位置,而且语句流会像执行一个case标签一样执行default子句

编程好习惯

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


上面的讲解可能有点抽象,我们还是看代码来理解一下吧

int main()
{
  int day = 0;
  scanf("%d", &day);
  switch (day)
  {
  case 1:
  case 2:
  case 3:
  case 4:
  case 5:
    printf("weekday\n");
    break;
  case 6:
  case 7:
    printf("weekend\n");
    break;
  default:
      printf("选择错误,请重新输入");
      break;
  }
  return 0;
}

注意到以上两个代码的不同了吗?由于一个星期只有7天,当我们在最后加上default后,输入不满足1~7的数就会报错,这就是default的作用。

81650212e6354d5fa80b2e45ba48a863.png

switch的嵌套使用

与If语句一样,switch语句也能嵌套使用达到多分支精准选择的作用

话不多说,用代码解释

int main()
{
  int n = 1;
  int m = 2;
  switch (n)
  {
  case 1:
    m++;
  case 2:
    n++;
  case 3:
    switch (n)//switch嵌套使用
    {
    case 1:
      n++;
      break;//注意,switch嵌套中的break只会跳出一层switch
    case 2:
      m++;
      n++;
      break;
    }
  case 4:
    m++;
    break;
  default:
    break;
  }
  printf("m = %d, n = %d\n", m, n);
  return 0;
}

12b954de480a4b73a8ce05061372e8ff.png


这里输出结果对于很多人来说都很容易理解就不多解释了。如果你没看懂,一步步结合我上面讲解的知识再试着看看,还是看不懂可以在评论区提出你的疑问或者私信我哦,对于初学者刚开始实在理解不了没啥好丢人的,毕竟博主最开始看的时候也没看懂。。。


总结

以上就是今天要讲的所有内容了,这么听下来是不是感觉分支选择语句也没啥难的?

其实在实际应用中只要你注意到我上文提到的那些小细节以及养成好的编程风格,那么分支语句这部分就难不倒你

最后,如果你对文章的内容有任何疑问欢迎在评论区提出或者私信我哦

创作不易,如果感觉文章内容对你有帮助的话,不妨点个三连再走呗。

你们的支持就是我创作的动力,再次感谢大家的支持,下次再见啦!



(可莉请求你们三连支持一下博主!!!点击下方评论点赞收藏帮帮可莉吧!)

20fa3306e76244de9879742c165c792a.gif

目录
相关文章
|
4天前
|
C语言
C语言初阶⑧(结构体)知识点和笔试题
C语言初阶⑧(结构体)知识点和笔试题
10 0
|
4天前
|
存储 编译器 C语言
C语言初阶⑦(指针初阶)知识点+笔试题(上)
C语言初阶⑦(指针初阶)知识点+笔试题
11 0
|
3天前
|
存储 Web App开发 编译器
C语言程序设计——int,double,char的用法
C语言程序设计——int,double,char的用法
|
3天前
|
C语言
C语言程序设计——if与else if的区别及用法
C语言程序设计——if与else if的区别及用法
|
3天前
|
算法 编译器 C语言
从C语言到C++⑩(第四章_模板初阶+STL简介)如何学习STL(下)
从C语言到C++⑩(第四章_模板初阶+STL简介)如何学习STL
9 0
|
3天前
|
编译器 C语言 C++
从C语言到C++⑩(第四章_模板初阶+STL简介)如何学习STL(上)
从C语言到C++⑩(第四章_模板初阶+STL简介)如何学习STL
6 0
|
4天前
|
C语言
C语言——分支,循环语句
C语言——分支,循环语句
10 0
|
4天前
|
程序员 编译器 测试技术
C语言初阶⑨(调试)(如何写出好的代码)(模拟实现strcpy和strlen)
C语言初阶⑨(调试)(如何写出好的代码)(模拟实现strcpy和strlen)
12 1
|
4天前
|
存储 编译器 C语言
C语言初阶⑦(指针初阶)知识点+笔试题(下)
C语言初阶⑦(指针初阶)知识点+笔试题
9 0
|
4天前
|
存储 Linux C语言
C语言初阶⑥(操作符详解)编程作业(算数转换)(下)
C语言初阶⑥(操作符详解)编程作业(算数转换)
7 1