PCDVD數位科技討論區
PCDVD數位科技討論區   註冊 常見問題 標記討論區為已讀

回到   PCDVD數位科技討論區 > 其他群組 > 疑難雜症區
帳戶
密碼
 

  回應
 
主題工具
jackyepson
Regular Member
 
jackyepson的大頭照
 

加入日期: Oct 2004
您的住址: 虛擬的世界
文章: 66
8:5的!!!為什麼我試都不正常
     
      
舊 2004-10-29, 01:16 AM #31
回應時引用此文章
jackyepson離線中  
8:5
Major Member
 

加入日期: Dec 2002
您的住址: 謎
文章: 265
其實有一點是沒有釐清的•••題目對次大數沒有很明確的定義,如果輸入 1 2 2 0,那次大數應該是 2 還是 1呢?

在上面的程式輸入 1 2 2 0 則會輸出 2 2 (最大跟次大一樣)
如果要求最大數與次大數相異的話,
那要將上面的 n>max2
改為max1>n && n>max2
 
舊 2004-10-29, 01:17 AM #32
回應時引用此文章
8:5離線中  
Kaworucloud
Major Member
 
Kaworucloud的大頭照
 

加入日期: Sep 2004
文章: 124
引用:
作者jackyepson
8:5的!!!為什麼我試都不正常


你輸入的測試值是什麼?
有試過徹底關掉編譯器再重開一次嗎?
我用的 BCB 有時候明明舊的程式碼更新了,編譯出來的還是舊的程式碼
__________________
どうしてこうなった(′・ω・`)
舊 2004-10-29, 01:19 AM #33
回應時引用此文章
Kaworucloud離線中  
jackyepson
Regular Member
 
jackyepson的大頭照
 

加入日期: Oct 2004
您的住址: 虛擬的世界
文章: 66
是當我輸入-1,-2時,最大是-1沒錯,次大就變-xxxxxxxx
舊 2004-10-29, 01:20 AM #34
回應時引用此文章
jackyepson離線中  
Kaworucloud
Major Member
 
Kaworucloud的大頭照
 

加入日期: Sep 2004
文章: 124
引用:
作者jackyepson
是當我輸入-1,-2時,最大是-1沒錯,次大就變-xxxxxxxx


我輸入 -1 -2 0 之後,很正常的出現 max1=-1, max2=-2.....
單純是你編譯器的問題吧
__________________
どうしてこうなった(′・ω・`)
舊 2004-10-29, 01:23 AM #35
回應時引用此文章
Kaworucloud離線中  
jackyepson
Regular Member
 
jackyepson的大頭照
 

加入日期: Oct 2004
您的住址: 虛擬的世界
文章: 66
引用:
作者Kaworucloud
我輸入 -1 -2 0 之後,很正常的出現 max1=-1, max2=-2.....
單純是你編譯器的問題吧

我用的是Microsoft Visual C++ 6.0因 該不會有問題吧
舊 2004-10-29, 01:29 AM #36
回應時引用此文章
jackyepson離線中  
jackyepson
Regular Member
 
jackyepson的大頭照
 

加入日期: Oct 2004
您的住址: 虛擬的世界
文章: 66
經過我融合各位寶貴的意見後,我最後的程式碼是這樣的
#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);
}
只差負數的次大有問題,那....因為我明天一大早還要上課我怕會爬不起來我就先下線了!!!
希望各位高手能夠把最後的問題解決並告知是為什麼,如果真沒辦法也沒關係!!!
舊 2004-10-29, 01:43 AM #37
回應時引用此文章
jackyepson離線中  
8:5
Major Member
 

加入日期: Dec 2002
您的住址: 謎
文章: 265
引用:
作者jackyepson
經過我融合各位寶貴的意見後,我最後的程式碼是這樣的
#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•••)

此文章於 2004-10-29 02:00 AM 被 8:5 編輯.
舊 2004-10-29, 01:48 AM #38
回應時引用此文章
8:5離線中  
Kaworucloud
Major Member
 
Kaworucloud的大頭照
 

加入日期: Sep 2004
文章: 124
引用:
作者jackyepson
經過我融合各位寶貴的意見後,我最後的程式碼是這樣的
#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);
}
只差負數的次大有問題,那....因為我明天一大早還要上課我怕會爬不起來我就先下線了!!!
希望各位高手能夠把最後的問題解決並告知是為什麼,如果真沒辦法也沒關係!!!


if (a>b 筆誤) {
c=a;
第一, b 跟 c 沒有給定初始值,所以一開始的 b 跟 c 值是多少,unknown
如果運氣不好, b 的值是 65535
那你的測試值大概都不會通過吧

如果初始值是零,那輸入 -1 -2 -3 -4 ,也都不會對,因為根沒有沒進到任何一個 if 述句,我的寫法就是針對這個狀況
如果初始值設成整數的最小值,也不會有上面的問題,就是 8:5 兄的做法
__________________
どうしてこうなった(′・ω・`)
舊 2004-10-29, 01:54 AM #39
回應時引用此文章
Kaworucloud離線中  
flowofsoul
Major Member
 
flowofsoul的大頭照
 

加入日期: Jul 2004
文章: 292
/////////////////////////////////////////////////////////

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變數,在前兩個迴圈的時候很有用。

其他的就自己看吧,正負數及一直重覆按鍵都修正了。

不過程式防呆你就自己來吧,加幾個判斷句就行了。
舊 2004-10-29, 05:17 AM #40
回應時引用此文章
flowofsoul離線中  


    回應


POPIN
主題工具

發表文章規則
不可以發起新主題
不可以回應主題
不可以上傳附加檔案
不可以編輯您的文章

vB 代碼打開
[IMG]代碼打開
HTML代碼關閉



所有的時間均為GMT +8。 現在的時間是11:04 AM.


vBulletin Version 3.0.1
powered_by_vbulletin 2026。