看板 NTUE-CS102 關於我們 聯絡資訊
首先 抄程式沒啥不對 沒有人生下來就會寫程式的你說是吧 但是自己抄玩後 想個點 自己改改看 看看自己是抄 還是已經看懂了 --- 鳳狼上一篇有提到 函數傳值 / 傳址 ( call by value / by address ) 其實C裡面有三種 傳值 傳址 傳參考 用例子來說函數跟上面三個東西好了 角色扮演一下 假設今天小胖跟我說 "我買了星巴克新出了加了櫻桃的摩卡耶,不知道好不好喝,你覺得勒" 所以我會回答 "好喝" 或是 "難喝" 這就是傳回值 其實這就是main跟函式的概念 小胖main 函式 小胖(main)呼叫我這個函式 所以我要有個傳回值 跟他說結果 所以今天有人問我傳回值要幹麻 這樣有沒有比較清楚一點XD 在來是函數(也就是我) 要怎麼解決小胖呼叫我的問題 我可以 1. 去買一杯喝喝看 再跟他說 2. 把小胖手上的搶過來 喝喝看 看的出差別嗎? 兩種我的回答都沒差(假設小胖的口水沒有讓那杯摩卡變難喝的話) 差在呼叫我的人(小胖手上的摩卡) 第一種不管我喝了我的摩卡幾口 小胖手上的摩卡都不會變少 第二種如果我喝了一大口 小胖就沒得喝了 第一種就是所謂的傳值 第二種的效果就是傳址或是傳參考(實際上電腦不是這樣做 等老師教到再說吧) --- 假設第一題大家都會寫了 我們來看一下第二題 這次換泡泡借我用一下 擔綱這次的main 老師有說過 cin 是內定的函式 所以我也找個人來演一下 就花花吧 看一下下面的程式 while(1) { cin>>a>>b>>c; if(a==x&&b==y&&c==z) break; cout<<"猜錯了 再猜"; } cout<<"猜對了 給個獎勵"; 用角色來說 就是 花花會說a,b,c三個數字 泡泡會比較他心底的數字x,y,z跟a,b,c有沒有一樣 沒有一樣就繼續猜 凱凱當cout 獎勵就是飛吻好了XD 所以猜對了就會跳出回圈 凱凱就會給花花獎勵 如果今天 泡泡的眼睛被桌球打瞎了 看不到花花的數字 所以他想到了個方法(這只是其中一種) "把他心底的數字跟花媽說 然後花媽看完花花的數字 再跟泡泡說他猜對了沒" 現在要把上面的話 改成程式 就是 bool 花媽(int x, int y, int z) { int a,b,c; cin>>a>>b>>c; if(a==x&&b==y&&c==z) return true; else return false; } int main() // 這是泡泡 { int x,y,z; cin>>x>>y>>z; while(1) { if(花媽(x,y,z)==true) break; cout<<"猜錯了 再猜"; } cout<<"猜對了 給個飛吻"; } 這只是一種解法 鳳狼還提供了n種解法 但是有些用到指標 遞迴之類的 如果你看不懂語法 就忽略它吧XD 然後你可能會問 這個遊戲 只要泡泡跟花花 就好啊 幹麻還要找花媽多此一舉 這個情況看起來是麻煩了 但是有些情況下 用程式會比較精簡 就好像 如果這是一個大地遊戲 總不能叫泡泡當10個關主麻XD 可能泡泡(main)只是一開始的開頭的引導者 然後把你丟到某一個關主(函數) 類似這樣的概念 演完了 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 120.127.36.183
CaptainWill:大推!!生動活潑 12/09 23:54
CaptainWill:等等...剛沒看完 為什麼是給我飛吻.. 12/09 23:55
j2612280:哈哈~good!! 12/09 23:56
Arashinoon: 大推!!生動活潑 為什麼沒有我 囧 (你以為噢!! 12/09 23:56
Arashinoon: 大推!!生動活潑 補推~~ 12/09 23:59
game0416:推 XD 12/10 00:02
※ 編輯: yantchen 來自: 120.127.36.183 (12/10 00:11)
pk873:太猛了 在江湖上混久了果然有差XD 12/10 00:30
ip3311:寫程式最高境界= = 就是把生活中的事物拿來譬喻XD GOOD 12/11 00:34
johlmike:太猛了 學長好威>w</ 12/11 20:11