鱼C论坛

 找回密码
 立即注册
查看: 3686|回复: 12

大神们,请进。帮小弟解个难题吧,已经想了3个小时了。先谢过!~

[复制链接]
发表于 2011-11-5 20:26:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目是: 用数组输出fibonacci的前20个数。。
代码如下:

#include <stdio.h>
void main()
{
int i;
int a[20]={1,1};
for(i = 2; i < 20;i++)                              
{
  a[i] = a[i-1] + a[i-2];                             问题是:   a[i] = a[i-1] + a[i-2];   这个方程式中。单步调试第一次a[i-1] a[i-2]结果都为1
}                                                                            为什么会是1呢? a[i-2]结果为1我还想的明白。。a[i-1]也等于1我就不晓得为什                                                                            么了。。现在头很大啊。。
for(i = 0;i < 20;i++)
{
  if(i%5 == 0)
  {
   printf("\n");
  }
  printf("%12d",a[i]);
}
}
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-11-5 20:46:45 | 显示全部楼层
本帖最后由 yipwing 于 2011-11-5 20:47 编辑

a[20] = {1,1};  第0个元素是1,第一个元素也是1;
a[i-1] i在for里面赋值为2, 2-1 为1  也就是说指向第一个元素1 + a[i-2] 如前面那个i-2 指向第0个元素也是1,两个相加等于2,... 然后相加以后写入第2号元素位置...

这样说明白了吗?
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-11-5 20:56:32 | 显示全部楼层
嗯?a[0]=a[1]=1啊。。。
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2011-11-5 21:07:20 | 显示全部楼层

感谢yipwing、、、谢谢你。。明白了
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2011-11-5 21:08:46 | 显示全部楼层
掌心的呵护 发表于 2011-11-5 20:56
嗯?a[0]=a[1]=1啊。。。

嗯,晓得啦。谢谢你。。。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-11-5 21:10:06 | 显示全部楼层
zjxy2545 发表于 2011-11-5 21:07
感谢yipwing、、、谢谢你。。明白了

you're welcome..
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2011-11-5 21:24:14 | 显示全部楼层
本帖最后由 zjxy2545 于 2011-11-5 21:28 编辑


大神, 我又斯巴达了。。。循环到第4次的时候, I的值为5.。。。调试结果 a[i-1]竟然结果为5.。怎么回事哦

a[i-2]的值正常。。结果为3

----------------------------------------------------------


我理解错了,搞的很乱啊。。。5-1=4.。4是元素位置的值。 晓得了。。

小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-11-5 21:33:41 | 显示全部楼层
本帖最后由 yipwing 于 2011-11-5 21:42 编辑
zjxy2545 发表于 2011-11-5 21:24
大神, 我又斯巴达了。。。循环到第4次的时候, I的值为5.。。。调试结果 a竟然结果为5.。怎么回事哦
...

......
for循环没学好么?
这个涉及到指针,不知道楼主学到指针没..
c语言的数组默认是从0开始
  1. int i;
  2. int a[20]={1,1};
  3. for(i = 2; i < 20;i++)                              
  4. {
  5.   a[i] = a[i-1] + a[i-2];  //执行完这里的代码i++,这个时候也就是说 相加后等于2对吧,放在第2号元素,然后i = i +1,也就是指向第3号元素
  6.   //第二次执行后相当于这样 a[3]= a[3-1] + a[3-2]; 这里就是 a[3-1] 指向2号元素 2 加上 1号元素的1 也就等于3
  7. //第三次执行后相当于这样  a[4]= a[4-1] + a[4-2];  这里就是 a[4-1] 指向3号元素 3 加上 2号元素的2 也就等于5               
  8. }  
复制代码
这样明白了吗.?
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2011-11-5 22:00:53 | 显示全部楼层
本帖最后由 zjxy2545 于 2011-11-5 22:03 编辑
yipwing 发表于 2011-11-5 21:33
......
for循环没学好么?
这个涉及到指针,不知道楼主学到指针没..

嗯,现在明白了。。      FOR循环只懂得一丁点的概念。。

对了大神,我学到一节的知识点时,我该如何最彻底的掌握呢?? 做题?还是背书上的概念? 不如跟我讲讲大神你以前是如何学的??洗耳恭听。。


还没学到指针哦,刚学数组。。不过快到指针和算法了。。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-11-5 22:02:55 | 显示全部楼层
本帖最后由 yipwing 于 2011-11-5 22:03 编辑
zjxy2545 发表于 2011-11-5 22:00
还没学到指针哦,刚学数组。。不过快到指针和算法了。。

学了指针后,就明白为什么会这样了..我说的元素实际上是指针偏移..
  怕你没学指针就没讲...
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2011-11-5 22:04:37 | 显示全部楼层
yipwing 发表于 2011-11-5 22:02
学了指针后,就明白为什么会这样了..我说的元素实际上是指针偏移..
  怕你没学指针就没讲...

嗯,现在明白了。。      FOR循环只懂得一丁点的概念。。

对了大神,我学到一节的知识点时,我该如何最彻底的掌握呢?? 做题?还是背书上的概念? 不如跟我讲讲大神你以前是如何学的??洗耳恭听。。


还没学到指针哦,刚学数组。。不过快到指针和算法了。。

小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-11-5 22:21:15 | 显示全部楼层
zjxy2545 发表于 2011-11-5 22:04
嗯,现在明白了。。      FOR循环只懂得一丁点的概念。。

对了大神,我学到一节的知识点时,我该如何 ...

话说俺不是大神,啊光才是,本区版主...俺只是打酱油的..

一点一点的累积,学程序的就是多看多写(多模仿,以后有想法经验也够了)...没啥捷径...
话说, 咱没看甲鱼哥的C视频,俺是自学的C/C++(其实都没学好准备学数据结构的时候复习下,这个是被VC的MFC害的)..
以前俺看的书是21天学通C语言..没看老谭的书..

以上是个人理解......

小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2011-11-8 21:26:14 | 显示全部楼层
yipwing 发表于 2011-11-5 22:21
话说俺不是大神,啊光才是,本区版主...俺只是打酱油的..

一点一点的累积,学程序的就是多看多写 ...

谢谢哈。 。不管什么事不可能一步登天的。。  真的要多练。。 感谢你解答。。
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-9 07:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表