当前位置: 首页 > news >正文

【时时三省】(C语言基础)用switch语句实现多分支选择结构

山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省

if语句只有两个分支可供选择,而实际问题中常常需要用到多分支的选择。例如,学生成绩分类(85分以上为A等,70 ~ 84分为B等,60 ~ 69分为C等),人口统计分类(按年龄分为老、中、青、少、儿童),工资统计分类,银行存款分类等。当然这些都可以用嵌套的if语句来处理,但如果分支较多,则嵌套的if语句层数多,程序冗长而且可读性降低。C语言提供switch语句直接处理多分支选择。switch语句是多分支选择语句。

例题:

要求按照考试成绩的等级输出百分制分数段,A等为85分以上,B等为70 ~84分,C等为60 ~69分,D等为60分以下。成绩的等级由键盘输入。解题思路:这是一个多分支选择问题,根据百分制分数将学生成绩分为4个等级,如果用if语句来处理至少要用3层嵌套的if,进行3次检查判断。用switch语句,进行一次检查即可得到结果。

编写程序:

运行结果 :

 从键盘输入大写字母A,按回车键,程序输出对应的分数段。

程序分析:

等级grade定义为字符变量,从键盘输入一个大写字母,赋给变量grade , switch得到grade的值并把它和各case中给定的值( ' A ',' B ',' C ',D '之一)相比较,如果和其中之一相同(称为匹配),则执行该case后面的语句(即printf语句)。输出相应的信息。如果输入的字符与A ',' B ',C,,D '都不相同,就执行default后面的语句,输出“输入数据有错”的信息。

注意在每个case后面后的语句中,最后都有一个break语句,它的作用是使流程转到switch语句的末尾(即右花括号处)。

 

可以看到,switch语句的作用是根据表达式的值,使流程跳转到不同的语句。switch语句的一般形式如下:

switch(表达式)

{

case  常量1:语句1

case  常量2:语句2

case  常量n:语句n

default :     语句n+1

}

说明:

( 1 )上面switch一般形式中括号内的“表达式”,其值的类型应为整数类型(包括字符型)。

( 2 ) switch下面的花括号内是一个复合语句。这个复合语句包括若干语句,它是switch语句的语句体。语句体内包含多个以关键字case开头的语句行和最多一个以default开头的行。case后面跟一个常量(或常量表达式),如:case 'A’,它们和default都是起标号( label,或称标签、标记)的作用,用来标志一个位置。执行switch语句时,先计算switch后面的“表达式”的值,然后将它与各case标号比较,如果与某一个case标号中的常量相同,流程就转到此case标号后面的语句。如果没有与switch表达式相匹配的case常量,流程转去执行default标号后面的语句。

( 3 )可以没有default标号,此时如果没有与switch表达式相匹配的case常量,则不执行任何语句,流程转到switch语句的下一个语句。

( 4 )各个case标号出现次序不影响执行结果。例如,可以先出现default标号,再出现“case' D '…”然后是“case ' B’:…”。

( 5 )每一个case常量必须互不相同;否则就会出现互相矛盾的现象(对switch表达式的同一个值,有两种或多种执行方案)。

( 6 ) case标号只起标记的作用。在执行switch语句时,根据switch表达式的值找到匹配的入口标号,并不在此进行条件检查,在执行完一个case标号后面的语句后,就从此标号开始执行下去,不再进行判断。例如在例题中,如果在各case子句中没有break语句,将连续输出:

Your score : 85 ~ 100

70 ~ 84

60 ~ 69

< 60

enter data error !

注意:一般情况下,在执行一个case子句后,应当用break语句使流程跳出switch结构,即终止switch语句的执行。最后一个case子句(今为default子句)中可不必加break语句,因为流程已到了switch结构的结束处。

例如:

case ' A’:

case ' B ' :

case ' C ' : printf ( " > 60 \ n " ) ; break ;

当grade的值为' A ',' B ',' C '时都执行同一组语句,输出“> 60”,然后换行。

 

 

http://www.dtcms.com/a/123043.html

相关文章:

  • 【运维 | 硬件】服务器中常见的存储插槽类型、对应的传输协议及其特性总结
  • 环信鸿蒙版 UIKit 快速上手指南
  • 如何将多个Word文档合并
  • 【HTML】动态背景效果前端页面
  • 基于 Qt4 的图片处理工具开发(二):增加对比度调节、界面布局优化、多线程操作
  • 初识Redis · 简单理解Redis
  • 使用注解@RequestBody变红的解决问题
  • 【spark认任务提交】配置优先级顺序
  • 银河麒麟v10(arm架构)部署Embedding模型bge-m3【简单版本】
  • 【C++进阶】关联容器:multimap类型
  • 学习海康VisionMaster之四边形查找
  • 【达梦数据库】bash: /dev/null: Permission denied
  • 使用stm32cubeide stm32f407 lan8720a freertos lwip 实现tcp客户端、服务端及网络数据转串口数据过程详解
  • SQL 关键字
  • 低硬件资源微调预训练Mamba模型的方法
  • 在 transformers 中,return_tensors=‘pt‘ 里的 pt 是什么 tf,np
  • gdal_shp文件的组成
  • 【设备连接涂鸦阿里云】
  • [数据结构]Trie字典树
  • RocketMQ和kafka 的区别
  • 算法导论(递归回溯)——⼆叉树中的深搜
  • lanqiaoOJ 498 回文日期
  • ValueError: Cannot handle batch sizes > 1 if no padding token is defined`
  • 数据结构(五)——AVL树(平衡二叉搜索树)
  • 【Python语言基础】17、继承
  • 深入理解 Spring 的 MethodParameter 类
  • 测试的分类
  • OpenCV 图形API(25)图像滤波-----均值滤波(模糊处理)函数blur()
  • 写一个简单的demo来理解数据库外键
  • Java中的参数是值传递还是引用传递?