作者devilarise (Devil)
看板C_and_CPP
標題Re: [問題] 有關利用陣列求出最大值與最小值??
時間Sat Nov 28 10:01:49 2009
※ 引述《asdf12345 (==)》之銘言:
: 是最近小弟利用Dev-C++構寫一個陣列並利用函式寫出陣列中的最大與最小。
建議去抓個visual c++ express 2008來用
不用錢的...
別再用好幾年沒人維護的老舊編譯工具了
: #include<stdio.h>
: #include<stdlib.h>
: #define row 2
: #define col 3
: int number1(int [row][col]);
: int number2(int [row][col]);
: int main()
: {
: int a[row][col]={7,4,6,
: 9,11,13};
這裡這樣寫雖然沒錯, 編譯也會過, 用也能用
不過還是建議你改成
int a[row][col] =
{
{7, 4, 6},
{9, 11, 13},
}
人看起來, 比較清楚一點@@
: int i,j;
: for(i=0;i<row;i++)
: for(j=0;j<col;j++)
: {
: printf("最大值為%3d\n",a[i][j]);
: printf("最小值為%3d\n",a[i][j]);
: }
這迴圈你只窮取了整個陣列裡面的值出來
然後直接輸出, 根本沒做過判斷大小值的動作
你所寫的兩個函式, 也都沒有呼叫
還有就是, for迴圈我們一般這樣寫
for(int i = 0; i < row; i++)
{
}
不會把i的宣告拿到外面用
除非後面的程式需要看得見這個i的最終值
不過目前沒碰過這樣的需求就是了@@
還有就是
在VC 2003以上的編譯器
你在同個函式
無論寫多少次
for(int i = 0; i < x; i++)
{
}
這樣的迴圈, i 值的生命週期
會始終被管控在自己的迴圈內
而像是VC6這類比較老的編譯器
i則會被沿用到這個函式結束為止
: system("pause");
: return 0;
: }
: int number1(int a[row][col])
: {
: int max=0,i,j;
: for(i=0;i<row;i++)
: for(j=0;j<col;j++)
: {
: if (a[i][j]>max)
: max=a[i][j];
: return max;
: }
這裡的邏輯錯誤只有一個
就是return max的地方
這裡會寫成這樣
我相信是你還不懂return在函式裡面的意思
return max;真正的意思是: 結束這個函式, 並且迴傳max值
請把上面這行重複多看幾次, 你一return這函式就無條件結束了
而你的雙迴圈也因此才跑一圈就被打斷了
所以你怎樣也取不到你要的值
這個函式基本上你只要把return max;搬到雙for迴圈之外
這樣就會回傳正確的max值了
: }
: int number2(int a[row][col])
: {
: int min,i,j;
: min=a[0][0];
: for(i=0;i<row;i++)
: for(j=0;j<col;j++)
: {
: if (min>a[i][j])
: min=a[i][j];
: return min;
: }
: }
同number1
: 可以請大大教我說程式哪裡要改嗎? ^_^ !!!
最後建議你, 就算只是練習
也該開始戒掉使用無意義的名稱
無論是變數, 函式, 類別, 都一樣
多打幾個字而已, 死不了人的
當程式設計師還怕打字, 那...提早改行吧
(for這種迴圈例外, i, j, k, 這類的簡單名稱還是很讚低)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 122.116.133.240
→ MOONRAKER:我討厭 .NET ,為何要用express? 11/28 11:08
→ MOONRAKER:Dev是很久沒人維護了,但是用來寫toy program有何問題? 11/28 11:08
推 twotwoone:express 免費而已,就這麼簡單。 11/28 11:08
→ MOONRAKER:wxDev-C++還不是一樣免費 講得好像只有微軟才送免費工具 11/28 11:11
→ MOONRAKER:為生物多樣化起見,上班以外最好不要看到微軟的東東 11/28 11:12
推 twotwoone:我以為你在說討厭 Visual Studio .NET,為什麼要用exp版 11/28 11:16
推 VictorTom:那個i, 程式後面需要看到終值的狀況其實不並少見吧@_@" 11/28 11:19
推 qoozxc789:for( int i... )的用法在C裡面不能用阿... 11/28 11:51
→ tinlans:C99 可以。 11/28 11:53
→ devilarise:好像有人很討厭M$, 那改推薦Eclipse好了=.,="汗 11/28 17:10
→ devilarise:我原意只是想建議他使用些還有人在維護的IDE罷了 11/28 17:11
→ devilarise:不過我想, 學程式最終還是要上班賺錢吧...VC還是建議低 11/28 17:13
→ yoco315:win下面用記事本,linux下面用cat就好了,用什麼dev-c++ 11/28 17:16
推 hilorrk:notepad++ XD 11/28 17:23
推 ducksteven:寫小小程式用dev c++ 是可以啦,可是以後去工作...? 11/28 18:36
推 cole945:.NET是.NET, 怎麼會跟express版的vs混在一起講... 11/28 19:48
推 wowtiger:我還蠻喜歡 MSIDE 的, Compile linux 的程式還沒有什問題 11/28 20:14
→ yenchenlan:不過我想,要賺錢,最終還是不要學程式吧... 11/29 16:57