通俗易懂的全面了解C语言中switch选择分支结构(细节满满+例题分析)

本篇文章将带着大家快速掌握switch语句的使用方法,虽然switch语句是最基础的选择结构之一,但我觉得在使用的时候任由许多细节需要注意,希望文章内容将对大家有所帮助

文章目录

前言

一、switch语句的基本框架

提出问题

二、问题分析

1.整型常量表达式具体该如何理解,可以将其划分成几个模块来理解

2.case中的 (整型常量1) 可以是表达式么,为什么有些代码中的这一部分也可以写成 ‘A’ 的字符形式,这该如何理解

3.为什么我所见到过有些使用switch结构的代码和这种基本框架差异很大,有些部分是缺失的,是不是说switch框架中的某些部分是可以省略的,如果省略,将带来哪些变化

4.和if...else结构之间有什么联系,相较之下能够给我们带来哪些好处

总结



前言

今天第二次重温C语言中的switch选择分支结构,总体来讲收获满满。希望我分享内容将对大家有所帮助

第一次学这个结构的时候,当时感觉有点迷糊,有很多细节使用方面没有深究,认为if...else之类的语句比switch好用多了。但当我重温这个结构的时候发现其实并不是这样,在有些时候使用switch相较于if...else结构效果更好,比如可以是的我们的代码更加简洁明了,减少条件的重用性,不至于代码显得笼长等好处

一、switch语句的基本框架

基本框架如下:

//switch基本结构
switch(整型常量表达式)
{
    case (整型常量1): 语句一; break;
    case (整型常量2): 语句二; break;
    ...
    case (整型常量n): 语句n; break;
    default : 语句n+1; break;
}

case:用于匹配switch中的值

break:终止条件

default:当switch中的常量表达式的值与所有的case条件都不匹配时,则默认执行该条语句。(与else的作用相似,可以根据需求进行省略)

为了使大家能够由浅入深逐步了解switch选择分支结构,我们将通过剖析问题提的方式来逐渐深入

提出问题

问题一:整型常量表达式具体该如何理解,可以将其划分成几个模块来理解

问题二:case中的 (整型常量1) 可以是表达式么,为什么有些代码中的这一部分也可以写成 ‘A’ 的字符形式,这该如何理解

问题三:为什么我所见到过有些使用switch结构的代码和这种基本框架差异很大,有些部分是缺失的,是不是说switch框架中的某些部分是可以省略的,如果省略,将带来哪些变化

问题四:和if...else结构之间有什么联系,相较之下能够给我们带来哪些好处

二、问题分析

1.整型常量表达式具体该如何理解,可以将其划分成几个模块来理解

首先整型常量表达式可以拆分为三个模块:整型、常量和表达式。下面我们逐一来理解

整型:这里的数据类型指的是最终整合表达式所得出的结果要求一定是整型的数值

常量:顾名思义,常量是某一个确定的值,当然常量也分为很多种,常见有数值型常量和字符型常量两种(在这里由于整型的限制,因此指的是前者)。一定不能是变量,因为变量的值是不确定的,如果是变量的话,将无法与case进行匹配

表达式:该处的表达式其实也是可以使用某一具体的常量值来代替,但如果这样做,那么整个选择结构将失去了“选择”的意义,所以此处一般都是以表达式形式(具体根据题目中的要求)对传进来的值进行一定的运算变换得到某一判断值

2.case中的 (整型常量1) 可以是表达式么,为什么有些代码中的这一部分也可以写成 ‘A’ 的字符形式,这该如何理解

case中的整型常量的作用是与switch中的内容进行匹配,如果二者内容相同,则进入该条case语句当中

(1)可以是表达式

        前面说到case中整型常量的作用是与switch中的内容进行匹配,也可以理解成这部分内容的形式与switch中整型常量表达式的内容是等价的

        但必须注意不论是否是表达式,除了应满足上述switch条件外,不同的case所对应的常量内容一定是不能相同的

(2)在C语言中,字符和数值是可以通过ASCII码值相互转换的

        所以有些代码中出现“case 字符: ”这种表达形式,原则上并不冲突,字符将通过ASCII转化为数值型

3.为什么我所见到过有些使用switch结构的代码和这种基本框架差异很大,有些部分是缺失的,是不是说switch框架中的某些部分是可以省略的,如果省略,将带来哪些变化

为了更好地理解这部分的内容,我们将通过一道例题进行分析

题目内容:在不同条件下输出对应的字母。

大家可以在看代码的时候可以将对应的流程图画在草稿纸上,然后在对比一下文章中流程图的结果是否与自己所分析的相同。如果相一致,那么大家对switch结构基本完全掌握了;如果不一致,大家可以通过拷贝代码,不断的改变条件,在自己的电脑上不断的调试。如果有不理解的地方,也可以参考文章中的分析内容

例题代码如下:

#include<stdio.h>

int main()
{
	int sw;
	printf("整数:");
	scanf("%d", &sw);

	switch (sw)  //在这里指的是从键盘输入的一个常量(整型)
	{
	case 1: puts("A"); puts("b"); break;
	case 2: puts("C");   //省略了break终止语句
	case 5: puts("D"); break;
	case 6:              //省略执行语句
	case 7: puts("E"); break;
	default: puts("F"); break;
	}
	return 0;
}

上面所写的代码中,就是一个比较“残缺”switch选择结构,那么它对于不同的输入值,运行流程是怎样的呢?整个代码的流程图如下所示:

 break语句指的是终止的意思,在上述程序中一旦遇见break语句时,将会直接跳出整个选择结构。若某一个case语句中省略了break,当执行完了这条case中的内容后,此时程序则会按顺序执行下面的case中的语句(下面case中的整型匹配值将不会发挥作用)

下面我们来测试一下各种情况下的输出结果:

 

 

 

4.和if...else结构之间有什么联系,相较之下能够给我们带来哪些好处

下面我们将3中的例题用if...else语句实现进行对比

代码如下:

#include<stdio.h>
int main()
{
	int sw;
	print("整数:");
	scanf("%d", &sw);
	
	if (sw == 1)
	{
		puts("A");
		puts("B");
	}
	else if (sw == 2)
	{
		puts("C");
		puts("D");
	}
	else if (sw == 5) puts("D");
	else if (sw == 6 || sw == 7) puts("E");
	else puts("F");
	return 0;
}

对于if语句来说,实现分支操作的比较对象并不仅仅限于单一的表达式。需要仔细阅读每条if中的条件内容,从这个方面来看switch语句的格式更加清晰,表达效果更好。通过单一表达式的时候,使用switch语句的效果通常要比使用if语句的更好


总结

本篇文章的主要目的是为了是大家对选择分支结构中的switch语句友谊更加清晰的了解以及灵活运用,总体来说该语法并不是很难,但是如果不注意细节的处理的话还是非常容易出错的。学会如何灵活使用switch的删减条件将会给我们在编程中带来很大的帮助,如果大家还是感觉不太熟悉的话,可以试着将遇到的一些if选择结构的程序自己进行转化一下,加深自己的理解

最后,希望这篇文章将会给你带来一定的帮助!

  • 7
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
### 回答1: 指针是C语言的一个重要概念。它可以用来指向变量、函数或其他内存地址。比如,假设您有一个变量int a,其值为5,那么您可以声明一个指针变量int *b,它将指向变量a的内存地址,这样就可以通过指针b来访问变量a的值。 ### 回答2: C语言的指针是一种特殊的变量类型,它具有存储内存地址的能力。我们可以把指针看作是一个存放了另一个变量的地址的容器。 举个例子来说明:假设我们有两个C语言变量,一个是整数类型的a,另一个是指针类型的b。我们可以通过以下步骤来使用指针。 首先,我们定义一个整数变量a,并给它赋一个值,比如说10。然后,我们定义一个指针变量b,并将其指向a的地址。这可以通过使用取地址运算符&来实现,即`b = &a;`。现在,指针变量b存储了变量a的地址。 接着,我们可以使用解引用运算符*来访问指针变量所指向的地址上的值。我们可以通过在指针变量前面加上解引用运算符,来获得变量a的值,即`*b`。这将返回a的值,也就是10。 我们还可以通过指针来修改变量a 的值。我们只需使用解引用运算符来访问变量a,并将新的值赋给它,比如说`*b = 20;`。现在,变量a的值将变为20。 总体来说,指针可以帮助我们在程序访问和操作内存的数据,它提供了直接访问内存地址的能力,从而增加了程序的灵活性和效率。然而,指针的使用也需要谨慎,因为错误的指针操作可能会导致程序崩溃或运行出错。因此,在使用指针时要确保指针变量指向有效的内存地址,并避免悬空指针或野指针的出现。 ### 回答3: 在C语言,指针是一种变量类型,用来存储内存地址。通过指针,我们可以直接访问和修改内存存储的值。可以将指针比喻为一根手指,它指向某个特定的内存位置。 我们可以通过使用指针来提高程序的效率和灵活性。例如,我们可以使用指针来传递大量数据,而不需要复制整个数据。此外,指针也常用于动态内存分配,例如在运行时分配数组或其他数据结构。指针还可以在函数返回多个值,而不仅仅是一个返回值。 让我们来看一个简单的例子来说明指针的使用。假设我们有两个整数变量a和b,我们想要交换它们的值。使用指针,我们可以这样做: ``` void swap(int *x, int *y) { int temp = *x; *x = *y; *y = temp; } int main() { int a = 10; int b = 20; printf("交换前:a = %d, b = %d\n", a, b); swap(&a, &b); printf("交换后:a = %d, b = %d\n", a, b); return 0; } ``` 在这个例子,我们给函数`swap`传递了`a`和`b`的地址(即指针),而不是它们的实际值。在函数内部,我们使用`*x`和`*y`来访问这些地址处存储的值,从而实现了交换操作。 通过这个例子,我们可以看到指针的使用方式。需要注意的是,在操作指针时,需要小心避免空指针和野指针的问题,以及内存泄漏等潜在的问题。因此,在使用指针时需要谨慎,并确保正确管理内存。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

whelloworldw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值