作者applecool (noOneKnows)
看板C_and_CPP
標題Re: [問題]控制流程問題 C
時間Thu Jan 26 23:01:16 2012
小弟給原 PO 的建議
很明顯你第一步正確了,因為你不可能一個一個列印,
所以你第一步想到的是讓電腦 loop 處理,
所以你可能有 for, while, do while, go to... 這些可以選
目前看來用 for 非常的直觀。
所以你先看課本確認自己完全理解 for loop 的行為
接下來的你應該翻開課本到列印或IO的章節,甚至是一開始章節
(有些書會在很前面就先介紹簡單的 IO 如 printf 等等)
以 C 為例,可能課本會有一個格式列表,
所以你現在應該先查是否有整數的 2, 8, 16 進位表示法
接下來有各式各樣的做法,
假設剛好有 2, 8, 16 的表示法,就解決了
假設只有其中幾項
那至少也解決了一部分問題。
還有幾個要考慮的:
1. 這 2, 8, 16 進位表示法是否有互轉的方法或規律
2. 如果沒有現成的互轉方法,你印出的是直接 show 在螢幕上的話
該怎麼拿其中一種表示法來互轉。
3. 如果不能互轉,需要實作多種 case,應該怎麼做?
所以 1 你必須翻書或上網找,看是否有現成又容易使用的 C lib (library)
2. 你必須想看看該怎麼把印出來的資料拿出來使用?
印出來的資料是什麼呢?是不是字串?字串的特性是什麼?
怎麼把整數印到字串裡面? 如果不是字串還可能是什麼?
以上可以翻書或查網路。
假設都找不到現成 2, 8, 16 進位的表示法,就先想,最簡單的是哪一項?
2 進位嗎?這時候翻到課本研讀 2 進位表示法,我該怎麼印出來?
那是以 bit 為單位,所以我是否用到位元的運算?
我是否需要使用 unsigned 的資料型態?
該怎麼儲存過程中的資料?
老師要我們表示的數字,是否要用到 32 位元,還是 8 or 16 位元?
把課本上資料型態和位元運算、字串、陣列的單元研讀一遍,
如果發現不通,回到上一流程,想其他方法。
...
經過一番努力
你已經實作出其中一項了,可能是 2, 8, 16 進位其中一種,
翻到函數的章節,試著把它寫成一個合理的函數,
想想看有沒有更快更好的方法,如果想不出,
寫個註解標示他的功能,在 main 中 call 該函數驗證結果,
如果無誤,該函數先暫時到這。
所以回到最初的假設,你已經有自己的小型 lib 不是嗎?
所以現在應該互轉呢?還是應該針對不同 case 實作不同函數呢?或者兩者混合?
假設選擇了互轉,試著推導互轉的方式,
應該用數學推過去?公式是什麼?應該用查表法?
如果用查表法該怎麼寫? 流程控制裡面 if/else if/else, switch, go to...
哪一個適合你?他們彼此之間有什麼不同?
怎麼樣的方法可讀性高?速度快?資源消耗少?如果不可兼得該選擇哪一項?
(包括寫剛才的函數也要考慮這些)
如果能用註解是否可犧牲可讀性?
翻到課本章節,把他們都看過一遍。
現在寫完了,驗證你的程式。
1. 自己寫個反函數來驗證?
2. 跟老師或課本答案驗證?
3. 抽取幾個關鍵資料來驗證?
有個雛型之後,
1. 你剩下多少時間?
2. 是否還要最佳化?
3. 是否要替程式寫一個文件說明或標註版本?
4. 如果剛才寫在 main,是否再寫成函數方便以後使用?
5. 是否新增功能,例如使用者可以任意輸入任何數字?
總之我還是覺得,一開始一本好書是必要的,讀書是必要的,網路則是次要的。
書上熟悉的部分自然可以加速甚至跳過,書本上的範例程式通常有好的 coding style
...
最後
p.s.如果是書上的習題,表示把當前+先前章節都讀懂了,應該要能寫出答案,
有時間不妨再讀一次。
我不知道可不可以在這裡發問,但是要把你鑽研過程遇到的困難寫出來,
不過,我個人要稱讚你,因為你在寒假是要複習而不是為了交作業。
希望你遇到 BUG 不要氣餒,努力寫,以後就可以把程式這項工具運用熟練。
以上僅供參考唄~~有誤勿見怪
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 123.110.137.133
推 james732:推用心回覆 01/26 23:04
※ 編輯: applecool 來自: 123.110.137.133 (01/26 23:09)
※ 編輯: applecool 來自: 123.110.137.133 (01/26 23:13)
→ diabloevagto:很棒的意見! 01/26 23:12
※ 編輯: applecool 來自: 123.110.137.133 (01/26 23:29)
推 cory8249:推 01/26 23:42
推 niwat:推, 認真 01/26 23:48
※ 編輯: applecool 來自: 123.110.137.133 (01/27 00:19)
→ applecool:謝謝~如果有誤請指正 01/27 00:21
推 h800526:超級感謝你的回應!真的很用心和誠意 01/27 00:35
→ h800526:謝謝你!!我知道自己該怎麼做了,自己還不是那麼努力,我會繼 01/27 00:37
→ h800526:續加油 01/27 00:37
→ james732:加油!! (我承認我只會在旁邊喊聲XDDD) 01/27 00:40
※ 編輯: applecool 來自: 123.110.137.133 (01/27 00:45)
→ applecool:修掉我自己的推文 XD 不小心把水球回到推文~好糗 01/27 00:46
推 liu2007:486P幣,偉哉! 01/27 01:20
推 ppc:真有耐心 推~~~ 01/27 03:13
→ applecool:P幣?可以幹嘛?發文要扣錢? 01/27 11:15
推 tjjh89017:推強大的回覆(worship) 01/27 11:49
推 lwecloud:P幣只是代表你花了不少時間用心在打這篇文章XD 01/27 23:28