Trending News
c++ switch 和 while迴圈 基礎題
此乃由下述的網站 所提供的題目
http://www.tcgs.tc.edu.tw/~sagit/cpp/p5.htm
http://www.tcgs.tc.edu.tw/~sagit/cpp/p6.htm
由於if 我已大致了解 再麻煩各位網友的幫忙了 目前要邁向下一階段 swiich 和 while迴圈 一起
switch題
1.編班問題
自由國小有新生 200 名,要編入四個班級裡,學校的作法是將學生依名字的筆劃順序編了 1 到 200 號,然後 1 號在一班、 2 號在二班、 3 號在三班、 4 號在四班,而 5 號又回到一班、 6 號在二班、 7 號在三班、 8 號在四班,以此類推……
現在,我們要寫一個程式,輸入一個 1 到 200 的整數(不必檢查是否超出這個範圍),印出該名學生要編到哪一班,例如:
輸入1:75
輸出1:三班
輸入2:120
輸出2:四班
2.班級編號
為了方便記錄,我們常常把年級和班級以三個數字來稱呼,例如 "三年二班" 稱為 302、二年十一班稱為 211 等,其中百位數為年級,而後兩位數為班級。台中市自由路上的某間女子高中有三個年級,每個年級各有18個班。
現在我們要寫一個程式,輸入前面提到的三位數,然後印出它所代表的班級,如果輸入了無法對應的年級或班級,則印出 "某年" 或 "某班",例如:
輸入1:302
輸出1:三年二班
輸入2:211
輸出2:二年十一班
輸入3:501
輸出3:某年一班
輸入4:119
輸出4:一年某班
提示:請將年級和班級分開用兩次的 switch 來處理,至於如何從輸入的數字取得它的年級和班級,則可以使用 /、% 這兩個運算子。
3.四則運算
請你寫一個程式,可以輸入類似 123+456 這樣的運算式,前後兩個數都是浮點數,中間的運算符號可以是加(+)、減(-)、乘(*)、除(/)等四種,然後印出計算結果,例如:
輸入1:123+456
輸出1:579
輸入2:543-111
輸出2:432
輸入3:30*12
輸出3:360
輸入4:987/4
輸出4:246.75
提示:運算符號為一個字元,以請 char 型態宣告,而在 switch 裡則是用 case '+' : 這樣的語法,也就是把字元前後加上 ' 符號。
while迴圈
1.第二大的因數
對於每個正整數來說,至少有兩個因數─ 1 和自己。現在要寫一個程式,輸入一個正整數 N,印出 N 的因數中第二大那個數。(也就是僅次於 N 的因數)例如:
輸入1:100
輸出1:50
輸入2:13
輸出2:1
提示:假設你輸入的數是 n,則從 n-1、n-2 一個一個試下來,第一個找到 n 的因數就是它第二大的因數。
2.不超過 10000 的最大次方
對於每個小於 10000 的正整數 A,一定有一個正整數 N,使得 A 的 N 次方小於或等於 10000,而 A 的 N+1 次方則超過 10000。現在要寫一個程式,輸入一個整數 A,印出對應的 N 以及 A 的 N 次方的值,例如:
輸入1:10
輸出1:4 10000
輸入2:2
輸出2:13 8192
提示:用一個變數去記錄 a 的 n 次方,每經過一次迴圈,就把它乘上 a 的值,並同時把 n 加一,直到超過 10000 為止。
3.所有位數和
輸入一個正整數,然後印出它所有位數和。例如:
輸入1:123456789
輸出1:45
輸入2:22205108
輸出2:20
提示:我們可以該數除以 10 取其商以及餘數,餘數即是個位數的值,而商則是去掉個位數以後剩下的部分。如此反覆即可算出所有位數的和。
switch題
1.編班問題
自由國小有新生 200 名,要編入四個班級裡,學校的作法是將學生依名字的筆劃順序編了 1 到 200 號,然後 1 號在一班、 2 號在二班、 3 號在三班、 4 號在四班,而 5 號又回到一班、 6 號在二班、 7 號在三班、 8 號在四班,以此類推……
關於這一題 如何判斷 x<=0||x>200 輸入錯誤
還有關於if 和 switch 如何一起使用呢
麻煩大大幫我看一下
{ int a;
cin >> a;
switch(a%4){
case 1:
cout<< "一班" <
a 為輸入錯誤 如何加在 我寫的程式
int a;
cin >> a;
switch(a%4){
case 1:
cout<< "一班" <
int a;
cin>>a;
switch(a%4){
case 1 :
cout<< "一班" <
scanf("%d", &num);
cls = num / (200/5) +1;
關於大大所寫的這題 scanf還有%d &可以麻煩一一解說一下為何使用它嗎
如果太麻煩 也不勉強 還是很謝謝大大您的幫助
2 Answers
- Jacob LeeLv 71 decade agoFavorite Answer
1. switch 一定要配 case, case 裡99.99999%要 break
if 不一定要配 else
2. case 一定是整數,所以 switch 只能對整數
if 只看它是不是 0 (false)。不是 0,就都是真 (true)
所以,double, float, int, bool char ... 都可以
3. 也因此,if 可以是範圍,switch 不容易寫成範圍。
4. 如果是一堆的 if,(通常要4~5個以上)速度會很慢!
設法把它們變成整數,改用 switch,速度快很多!!
2008-09-10 07:16:28 補充:
至於要如何一起使用?
就像堆積木一樣!
只要堆起來不會倒、像你要的東西,
就是對的寫法!
(不一定是好的寫法!!)
加油! ^_^
2008-09-11 06:36:12 補充:
沒人要幫你,我就下海了。
請先看意見,自己練過,再看下面的東西!
因為你問 switch / if,其它的 code 我多數省略
scanf("%d", &num);
cls = num / (200/5) +1; // +1 為了方便 cls = 班; 不加也可,case 要從 0開始!
switch (cls) // switch 寫法
{ case 1: 一班; break;
case 2: 二班; break;
...
case 5: 五班; break;
defaule: 錯誤處理; break;
}
scanf("%d", &num);
cls = num / (200/50) +1; // 可以省略
if (num<0 || num >=201) { 錯誤; } // if 寫法
else if (num < 51) { 一班; }
else if (num < 101) { 二班; }
...
else {num < 201 }{ 五班; }
char *Grad, *Clas;
scanf("%d", &num);
grad = num / 100;
clas = num %100;
switch (grad)
{ case 1: Grad = "一"; break;
case 2: Grad = "二"; break;
case 3: Grad = "三"; break;
default: Grad = "某"; break;
}
switch (clas)
{ case 1: Clas = " 1"; break;
case 2: Grad = " 2"; break;
...
case 18: Grad = "18"; break;
default: Grad = "某"; break;
}
printf("%s年%s班", Grad, Clas);
註:這題 clas 可用
if (clas >= 1 && clas <19)
{ Clas = sprintf(buf, "%02d", clas); }
else Clas = "某";
(最前面要加 char buf[8];)
其它你就自己練習了!
有了上面二個範例,下面的應該要完全自己練習,才真的有幫你。
不過,迷你計算機、找第二大 兩題其實是有一點程度的難題!
寫小程式沒多少差;
寫大時,...
初學者,先把積木堆起來不會倒!
將來,再學怎麼堆好它!
(找第二大因數那題,你要是照範例寫,我可以寫出快你數百倍以上的程式)
當你語法會了,要學演算法時,
寫不出10倍以上的程式,再發問。
加油! ^_^
2008-09-11 06:36:59 補充:
有個 default 打成 defaule 了! :$
2008-09-11 06:37:56 補充:
你一年多前一問
http://tw.knowledge.yahoo.com/question/question?qi...
我有補點竟見。
請回去看。
2008-09-12 09:08:26 補充:
cin >> a;
if (a<1 || a>200)
cout << "錯誤\n";
switch(a%4)
沒事不要用 endl!程式N重變慢!
下面是由快到慢的同一列程式!
cout << "錯誤\n";
cout << "錯誤" << '\n'
cout << "錯誤" << "\n";
cout << "錯誤" << endl; // 功能多了一小點點,多數情況下用不到!
2008-09-12 09:08:38 補充:
scanf("%d", &num);
scanf 是 C 的寫法。
速度也 C++ 的 >> 快,但只能輸入 基本型態+字串。
C++ 把 >> overload 後,可輸入各種型態!
但也因此是它慢的原因〝之一〞(還有其它原因)。
scanf 要告訴它:你要使用者輸入的是什麼型態,常用的有:
d: 十進位
i: 整數(可以是八進位等)
f: float
lf: double
s: 字串
c: 字元
而傳入的變數,要是它的位址!
所以,前面加了 &
- 1 decade ago
抱歉 因為我是初學者 雖然對您來說 可能很簡單 但我因為剛學而已 當然不是很了解 麻煩各位大大了
2008-09-11 20:41:54 補充:
int a;
cin >> a;
switch(a%4){
case 1:
cout<< "一班" <