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...