![]() |
PCDVD數位科技討論區
(https://www.pcdvd.com.tw/index.php)
- 疑難雜症區
(https://www.pcdvd.com.tw/forumdisplay.php?f=34)
- - 有人會寫程式嗎?
(https://www.pcdvd.com.tw/showthread.php?t=403665)
|
|---|
8:5的!!!為什麼我試都不正常
|
其實有一點是沒有釐清的•••題目對次大數沒有很明確的定義,如果輸入 1 2 2 0,那次大數應該是 2 還是 1呢?
在上面的程式輸入 1 2 2 0 則會輸出 2 2 (最大跟次大一樣) 如果要求最大數與次大數相異的話, 那要將上面的 n>max2 改為max1>n && n>max2 |
引用:
你輸入的測試值是什麼? 有試過徹底關掉編譯器再重開一次嗎? 我用的 BCB 有時候明明舊的程式碼更新了,編譯出來的還是舊的程式碼 :jolin: |
是當我輸入-1,-2時,最大是-1沒錯,次大就變-xxxxxxxx
|
引用:
我輸入 -1 -2 0 之後,很正常的出現 max1=-1, max2=-2..... 單純是你編譯器的問題吧 :flash: |
引用:
我用的是Microsoft Visual C++ 6.0因 該不會有問題吧 |
經過我融合各位寶貴的意見後,我最後的程式碼是這樣的
#include<stdio.h> void main() { int a,b,c; printf("請輸入整數,如要跳出請輸入0\n"); while(a!=0) { printf("輸入整數:"); scanf("%d",&a); if (a==0) break; if (a>b) { c=b; b=a; }if (a>b) { c=a; } } printf("輸入中最大者和次大者依序是%d和%d\n",b,c); } 只差負數的次大有問題,那....因為我明天一大早還要上課我怕會爬不起來我就先下線了!!! 希望各位高手能夠把最後的問題解決並告知是為什麼,如果真沒辦法也沒關係!!! |
引用:
應該是 a>c 吧? 另外,如果區域變數不給初始值的話,它的初始值就不一定。 在您的例子裡,如果 b,c 的初始值不定的話,那•••您再想想吧。(比如說,如果b,c一開始分別是 1354324跟 23432432•••) |
引用:
if (a>b 筆誤) { c=a; 第一, b 跟 c 沒有給定初始值,所以一開始的 b 跟 c 值是多少,unknown 如果運氣不好, b 的值是 65535 那你的測試值大概都不會通過吧 如果初始值是零,那輸入 -1 -2 -3 -4 ,也都不會對,因為根沒有沒進到任何一個 if 述句,我的寫法就是針對這個狀況 如果初始值設成整數的最小值,也不會有上面的問題,就是 8:5 兄的做法 |
/////////////////////////////////////////////////////////
int test1,temp,big, sec = 0,counter = 0; cout << "請輸入整數,若輸入0則程式結束" << endl ; cin >> test1 ; sec = big = temp = test1 - 1; while(test1){ if(counter == 1) temp = big; if(counter > 1 && test1 > big) temp = big; else if(counter > 1 && test1 > temp) if(test1 == big){ } else temp = test1; if(big == temp && sec == temp && test1 < temp){ temp = test1; } big = big > test1 ? big : test1; if(counter ==1 && test1 < big) sec = test1; else sec = temp; if(counter > 1 && big > sec && test1 > sec) sec = temp; if(counter == 0){ sec = 0; } counter++; cout << "big " << big << endl; cout << "sec " << sec << endl; cout << "temp " << temp << endl; cout << "counter " << counter << endl; cout << "請輸入整數,若輸入0則程式結束" << endl; cin >> test1; } cout << "最大為" << big << " 次大為" << sec << endl; //////////////////////////////////////////////// 太久沒摸實在是不行呀,剛剛真不應該說簡單的,真是丟臉。抱歉拖了你們那麼久的時間。 樓主,這個應該行了,參考一下吧。記得自己再debug一下。 我的visual c++ .net 2003有點怪怪的,程式碼一分未改,同樣的測試,有時候行有時候不行。 我除掉了幾個bug: 一、如果一開始一直按重覆的數字,後來再按比較小的數字,程式會沒反應(不是當掉),按比較大的才行。 二、按負數,按的負值越來越大程式無作用。 還有,中間下面那四行 cout << "big " << big << endl; cout << "sec " << sec << endl; cout << "temp " << temp << endl; cout << "counter " << counter << endl; 是我方便除錯用的,可刪。 我的寫法是一開始指定給所有變數使用者輸入值-1的值。也就是說 big = big > test1 ? big : test1; 這一行源碼一開始是絕對有用的。 關鍵是counter變數,在前兩個迴圈的時候很有用。 其他的就自己看吧,正負數及一直重覆按鍵都修正了。 不過程式防呆你就自己來吧,加幾個判斷句就行了。 |
| 所有的時間均為GMT +8。 現在的時間是02:21 PM. |
vBulletin Version 3.0.1
powered_by_vbulletin 2026。