【C语言】 分支语句(选择结构)-- if语句 -- switch语句

简介: 【C语言】 分支语句(选择结构)-- if语句 -- switch语句

前言:

在我们生活中,无论做什么事,都是存在结构化的,分为顺序结构,选择结构,循环结构,要不是其中一种,要不就是多种有机组合。
顺序结构:从头做到尾,环环相扣。

选择结构:从头开始,遇到选择后就分支。

循环结构:没头没尾,从开始做就一直做下去。

而C语言就可以将这三种结构描述出来,所以我们称C语言是结构化的程序设计语言。

什么是语句?

C语言语句可以分为5种:

1.表达式语句。举例:2+3;


2.函数调用语句。举例:调用add函数,add();3.控制语句。本节讲解。


4.复合语句。


5.空语句。就是单单一个;


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


可以分为三类:


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


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


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

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

1.1 if语句

语法结构:
//单分支

if(表达式)//表达式为真(C语言中,0为假,非0为真),执行下面的语句,为假不执行

       语句;//这里的语句如果是一条可以不用{}括起来,多条的时候用{}括起来,一个{}是一个代码块,里面就是语句列表

//双分支

if(表达式) //表达式为真,执行语句1,表达式为假,执行语句2

       语句1;

else

       语句2;

//多分支

if(表达式1) //表达式1为真,执行语句1,为假,执行语句2

       语句1;

else if(表达式2)//表达式1为假,就会进入此分支,判断表达式2是否为真,为真执行语句2,为假进入else,执行语句3

       语句2;

else if(表达式*)//不断判断真假,对应是否执行,是否跳向下一组分支

       语句*;

else

       语句3;

代码演示:

#include <stdio.h>
//分支语句
int main()
{
  int age = 0;
  scanf("%d", &age);
  //输入
  //单分支
  /*if (age < 18)
    printf("未成年\n");*/
  //双分支(只会执行其中一条)
  /*if (age < 18)
  {
    printf("未成年\n");
    printf("不能吸烟\n");
  }
  else
  {
    printf("成年\n");
  }*/
  //多分支(只会执行其中一条)
  if (age < 18)
  {
    printf("未成年\n");
  }
  //else if (18 <= age < 30)//这()里面的表达式不是正确的,这里执行的是18 <= age这条,输入的值大于等于18就会执行
  //{
  //  printf("成年\n");
  //}
  //改正
  else if (18 <= age && age < 30)
  {
    printf("青年\n");
  }
  else if (30 <= age && age < 60)
  {
    printf("中年\n");
  }
  else if (60 <= age && age < 90)//如果这里的数据是严丝合缝的,那么&&前面的语句是可以去掉的,如果不是就不可以去掉
  {
    printf("老年\n");
  }
  else
  {
    printf("老寿星\n");
  }
  return 0;
}

1.1.1 悬空else

在代码中排版很重要,要规范写代码。

{ }的使用可以使代码的可读性提高,建议使用。

代码演示:

#include <stdio.h>
int main()
{
    //这个代码什么都不会输出,条件判断的时候是假,不会进入
  //int a = 0;
  //int b = 2;
  //if (a == 1)
  //  if (b == 2)
  //    printf("hehe\n");
  //else//注:在没有{}的情况下,else跟离自己最近的if匹配(这里的else跟打印hehe的if匹配)。所以代码的排版很重要
  //  printf("haha\n");
  //这样的排版才是合理的
  /*int a = 0;
  int b = 2;
  if (a == 1)
    if (b == 2)
      printf("hehe\n");
    else
      printf("haha\n");*/
  //或者
  int a = 0;
  int b = 2;
  if (a == 1)
  {
    if (b == 2)
      printf("hehe\n");
  }
  else//这个else与if (a == 1)进行匹配,因为上一个if是代码块中的
  {
    printf("haha\n");
  }
  return 0;
}

1.1.2 if书写形式的对比

举例://代码1


这个代码实现进行条件判断,如果条件为真,就返回x,如果条件为假,继续往下执行,返回y。

if (condition)
{
        return x;
}
retrun y;

//代码2


这个代码和代码1是一样的,但是这个使用了{ },可读性高。

if (condition)
{
        return x;
}
else
{
        retrun y;
}

//代码3

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


//代码4

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


代码3和代码4进行对比。代码3,f(num == 5)万一少一个等号就变成了赋值语句,编译器不报错,但是改变了代码的本意。对比代码4,if(5== num)万一少一个等号就会报错。这样可以避免失误。这个技巧用于常量与变量对比,表达式与常量不用这样写,少写一个等号就会提示出来。


代码2和代码4更好,逻辑更加清晰,可读性高。

1.1.3 练习

(1)判断一个数是否为奇数

#include <stdio.h>
int main()
{
  int n = 0;
  scanf("%d", &n);
  //判断
  if (n % 2 == 1)//这里的前后换不换是一样的,因为这里的是表达式,如果丢一个=代码是编不过去的
    printf("奇数\n");
  return 0;
}

(2) 输出1~100之间的奇数

#include <stdio.h>
int main()
{
  //法一:
  /*int i = 1;
  while (i < 100)
  {
    if (i % 2 == 1)
      printf("%d ", i);
    i++;
  }*/
  //法二(这个代码是有规律的,所以这样可以,这个代码的效率比法一高)
  int i = 1;
  while (i < 100)
  {
    if (i % 2 == 1)
      printf("%d ", i);
    i+=2;
  }
  return 0;
}

1.2 switch语句

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

语法:
switch(整形表达式)

{

case 整型常量表达式:

       语句;

       break;

default:

       语句;

       break;

}

1.2.1 switch语句重点内容注意点及代码举例


case:case(),括号里面必须是整型常量表达式,语句后面可以写多个语句,用{}括起来就可以合法使用。case语句是没有顺序的要求,只要能正常处理问题就行,按照逻辑来讲先处理合法在处理不合法。


break:如果case语句没有加break,代码会一直往后走,直到跑完整个代码或者遇见break结束,加上break才会在打印完跳出循环。


default:如果代码在执行的时候没有跟任何一个case语句匹配,就会走default语句。default语句是处理非正常语句,可以放在任何可以合法放case语句的地方。

例:

输入1~7其中一个数,输出对应的星期几

方法1:

#include <stdio.h>
int main()
{
  int day = 0;
  scanf("%d", &day);
  if (1 == day)
    printf("星期一\n");
  else if (2 == day)
    printf("星期二\n");
  else if (3 == day)
    printf("星期三\n");
  else if (4 == day)
    printf("星期四\n");
  else if (5 == day)
    printf("星期五\n");
  else if (6 == day)
    printf("星期六\n");
  else if(7 == day)
    printf("星期天\n");
  return 0;
}

方法2:

#include <stdio.h>
int main()
{
  int day = 0;
  scanf("%d", &day);
  switch (day)//注:()里面必须是整形表达式
  {
  case 1://注:case后面必须是整型常量表达式
    printf("星期一\n");//case语句后面可以写多个语句,用{}括起来就可以合法使用
    break;//如果没有break,代码还会往后走,直到遇见break结束或者跑完整个代码,加上break才会在打印完跳出循环
  case 2://case语句是没有顺序的要求,只要能正常处理问题就行,按照逻辑来讲先处理合法在处理不合法
    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;//如果没有default语句,理论上这个break是可以省略的,但是如果将来另外的人接手这个代码,
        //给后面再加一个case语句遗漏了这个break,就会出现bug(职业素养问题)
  default://如果输入的数字都无法跟前面的case语句匹配,就会走这个语句,处理非正常语句
    printf("输入错误\n");
    break;
  }
  return 0;
}

举例:

如果输入1~5输出工作日,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;
  default:
    printf("输入错误\n");
    break;
  }
  return 0;
}

1.2.2 练习(读代码给出结果)

#include <stdio.h>
int main()
{
  int n = 1;
  int m = 2;
  switch (n)
  {
  case 1:m++;
  case 2:n++;
  case 3:
    switch (n)
    {
    case 1:n++;
    case 2:
    {
      m++;
      n++;
      break;
    }
    }
  case 4:
    m++;
  default:
    break;
  }
  printf("m = %d, n = %d", m, n);
  return 0;
}

答案:m = 5,n = 3

相关文章
|
28天前
|
存储 编译器 程序员
C语言程序的基本结构
C语言程序的基本结构包括:1)预处理指令,如 `#include` 和 `#define`;2)主函数 `main()`,程序从这里开始执行;3)函数声明与定义,执行特定任务的代码块;4)变量声明与初始化,用于存储数据;5)语句和表达式,构成程序基本执行单位;6)注释,解释代码功能。示例代码展示了这些组成部分的应用。
41 10
|
26天前
|
C语言
C语言程序设计核心详解 第四章&&第五章 选择结构程序设计&&循环结构程序设计
本章节介绍了C语言中的选择结构,包括关系表达式、逻辑表达式及其运算符的优先级,并通过示例详细解释了 `if` 语句的不同形式和 `switch` 语句的使用方法。此外,还概述了循环结构,包括 `while`、`do-while` 和 `for` 循环,并解释了 `break` 和 `continue` 控制语句的功能。最后,提供了两道例题以加深理解。
|
26天前
|
存储 算法 C语言
数据结构基础详解(C语言): 二叉树的遍历_线索二叉树_树的存储结构_树与森林详解
本文从二叉树遍历入手,详细介绍了先序、中序和后序遍历方法,并探讨了如何构建二叉树及线索二叉树的概念。接着,文章讲解了树和森林的存储结构,特别是如何将树与森林转换为二叉树形式,以便利用二叉树的遍历方法。最后,讨论了树和森林的遍历算法,包括先根、后根和层次遍历。通过这些内容,读者可以全面了解二叉树及其相关概念。
|
26天前
|
C语言
C语言程序设计核心详解 第三章:顺序结构,printf(),scanf()详解
本章介绍顺序结构的基本框架及C语言的标准输入输出。程序从`main()`开始依次执行,框架包括输入、计算和输出三部分。重点讲解了`printf()`与`scanf()`函数:`printf()`用于格式化输出,支持多种占位符;`scanf()`用于格式化输入,需注意普通字符与占位符的区别。此外还介绍了`putchar()`和`getchar()`函数,分别用于输出和接收单个字符。
|
26天前
|
存储 机器学习/深度学习 C语言
数据结构基础详解(C语言): 树与二叉树的基本类型与存储结构详解
本文介绍了树和二叉树的基本概念及性质。树是由节点组成的层次结构,其中节点的度为其分支数量,树的度为树中最大节点度数。二叉树是一种特殊的树,其节点最多有两个子节点,具有多种性质,如叶子节点数与度为2的节点数之间的关系。此外,还介绍了二叉树的不同形态,包括满二叉树、完全二叉树、二叉排序树和平衡二叉树,并探讨了二叉树的顺序存储和链式存储结构。
|
2月前
|
C语言
C语言------选择结构
这篇文章是C语言选择结构的入门实训,包括多个练习题及其源代码,旨在帮助读者熟练掌握条件语句和选择结构程序设计方法,并熟悉switch语句和程序调试过程。
C语言------选择结构
|
2月前
|
C语言
【C语言篇】分支语句详解(超详细)
在 switch 语句中 case 语句和 default 语句是没有顺序要求的,只要顺序是满⾜实际需求的就可以。 不过我们通常是把 default ⼦句放在最后处理的。
|
C语言
《C语言及程序设计》实践项目——利用switch语句解决问题
返回:贺老师课程教学链接  【项目1:投票表决器】设计一个投票表决器,其功能是: 输入Y、y,打印agree 输入N、n,打印disagree 输入其他,打印lose 请在下面代码的基础上,将程序补充完整#include &lt;stdio.h&gt; int main( ) { char c; scanf("%c",&amp;c); ____(1)____
1827 0
|
23天前
|
存储 Serverless C语言
【C语言基础考研向】11 gets函数与puts函数及str系列字符串操作函数
本文介绍了C语言中的`gets`和`puts`函数,`gets`用于从标准输入读取字符串直至换行符,并自动添加字符串结束标志`\0`。`puts`则用于向标准输出打印字符串并自动换行。此外,文章还详细讲解了`str`系列字符串操作函数,包括统计字符串长度的`strlen`、复制字符串的`strcpy`、比较字符串的`strcmp`以及拼接字符串的`strcat`。通过示例代码展示了这些函数的具体应用及注意事项。
|
26天前
|
存储 C语言
C语言程序设计核心详解 第十章:位运算和c语言文件操作详解_文件操作函数
本文详细介绍了C语言中的位运算和文件操作。位运算包括按位与、或、异或、取反、左移和右移等六种运算符及其复合赋值运算符,每种运算符的功能和应用场景都有具体说明。文件操作部分则涵盖了文件的概念、分类、文件类型指针、文件的打开与关闭、读写操作及当前读写位置的调整等内容,提供了丰富的示例帮助理解。通过对本文的学习,读者可以全面掌握C语言中的位运算和文件处理技术。