【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

相关文章
|
1天前
|
存储 编译器 C语言
【C语言程序设计——选择结构程序设计】求一元二次方程的根(头歌实践教学平台习题)【合集】
本任务要求根据求根公式计算并输出一元二次方程的两个实根,精确到小数点后两位。若方程无实根,则输出提示信息。主要内容包括: - **任务描述**:使用求根公式计算一元二次方程的实根。 - **相关知识**:掌握 `sqrt()` 函数的基本使用方法,判断方程是否有实根。 - **编程要求**:根据输入的系数,计算并输出方程的根或提示无实根。 - **测试说明**:提供两组测试数据及预期输出,确保代码正确性。 - **通关代码**:包含完整的 C 语言代码示例,实现上述功能。 通过本任务,你将学会如何处理一元二次方程的求解问题,并熟悉 `sqrt()` 函数的使用。
17 5
|
1天前
|
存储 安全 C语言
【C语言程序设计——选择结构程序设计】预测你的身高(头歌实践教学平台习题)【合集】
分支的语句,这可能不是预期的行为,这种现象被称为“case穿透”,在某些特定情况下可以利用这一特性来简化代码,但在大多数情况下,需要谨慎使用。编写一个程序,该程序需输入个人数据,进而预测其成年后的身高。根据提示,在右侧编辑器补充代码,计算并输出最终预测的身高。分支下的语句,提示用户输入无效。常量的值必须是唯一的,且在同一个。语句的作用至关重要,如果遗漏。开始你的任务吧,祝你成功!,程序将会继续执行下一个。常量都不匹配,就会执行。来确保程序的正确性。
23 10
|
1天前
|
小程序 C语言
【C语言程序设计——基础】顺序结构程序设计(头歌实践教学平台习题)【合集】
目录 任务描述 相关知识 编程要求 测试说明 我的通关代码: 测试结果: 任务描述 相关知识 编程编写一个程序,从键盘输入3个变量的值,例如a=5,b=6,c=7,然后将3个变量的值进行交换,使得a=6,b=7,c=5。面积=sqrt(s(s−a)(s−b)(s−c)),s=(a+b+c)/2。使用输入函数获取半径,格式指示符与数据类型一致,实验一下,不一致会如何。根据提示,在右侧编辑器补充代码,计算并输出圆的周长和面积。
21 10
|
1天前
|
存储 算法 安全
【C语言程序设计——选择结构程序设计】按从小到大排序三个数(头歌实践教学平台习题)【合集】
本任务要求从键盘输入三个数,并按从小到大的顺序排序后输出。主要内容包括: - **任务描述**:实现三个数的排序并输出。 - **编程要求**:根据提示在编辑器中补充代码。 - **相关知识**: - 选择结构(if、if-else、switch) - 主要语句类型(条件语句) - 比较操作与交换操作 - **测试说明**:提供两组测试数据及预期输出。 - **通关代码**:完整代码示例。 - **测试结果**:展示测试通过的结果。 通过本任务,你将掌握基本的选择结构和排序算法的应用。祝你成功!
15 4
|
1天前
|
存储 算法 安全
【C语言程序设计——选择结构程序设计】求阶跃函数的值(头歌实践教学平台习题)【合集】
本任务要求输入x的值,计算并输出特定阶跃函数的结果。主要内容包括: 1. **选择结构基本概念**:介绍if、if-else、switch语句。 2. **主要语句类型**:详细解释if、if-else、switch语句的使用方法。 3. **跃迁函数中变量的取值范围**:说明如何根据条件判断变量范围。 4. **计算阶跃函数的值**:通过示例展示如何根据给定条件计算函数值。 编程要求:在右侧编辑器Begin-End之间补充代码,实现阶跃函数的计算和输出。测试说明提供了多个输入及其预期输出,确保代码正确性。最后提供通关代码和测试结果,帮助理解整个过程。
14 0
|
1天前
|
存储 算法 安全
【C语言程序设计——选择结构程序设计】判断一个数是不是5和7的倍数(头歌实践教学平台习题)【合集】
本任务要求输入一个正整数,判断其是否同时是5和7的倍数,若是输出&quot;Yes&quot;,否则输出&quot;No&quot;。内容涵盖选择结构的基本概念、主要语句类型(if、if-else、switch)及条件判断逻辑,帮助理解编程中的分支执行与条件表达式。测试用例包括正数、负数及非倍数情况,确保代码逻辑严谨。通关代码示例如下: ```cpp #include &quot;stdio.h&quot; int main(){ int a; scanf(&quot;%d&quot;, &a); if (a &lt;= 0){ printf(&quo
15 0
|
1天前
|
编译器 C语言 C++
【C语言程序设计——选择结构程序设计】求输入的日期是该年的第几天(头歌实践教学平台习题)【合集】
本任务要求编写程序,根据用户输入的年月日(以空格或回车分隔),计算并输出该天是该年的第几天,需注意判断闰年。主要内容包括: 1. **任务描述**:实现从键盘输入年月日,计算该天是当年的第几天。 2. **相关知识**: - `switch` 结构的基本语法及使用注意事项。 - 判断闰年的条件:能被4整除但不能被100整除,或能被400整除的年份为闰年。 3. **编程要求**:根据提示补充代码,确保程序正确处理输入并输出结果。 4. **测试说 示例代码展示了如何使用 `switch` 语句和闰年判断逻辑来完成任务。通过此练习,掌握 `switch` 语句的应用及闰年判断方法。
13 0
|
1天前
|
算法 C语言
【C语言程序设计——函数】利用函数求解最大公约数和最小公倍数(头歌实践教学平台习题)【合集】
本文档介绍了如何编写两个子函数,分别求任意两个整数的最大公约数和最小公倍数。内容涵盖循环控制与跳转语句的使用、最大公约数的求法(包括辗转相除法和更相减损术),以及基于最大公约数求最小公倍数的方法。通过示例代码和测试说明,帮助读者理解和实现相关算法。最终提供了完整的通关代码及测试结果,确保编程任务的成功完成。
25 15
|
1天前
|
C语言
【C语言程序设计——函数】亲密数判定(头歌实践教学平台习题)【合集】
本文介绍了通过编程实现打印3000以内的全部亲密数的任务。主要内容包括: 1. **任务描述**:实现函数打印3000以内的全部亲密数。 2. **相关知识**: - 循环控制和跳转语句(for、while循环,break、continue语句)的使用。 - 亲密数的概念及历史背景。 - 判断亲密数的方法:计算数A的因子和存于B,再计算B的因子和存于sum,最后比较sum与A是否相等。 3. **编程要求**:根据提示在指定区域内补充代码。 4. **测试说明**:平台对代码进行测试,预期输出如220和284是一组亲密数。 5. **通关代码**:提供了完整的C语言代码实现
36 24