[問題] 用goto寫奇數和

看板C_and_CPP作者 (東東)時間15年前 (2010/08/04 16:54), 編輯推噓9(9032)
留言41則, 11人參與, 最新討論串1/4 (看更多)
老師上課要我們用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

08/05 00:57, , 1F
對了這是C語言 用dev-c++
08/05 00:57, 1F

08/05 00:58, , 2F
如果不用goto, 讓你用while或do-while你會怎麼寫??
08/05 00:58, 2F

08/05 00:58, , 3F
把while或do-while版的寫出來, 離你的goto就不遠了:)
08/05 00:58, 3F

08/05 00:59, , 4F
另外, if那行的判斷有錯....
08/05 00:59, 4F

08/05 00:59, , 5F
意見同樓上,先用一般 loop 寫出來,再改成 goto 比較快。
08/05 00:59, 5F

08/05 00:59, , 6F
老師禮拜5才要教while..不過我這邊就卡住了ˊˋ
08/05 00:59, 6F

08/05 01:00, , 7F
要停止的話你多造一個 label 在下面,符合條件就 goto 下
08/05 01:00, 7F

08/05 01:01, , 8F
去,這樣也可以啊。
08/05 01:01, 8F

08/05 01:01, , 9F
先用while寫 再把while拆成if和兩個goto就行了
08/05 01:01, 9F

08/05 01:03, , 10F
恩恩 那我先去研究while看看..在想怎麼拆 謝謝大家@@>
08/05 01:03, 10F

08/05 01:15, , 11F
你還是直接用 goto 吧,不然老師教 while 時就沒梗了
08/05 01:15, 11F

08/05 01:20, , 12F
err~不好意思沒想到loop還沒教, 那這樣給個簡單意見是,
08/05 01:20, 12F

08/05 01:21, , 13F
先拿紙筆畫圖想一想流程, 還有一開始多塞幾個label多放
08/05 01:21, 13F

08/05 01:21, , 14F
幾個goto沒關係, 等流程清楚了自然能簡化到接近loop:)
08/05 01:21, 14F

08/05 01:36, , 15F
如果會反組譯的話倒是有投機的方法
08/05 01:36, 15F

08/05 03:03, , 16F
你寫了if(some%2==1)sum+=some,那就想想else可以做什麼事
08/05 03:03, 16F

08/05 03:03, , 17F
這應該蠻直觀的,還不到要畫流程圖的地步
08/05 03:03, 17F

08/05 10:47, , 18F
goto明明比較簡單啊..... orz....
08/05 10:47, 18F

08/05 12:45, , 19F
沒人在用goto吧= =
08/05 12:45, 19F

08/05 13:43, , 20F
雖然我也覺得goto很方便,但是當初老師教的時候千交代萬交代
08/05 13:43, 20F

08/05 13:44, , 21F
不要用goto說會破壞程式結構所以很好奇你的老師是基於什麼理
08/05 13:44, 21F

08/05 13:44, , 22F
教你用goto
08/05 13:44, 22F

08/05 14:20, , 23F
沒人教我.... 我完全自修....
08/05 14:20, 23F

08/05 14:23, , 24F
我最初接觸的腳本是RO雅典娜私服腳本,她的腳本連for、while
08/05 14:23, 24F

08/05 14:24, , 25F
、switch都沒有,也是能寫得很高興。
08/05 14:24, 25F

08/05 14:25, , 26F
現在在控制程式流程的時候,還是習慣用goto,因為比較清楚。
08/05 14:25, 26F

08/05 14:26, , 27F
當然,計算時另當別論,計算時用迴圈會比較好懂。
08/05 14:26, 27F

08/05 17:43, , 28F
我覺得老師只是想讓學生練習流程控制。
08/05 17:43, 28F

08/05 17:58, , 29F
讓學生看到asm時多多少少有熟悉感XD
08/05 17:58, 29F

08/05 19:26, , 30F
Using goto,you're not informed to go forward or backward
08/05 19:26, 30F

08/05 19:27, , 31F
in syntax level. Thus it doesn't aid debugging.
08/05 19:27, 31F

08/05 19:29, , 32F
It may be solved by defining some macro such as 'back'
08/05 19:29, 32F

08/05 19:30, , 33F
or 'loop_forward', #define loop_back goto;
08/05 19:30, 33F
剛收到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)

08/05 20:13, , 34F
如果 x 是奇數(最後位元是1), and出來的結果是1, 隱含
08/05 20:13, 34F

08/05 20:14, , 35F
轉換為 true, 所以當 x 為奇數 x = x 不然 x = x - 1
08/05 20:14, 35F

08/05 20:15, , 36F
效果跟 x % 2 == 1 一樣, 雖然執行速度比較快, 但犧牲
08/05 20:15, 36F

08/05 20:16, , 37F
了可讀性
08/05 20:16, 37F

08/05 20:21, , 38F
達成你要的效果, 有問題那行右邊改成 ? x-2 :x-1 即可
08/05 20:21, 38F

08/05 20:24, , 39F
只改這樣,1會出問題吧
08/05 20:24, 39F

08/05 20:27, , 40F
1本身這個數就跟題目要求矛盾了
08/05 20:27, 40F

08/05 20:30, , 41F
計算1到輸入數字內的所有奇數和←這個應該含1啊?
08/05 20:30, 41F
文章代碼(AID): #1CMPjYrJ (C_and_CPP)
討論串 (同標題文章)
以下文章回應了本文 (最舊先):
完整討論串 (本文為第 1 之 4 篇):
文章代碼(AID): #1CMPjYrJ (C_and_CPP)