c语言习题---(switch语句)
這里寫目錄標(biāo)題
- 前言
- 題目合集
- 第一題解析:
- 第二題解析
- 第三題解析
- 第四題解析
- 第五題解析
前言
>親愛的小伙伴們大家好啊,這篇文章都是關(guān)于switch語句的一些練習(xí)題,目的為了讓大家能夠?qū)W的更加的扎實(shí),廢話不多說開始刷題。
題目合集
第一題:
求下述代碼的運(yùn)行結(jié)果
第二題:
求下述代碼的運(yùn)算結(jié)果
第三題:
第四題:
第五題:
第一題解析:
第一題:
#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; }我們來看一下這個(gè)代碼,我們前面的篇文章說過:case后面是可以寫成字符的類型,因?yàn)槲覀冸娔X在儲存字符的時(shí)候,實(shí)際上儲存的是該字符對應(yīng)的ascall碼值,因?yàn)槲覀冞@里所有的case后面全是字符,所以我們就只用看switch后面的表達(dá)式里面的運(yùn)算結(jié)果,該結(jié)果就是變量n的值,那么我們就可以查詢一下ascall碼值99所對應(yīng)的字符
這里的99對應(yīng)的是c,所以我們這里就會從case c開始執(zhí)行,又因?yàn)閏ase c,case d里面的語句塊沒有break語句,所以當(dāng)代碼在執(zhí)行的時(shí)候中途是不會中斷的,所以他會一直執(zhí)行到default語句里面的break然后結(jié)束,那么我們這里打印的結(jié)果就是: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; }我們第二題就比第一題稍微復(fù)雜一點(diǎn),我們的switch語句跟 if語句是一樣的,都可以相互嵌套,所以我們在做switch嵌套題的時(shí)候,我們要注意switch語句中的break到底對應(yīng)的是外層switch,還是內(nèi)部嵌套的switch。
第一步:
首先我們得看初始信息:程序一開始將x,y,z進(jìn)行初始化分別給他們賦值為:1,2,3。
第二步:
看最外層的switch語句中的表達(dá)式的結(jié)果,這里我們的表達(dá)式是x>0,那么我們這里的x的值為1 ,確實(shí)大于0,所以我們這里的表達(dá)式的結(jié)果為真,所以我們這里的表達(dá)式的結(jié)果就為1,所以我們就會進(jìn)入case 1。
第三步:
進(jìn)入了case 1,我們就看一下case 1后面的語句塊是什么,這時(shí)候我們發(fā)現(xiàn)case 1里面裝的又是一個(gè)switch語句,那么同樣的道理我們再看這個(gè)case 1 里面的switch語句的表達(dá)式,我們發(fā)現(xiàn)表達(dá)式為y<0,而我們y的值為2,所以我們這里的表達(dá)式為假,為假的話這個(gè)表達(dá)式的結(jié)果就是0。于是我們就會進(jìn)入case 0 這種情況,但是我們這里發(fā)現(xiàn)下面的case所對應(yīng)的情況中沒有case 0,也沒有default,所以我們這個(gè)內(nèi)部嵌套的switch不會有任何的作用,但是我們這個(gè)內(nèi)部嵌套的switch語句在運(yùn)行完之后,外部switch中的case 1 的語句塊中沒有break語句,所以我們外部的switch在執(zhí)行完case 1 之后就會繼續(xù)執(zhí)行下面的情況,也就是case 0 。
第四步:
我們再來看外部switch語句中的case 0 的內(nèi)容,這時(shí)候我們又發(fā)現(xiàn)這里面又嵌套了一個(gè)switch語句,那我們就來看這個(gè)內(nèi)部的switch語句中的表達(dá)式為z==3,我們這里的z確實(shí)等于3,所以這個(gè)表達(dá)式的結(jié)果為真,為真的話返回的值就是1,所以我們這里就會執(zhí)行內(nèi)部switch中的case 1 下面的語句的內(nèi)容,他的內(nèi)容為打印#這個(gè)字符,并且我們這個(gè)case 1 里面有break,所以我們就會跳出這個(gè)內(nèi)部的switch語句,但是外部switch中的case 0語句塊中沒有break語句,所以他就會繼續(xù)往下執(zhí)行default語句
第五步:
default語句中的內(nèi)容為打印&字符,所以我們就直接打印出&字符然后整個(gè)程序就結(jié)束了。
所以我們這段代碼的結(jié)果為#&。
第三題解析
第三題:
第一步:
我們首先得打印一些信息給使用者,告訴他們應(yīng)該輸入什么,然后我們就得創(chuàng)建兩個(gè)變量來存儲輸入的值,一個(gè)用來儲存年份,一個(gè)用來存儲月份,并且得用到scanf函數(shù)來接收輸入的值,那我們的代碼實(shí)現(xiàn)如下:
第二步:
因?yàn)槲覀兊囊荒暧?2個(gè)月,所以這里我們的輸入者就可能輸入12種不同的情況,我們這里的要求就是輸入者在輸入對應(yīng)的年份和月的時(shí)候,我們能自動打印出,該月對應(yīng)的天數(shù),因?yàn)槲覀冞@里的情況眾多,所以我們就可以使用switch語句,又因?yàn)槲覀冞@里的月份有幾個(gè)月的天數(shù)是一樣的,那么我們在使用switch語句的時(shí)候就可以將這種情況放到一起,中間就可以加語句塊,也不加break,然后放到這些情況中的最后一個(gè)再來寫,因?yàn)轭}目告訴了我們有哪些月份是一樣的,所以我們的代碼如下:
第三步:
因?yàn)檫@里可能人們在輸入月份的時(shí)候,可能會輸入錯,比如輸入了一個(gè)13進(jìn)去,那么我們這里就應(yīng)該加個(gè)default語句上去,提醒使用者。代碼如下:
第四步:
因?yàn)槲覀兊?月中的天數(shù)他不是固定的,他會隨著年份的不一樣而發(fā)生更改,我們來看他說閏年的2月是29天,或者就是28天,那我們這里是不是就要現(xiàn)判斷是不是閏年,我們再來看閏年的判斷規(guī)則他說:要想是閏年就得滿足下面的兩個(gè)條件之一。我們先不看這兩個(gè)條件是什么,我們看到兩個(gè)之一我們是不是就能想到 ( || )這個(gè)操作符左邊寫條件一右邊寫條件二:
(條件一)||(條件二),那我們再看看這兩個(gè)條件:一個(gè)是能被400整除,那么我們這個(gè)條件的表達(dá)式就長這樣:year%400==0,我們可以將這個(gè)表達(dá)式放到條件一里面,第二個(gè)就是能被4整除但是不能被100整除,大家看到這個(gè)條件,是不是感覺他有點(diǎn)像兩個(gè)條件,兩個(gè)條件是連在一起的狀態(tài),一個(gè)不成立,那么整個(gè)就不成立,那么我們這里就可以用到(&&)這個(gè)操作符那么這個(gè)條件的表達(dá)式為:(year%4==0)&&(year%100!=0)我們就把這個(gè)表達(dá)式放到條件二中,那我們判斷閏年的表達(dá)式也就為:(year%400==0)||(year%4=\=0)&&(year%100!=0))所以我們這里的case二下面的代碼為;
那么這里我們這道題就結(jié)束了。
第四題解析
第四題:
第一步:
我們首先得提示一些信息,來告訴使用者應(yīng)該輸入什么東西,那么這里我們就要用到printf函數(shù),然后我們要用scanf函數(shù)來接收值,那么這里我們就得創(chuàng)建變量來儲存值,那么我們的代碼實(shí)現(xiàn)如下:
第二步:
因?yàn)檫@里有不同的等級,并且總類還非常的多,那么我們這里就可以直接使用switch語句,并且表達(dá)式直接寫上我們創(chuàng)建的額變量score,因?yàn)檫@里的大寫和小寫對應(yīng)的分?jǐn)?shù)一模一樣,那么我們這里也就可以將大寫和小寫的兩個(gè)情況放到一起,以簡化代碼,又因?yàn)槲覀兊腸ase后面是可以直接寫字符,所以我們不用轉(zhuǎn)換成ascall碼值,以免增加麻煩,那我們我們不同的情況下面對應(yīng)的語句塊就可以根據(jù)題目的信息直接用printf函數(shù)填寫,那么我們的代碼如下:
第三步:
因?yàn)橛袝r(shí)候,人們可能會輸入的值不匹配,所以我們就會提醒使用者輸入的信息錯誤,那么我們這里就得加一個(gè)default語句來提醒使用者代碼如下:
那么我們這道題就完成了。
第五題解析
第五題:
第一步:
老套路首先得提供給使用者一些基本的信息所以這里得用到printf函數(shù),然后這里得輸入一個(gè)數(shù)字所以我們得用到scanf函數(shù)并且得創(chuàng)建變量存儲這個(gè)輸入的值。代碼如下:
第二步:
根據(jù)題目的意思可以得到我們這里的數(shù)字是一個(gè)不超過4位的正整數(shù),那么我們這里就存在者多個(gè)情況,可以是一位數(shù),二位數(shù),三位數(shù),四位數(shù),當(dāng)我們使用者輸入一個(gè)數(shù)的時(shí)候,我們做的第一件事情應(yīng)該是判斷這是幾位數(shù),那我們?nèi)绾蝸砼袛嗄?#xff1f;我們可以這么想到( / )這個(gè)操作符,四位數(shù)/10等于三位數(shù),三位數(shù)/10等于兩位數(shù),兩位數(shù)/10等于一位數(shù),而我們一位數(shù)/10就直接等于0,那我們這里是不是就可以使用循環(huán),每次循環(huán)都/10,然后計(jì)算其循環(huán)的次數(shù),這里我們就使用while循環(huán),while后面的表達(dá)式就為x/10!=0,如果這個(gè)循環(huán)0次那么就對應(yīng)著是1位數(shù),循環(huán)1次就是兩位數(shù),循環(huán)2次就是三位數(shù),循環(huán)3次就是4位數(shù),那我們這里再創(chuàng)建一個(gè)變量用來計(jì)算循環(huán)的次數(shù)代碼如下:
第三步:
因?yàn)橐竽嫘蜉敵鰧?yīng)的數(shù)字所以我們將不同位數(shù)的數(shù)字都進(jìn)行分類,所以這里我們要將其分為4種情況,因?yàn)榍闆r的種類眾多,所以我們這里得用到switch語句,那么switch后面的表達(dá)式也就可以直接使用變量y,下面的case對應(yīng)的情況也就可以直接寫成y可能取得到的值,因?yàn)槭褂谜呖赡茌斎氲闹党^4位數(shù),所以我們這里得用到default語句來提醒使用者那我們的代碼如下:
這里我們的大致的switch語句已經(jīng)完成,剩下來的工作就是完成case下面的語句的填寫,題目要求我們將輸入的數(shù)字逆序輸出,那么我們這里case 0這個(gè)下面的語句是最好寫的,因?yàn)樗且晃粩?shù),所以輸入的什么就直接輸出什么,那我們再來看case 1 這個(gè)下面的語句,因?yàn)檫@是一個(gè)兩位數(shù),所以我們首先得到其個(gè)位數(shù)上面的數(shù),那就可以直接用這個(gè)數(shù)%10,想要得到十位數(shù)上的數(shù)就可以直接將這個(gè)數(shù)/10,那同樣的道理case 2 對應(yīng)的是三位數(shù),那么我們這里得到個(gè)位數(shù)上的數(shù)的原理是一樣的,但是十位數(shù)就得先將這個(gè)數(shù)/10,然后再將這個(gè)/10后的結(jié)果再來%10才能得到,大家可以動筆試一下體會體會,那么千位數(shù)上的數(shù)就可以直接讓這個(gè)數(shù)/100便可以直接得到,最后就是case 3這個(gè)對應(yīng)的是4位數(shù),我們的個(gè)位,十位所使用的方法和三位數(shù)的一樣,那我們?nèi)绾蝸淼玫竭@個(gè)四位數(shù)上的千位所對應(yīng)的數(shù)呢?我們可以先/100這樣我們就可以得到一個(gè)兩位數(shù),這時(shí)我們再%10就可以得到這個(gè)百位上的數(shù),那么千位就很簡單直接/1000,便可以得到。那我們的代碼如下:
#include<stdio.h> int main() {printf("請輸入一個(gè)不超過四位的數(shù)->\n");//打印基本信息int x = 0;//初始化scanf("%d", &x);//輸入一個(gè)值int y = 0;//初始化用于記錄循環(huán)的次數(shù)int b = x;while (b / 10 != 0)//判斷輸入值的位數(shù){y++;b = b / 10;}switch (y){case 0:printf("%d是一位數(shù)逆序?yàn)?#xff1a;%d", x,x);break;case 1 :printf("%d是二位數(shù)逆序?yàn)?#xff1a;%d %d", x,x%10,x/10);break;case 2:printf("%d是三位數(shù)逆序?yàn)?#xff1a;%d %d %d", x,x%10,x/10%10,x/100);break;case 3 :printf("%d是四位數(shù)逆序?yàn)?#xff1a;%d %d %d %d", x,x%10,x/10%10,x/100%10,x/1000);break;default:printf("輸入的數(shù)據(jù)錯誤\n");break;}return 0; }看到這里我們的小伙伴應(yīng)該能夠明白這一題的思路,那我們這篇文章就結(jié)束了。
這里為了大家方便學(xué)習(xí),本篇文章的所有代碼大家點(diǎn)擊鏈接獲取
點(diǎn)擊此處獲取代碼
總結(jié)
以上是生活随笔為你收集整理的c语言习题---(switch语句)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。