作者Kashir (Kashir)
看板C_and_CPP
標題[問題]請教一下for與while為甚麼答案不一樣?
時間Tue Sep 15 17:24:11 2020
因為最近開始有轉職的念頭,所以最近有去買一本書在自學【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
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 211.75.164.46 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1600161854.A.855.html
※ 編輯: Kashir (211.75.164.46 臺灣), 09/15/2020 17:28:16
1F:→ kobe8112: 其實初期遇到的問題,例如這個,次數少成這樣,你把每一 09/15 17:29
2F:→ kobe8112: 輪運算的變數都印出來,就知道是哪邊的問題了 09/15 17:30
3F:→ derekjj: ++ 09/15 17:32
4F:→ Kashir: 我有全部列出來,但用for寫的運算出來都比while多1。 09/15 17:38
5F:→ Kashir: 請問我哪裡寫錯了嗎?我還是看不出來..已想破頭.. 09/15 17:42
6F:→ kobe8112: 想想看for迴圈的第三個參數在什麼時候會執行 09/15 17:43
7F:→ Kashir: 在i<n時a++。這方式是不可行的嗎?我預設的值跟while一樣 09/15 17:51
8F:→ Kashir: 還是您指的是順序問題? 09/15 17:52
9F:推 Schottky: 在 i<n 時沒錯,問題是哪個位置或說時間點 09/15 18:00
10F:→ Schottky: 問題就是出在 a++ 的時間點兩邊不一樣啊 09/15 18:01
11F:→ Schottky: kobe大在推演迴圈流程及老二長度等領域上算是權威 09/15 18:02
12F:→ Schottky: 你用偵錯工具去看 for 版 20 行和 while 版 18 行的 a值 09/15 18:06
13F:→ Schottky: 也能看得出兩邊的差異 09/15 18:06
14F:→ Kashir: 是return的時間點不對嗎?kobe大應該是想讓我自己多想想 09/15 18:45
15F:→ Kashir: 好的,我去用網路上其他的程式偵錯看看 Dev C++我按都沒 09/15 18:47
16F:→ kobe8112: 咦..前面這串不是已經揭盅了?XD 09/15 20:53
17F:→ kobe8112: 你兩個函式回傳的都是a,整個函式中會讓a變化的就只有 09/15 20:56
18F:→ kobe8112: 「a++;」,所以顯然這兩個函式執行a++的次數是不同的, 09/15 20:56
19F:→ kobe8112: 為什麼會不同呢? 其實已經告訴你答案了,你只要知道for 09/15 20:57
20F:→ kobe8112: 函式三個運算式中的第三個,總共會執行幾次,答案就昭然 09/15 21:00
21F:→ kobe8112: 若揭,你可以撇開這題,單獨想/寫一個簡單for來看看 09/15 21:01
22F:→ kobe8112: 或是直接隨便google for的流程圖來看一下 09/15 21:02
23F:→ Kashir: 謝謝KOBE大,我再研究一下,目前有發現到a一邊是0一邊1。 09/16 00:04
24F:→ F04E: 蠻好奇您想轉到哪個行業 09/16 11:15
25F:→ Kashir: 先前有看上資策會的課程,智慧應用微軟C#工程師就業養成班 09/16 15:57
26F:→ Kashir: 但想說先看書自學,畢竟聽說陣亡率也是挺高的。想走應用程 09/16 15:58
27F:→ Kashir: 式設計。我目前工作的發卡機好像都是用這些工具寫的~ 09/16 15:59
29F:→ nh60211as: 跟while迴圈有九成像 09/17 10:10
30F:→ Kashir: 謝謝,我終於看懂了。感恩大大 09/17 15:55