看板 C_and_CPP 關於我們 聯絡資訊
老師上課要我們用goto計算1到輸入數字內的所有奇數和 不過不包括輸入的那各奇數 像輸入3的話,奇數和是1(不包含3這各奇數) 輸入4的話.奇數和4 上課弄了很久還是跑不出來 所以想請教高手幫各忙 { int x,sum=1; scanf("%d",&x); start: if ( x % 2 =1 ) sum = sum + x; 寫到這邊就卡住了,不知道怎寫x讓他停止在加下去 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.27.128.57
dondon0419:對了這是C語言 用dev-c++ 08/05 00:57
VictorTom:如果不用goto, 讓你用while或do-while你會怎麼寫?? 08/05 00:58
VictorTom:把while或do-while版的寫出來, 離你的goto就不遠了:) 08/05 00:58
VictorTom:另外, if那行的判斷有錯.... 08/05 00:59
tinlans:意見同樓上,先用一般 loop 寫出來,再改成 goto 比較快。 08/05 00:59
dondon0419:老師禮拜5才要教while..不過我這邊就卡住了ˊˋ 08/05 00:59
tinlans:要停止的話你多造一個 label 在下面,符合條件就 goto 下 08/05 01:00
tinlans:去,這樣也可以啊。 08/05 01:01
hilorrk:先用while寫 再把while拆成if和兩個goto就行了 08/05 01:01
dondon0419:恩恩 那我先去研究while看看..在想怎麼拆 謝謝大家@@> 08/05 01:03
ykjiang:你還是直接用 goto 吧,不然老師教 while 時就沒梗了 08/05 01:15
VictorTom:err~不好意思沒想到loop還沒教, 那這樣給個簡單意見是, 08/05 01:20
VictorTom:先拿紙筆畫圖想一想流程, 還有一開始多塞幾個label多放 08/05 01:21
VictorTom:幾個goto沒關係, 等流程清楚了自然能簡化到接近loop:) 08/05 01:21
loveflames:如果會反組譯的話倒是有投機的方法 08/05 01:36
yauhh:你寫了if(some%2==1)sum+=some,那就想想else可以做什麼事 08/05 03:03
yauhh:這應該蠻直觀的,還不到要畫流程圖的地步 08/05 03:03
F23ko:goto明明比較簡單啊..... orz.... 08/05 10:47
wayne1985:沒人在用goto吧= = 08/05 12:45
gbvc:雖然我也覺得goto很方便,但是當初老師教的時候千交代萬交代 08/05 13:43
gbvc:不要用goto說會破壞程式結構所以很好奇你的老師是基於什麼理 08/05 13:44
gbvc:教你用goto 08/05 13:44
F23ko:沒人教我.... 我完全自修.... 08/05 14:20
F23ko:我最初接觸的腳本是RO雅典娜私服腳本,她的腳本連for、while 08/05 14:23
F23ko:、switch都沒有,也是能寫得很高興。 08/05 14:24
F23ko:現在在控制程式流程的時候,還是習慣用goto,因為比較清楚。 08/05 14:25
F23ko:當然,計算時另當別論,計算時用迴圈會比較好懂。 08/05 14:26
tinlans:我覺得老師只是想讓學生練習流程控制。 08/05 17:43
hilorrk:讓學生看到asm時多多少少有熟悉感XD 08/05 17:58
yauhh:Using goto,you're not informed to go forward or backward 08/05 19:26
yauhh:in syntax level. Thus it doesn't aid debugging. 08/05 19:27
yauhh:It may be solved by defining some macro such as 'back' 08/05 19:29
yauhh:or 'loop_forward', #define loop_back goto; 08/05 19:30
剛收到TsinTa大的信 #include<stdio.h> #include<stdlib.h> int main() { int x,sum=0; scanf("%d",&x); printf("1~%d的奇數和",x); x=(x&1)?x:x-1; A: sum+=x; x-=2; if(x>0) goto A; printf("%d\n",sum); system("pause"); return 0; } 大致上是這樣沒錯,可是老師想要的情況是.如果輸入5..不過只要1跟3兩各相加 還有x=(x&1)?x:x-1; 這段看不懂>< ※ 編輯: dondon0419 來自: 114.40.147.69 (08/05 20:05)
loveme00835:如果 x 是奇數(最後位元是1), and出來的結果是1, 隱含 08/05 20:13
loveme00835:轉換為 true, 所以當 x 為奇數 x = x 不然 x = x - 1 08/05 20:14
loveme00835:效果跟 x % 2 == 1 一樣, 雖然執行速度比較快, 但犧牲 08/05 20:15
loveme00835:了可讀性 08/05 20:16
loveme00835:達成你要的效果, 有問題那行右邊改成 ? x-2 :x-1 即可 08/05 20:21
loveflames:只改這樣,1會出問題吧 08/05 20:24
loveme00835:1本身這個數就跟題目要求矛盾了 08/05 20:27
loveflames:計算1到輸入數字內的所有奇數和←這個應該含1啊? 08/05 20:30