日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言习题---(switch语句)

發布時間:2023/12/20 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言习题---(switch语句) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這里寫目錄標題

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

前言

>親愛的小伙伴們大家好啊,這篇文章都是關于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语句)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。