作者kikiqqp (貓食罐頭)
看板C_and_CPP
標題Re: [問題] C語言如何判斷最大值
時間Sun Oct 31 22:25:40 2010
※ 引述《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
推 tabinoyume:我從來沒學過goto 10/31 22:28
→ tabinoyume:這裡應該可以用continue 10/31 22:29
→ kikiqqp:哎呀 有錯字 算了..... 10/31 22:39
→ kikiqqp:continue就必須考慮到中斷迴圈後,使用者就不能對輸入錯誤 10/31 22:40
→ kikiqqp:做任何反悔嗎? 這在介面設計上是很重要必須考慮到的 10/31 22:41
→ kikiqqp:另外 使用GOTO在這邊在對不懂的人規劃流程圖上會簡易很多 10/31 22:41
→ kikiqqp:雖然很多人視為毒蛇猛獸 XD 10/31 22:43
→ tropical72:可以改用 (--i<0)?i=0:NULL; 這種方式? 10/31 22:44
→ tropical72:goto 我有時常用在 END: 裡面就是了. 不然突然有3.4個 10/31 22:45
→ tropical72:loop 要慢慢跳出去感覺就很麻煩. 10/31 22:45
→ otira:可以 j-- 然後做continue 10/31 22:53
→ antiasus:goto喔...雖然不是不能,使用上還是謹慎些. 10/31 23:20
推 LPH66:的確 這個想法的程式若是新手可能真得 goto 才好寫 10/31 23:57
→ LPH66:不過仔細想想後會發現它可以寫成do/while 10/31 23:57
→ LPH66:只要對迴圈結構有進一步的了解 發現這一點並不難 10/31 23:58
→ james732:我同意這篇的看法,不過該文的原po連路都還不會走 XD 10/31 23:58
推 loveme00835:用EOF當標兵的作法, 一般while的章節都會有吧, 可以 11/01 00:24
→ loveme00835:省一些判斷, 也只需要一個 continue 11/01 00:25
→ tropical72:搭if-else,事實上可以不用continue 11/01 00:37
→ loveme00835:如果要作範圍內的測試, 要做的事情很多, if 結構會變 11/01 01:11
→ loveme00835:的很大, 通常這樣的寫作風格是「一個結束點」, 只會徒 11/01 01:12
→ loveme00835:增括號數跟提升維護困難度 11/01 01:14