这里写目录标题

  • 前言
  • 题目合集
  • 第一题解析:
  • 第二题解析
  • 第三题解析
  • 第四题解析
  • 第五题解析

前言

>亲爱的小伙伴们大家好啊,这篇文章都是关于switch语句的一些练习题,目的为了让大家能够学的更加的扎实,废话不多说开始刷题。

题目合集

第一题:
求下述代码的运行结果

#include <stdio.h>
int main()
{int n = 99;switch (n){case 'a':case 'b':printf("you");break;case 'c':printf("pass");case 'd':printf("test");default:printf("error");break;}return 0;
}

第二题:
求下述代码的运算结果

#include<stdio.h>
int main()
{int x = 1;int y = 2;int z = 3;switch (x > 0){case 1 :switch (y < 0){case 1:printf("?");break;case 2:printf("%");break;}case 0:switch (z == 3){case 0:printf("+");break;case 1:printf("#");break;case 2:printf("$");break;}default:printf("&");}return 0;
}

第三题:

第四题:

第五题:


第一题解析:

第一题:

#include <stdio.h>
int main()
{int n = 99;switch (n){case 'a':case 'b':printf("you");break;case 'c':printf("pass");case 'd':printf("test");default:printf("error");break;}return 0;
}

我们来看一下这个代码,我们前面的篇文章说过:case后面是可以写成字符的类型,因为我们电脑在储存字符的时候,实际上储存的是该字符对应的ascall码值,因为我们这里所有的case后面全是字符,所以我们就只用看switch后面的表达式里面的运算结果,该结果就是变量n的值,那么我们就可以查询一下ascall码值99所对应的字符
这里的99对应的是c,所以我们这里就会从case c开始执行,又因为case c,case d里面的语句块没有break语句,所以当代码在执行的时候中途是不会中断的,所以他会一直执行到default语句里面的break然后结束,那么我们这里打印的结果就是:passtesterror。


第二题解析

第二题:

#include<stdio.h>
int main()
{int x = 1;int y = 2;int z = 3;switch (x > 0){case 1 :switch (y < 0){case 1:printf("?");break;case 2:printf("%");break;}case 0:switch (z == 3){case 0:printf("+");break;case 1:printf("#");break;case 2:printf("$");break;}default:printf("&");}return 0;
}

我们第二题就比第一题稍微复杂一点,我们的switch语句跟 if语句是一样的,都可以相互嵌套,所以我们在做switch嵌套题的时候,我们要注意switch语句中的break到底对应的是外层switch,还是内部嵌套的switch。
第一步
首先我们得看初始信息:程序一开始将x,y,z进行初始化分别给他们赋值为:1,2,3。
第二步:
看最外层的switch语句中的表达式的结果,这里我们的表达式是x>0,那么我们这里的x的值为1 ,确实大于0,所以我们这里的表达式的结果为真,所以我们这里的表达式的结果就为1,所以我们就会进入case 1。
第三步:
进入了case 1,我们就看一下case 1后面的语句块是什么,这时候我们发现case 1里面装的又是一个switch语句,那么同样的道理我们再看这个case 1 里面的switch语句的表达式,我们发现表达式为y<0,而我们y的值为2,所以我们这里的表达式为假,为假的话这个表达式的结果就是0。于是我们就会进入case 0 这种情况,但是我们这里发现下面的case所对应的情况中没有case 0,也没有default,所以我们这个内部嵌套的switch不会有任何的作用,但是我们这个内部嵌套的switch语句在运行完之后,外部switch中的case 1 的语句块中没有break语句,所以我们外部的switch在执行完case 1 之后就会继续执行下面的情况,也就是case 0 。
第四步:
我们再来看外部switch语句中的case 0 的内容,这时候我们又发现这里面又嵌套了一个switch语句,那我们就来看这个内部的switch语句中的表达式为z==3,我们这里的z确实等于3,所以这个表达式的结果为真,为真的话返回的值就是1,所以我们这里就会执行内部switch中的case 1 下面的语句的内容,他的内容为打印#这个字符,并且我们这个case 1 里面有break,所以我们就会跳出这个内部的switch语句,但是外部switch中的case 0语句块中没有break语句,所以他就会继续往下执行default语句
第五步:
default语句中的内容为打印&字符,所以我们就直接打印出&字符然后整个程序就结束了。
所以我们这段代码的结果为#&。


第三题解析

第三题:

第一步:
我们首先得打印一些信息给使用者,告诉他们应该输入什么,然后我们就得创建两个变量来存储输入的值,一个用来储存年份,一个用来存储月份,并且得用到scanf函数来接收输入的值,那我们的代码实现如下:

#include <stdio.h>
int main()
{int year = 0;//初始化int month = 0;//初始化printf("请输入年份-》");//给出信息scanf("%d", &year);//接收输入的值printf("请输入月份-》");//给出信息scanf("%d", &month);//接收输入的值return 0;
}

第二步:
因为我们的一年有12个月,所以这里我们的输入者就可能输入12种不同的情况,我们这里的要求就是输入者在输入对应的年份和月的时候,我们能自动打印出,该月对应的天数,因为我们这里的情况众多,所以我们就可以使用switch语句,又因为我们这里的月份有几个月的天数是一样的,那么我们在使用switch语句的时候就可以将这种情况放到一起,中间就可以加语句块,也不加break,然后放到这些情况中的最后一个再来写,因为题目告诉了我们有哪些月份是一样的,所以我们的代码如下:

#include <stdio.h>
int main()
{int year = 0;//初始化int month = 0;//初始化printf("请输入年份-》");//给出信息scanf("%d", &year);//接收输入的值printf("请输入月份-》");//给出信息scanf("%d", &month);//接收输入的值switch (month)//switch语句进行分类{case 1://一月case 3://三月case 5://五月case 7://七月case 8://八月case 10://十月case 12://十二月printf("该月的天数为31天\n");break;//case 4://四月case 6://六月case 9://九月case 11://十一月printf("该月的天数为30天\n");break;//case 2://二月}return 0;

第三步:
因为这里可能人们在输入月份的时候,可能会输入错,比如输入了一个13进去,那么我们这里就应该加个default语句上去,提醒使用者。代码如下:

#include <stdio.h>
int main()
{int year = 0;//初始化int month = 0;//初始化printf("请输入年份-》");//给出信息scanf("%d", &year);//接收输入的值printf("请输入月份-》");//给出信息scanf("%d", &month);//接收输入的值switch (month)//switch语句进行分类{case 1://一月case 3://三月case 5://五月case 7://七月case 8://八月case 10://十月case 12://十二月printf("该月的天数为31天\n");break;//case 4://四月case 6://六月case 9://九月case 11://十一月printf("该月的天数为30天\n");break;//case 2://二月default://提醒使用者输入错误printf("输入错误\n"}return 0;

第四步:
因为我们的2月中的天数他不是固定的,他会随着年份的不一样而发生更改,我们来看他说闰年的2月是29天,或者就是28天,那我们这里是不是就要现判断是不是闰年,我们再来看闰年的判断规则他说:要想是闰年就得满足下面的两个条件之一。我们先不看这两个条件是什么,我们看到两个之一我们是不是就能想到 ( || )这个操作符左边写条件一右边写条件二:
(条件一)||(条件二),那我们再看看这两个条件:一个是能被400整除,那么我们这个条件的表达式就长这样:year%400==0,我们可以将这个表达式放到条件一里面,第二个就是能被4整除但是不能被100整除,大家看到这个条件,是不是感觉他有点像两个条件,两个条件是连在一起的状态,一个不成立,那么整个就不成立,那么我们这里就可以用到(&&)这个操作符那么这个条件的表达式为:(year%4==0)&&(year%100!=0)我们就把这个表达式放到条件二中,那我们判断闰年的表达式也就为:(year%400==0)||(year%4=\=0)&&(year%100!=0))所以我们这里的case二下面的代码为;

#include <stdio.h>
int main()
{int year = 0;//初始化int month = 0;//初始化printf("请输入年份-》");//给出信息scanf("%d", &year);//接收输入的值printf("请输入月份-》");//给出信息scanf("%d", &month);//接收输入的值switch (month)//switch语句进行分类{case 1://一月case 3://三月case 5://五月case 7://七月case 8://八月case 10://十月case 12://十二月printf("该月的天数为31天\n");break;//case 4://四月case 6://六月case 9://九月case 11://十一月printf("该月的天数为30天\n");break;//case 2://二月if ((year % 400 == 0) || (year % 4 == 0) && (year % 100 != 0))//判断是否为闰年{printf("该月的天数为29天\n");}else{printf("该月的天数为28天\n");}break;default://提醒使用者输入错误printf("输入错误\n"}return 0;
}

那么这里我们这道题就结束了。


第四题解析

第四题:
第一步:
我们首先得提示一些信息,来告诉使用者应该输入什么东西,那么这里我们就要用到printf函数,然后我们要用scanf函数来接收值,那么这里我们就得创建变量来储存值,那么我们的代码实现如下:

#include<stdio.h>
int main()
{char scorce = 'a';//创建变量printf("请输入分数等级—》\n");//打印出一些信息scanf("%c", &scorce);//接收值return 0;
}

第二步:
因为这里有不同的等级,并且总类还非常的多,那么我们这里就可以直接使用switch语句,并且表达式直接写上我们创建的额变量score,因为这里的大写和小写对应的分数一模一样,那么我们这里也就可以将大写和小写的两个情况放到一起,以简化代码,又因为我们的case后面是可以直接写字符,所以我们不用转换成ascall码值,以免增加麻烦,那我们我们不同的情况下面对应的语句块就可以根据题目的信息直接用printf函数填写,那么我们的代码如下:

#include<stdio.h>
int main()
{char scorce = 'a';//创建变量printf("请输入分数等级—》\n");//打印出一些信息scanf("%c", &scorce);//接收值switch (scorce){case 'a':case'A':printf("分数为85分以上\n");break;case 'b':case'B':printf("分数为70~84分\n");break;case 'c':case'C':printf("分数为60~69分\n");break;case 'd':case'D':printf("分数为60分以下\n");break;}return 0;
}

第三步:
因为有时候,人们可能会输入的值不匹配,所以我们就会提醒使用者输入的信息错误,那么我们这里就得加一个default语句来提醒使用者代码如下:

#include<stdio.h>
int main()
{char scorce = 'a';//创建变量printf("请输入分数等级—》\n");//打印出一些信息scanf("%c", &scorce);//接收值switch (scorce){case 'a'://对应等级acase'A':printf("分数为85分以上\n");break;case 'b'://对应等级bcase'B':printf("分数为70~84分\n");break;case 'c'://对应等级ccase'C':printf("分数为60~69分\n");break;case 'd'://对应等级dcase'D':printf("分数为60分以下\n");break;default://对应输入错误printf("输入的分数等级不正确\n");}   return 0;
}

那么我们这道题就完成了。


第五题解析

第五题:

第一步:
老套路首先得提供给使用者一些基本的信息所以这里得用到printf函数,然后这里得输入一个数字所以我们得用到scanf函数并且得创建变量存储这个输入的值。代码如下:

#include<stdio.h>
int main()
{printf("请输入一个不超过四位的数->\n");//打印基本信息int x = 0;//初始化scanf("%d", &x);//输入一个值return 0;
}

第二步:
根据题目的意思可以得到我们这里的数字是一个不超过4位的正整数,那么我们这里就存在者多个情况,可以是一位数,二位数,三位数,四位数,当我们使用者输入一个数的时候,我们做的第一件事情应该是判断这是几位数,那我们如何来判断呢?我们可以这么想到( / )这个操作符,四位数/10等于三位数,三位数/10等于两位数,两位数/10等于一位数,而我们一位数/10就直接等于0,那我们这里是不是就可以使用循环,每次循环都/10,然后计算其循环的次数,这里我们就使用while循环,while后面的表达式就为x/10!=0,如果这个循环0次那么就对应着是1位数,循环1次就是两位数,循环2次就是三位数,循环3次就是4位数,那我们这里再创建一个变量用来计算循环的次数代码如下:

#include<stdio.h>
int main()
{printf("请输入一个不超过四位的数->\n");//打印基本信息int x = 0;//初始化scanf("%d", &x);//输入一个值int y = 0;//初始化用于记录循环的次数while (x / 10 != 0)//判断输入值的位数{y++;x = x / 10;}return 0;
}

第三步:
因为要求逆序输出对应的数字所以我们将不同位数的数字都进行分类,所以这里我们要将其分为4种情况,因为情况的种类众多,所以我们这里得用到switch语句,那么switch后面的表达式也就可以直接使用变量y,下面的case对应的情况也就可以直接写成y可能取得到的值,因为使用者可能输入的值超过4位数,所以我们这里得用到default语句来提醒使用者那我们的代码如下:

#include<stdio.h>
int main()
{printf("请输入一个不超过四位的数->\n");//打印基本信息int x = 0;//初始化scanf("%d", &x);//输入一个值int y = 0;//初始化用于记录循环的次数int b = x;//以免x的值发生变化while (b / 10 != 0)//判断输入值的位数{y++;b = b / 10;}switch (y){case 0:break;case 1 :break;case 2:break;case 3 :break;default:break;}return 0;
}

这里我们的大致的switch语句已经完成,剩下来的工作就是完成case下面的语句的填写,题目要求我们将输入的数字逆序输出,那么我们这里case 0这个下面的语句是最好写的,因为他是一位数,所以输入的什么就直接输出什么,那我们再来看case 1 这个下面的语句,因为这是一个两位数,所以我们首先得到其个位数上面的数,那就可以直接用这个数%10,想要得到十位数上的数就可以直接将这个数/10,那同样的道理case 2 对应的是三位数,那么我们这里得到个位数上的数的原理是一样的,但是十位数就得先将这个数/10,然后再将这个/10后的结果再来%10才能得到,大家可以动笔试一下体会体会,那么千位数上的数就可以直接让这个数/100便可以直接得到,最后就是case 3这个对应的是4位数,我们的个位,十位所使用的方法和三位数的一样,那我们如何来得到这个四位数上的千位所对应的数呢?我们可以先/100这样我们就可以得到一个两位数,这时我们再%10就可以得到这个百位上的数,那么千位就很简单直接/1000,便可以得到。那我们的代码如下:

#include<stdio.h>
int main()
{printf("请输入一个不超过四位的数->\n");//打印基本信息int x = 0;//初始化scanf("%d", &x);//输入一个值int y = 0;//初始化用于记录循环的次数int b = x;while (b / 10 != 0)//判断输入值的位数{y++;b = b / 10;}switch (y){case 0:printf("%d是一位数逆序为:%d", x,x);break;case 1 :printf("%d是二位数逆序为:%d %d", x,x%10,x/10);break;case 2:printf("%d是三位数逆序为:%d %d %d", x,x%10,x/10%10,x/100);break;case 3 :printf("%d是四位数逆序为:%d %d %d %d", x,x%10,x/10%10,x/100%10,x/1000);break;default:printf("输入的数据错误\n");break;}return 0;
}

看到这里我们的小伙伴应该能够明白这一题的思路,那我们这篇文章就结束了。
这里为了大家方便学习,本篇文章的所有代码大家点击链接获取
点击此处获取代码

c语言习题---(switch语句)相关推荐

  1. C语言编程 Switch 语句编写 最简单的日历

    Switch语句是C语言的几个分支结构 本次编程练习,是根据输入的今年的第几天,输出是 几月几日,星期几. 实现思路大致如下: 1.先读取系统时间,得知今年的年号, 2.根据年号获得今年的第一天是星期 ...

  2. switch matlab c语言,matlab switch语句使用

    switch 块有条件地执行一组语句从几个选择.每个选项所涵盖的一个 case 语句. 计算 switch_expression 是一个标量或字符串. 计算case_expression是标量,标量或 ...

  3. c++switch语言,C++ switch语句

    C++ switch语句从多个条件执行一个语句. 它就类似于在C++中的if-else-if语句. switch语句的基本语法如下所示 - switch(expression){ case value ...

  4. switch c语言格式,switch语句格式是什么

    switch语句格式为[switch(表达式){case 值1:语句体1:break:case 值2:语句体2:break:]:其中break表中断的意思,所有的值都不匹配的时候,就执行语句体defa ...

  5. 【C语言】switch语句的理解

    文章目录 一. 基本语法结构 二. 几点补充 补充一:关于 default 分支 补充二:多条匹配执行同一语句 补充三:在 case 语句中定义变量的问题 三. 几点建议 建议一:按执行频率排列 ca ...

  6. switch c语言格式,switch语句格式是什么?

    switch语句 Switch在一些计算机语言中是保留字,其作用大多情况下是进行判断选择:常和case.break.default一起使用. switch语句可以用于基于不同的条件来执行不同的动作. ...

  7. C语言:switch语句与if语句的区别

    if 语句:对条件进行判断,是否满足,根据判定的结果(真或假)执行相应的语句. if语句有三种形式: (1)单分支结构:if(条件)语句1 ,若为真,则执行语句:若为假,则不执行. (2)双分支结构: ...

  8. C语言 用switch语句实现多分支选择结构

    switch语句 1.switch语句是多分支选择语句,switch语句的作用是根据表达式的值跳转到不同的语句 2.switch语句的一般形式: switch(表达式) { case 常量1: 语句1 ...

  9. C语言if switch语句的基本用法

    一.if 1.if语句的一般形式: if(表达式) 语句1    //(表达式可以是关系表达式,逻辑表达式,甚至是数值表达式) [else语句2] 根据if语句的一般形式,if语句可以写成不同的形式, ...

  10. c语言学习switch语句

    显示输入整数除以3的余数. #include<stdio.h> int main(void) {int a;printf("请输入一个整数:");scanf(" ...

最新文章

  1. 37岁程序员被裁,120天没找到工作,无奈去小公司,结果懵了...
  2. UITableView当数据很少的时候,去掉多余的cell分割线
  3. c语言中removeDir的相反函数,C语言编程常见问题解答之常用函数的包括文件.doc
  4. WPF下如何去除WebBrowser的滚动条和捕获关闭事件
  5. vue商城项目开发:axios发送请求及列表数据展示
  6. 矩阵为奇异工作精度_外积与复合矩阵,特征值/奇异值的乘积型受控,Hodge对偶与伴随矩阵...
  7. .NET Core快速入门教程 3、我的第一个.NET Core App (CentOS篇)
  8. leetcode212. 单词搜索 II
  9. USACO milk
  10. TeamViewer中一些按钮的功能
  11. 计算机地址输入法教案,计算机教案(输入法
  12. cruzer php sandisk 闪迪u盘量产工具_sandisk cruzer 32G U盘量产工具下载
  13. 共阳极数码管编码表_LED数码管你知道多少?
  14. 以漫画的形式描述联邦学习
  15. python获取文件大小
  16. ubuntu下docker的lnmp(二) 安装php-fpm之 下载镜像启动容器
  17. 私有云厂商云宏破解金融行业转型“数字底座”难题
  18. RET RETF IRET IRETD 指令的不同
  19. 速看!deep learning(rnn、cnn)调参的经验
  20. Cocos2dx 3.x创建Layer的步骤

热门文章

  1. VMware Ubuntu 22.04 配置静态IP
  2. python中飞机票购买程序_「最低折扣机票查询」Python 爬取携程所有机票找出最低折扣机票,让你无忧回家过年 - seo实验室...
  3. python执行不了elif_Python if、elif、else不运行if、elif或else statemens
  4. Hive 除以0处理
  5. 基于扩展卡尔曼滤波(EKF)的机器人状态估计
  6. 小程序中公告消息左右滚动跑马灯效果
  7. RMAN-00571
  8. 用Jdk自带工具keytool生成受信任的证书
  9. 职场中不可深交的五类人
  10. SQL命令创建数据表和修改数据表的方法