>亲爱的小伙伴们大家好啊,这篇文章都是关于switch语句的一些练习题,目的为了让大家能够学的更加的扎实,废话不多说开始刷题。
第一题:
求下述代码的运行结果
#include
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
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
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
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
int main()
{
int year = 0;//初始化
int month = 0;//初始化
printf("请输入年份-》");//给出信息
scanf("%d", &year);//接收输入的值
printf("请输入月份-》");//给出信息
scanf("%d", &month);//接收输入的值
return 0;
}
第二步:
因为我们的一年有12个月,所以这里我们的输入者就可能输入12种不同的情况,我们这里的要求就是输入者在输入对应的年份和月的时候,我们能自动打印出,该月对应的天数,因为我们这里的情况众多,所以我们就可以使用switch语句,又因为我们这里的月份有几个月的天数是一样的,那么我们在使用switch语句的时候就可以将这种情况放到一起,中间就可以加语句块,也不加break,然后放到这些情况中的最后一个再来写,因为题目告诉了我们有哪些月份是一样的,所以我们的代码如下:
#include
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
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
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
int main()
{
char scorce = 'a';//创建变量
printf("请输入分数等级—》\n");//打印出一些信息
scanf("%c", &scorce);//接收值
return 0;
}
第二步:
因为这里有不同的等级,并且总类还非常的多,那么我们这里就可以直接使用switch语句,并且表达式直接写上我们创建的额变量score,因为这里的大写和小写对应的分数一模一样,那么我们这里也就可以将大写和小写的两个情况放到一起,以简化代码,又因为我们的case后面是可以直接写字符,所以我们不用转换成ascall码值,以免增加麻烦,那我们我们不同的情况下面对应的语句块就可以根据题目的信息直接用printf函数填写,那么我们的代码如下:
#include
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
int main()
{
char scorce = 'a';//创建变量
printf("请输入分数等级—》\n");//打印出一些信息
scanf("%c", &scorce);//接收值
switch (scorce)
{
case 'a'://对应等级a
case'A':
printf("分数为85分以上\n");
break;
case 'b'://对应等级b
case'B':
printf("分数为70~84分\n");
break;
case 'c'://对应等级c
case'C':
printf("分数为60~69分\n");
break;
case 'd'://对应等级d
case'D':
printf("分数为60分以下\n");
break;
default://对应输入错误
printf("输入的分数等级不正确\n");
}
return 0;
}
那么我们这道题就完成了。
第五题:
第一步:
老套路首先得提供给使用者一些基本的信息所以这里得用到printf函数,然后这里得输入一个数字所以我们得用到scanf函数并且得创建变量存储这个输入的值。代码如下:
#include
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
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
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
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;
}
看到这里我们的小伙伴应该能够明白这一题的思路,那我们这篇文章就结束了。
这里为了大家方便学习,本篇文章的所有代码大家点击链接获取
点击此处获取代码