[問題]請教一下for與while為甚麼答案不一樣?

作者: Kashir (Kashir)   2020-09-15 17:24:11
因為最近開始有轉職的念頭,所以最近有去買一本書在自學【C語言教學手冊-第四版】
目前做到第8章的習題時,發現了我用while與for的答案不一樣...想請教一下各位大大
能幫我解釋一下,為甚麼我找出的答案 用for會比while答案多1?我上網查詢網友的寫法
都是用while還沒查到有人用for的寫法...
題目:在《孫子算經》裡(共三卷,據推測約成書於西元400年左右),下卷的第26題,
就是鼎鼎有名的「孫子問題」:
今有物不知其數,三三數之剩二,五五數之剩三,七七數之剩二,問物幾何?
將它翻譯成白話:這裡有一堆東西,不知道有幾個;三個三個去數它們,剩餘二個;五個
五個去數它們,剩餘三個;七個七個去數它們,剩餘二個;問這堆東西有幾個?精簡一點
來說:有一個數,用 3 除之餘 2;用 5 除之餘 3;用 7 除之餘 2;試求此數。
(a) 試找出滿足孫子問題裡的最小整數.
(b) 試撰寫一函數 int find(int n), 可以傳回滿足孫子問題裡的第 n 個整數, 然後利
用此函數找出滿足孫子問題的第 5個與第 7個整數.
(c) 試利用 (b) 所定義的函數找出前 12個滿足孫子問題的整數.
while寫法:http://codepad.org/UNZVcDko
for寫法:http://codepad.org/pKNVesfK
作者: kobe8112 (小B)   2020-09-15 17:29:00
其實初期遇到的問題,例如這個,次數少成這樣,你把每一輪運算的變數都印出來,就知道是哪邊的問題了
作者: derekjj (忘記帳號的男子)   2020-09-15 17:32:00
++
作者: Kashir (Kashir)   2020-09-15 17:38:00
我有全部列出來,但用for寫的運算出來都比while多1。請問我哪裡寫錯了嗎?我還是看不出來..已想破頭..
作者: kobe8112 (小B)   2020-09-15 17:43:00
想想看for迴圈的第三個參數在什麼時候會執行
作者: Kashir (Kashir)   2020-09-15 17:51:00
在i<n時a++。這方式是不可行的嗎?我預設的值跟while一樣還是您指的是順序問題?
作者: Schottky (順風相送)   2020-09-15 18:00:00
在 i<n 時沒錯,問題是哪個位置或說時間點問題就是出在 a++ 的時間點兩邊不一樣啊kobe大在推演迴圈流程及老二長度等領域上算是權威你用偵錯工具去看 for 版 20 行和 while 版 18 行的 a值也能看得出兩邊的差異
作者: Kashir (Kashir)   2020-09-15 18:45:00
是return的時間點不對嗎?kobe大應該是想讓我自己多想想好的,我去用網路上其他的程式偵錯看看 Dev C++我按都沒
作者: kobe8112 (小B)   2020-09-15 20:53:00
咦..前面這串不是已經揭盅了?XD你兩個函式回傳的都是a,整個函式中會讓a變化的就只有「a++;」,所以顯然這兩個函式執行a++的次數是不同的,為什麼會不同呢? 其實已經告訴你答案了,你只要知道for函式三個運算式中的第三個,總共會執行幾次,答案就昭然若揭,你可以撇開這題,單獨想/寫一個簡單for來看看或是直接隨便google for的流程圖來看一下
作者: Kashir (Kashir)   2020-09-16 00:04:00
謝謝KOBE大,我再研究一下,目前有發現到a一邊是0一邊1。
作者: F04E (Fujitsu)   2020-09-16 11:15:00
蠻好奇您想轉到哪個行業
作者: Kashir (Kashir)   2020-09-16 15:57:00
先前有看上資策會的課程,智慧應用微軟C#工程師就業養成班但想說先看書自學,畢竟聽說陣亡率也是挺高的。想走應用程式設計。我目前工作的發卡機好像都是用這些工具寫的~
作者: OSDBNetwork (路人甲)   2020-09-17 05:17:00
for的i++放在下面 https://i.imgur.com/ldViRBH.jpg
作者: nh60211as   2020-09-17 10:10:00
跟while迴圈有九成像
作者: Kashir (Kashir)   2020-09-17 15:55:00
謝謝,我終於看懂了。感恩大大

Links booklink

Contact Us: admin [ a t ] ucptt.com