新人關於switch語句問題關於switch語句的使用問題

2021-03-08 12:24:23 字數 5402 閱讀 5909

1樓:匿名使用者

x=4;

switch(m)

當m = 5的時候,由於沒有對應的case。就直接執行到default. x = 5;

但是 default 後沒有 break。 繼續執行下一個case語句 x = 6

同樣,case 1 也沒有 break. 執行case 2 x = 7. 此時到break停止。

當m= 4 的時候,直接執行case 4. x = 5了。

原理非常簡單,遇到break才停止。否則就一直執行下條case.

2樓:匿名使用者

switch 語 句 的 格 式 如 下:

switch( 表 達 式)

---- 從 表 面 上 看 來,switch 語 句 與pascal 語 言 中 的case 語 句 以 及foxbase 中 的do case 語 句 非 常 類 似, 只 是 關 鍵 字 有 所 不 同: 一 個 是switch; 而 另 一 個 是case 或do case。 但 如 果 仔 細 閱 讀 過 教 材 或 有 關 參 考 書 的 話, 就 絕 不 會 有 此 想 法。

從 語 句 的 功 能 上 來 看,pascal 和case 語 句 或foxbase 的do case 語 句 中 的 常 量 表 達 式 是 用 來 與case 後 面 的 表 達 式 比 較 以 確 定 執 行 哪 一 個 語 句, 一 旦 執 行 了 某 一 語 句, 則 會 自 動 地 結 束 這 一case 後 的 語 句; 而c 的switch 語 句 則 不 然。 首 先,switch 語 句 中 的 常 量 表 達 式 只 是 起 到 一 個 入 口 作 用, 一 旦 執 行 了 相 應 的 語 句 後, 只 要 沒 有 強 迫 中 斷 語 句(break), 它 就 會 一 直 按 順 序 繼 續 執 行 下 去, 也 就 是 會 執 行 其 它case 後 面 的 語 句, 直 到 遇 到「}」 符 號 才 停 止。 乍 看 覺 得 有 點 不 可 事 議, 但 若 仔 細 回 味 且 切 身 編 程 體 會, 那 麼 就 會 感 司 到c 的switch 語 句 的 獨 到 之 處。

接 下 來 就 幾 個 具 體 例 子 來 剖 析:switch 語 句 的 特 點 以 及 區 別 於 其 它 語 言 中 的 相 應 語 句 的 妙 處。

---- 第 一 個 例 子: 根 據 輸 入 的 百 分 制 成 績, 然 後 給 出『a』 ~『e』 相 應 的 等 級 符(90-100 為『a』、80-89 為『b』、70-79 為『b』、60-69 為『c』、0-59 為『e』)。 主 要 的 處 理 程 序 段 如 下:

(temp、score、grade 皆 為 整 型 變 量)

temp=score/10;

switch(temp)

printf(「the grade is %c」,grade);

---- 仔 細 閱 讀 這 段 程 序( 根 據c 語 言 的 特 點), 就 會 發 現 有 很 多 錯 誤。 首 先, 對100 分 和 低 於50 分 的 情 況 沒 有 考 慮; 其 次,c 語 言 的switch 特 點 是 順 序 執 行, 那 麼 這 段 程 序 不 輸 入 的 分 數 如 何, 最 後 的 輸 出 都 將 是『e』。 因 此, 修 改 這 段 程 序, 可 以 得 到 一 個 正 確 答 案 是:

temp=score/10;

switch(temp)

printf(「the grade is %c,grade」);

---- 但 這 麼 一 個 結 果 還 不 算 是 一 個 好 的c 程 序, 因 為 它 只 是 能 得 到 正 確 的 解, 沒 有 真 正 用 到c 的 特 點。 如 果 將c 的 特 點 運 用 到 這 段 程 序 中, 則 程 序 將 優 化 成 如 下:

grade=『a』;

temp=score/10;

switch(temp)

printf(「the grade is %c,grade」);

---- 從 這 段 程 序 中, 我 們 可 以 體 會 到 前 面 所 說 的 該 語 句 的 特 點。

---- 第 二 個 例 子: 運 輸 公 司 對 用 戶 計 算 運 費。 距 離(s) 越 遠, 每 公 裡 運 費 越 低。 具 體 標 準 如 下:

s < 250 (km) 沒 有 折 扣

250 < =s < 500 (km) 2% 折 扣

500 < =s < 1000 (km) 5% 折 扣

1000 < =s < 2000(km) 8% 折 扣

2000 < =s < 3000(km) 10% 折 扣

3000 < =s (km) 15% 折 扣

---- 設 每 公 裡 每 噸 貨 物 的 基 本 運 費 為p, 貨 物 重 為w, 距 離 為s, 折 扣 為d, 則 總 運 費 計 算 公 式 為:

---- f=p*w*s*(1-d)

---- 分 析 此 問 題, 折 扣 的 變 化 是 有 規 律 的: 折 扣 的「 變 化 點」 都 是250 的 倍 數(250,500,1000,2000,3000)。 利 用 這 一 特 點, 可 以 再 設 一 變 量c, 它 代 表250 的 倍 數。

當c<1 時, 無 折 扣;1<=c<2 時, 折 扣 為d=2%;2<=c<4 時,d=5%;4<=c<8 時,d=8%;8<=c<12 時,d=10%; c>=12 時,d=15%。 所 以 可 以 有 如 下 沒 有 錯 誤 的 程 序 段:

scanf(「%f,%f,%d」,&p,&w,&s);

if(s>=3000)c=12

else c=s/250

switch(c)

f=p*w*s*(1-d/100.0);

printf(「freight%15.f」,f);

---- 如 同 前 一 個 題 目, 這 個 程 序 段 也 完 全 可 以 利 用switch 特 點, 改 進 優 化 得 到 如 下 程 序 段:

if(s>=3000)c=12

else c=s/250

switch(c)

f=p*w*s*(1-d/100.0);

printf(「freight%15.4f」,f);

3樓:匿名使用者

也許是x值是不斷變化吧

m=4時,x已經是5了,輸出5後,在加1存入x中,就是6m=5時,x應該輸出6,但是default語句是最後才執行的一個語句,也就是直接輸出x的值,x++演變成++x,x輸出7吧,

這個我也不太清楚,頭有點昏吧

你還是問老師吧。

4樓:i艾弗森

正確答案:

m=1時,結果為6

m=2時, x=5

m= 3, x=6

m= 4 ,x=5

m >=5時,都為7。

以上為正確答案.

最重要的是那個break語句!它決定了什麼時候退出迴圈!

5樓:匿名使用者

你的c學得不是很紮實啊,不過不用著急,多問老師問題,老師會知道為什麼,這個語句是你對break和default的不瞭解,多做些程式。你可以留個**,我雙休日可以給你看c語言的問題,只限c.

6樓:匿名使用者

小 case

因為switch只有在遇到break時才會停止所以x=1,1++=2,再執行x++,等於3.這時遇到break在3時停止.

x=2,2++=3,遇到break停止.

x=3,4是同理可得.

x=5,執行default ,x++ 得6,還須執行case 1 : x++ ;case 2 : x++ ;break ;等於8,不知道你老師為什麼告訴你是7,失望!

我做了個程式,你帶著去問你老師怎麼會等於7,靠!

#include

test(int x)

return(x);

}void main()}

7樓:匿名使用者

對~等於5的時候是6~不是7~

關於switch語句的使用問題

8樓:下海的孤魂

switch結構裡少了default語句。

應該如下這樣,所有case完成後,最下面加上一個default。

以後請教大家時,出錯資訊裡把行數也拷貝上來,可以更快地看出問題出在**。比如「warning c4060。。。」之前,應該還有出錯的行數資訊的。

switch( (int)a/10 )

9樓:百奇一家

case 9:b='a';break;

case 8:b='b';break;

這是你出錯的兩句,我試了,可以執行

關於switch語句的問題

10樓:

第一個switch語句不能接受浮點型的引數

第二個和三個應該都是對的吧,不過要記的加break哦。

11樓:匿名使用者

switch 需要整形資料

後面兩個應該是對的

另外每個case後面應該要有break

12樓:匿名使用者

switch必須是整型,不能是浮點型

有關switch語句的問題

13樓:匿名使用者

樓上回答有誤,如果default放在第一排,那會直接執行default。

14樓:

照樣執行default語句後的語句序列.

switch 語句 是一個多通道開關,無論 default 放在 何處,都要按次序檢查 case 語句,case 全沒通過,才走 default。滿足 case 條件的地方,就是一個入口,遇break才跳出switch。遇不到break,不會跳出。

int s=2;

switch(s)

s=1 打出 11

s=2 打出 2211

s=3 打出 dd

-----------------

int s=2;

switch(s)

s=1 打出 11

s=2 打出 22dd

s=3 打出 dd

15樓:手機使用者

你的問題有二:1、a,i變數重名

2、未輸入字元。下面是改正後的程式。

#include

int main()

for(i=0;a[i]!='#';i++) }sumcount=acount+ecount+icount+ocount+ucount;

cout<>i;

return 0;}

小白求教,關於高達貼紙的問題,新人小白求教,關於案例Space Shooter 的移動問題

其實不追求美觀的話找好位置貼上就是,追求美觀的話,將透明的邊切掉,在預定位置蘸取少量水,移動到合適位置時,用棉棒擦乾。另外那個所謂的膜別刮,那個就是幫貼紙粘在模型上的 另外你這是貼刮貼的方法吧,膠貼就是我上面所說的 分割好的貼紙是膠貼。一般貼紙有四種,不乾膠 膠貼 刮貼 水貼。模型一般自帶前三種,水...

新人關於erp開發的一些問題,新人關於ERP開發的一些問題

erp是企業資訊管理。與開發與管理都有關係比較雜的一個東西。如果要走的遠就要熟悉企業財務還要熟悉企業管理,還要熟悉二次開發。1 需要懂工廠的基本業務 2 需要懂一些財務基本知識 3 和非技術人員溝通時儘量往管理的思路上去靠 想辦法走技術管理的路,多多學習erp的管理知識,和一些資料處理分析。要麼就多...

sql語句問題,關於BETWEEN AND和DATE的

1 開啟sqlservermanagementstudio管理工具,連線上資料庫,建立一張測試表,用於測試between.and查詢結果是否包含邊界值。createtabletestbteween col1varchar 200 notnull,col2varchar 200 null,col3in...