引用 | 編輯
csr
2010-12-06 17:47 |
樓主
▼ |
||
x0
剛學c/c++偶數和 及1加到100都可以為何奇數和會弄得亂七八糟呢 大大們可否看小弟那錯了 幫忙改正一下 好嗎 拜託了 #include<stdio.h> #include<stdlib.h> int main(void) { int i=1,sum=0; start: i+=2; sum+=i; printf(&q .. 訪客只能看到部份內容,免費 加入會員 x0
|
引用 | 編輯
ronlain
2011-01-05 23:29 |
1樓
▲ ▼ |
把sum+=i 跟 i+=2反過來就好了
int i=1,sum=0; start: sum+=i; i+=2; printf("%d",i); x0 |
引用 | 編輯
ronlain
2011-01-08 23:43 |
3樓
▲ ▼ |
你再試看看吧 應該沒少也沒多
第一次i=1 sum+=1 1不會少 最後一次 i=99 sum+=99 i+=2 i=101 這個101下一個 if (i<100) 不會成立 int i=1,sum=0; start: sum+=i; i+=2; if(i<100) x0 |
引用 | 編輯
csr
2011-01-28 17:54 |
4樓
▲ ▼ |
下面是引用 ronlain 於 2011-01-08 23:43 發表的 : 真的不行 因為1+2=3所以1不見了,它就從3開始算起,99+2=101,而99是 if(i<100)符合假設 若不相信 大大你用dev c++編譯看看 我個人是把它改成如下程式碼 #include<stdio.h> #include<stdlib.h> int main(void) { int i=-1,sum=0; start: i+=2; sum+=i; printf("%d",i); if(i<99) { printf("+"); goto start; } printf("=%d\n",sum); system("pause"); return 0; } x0 |
引用 | 編輯
totsi
2011-01-31 08:56 |
5樓
▲ ▼ |
原因很簡單,因為您是先加完再印,所以i=1,且i+=2時,下一行i已經等於 i = 1 +2了,所以結果當然會是3。
因此就像您改的,要先從-1開始加,才會讓第一組出來的數字為1。 除非您是先印再加。 但ronlain大大說的也沒錯,因為ronlain大大並沒有印值,而是直接算總和,所以他一開始把i=1加進來,所以總和也是會對的。 而且您也沒有說少的1是「沒加進和裡」還是「沒印出來」,我想,這ˋ樣要debug可能會有所落差嚕~~ 希望對您有幫助 x0 |
引用 | 編輯
totsi
2011-01-31 12:52 |
7樓
▲ ▼ |
下面是引用 csr 於 2011-01-31 11:14 發表的 : 那就好玩嚕,我用ronlain大大的方式,改用while來寫而已,結果同ronloain大大所言。 所以錯是錯在結果不對嚕?XD 複製程式 int sum = 0, i = 1; while ( i <= 100 ) { sum += i; printf("The addition value = %d\n", i); i+=2; } printf("The sum =%d\n", sum); system("pause"); x0 |
引用 | 編輯
totsi
2011-01-31 17:17 |
9樓
▲ ▼ |
問題跟dev-c無關,會顯示上有問題就像我第一個回的,您的作法是先做再印
所以當然會印不出1,但加出來的值是對的(ronlain大大的作法) 最後會多印101也是同樣的原因。 所以會建議您把您跑的圖跟code貼在同一個回覆內,至少看的人會比較清楚知道問題。 最後,不建議用goto寫迴圈,原因我想您多玩幾次就能體會了~~ 希望對您有幫助~ ps.一開始我還以為start: 是新的迴圈語法XDD x0 |
引用 | 編輯
totsi
2011-02-01 09:50 |
12樓
▲ ▼ |
複製程式
int main(void) { int i=1,sum=0; start: sum+=i; printf("%d",i); i+=2; if(i<100) { printf("+"); goto start; } printf("=%d\n",sum); system("pause"); return 0; } x1 |
引用 | 編輯
csr
2011-02-01 14:04 |
13樓
▲ ▼ |
bug終於讓大大幫小弟改進
看了大大程式碼後 真才了解寫程式原來步驟一步都不能有疏忽 否則全盤皆墨 小弟以後一定會更全盤的去考量 希望大大這神來一筆 會讓小弟在學c語言時 會更加小心與思考 再次對大大至敬 感恩再三 謝謝 以後若小弟有不懂之處 希望大大還能適時對小弟施教 大大你好 底下這會出現兩個+ 不知要如何改 謝謝 程式碼如下 #include<stdio.h> #include<stdlib.h> int main(void) { int i=0,sum=0,; start: i+=1; if(i%2==1) sum+=i; if(i%2==1) printf("%d",i); if(i<100) { printf("+"); goto start; } printf("=%d\n",sum); system("pause"); return 0; } x0 |
引用 | 編輯
totsi
2011-02-03 10:59 |
14樓
▲ ▼ |
原因也很簡單,問題是因為您不管是奇數還是偶數,都會走到printf("+")。
所以顯示"+"應該是有真的加值進來時,才顯示"+"才對。 所以簡單作法是 複製程式 if(i<100 &&(i%2 == 1) ) { printf("+"); goto start; } 目前手頭沒有compiler可以測,所以您可以先玩玩看。 如果不行,那就記得修改的條件是「有加入的值,才顯示"+"」但是這個要注意頭尾的問題。 個人還是建議不要用goto當迴圈使用。 希望對您有幫助~~ 我比較偏好的寫法如下: 複製程式 int main(void) { int i=0,sum=0,; start: i+=1; if(i%2 == 0) { goto start; } sum+=i; printf("%d",i); if(i<100 && i != 99) { printf("+"); goto start; } printf("=%d\n",sum); system("pause"); return 0; } x0 |
引用 | 編輯
totsi
2011-02-08 10:27 |
17樓
▲ ▼ |
不好意思,我忘記您的作法會出現只有跑一次的問題XDDD
如使用您的方式,可以用的code如下: 複製程式 if(i<100) { if(i%2 == 1 && i != 99) { printf("+"); } goto start; } 還有,最後還是老生常談,迴圈非必要時,少用goto來玩。 不然會很常在除錯XDD。 for...do while的反而會比較好抓XDD x1 |
引用 | 編輯
csr
2011-02-09 20:49 |
18樓
▲ ▼ |
下面是引用 totsi 於 2011-02-08 10:27 發表的 : 測試後一切OK 大大可真是高手 小弟佩服的五體投地 看來 小弟對於語言邏輯慨念要好好多加強囉 不過 是否可請教大大一個問題 那就是書本上的範例大約五六成都看的懂 但是題目一來那就一頭霧水不知如何了 像這樣 是不是該加強那方面的學習 才能如大大這樣手到擒來不費吹灰之力 謝謝 x0 |
引用 | 編輯
totsi
2011-02-11 08:52 |
19樓
▲ ▼ |
高手不敢稱~目前也才等ˋ級3而已XDDD
其實沒什麼別的方法,就多看、多聽、多問、多做,最重要的是多想 想不通,找管道問,問題寫的清楚,就有人願意幫忙嚕^^m 想完後再問,比較會知道自己思路上少考慮哪些部分 這只是自己短短3年的學習心得~~ 共勉之~~ 希望對您有幫助XDDD PS.書上範例不一定都能用,所以拿到手的時候,建議先想想看他為何要這樣寫,那這樣寫能不能用。不確定的話就用編輯器來debug,邊debug就知道他哪裡的邏輯錯了。 x1 |
引用 | 編輯
csr
2011-02-11 20:56 |
20樓
▲ ▼ |
下面是引用 totsi 於 2011-02-11 08:52 發表的 : 感謝大大不吝指導 小弟我才剛學六,七個月 看過C,C++,Visual C++,資料結構等不下十多本書(大部份有看沒懂) 但是因為是自學 所以也沒老師可問 到網路上查資料也都無法完全釐清心中疑點 現今只在本論壇遇到大大您這位老師肯如此跟小弟這樣反覆討論 否則也不會為如何學起而浪費許多時日 如今大大這一席話小弟將謹記在心 好事多磨 就讓今天過後 因為大大而讓我走上學習的正徒上 謝謝再謝謝 感恩再感恩 就因為有你 x0 |
引用 | 編輯
tonylucy321
2012-12-13 19:00 |
21樓
▲ |
很復雜 看不憧
但我會研宄 謝謝大大 x0 |