一篇文章带你了解C语言的选择结构

目录
  • 一、if-else语句
    • 1.单选择
    • 2.双选择
    • 3.多选择
  • 二.switch语句
  • 总结

一、if-else语句

1.单选择

单选择通过if语句就可以实现,if语句的语法及执行流程如下:

if(表达式)
{
     代码块(表达式返回值为真时执行)
}

当程序运行到if语句时,会由表达式进行判定,诺表达式的返回值为真,则进入代码块执行语句,为假便跳过代码块继续执行。(当代码块语句仅有一句时,可以省略大括号。)

举一个简单的例子

例:判断10是否为3的倍数

int main()
{
	int i = 10;
		if (i % 3 == 0) //表达式结果为假
			printf("是");//代码块内 未执行
	return 0;
}

2.双选择

双选择通过if-else语句实现,if-else语句的语法及执行流程如下:

(else的匹配:else是和它相距的最近的if匹配的)

if(表达式)
{
   语句一(表达式返回值为真时执行)
}
else
{
   语句二(表达式返回值为假时执行)
}

当程序运行到if语句时,会由表达式进行判定,表达式的返回值为真,则执行语句1,为假便块执行语句2。

举一个简单的例子

例:判断学生分数及格

#include<stdio.h>
int main()
{
	int i = 0;
	scanf("%d", &i);
	if (i >= 60)
		printf("及格");
	else
		printf("不及格");
	return 0;
}

3.多选择

通过else if语句实现的多选择,else if语句的语法及执行流程如下:

if(表达式1)
{
   语句1 (表达式1返回值为真时执行)
}
else if(表达式2)
{
   语句2 (表达式返回值为真时执行)
}
else if(表达式3)
{
    语句3(表达式返回值为真时执行)
}
else
{
   代码块(以上表达式均为假时执行)
}

当程序运行到if语句时,会由表达式进行判定,表达式1的返回值为真,则进入if下的代码块执行语句1,为假便进入表达式2。当然if-else可以实现的分支不止这四种,通过增加else if 语句的数量便可以实现更多的选择。

举一个简单的例子

例:年龄分段

#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");
    }
    return 0;
}

二.switch语句

switch语句也是一种分支语句。 常常用于多分支的情况。else if 语句也能实现多分支情况,但在某些情况下使用else if来实现,会使代码过于复杂。

比如:

输入1,输出星期一

输入2,输出星期二

输入3,输出星期三

输入4,输出星期四

输入5,输出星期五

输入6,输出星期六

输入7,输出星期日

如果使用else if 

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

那么这个代码便会太过复杂,而使用switch就会很多

switch语句的语法及执行流程如下:

switch(整型表达式)
{
    //在一个 switch 中可以有任意数量的 case 语句。
    case 整形常量表达式:
    语句;
}

case  是一个入口,按照输入整型表达式的值进入,后按照顺序依次运行。

单使用switch语句是无法实现分支的,需要搭配break使用才能实现真正的分支。

举一个例子:

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

输入值分别为2 4时,输出结果如下:

与想要实现的效果相差甚远,而搭配break使用就能解决这个问题。

#include <stdio.h>
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;
}

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

 switch除了搭配break语句使用,往往也会搭配 default语句

如果表达的值与所有的case标签的值都不匹配时,所有的语句都会被跳过。程序并不会终止,也不会报错,因为这种情况在C中并不认为是个错误。

诺并不想忽略不匹配所有标签的表达式的值时,可以在语句列表中增加一条default子句。

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

 例如:

#include <stdio.h>
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;
    default:
        printf("输入错误");
    }
    return 0;
}

switch 语句可以有一个可选的 default case,出现在 switch 的结尾。default case 可用于在上面所有 case 都不为真时执行一个任务。default case 中的 break 语句不是必需的。

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • C语言数据结构与算法之排序总结(一)

    目录 一.前言 二.基本概念 1.排序 2.排序方法的稳定性 3.内部和外部排序 三.插入类排序 1.直接插入排序 2.折半插入排序 3.希尔排序 四.交换类排序 1.冒泡排序 2.快速排序 五.总结比较 一.前言 学习目标: 排序和查找密不可分,将待处理的数据按关键值大小有序排列后,查找更加快速准确 理解各种排序算法的定义和特点,并能将代码灵活运用 掌握各种排序方法时间复杂度与空间复杂度 理解排序稳定和不稳定的概念                 重点和难点: 希尔.快速.堆.归并排序这几种快

  • C语言if选择结构语句详解

    目录 一.选择结构功能 二.选择结构形式 三.选择结构分类 1.单分支选择结构 2.双分支选择结构 3.多分支选择结构 四.条件表达式 总结 一.选择结构功能 根据给定的判断条件,控制程序执行流程的语句. 二.选择结构形式 单分支:根据给定条件,决定是否执行一段语句. 双分支:根据给定条件,执行两条路径中的一条. 多分支:根据给定条件,决定执行其中一条路径. 三.选择结构分类 1.单分支选择结构 ①功能 根据给定表达式决定执行操作或者跳过操作. ②单分支if语句格式 ③一般形式 if(表达式)

  • C语言结构体指针引用详解

    目录 指向结构体变量的指针 指向结构体数组的指针 结构体指针,可细分为指向结构体变量的指针和指向结构体数组的指针. 指向结构体变量的指针 前面我们通过"结构体变量名.成员名"的方式引用结构体变量中的成员,除了这种方法之外还可以使用指针. 前面讲过,&student1 表示结构体变量 student1 的首地址,即 student1 第一个项的地址.如果定义一个指针变量 p 指向这个地址的话,p 就可以指向结构体变量 student1 中的任意一个成员. 那么,这个指针变量定义成

  • 详解C语言数据结构之栈

    目录 栈的链式实现 主要内容 代码实现: 总结 栈的链式实现 主要内容 (1) 栈包含7个元素,依次是67,3,88,6,1,7,0,采用尾插入法创建 栈,为该栈设置两个指针,一个bottom和一个top指针: (2) 入栈函数push,该函数完成向栈中插入元素的功能,利用push函数,将数字-9插入到栈内,并将栈里的元素遍历: (3) 出栈函数pop,该函数完成从栈中删除元素的功能,利用pop函数,删除此时栈里面的3个元素,并遍历栈: (4) 函数length,求出此时栈内元素的个数. 代码实

  • C语言数据结构与算法之排序总结(二)

    目录 一.前言 二.选择类排序 1.简单选择排序 2.树形选择排序 3.堆选择排序 三.归并排序 四.分配类排序 1.多关键字排序 2.链式基数排序 五.总结归纳 一.前言 之前的排序总结(一)对插入类和交换类排序作了比较详细的总结,对于直接插入.希尔排序.冒泡排序.快速排序要求熟练掌握 这篇排序全面总结(二)主要介绍选择类排序中的简单.树形和堆排序,归并排序.分配类排序的基数排序 二.选择类排序 选择类:每次从待排序的无序序列中,选择一个最大或最小的数字,放到前面,数据元素为空时排序结束 1.

  • 一篇文章带你了解C语言的选择结构

    目录 一.if-else语句 1.单选择 2.双选择 3.多选择 二.switch语句 总结 一.if-else语句 1.单选择 单选择通过if语句就可以实现,if语句的语法及执行流程如下: if(表达式) { 代码块(表达式返回值为真时执行) } 当程序运行到if语句时,会由表达式进行判定,诺表达式的返回值为真,则进入代码块执行语句,为假便跳过代码块继续执行.(当代码块语句仅有一句时,可以省略大括号.) 举一个简单的例子 例:判断10是否为3的倍数 int main() { int i = 1

  • 一篇文章带你用C语言玩转结构体

    目录 前言 一.结构体的声明与定义 1.结构体的声明 2.结构成员的类型 3.结构体的定义 二.初始化结构体 三.访问结构体成员 四.结构体嵌套 五.结构体指针 六.结构体传参 总结 前言 C语言提供了不同的数据类型,比如说int.float.double.char等,不同的类型决定了一个变量在内存中应该占据的空间以及表现形式. 但是,当我们定义一个人的时候,人的不同属性就比较难用同一个数据类型来定义了,因为人的身高.年龄.体重等属性往往需要不同数据类型,在这个时候,我们便引入结构体这个概念.

  • 一篇文章带你入门C语言:操作符

    目录 操作符 分类 算术操作符 移位操作符 整数存储规则 左右移位规则 赋值操作符 单目操作符 取地址操作符& 解引用操作符* 类型长度操作符sizeof 按位取反操作符~ ++ -- 操作符 强制类型转换操作符(type) 关系操作符= 逻辑操作符 短路运算 条件操作符 逗号表达式 下标引用.函数调用和结构成员 下标引用操作符[] 函数调用操作符() 结构成员操作符. -> 结构体定义 结构体使用 结构体地址 表达式求值 隐式类型转换 整型提升 如何整型提升 有符号数 无符号数 算术转换

  • 一篇文章带你了解C语言:入门基础(2)

    目录 操作符 算术操作符 移位操作符 位操作符 单目操作符 逻辑反操作! 操作符++,-- 逻辑操作符 条件操作符 逗号表达式 常见关键字 typedef extern static 修饰局部变量 修饰全局变量和函数 其它 #define定义常量和宏 定义常量 定义宏 指针 内存单元 指针变量 &取地址操作符,*解引用操作符 类型所占空间 结构体 定义结构体 使用结构体变量 总结 本节将结束对初识C语言的概述,只追求大概,不求精细. 本节包括的内容有操作符,常见关键字,#define定义常量和宏

  • 一篇文章带你了解C语言--数据的储存

    目录 前言 数据类型介绍 类型的基本归类 整形在内存中的存储 原码.反码.补码 大小端介绍 浮点型在内存中的存储 前言 前面我们学习了C语言的一些基本知识和基础的语法,想必大家对C语言都有了自己的认识. 当然只是学习这些知识还是不够的,我们需要进行更加深入的学习. 从本章开始,我们将进行C语言进阶阶段的学习,所以难度会有所增加. 数据类型介绍 前面我们已经学习了基本的内置类型: char //字符数据类型 short //短整型 int //整形 long //长整型 long long //更

  • 一篇文章带你了解C语言浮点数之间的比较规则

    目录 你认为这段代码输出什么? 为什么不等于呢? 应该怎么解决? 那么怎么判断两个浮点数 f1 和 f2 相等呢. 伪代码 可以简化为 >> 怎么判断浮点数等于0? 还有一个问题 总结 你认为这段代码输出什么? int main() { float f1 = 1.1; float f2 = 2.2; if (f2 - 1.1 == f1) printf("等于"); else printf("不等于"); return 0; } 答案是不等于. 为什么不

  • 一篇文章带你入门C语言:函数

    目录 函数 定义 库函数 定义 介绍 Example 1 strcpy Example 2 memset 自定义函数 Example 1 Example 2 两数交换 链式访问 Example 1 函数声明 函数递归 Example 1 Example 2 函数迭代 Example 3 Example 4 总结 函数 定义 程序里的函数又被叫做子程序,他作为一个大型程序的部分代码,有一或多个语句项组成.函数负责完成某项特定任务,提供了对过程的封装和对细节的隐藏,这样的代码通常会被集成为软件库.

  • 一篇文章带你入门C语言数据结构:绪论

    目录 绪论 什么是数据结构? Example 1 讨论 Example 2 Example 3 Example 4 总结 绪论 什么是数据结构? 不同于计算机操作培训,注意与程序设计的区别. Example 1 求n个数的最大值.次最大值. //1.遍历 - 最朴素的方法 int main() { int arr[10] = { 22,334,552,1,4,6,78,23,55,98 }; int i = 0; int temp = 0; int max1 = arr[0]; int max2

  • 一篇文章带你了解C语言:入门基础

    目录 C语言本身特点 数据类型 常量变量 变量分类 使用小建议 生命周期作用域 常量分类及其特点 字符串+转义字符+注释 字符串 转义字符 两种注释 选择循环语句 函数 数组 总结 闲话少说,先上思维导图. 如图所示,现在还是初识C语言的第一部分,本次只介绍了C语言本身特点,数据类型,常量变量,字符串转义字符注释,选择循环语句,函数,数组. 接下来请和我一起粗略地探讨其中内涵所在. C语言本身特点 这是C语言的定义: C语言是一门通用计算机编程语言,广泛应用于底层开发.C语言的设计目标是提供一种

  • 一篇文章带你使用C语言编写内核

    目录 gcc 命令 文件头 将内核载入内存 总结 gcc 命令 使用 gcc 编译 c语言 -c 编译.汇编到目标代码,不进行链接,也就是直接生成目标文件 -o 将输出的文件以指定文件名来储存,有同名文件存在时直接覆盖 gcc -c -o kernel/main.o kernel/main.c 编译:编译号之后只是个目标文件,也称为待重定位文件,重定位指的是文件里面所用的符号还没有安排地址,这些符号的地址需要将来与其他目标文件"组成"一个可执行文件时再重新定位(编排地址〉,这里的符号就

随机推荐