作者yantchen (球童Yanting)
看板NTUE-CS102
标题Re: [闲聊] 函式...
时间Wed Dec 9 23:53:42 2009
首先
抄程式没啥不对
没有人生下来就会写程式的你说是吧
但是自己抄玩後 想个点 自己改改看
看看自己是抄 还是已经看懂了
---
凤狼上一篇有提到 函数传值 / 传址 ( 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
1F:推 CaptainWill:大推!!生动活泼 12/09 23:54
2F:→ CaptainWill:等等...刚没看完 为什麽是给我飞吻.. 12/09 23:55
3F:推 j2612280:哈哈~good!! 12/09 23:56
4F:→ Arashinoon: 大推!!生动活泼 为什麽没有我 囧 (你以为噢!! 12/09 23:56
5F:推 Arashinoon: 大推!!生动活泼 补推~~ 12/09 23:59
6F:推 game0416:推 XD 12/10 00:02
※ 编辑: yantchen 来自: 120.127.36.183 (12/10 00:11)
7F:推 pk873:太猛了 在江湖上混久了果然有差XD 12/10 00:30
8F:推 ip3311:写程式最高境界= = 就是把生活中的事物拿来譬喻XD GOOD 12/11 00:34
9F:推 johlmike:太猛了 学长好威>w</ 12/11 20:11