0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

if-else判断语句和switch-case选择语句介绍

C语言编程学习基地 来源:C语言编程学习基地 作者:C语言编程学习基地 2022-10-08 10:19 次阅读

1、if-else判断语句

一个基本的if语句由一个关键字if开头,跟上在括号()里边的是表示逻辑条件的表达式,然后是一对大括号{}中间是若干条语句,如果条件的逻辑表达式的结果不是零,那么就执行大括号中间的语句,否则就跳过不执行。

if的返回值为真或假,可以用bool型变量进行存储,占用一字节。

当if的条件满足或者不满足的时候要执行的语句也可以是一条或者多条if-else 语句,这时候叫嵌套的if语句,而else 总是和最接近的 if 匹配。

tips:

在if或else后面总加上{}大括号,即使只有一条语句的时候。风格就是三观。常见的错误:忘了大括号,if后面的分号,错误使用 == 和 = ,没有匹配或令人困惑的else

例子题目:

描述请判断它能否被 3,5,7 整除,并输出以下信息

能同时被 3, 5, 7 整除(直接输出3 5 7,每个数中间一个空格);

只能被其中两个数整除(输出两个数,小的在前,大的在后。例如:3 5或者3 7或者5 7,中间用空格分隔);

只能被其中一个数整除(输出这个除数);

不能被任何数整除,输出小写字符'n',不包括单引号。:

如:

输入 105

输出 3 5 7

解决答案:

int main(void) 
{    int a;  
  scanf("%d", &a); 
 //输入一个数//if圆括号所表示的 如果 a能被3整除  并且  a也能被 5整除  并且  a也能被7整除  
  if (a % 3 == 0 && a % 5 == 0 & a % 7 == 0) {//如果圆括号条件里边的条件满足      
  printf("3 5 7");//执行这条语句    }    
else if (a % 3 == 0 && a % 5 == 0&& a % 7 !=0) {//否则,判断这条语句是否满足        printf("3 5");//满足执行这条语句   //下面的依次类推    }  
  else if (a % 3 == 0 && a % 7 == 0 && a % 5 != 0) {        printf("3 7");   } 
  else if (a % 5 == 0 && a % 7 == 0 && a % 3 != 0) {        printf("5 7");   }   
  else if (a % 3 == 0 && a % 5 != 0 && a % 7 != 0) {        printf("3");    }   
  else if (a % 5 == 0 && a % 3 != 0 && a % 7 != 0) {        printf("5");    }   
  else if (a % 7 == 0 && a % 5 != 0 && a % 3 != 0) {        printf("7");    }  
  else {        printf("n");    }


return 0;}


2、switch-case选择语句

switch语句是多分支选择语句.用来实现多分支选择结构

Switch 函数圆括号的参数列表可由多对表达式和数值组成,ANSI标准允许它为任何类型.,表达式是由左至右加以计算的,而数值则会在第一个相关的表达式为 True 时返回。如果其中有部分不成对,则会产生一个运行错误。

当表达式的值与某一个case后面的常量表达式的值相等时,就执行此case后面的语句,若所有的case中的常量表达式的值都没有与表达式的匹配的,就执行default后面的语句,每一个case的常量表达式的值必须互不相同,否则就会出现互相矛盾的现象,(对表达式的同一个值,有两种或多种执行方案),当没有一个表达式为 True,或者第一个为 True 的表达式的对应值为 Null时,Switch 会返回一个Null值。

switch 后面的表达式不能跟double,float,long,String ,boolean,可以接int,short,byte,char,

返回值:

switch(表达式, 值1, 结果1, 值2, 结果2, ...)

如果表达式的结果是值1,整个函数返回结果1

如果表达式的结果是值2,整个函数返回结果2

如果表达式的结果是值3,整个函数返回结果3

虽然它只返回其中的一个值,但是 Switch会计算所有的表达式。因此应该注意到其所产生的副作用。例如,只要其中一个表达式导致被零除错误,则运行就会发生错误。

例子: //请输入一个数字n,然后输出相应的星期几

   int main(void) {  


  int n;    scanf("%d", &n);  
  switch (n) {//判断输入进来的数值是什么   
 case 1:printf("Monday"); break;//n=1就输出此语句,平且用break函数退出   
 case 2:printf("Tuesday"); break;  
  case 3:printf("Wednesday"); break;   
 case 4:printf("Thursday"); break;  
  case 5:printf("Friday"); break;  
  case 6:printf("Sturday"); break;   
 case 7:printf("Sunday"); break;      
  default :        printf("error");   
 }   
 return 0;}

说明:

在使用switch-case函数时,在语句完毕后加上break函数表示将不再执行下面的语句直接结束switch函数了。如果什么也不加,则是继续执行。

一:从“优缺点”分析

if…else

优点:使用灵活,代码空间小 ;

缺点:效率低,因为 if else 必须遍历所有的可能值;

switch…case

优点:代码结构清晰,效率高;

缺点:

1、不够灵活,switch 仅支持 int, char, unsigned char 等基本类型。

2、代码空间大,因为它要生成跳表,特别是当 case 常量分布范围很大但实际有效值又比较少的情况,switch…case 的空间利用率将变得很低。对于 switch,实际上是根据 case 最小值与最大值,维系了一段连续的内存空间,以空间换取时间;

二:从“底层原理”分析

if…else

系统是自上而下逐个条件去判断,直到符合条件,所以应将机率大的条件置于最前面。

switch…case

switch 语句根据一个整数索引值进行多重分支,底层采用跳转表这种数据结构。跳转表是一个数组,表项 i 对应代码段的地址。当 switch 索引值等于表项 i 时采取对应的程序操作。

可简单理解为:

执行 switch 时生成一个长度为最大 case+1 的数组,程序首先判断 switch 变量是否大于最大 case 常量,若大于,则跳到 default 分支处理。否则取得数组索引号为 switch 变量值大小,取得数组对应值即为相应 case 代码块地址,程序接着跳到此地址执行,完成分支的跳转。

三:从“选择性”分析

当选择分支较少时,选用 if else 比 switch…case 的效率要高。一般 3个 以内的分支我会用 if…else 结构,大于3个的分支我都会用 switch…case,个人习惯,这样结构看着舒服。

当选择分支较多时,选用switch…case结构会提高程序的效率。

四:总结

switch…case 只能处理 case 为常量的情况,对非常量的情况是无能为力的。

例如 if (x > 1 && x < 100),是无法使用 switch…case 来处理的。

所以,switch 只能是在常量选择分支时比 if…else 效率高,但是 if…else 能应用于更多的场合,它比较灵活。

审核编辑:彭静
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 存储
    +关注

    关注

    13

    文章

    4298

    浏览量

    85807
  • Switch
    +关注

    关注

    1

    文章

    533

    浏览量

    58222
  • 函数
    +关注

    关注

    3

    文章

    4329

    浏览量

    62575

原文标题:【零基础学C语言】知识总结四:if-else判断语句和switch-case选择语句

文章出处:【微信号:cyuyanxuexi,微信公众号:C语言编程学习基地】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    详解C语言中if-elseswitch-case语句

    一个基本的if语句由一个关键字if开头,跟上在括号()里边的是表示逻辑条件的表达式,然后是一对大括号{}中间是若干条语句,如果条件的逻辑表达式的结果不是零,那么就执行大括号中间的语句,否则就跳过不执行。
    发表于 10-17 10:40 3184次阅读

    C语言中if语句if-else语句switch语句详解

    在C语言中,有三种条件判断结构:if语句if-else语句switch语句
    发表于 08-18 16:36 1.2w次阅读
    C语言中if<b class='flag-5'>语句</b>、<b class='flag-5'>if-else</b><b class='flag-5'>语句</b>和<b class='flag-5'>switch</b><b class='flag-5'>语句</b>详解

    python判断语句

    python判断语句:if1. 简单小例子如果满足条件 A,则执行代码块 a,否则执行代码块 b。类似这样的控制流程语句,称之为条件语句。它的基本形式是if 判断条件: 执行
    发表于 02-25 16:22

    C++语言基础讲解视频Switch分支条件判断语句

    C++语言基础讲解视频Switch分支条件判断语句
    发表于 01-14 08:00 7次下载

    Proteus之if-else语句的应用

    Proteus之if-else语句的应用,很好的Proteus资料,快来学习吧。
    发表于 04-18 14:49 0次下载

    FPGA学习系列:if-elsecase

    设计背景:不管是在什么软件和硬件语言,我们在我们的代码中都或多或少的用到这两条语句,if..elsecase语句,今天我们将学习verilog中的这两条
    的头像 发表于 06-01 16:59 1.2w次阅读
    FPGA学习系列:<b class='flag-5'>if-else</b>与<b class='flag-5'>case</b>

    C语言的switch case多分支选择语句的详细资料说明

    1、switch-case开关语句是一种多分支选择语句,用来实现多方向条件分支。虽然采用if-else条件
    发表于 07-12 17:39 1次下载
    C语言的<b class='flag-5'>switch</b> <b class='flag-5'>case</b>多分支<b class='flag-5'>选择</b><b class='flag-5'>语句</b>的详细资料说明

    FPGA代码经验 case,casez,casex语句

    使用case语句代替嵌套的if-else将会产生更易读的代码,更好的逻辑利用率和更高的性能。
    的头像 发表于 12-11 10:42 6267次阅读

    不会有人不知道怎么优雅的替换if-else语句

    来自:love1024.blog.csdn.net/article/details/104955363 场景日常开发,if-else语句写的不少吧??当逻辑分支非常多的时候,if-else套了一层
    的头像 发表于 07-28 15:46 1422次阅读
    不会有人不知道怎么优雅的替换<b class='flag-5'>if-else</b><b class='flag-5'>语句</b>吧

    python判断语句的详细说明

    python判断语句:if 1. 简单小例子 如果满足条件 A,则执行代码块 a,否则执行代码块 b。类似这样的控制流程语句,称之为条件语句。 它的基本形式是 if 判断条件: 执行
    的头像 发表于 02-25 16:22 2363次阅读

    什么是SystemVerilog-决策语句-if-else语句

    决策语句(Decision statements)允许程序块的执行流程根据设计中信号的当前值分支到特定语句。SystemVerilog有两个主要的决策语句:if…else
    的头像 发表于 02-09 14:15 1162次阅读
    什么是SystemVerilog-决策<b class='flag-5'>语句</b>-<b class='flag-5'>if-else</b><b class='flag-5'>语句</b>?

    条件判断语句(if语句

    条件判断语句,作为任何编程语言都不可缺少的内容,在C语言中也不例外。条件判断语句可以让程序的功能更加复杂,从而实现各种各样的功能。
    的头像 发表于 02-21 15:24 3498次阅读
    条件<b class='flag-5'>判断语句</b>(if<b class='flag-5'>语句</b>)

    Java中switch语句的使用

    在Java学习中我们见过很多有意思的语句if语句、for语句、while语句switch语句
    的头像 发表于 03-08 11:03 1108次阅读
    Java中<b class='flag-5'>switch</b><b class='flag-5'>语句</b>的使用

    Verilog代码:if-elsecase的电路结构和区别

    每个if-else就是一个2选1mux器。当信号有明显优先级时,首先要考虑if-else,但是if嵌套过多也会导致速度变慢;if语句结构较慢,但占用面积小。 嵌套的if语句如果使
    的头像 发表于 11-29 15:10 3171次阅读

    java中的switch语句 case的取值

    Java中的switch语句是一种用于多重条件判断语句,用于根据不同的条件执行不同的代码块。在switch
    的头像 发表于 11-30 16:05 1140次阅读