A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© fjwp4399 中级黑马   /  2015-4-8 23:28  /  1025 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

/*
今天做基础测试,有这么一道题是这样子的: 有八个人坐在一起,问第8个人多少岁?他说比第7个人大3岁。问第7个人多少岁?他说比第6个人大3岁。问第6个人多少岁?他说比第5个人大3岁。问第5个人多少岁?他说比第4个人大3岁,以此类推,最后问第1个人多少岁?他说是10岁。请问第8个人多大?(C语言)
*

然后我写的是这样子:
#include <stdio.h>
int main()
{
    int i, age[8]; // age表示第i个人的年龄
    age[1] = 10;
    for (i = 2; i <= 8; ++ i) // 从第2个人开始一直到第8个人,他们都比上一个人大3岁
        age = age[i - 1] + 3;
    for(i = 1;i<=8; ++i)
    printf("%d\n", age);
    return 0;
}


依次运行的结果是:10、13、19、22、25、28、8


本来是最后一个数应该为32,为什么是8?求解。


2 个回复

倒序浏览
你的角标越界了是根本原因!数组age[8]下标的最大值是7,也就是说你的age[8]越界了,但是你刚好又在声明age[8]之前声明了一个int i,所以你的age[8]就是 i。你可以在你的第一个for循环和第二个for循环过程中一直打印age[8],你就会发觉它的值跟i是一样的。最直接的方法就是打印age[8]和i的地址,目测是一样的。

所以这道题,你有三个问题:
1、首先我感觉你这个方法不是递归,应该算是迭代。(你这道题我也做过,我使用的while循环)
2、对数组不熟悉,连int age[8]数组,你竟然还能访问age[8]可以看出,基础不扎实。
3、最后一点,李明杰老师讲的那个C语言基础,关于数组,关于字符串,字符数组,指针和地址、已经MAC的寻址方式,你是没懂的。这个比较难,但是懂了你会发觉真的很有意思!

说的比较多,不喜勿喷
回复 使用道具 举报
qiuyuhuaihua 发表于 2015-4-9 00:02
你的角标越界了是根本原因!数组age[8]下标的最大值是7,也就是说你的age[8]越界了,但是你刚好又在声明age[ ...

首先很感谢你的回答。我之前学习c语言都是直接看视频,以为都看懂了,没有什么上手的经验,事实上,我门都没入,所以基础很差。我看了下,age【8】和i的地址是一样。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马