【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

相关文章
|
2天前
|
C语言
【C语言基础】:分支与循环
【C语言基础】:分支与循环
|
11天前
|
编译器 C语言
C语言深度理解之——结构体内存对齐
C语言深度理解之——结构体内存对齐
11 1
|
11天前
|
C语言
C语言控制流程详解:分支与循环语句
C语言控制流程详解:分支与循环语句
11 0
|
16天前
|
编译器 C语言
C语言中的选择结构详解与实现
C语言中的选择结构详解与实现
21 1
|
16天前
|
C语言
c语言循环设计程序结构
c语言循环设计程序结构
16 0
|
16天前
|
存储 C语言
C语言中的switch语句编程
C语言中的switch语句编程
10 0
|
16天前
|
存储 算法 数据处理
C语言中的顺序结构程序
C语言中的顺序结构程序
11 1
|
18天前
|
C语言
C语言中的循环控制结构与循环语句详解
C语言中的循环控制结构与循环语句详解
19 0
|
18天前
|
存储 程序员 C语言
C语言中的嵌套语句与Switch语句的深入解析
C语言中的嵌套语句与Switch语句的深入解析
21 1
|
IDE 定位技术 开发工具
C语言 第四章 关系、逻辑运算与分支流程控制
一、关系运算 若干表达式用关系运算符连接而成,就构成关系表达式。 关系表达式中,表达式成立,其值为1(真);表达式不成立,其值为0(假)。其他表达式中,其结果如果是非0则为真,结果为0则为假。 关系运算符的优先级低于算术运算符,高于赋值运算符。
1017 0