PCDVD數位科技討論區

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)

flowofsoul 2004-10-28 08:57 PM

引用:
作者jackyepson
我是寫這樣子的!!!這真的是作業,我也有問我們老師,可是講的不是很明白!!! 喔......對了也要可以比較負數才行!!!
.....
if(a>b)
b=a;
if(b>a)
if(a>c)
c=a;
}
printf("輸入中最大者和次大者依序是:%d和%d\n",(signed)b,(signed)c);
}


老實說,你貼的這源碼能編譯得過都很難.....而且邏輯上有誤。但你貼的源碼根本編譯不過,所以我沒辦法指出你錯在哪。

不過有個很明顯的地方,如果 a>b is true那下一步比較 b>a 根本無意義,因為你已經把 a 指派給 b 了。

後面的源碼殘缺不全小弟就不多說了。

現在給你一個c++的解答,因為我是學c++的,c的語法不熟(有了cout跟cin,誰還想用scanf跟printf),你自己代換。

cin 用 scanf 代換,cout 用 printf 代換。

源碼如下

//////////////////////////////////////////////

int test1,test2,test3;

cout << "請輸入整數,若輸入0則程式結束" << endl;

cin >> test1;



while(test1){
cout << "請輸入第二個整數" << endl;

cin >> test2 ;

test3 = test1 > test2 ? test1 : test2;

cout << "最大為" << test3 ;

test3 = test1 < test2 ? test1 : test2;

cout << "次大為" << test3 << endl;

cout << "請輸入整數,若輸入0則程式結束" << endl;

cin >> test1;
}

////////////////////////////

如果你想把這個程式拿去編譯,記得main的前面要加上
#include <iostream>
#include <string>

這個程式已經在我的visual c++ .net上確認執行正確無誤,負數也可比較。參考一下吧。

要是想比較不只兩個整數,那就麻煩一點。

flowofsoul 2004-10-28 09:02 PM

喔,等等,你要的就是不只比較兩個數字對吧?那我再修改一下,等等。

8:5 2004-10-28 10:22 PM

我想演算法類似這樣吧•••
代碼:
output("enter a number (!=0)");
input(max1) ;
if (max1==0) {
    output("we need two numbers at least!!!");
    abort();
}
output("enter a number (!=0)");
input(max2) ;
if (max2==0) {
    output("we need two numbers at least!!!");
    abort();
}

if (max2>max1) swap(max1, max2);

while (true) {
   output("enter a number (0 to quit)");
   input(n);
   if (n==0) break;
   if (n>max1) {
      max2=max1;
      max1=n; 
   } else if (n>max2) {
      max2=n;
   }
}
output(max1,max2);

jackyepson 2004-10-28 11:09 PM

可以了耶!!!感謝啦!!!只要再稍微修改一下就行了

flowofsoul 2004-10-28 11:13 PM

引用:
作者jackyepson
可以了耶!!!感謝啦!!!只要再稍微修改一下就行了


恭喜,小弟我本來寫的跟8:5兄差不多,後來想說試試看能不能整段程式碼全部塞進while裡面....,結果發現太久沒摸c++(三個月了),現在快要成功了。

等等我就把全部塞進while的程式碼貼出來。

jackyepson 2004-10-28 11:27 PM

引用:
作者flowofsoul
恭喜,小弟我本來寫的跟8:5兄差不多,後來想說試試看能不能整段程式碼全部塞進while裡面....,結果發現太久沒摸c++(三個月了),現在快要成功了。

等等我就把全部塞進while的程式碼貼出來。

那位老兄寫的是無法判斷負數的,如果這位大哥可以再加上比較負數就更好了 :like:

Kaworucloud 2004-10-28 11:35 PM

引用:
作者jackyepson
那位老兄寫的是無法判斷負數的,如果這位大哥可以再加上比較負數就更好了 :like:


那我寫的有什麼地方不正確嗎?(除了輸入零個跟一個數字不會說最少要兩個數字外)
因為我原本寫的也是用 cin 跟 cout,換成 scanf 跟 printf 後並無去檢查.....

jackyepson 2004-10-28 11:42 PM

引用:
作者Kaworucloud
那我寫的有什麼地方不正確嗎?(除了輸入零個跟一個數字不會說最少要兩個數字外)
因為我原本寫的也是用 cin 跟 cout,換成 scanf 跟 printf 後並無去檢查.....

你的執行後次大值變成0,8:5寫的是輸入負號時最大值變0,次大值變成原本該顯示在最大值的值!!! :nonono:

8:5 2004-10-29 12:01 AM

引用:
作者jackyepson
8:5寫的是輸入負號時最大值變0,次大值變成原本該顯示在最大值的值!!! :nonono:

看起來像是把結束的 0 也拿進去比較了。

如果您把
代碼:
while (true) {
    AAA
    if (n==0) break;
    BBB
}

改成
代碼:
while (n!=0) {
    AAA
    BBB
}

就會有這樣的結果••• (n=0 之後的 BBB 會變成多執行的•••)

flowofsoul 2004-10-29 12:07 AM

等等...有bug.............


所有的時間均為GMT +8。 現在的時間是02:17 PM.

vBulletin Version 3.0.1
powered_by_vbulletin 2026。