Re: [問題] C語言如何判斷最大值

看板C_and_CPP作者 (貓食罐頭)時間15年前 (2010/10/31 22:25), 編輯推噓3(3020)
留言23則, 8人參與, 最新討論串2/3 (看更多)
※ 引述《umi74 (Kick-Ass)》之銘言: : 剛學C語言 遇到滿多困難 有請高手幫忙一下@@ : 輸入N筆資料 0=<N<=10 的總和 可是我只能一次打10個 : 不然會出現錯誤 請問怎麼解決呢 附上我的原始碼 : int a,b,c,d,e,f,g,h,i,j,x; : scanf("%d,%d,%d,%d,%d,%d,%d,%d,%d,%d",&a,&b,&c,&d,&e,&f,&g,&h,&i,&j); : x=a+b+c+d+e+f+g+h+i+j; : printf("總和=%d",x); : 還有怎麼找這10個數字的最大值呢 @@ : 有規定這10個數不能大於100  給貓用不負責教學 01 #include <stdio.h> 02 #include <stdlib.h> 03 04 int main() 05 { 06 int i = 0, 07 j = 0, 08 k = 0, 09 l = 0, 10 m = 0; 11 12 printf("請輸入要幾組數字:"); 13 scanf("%d", &i); 14 for(j = 1; j <= i; j++) 15 { 16 Keyin: 17 printf("請輸入第%d組數字:", j); 18 scanf("%d", &k); 19 if(k >= 100) 20 { 21 printf("誰叫你輸入大於100的數字呀,給我重來\n"); 22 goto Keyin; 23 } 24 if(k > l) 26 { 27 l = k; 28 } 29 m = m + k; 30 31 } 32 printf("\n請輸入數字總和:%d\n", m); 33 printf("請輸入數字最大為:%d", l); 34 return 0; 35 } 結果 http://thumbsnap.com/HcSF6Um3 06~10 為變數宣告,這不用說明吧 12 顯示訊息 13 取得鍵盤輸入的資料i 14 以鍵盤取得的資料i 來與j 變數比較,如果j的數字等於所輸入的變數 則跳出回圈 16和22這兩行是一組的,學校老師最痛恨的東西,至於為什麼痛恨,很多老師根本說不清楚, 大概是他的老師也痛恨所以他跟著痛恨吧(不過如果發展過中大型程式的就知道) 19~23 是判斷輸入的數字是不是大於等於100,如果是強制跳回16行開始執行 24~28 判斷所輸入的數字是不是比L 大,是的話把數字放入L。而L 一開始為0 29 做累加計算 32~33 顯示累加結果和L 的數字 上面的程式如果你要背下來應付考試不是不行 但試著理解會比較好一點,程式是有邏輯性可以用流程歸納出來 除了goto可能沒學過外,剩下的應該都已經學到了(11月了差不多) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.116.119.110

10/31 22:28, , 1F
我從來沒學過goto
10/31 22:28, 1F

10/31 22:29, , 2F
這裡應該可以用continue
10/31 22:29, 2F

10/31 22:39, , 3F
哎呀 有錯字 算了.....
10/31 22:39, 3F

10/31 22:40, , 4F
continue就必須考慮到中斷迴圈後,使用者就不能對輸入錯誤
10/31 22:40, 4F

10/31 22:41, , 5F
做任何反悔嗎? 這在介面設計上是很重要必須考慮到的
10/31 22:41, 5F

10/31 22:41, , 6F
另外 使用GOTO在這邊在對不懂的人規劃流程圖上會簡易很多
10/31 22:41, 6F

10/31 22:43, , 7F
雖然很多人視為毒蛇猛獸 XD
10/31 22:43, 7F

10/31 22:44, , 8F
可以改用 (--i<0)?i=0:NULL; 這種方式?
10/31 22:44, 8F

10/31 22:45, , 9F
goto 我有時常用在 END: 裡面就是了. 不然突然有3.4個
10/31 22:45, 9F

10/31 22:45, , 10F
loop 要慢慢跳出去感覺就很麻煩.
10/31 22:45, 10F

10/31 22:53, , 11F
可以 j-- 然後做continue
10/31 22:53, 11F

10/31 23:20, , 12F
goto喔...雖然不是不能,使用上還是謹慎些.
10/31 23:20, 12F

10/31 23:57, , 13F
的確 這個想法的程式若是新手可能真得 goto 才好寫
10/31 23:57, 13F

10/31 23:57, , 14F
不過仔細想想後會發現它可以寫成do/while
10/31 23:57, 14F

10/31 23:58, , 15F
只要對迴圈結構有進一步的了解 發現這一點並不難
10/31 23:58, 15F

10/31 23:58, , 16F
我同意這篇的看法,不過該文的原po連路都還不會走 XD
10/31 23:58, 16F

11/01 00:17, , 17F
小改一下,這樣應該蠻適合原po的吧 http://ppt.cc/~ywY
11/01 00:17, 17F

11/01 00:24, , 18F
用EOF當標兵的作法, 一般while的章節都會有吧, 可以
11/01 00:24, 18F

11/01 00:25, , 19F
省一些判斷, 也只需要一個 continue
11/01 00:25, 19F

11/01 00:37, , 20F
搭if-else,事實上可以不用continue
11/01 00:37, 20F

11/01 01:11, , 21F
如果要作範圍內的測試, 要做的事情很多, if 結構會變
11/01 01:11, 21F

11/01 01:12, , 22F
的很大, 通常這樣的寫作風格是「一個結束點」, 只會徒
11/01 01:12, 22F

11/01 01:14, , 23F
增括號數跟提升維護困難度
11/01 01:14, 23F
文章代碼(AID): #1CpNnd0d (C_and_CPP)
文章代碼(AID): #1CpNnd0d (C_and_CPP)