鱼C论坛

 找回密码
 立即注册
查看: 3466|回复: 7

有关数组的赋值问题

[复制链接]
发表于 2016-11-6 10:37:40 | 显示全部楼层 |阅读模式

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

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

x
/*
按年份输出银行存款100元的金额
*/

#include <stdio.h>
int main(){
    int years = 0,n = 0;//年份和一个用于循环的n
    float rate = 0;//利率
    printf("请输入年利率:");
    scanf("%f",&rate);
    printf("请输入存款年份:");
    scanf("%d",&years);
    float money[n];//定义金额数组
    money[0] = 100;//给数组第一个数赋值
    printf("年        %.2f\n",rate);
    for (n = 1; n <= years; n++) {
        money[n]=money[n-1]*rate;//数组第n+1个数按照第n个数乘以rate来进行赋值
        printf("%d         %.2f\n",n,money[n]);
    }
    return 0;
}

运行结果如下

请输入年利率:1.04
请输入存款年份:7
年        1.04
1         104.00
2         108.16
3         112.49
4         0.00
5         0.00
6         0.00
(lldb)


前三年的输出都还正常,为什么后面的都不可以了?
尝试了其他利率,都是只能算到第三年。
然后存款年份如果是三年以下就可以正常结束程序……
请问这个是错在什么地方了?
是浮点型的数据类型计算问题?
还是数组的定义有问题?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-11-6 11:00:54 | 显示全部楼层
有可能是位数太多了,给money换double类型试试行不?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-6 11:36:51 | 显示全部楼层
alltolove 发表于 2016-11-6 11:00
有可能是位数太多了,给money换double类型试试行不?

我试了试,并不可以……
改成double以后,竟然第二年开始就不能继续计算了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-6 12:24:21 | 显示全部楼层
本帖最后由 巴塞罗那 于 2016-11-6 12:25 编辑

应该是要将数组的长度定义好吧。
#include <stdio.h>
int main(){
    int years = 0,n = 0;//年份和一个用于循环的n
    float rate = 0;//利率
    float money[10];//定义金额数组,应该要定义好长度
    printf("请输入年利率:");
    scanf("%f",&rate);
    printf("请输入存款年份:");
    scanf("%d",&years);
    money[0] = 100;//给数组第一个数赋值
    printf("年        %.2f\n",rate);
    for (n = 1; n <= years; n++) {
        money[n]=money[n-1]*rate;//数组第n+1个数按照第n个数乘以rate来进行赋值
        printf("%d         %.2f\n",n,money[n]);
    }
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-6 12:37:53 | 显示全部楼层
数组的定义是固定的长度,不能指定一个变量n,c语言不允许动态数组类型
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-6 17:32:32 | 显示全部楼层
Cy86183570 发表于 2016-11-6 12:37
数组的定义是固定的长度,不能指定一个变量n,c语言不允许动态数组类型

C99标准允许了动态数组类型啊,比如:
int n = 0,a = 0;
    printf("请输入利率个数:");
    scanf("%d",&a);
    float money[n];
    for (n = 0; n < a; n++) {
        money[n] = 100.0f;
    }
这样就可以给一个动态数组赋值。我就随便粘贴过来一段刚刚测试的代码。不要在意细节
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-6 17:39:06 | 显示全部楼层
巴塞罗那 发表于 2016-11-6 12:24
应该是要将数组的长度定义好吧。
#include
int main(){

定义好长度以后确实没有问题,但是如果需要一个动态数组的话,应该如何修改我现在的程序呢?错误的地方是在哪里?C99标准以后C语言是可以定义动态数组的,我现在用的编译器也允许。但是为什么会报错没有想太清楚,对于数据类型和数组这里还是没有理解透彻_(:зゝ∠)_
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-6 21:02:30 | 显示全部楼层
看上去只有数组越界的问题,但是你用变数定义数组长度的时候,编译器会预留很多空间才是,应该不会影响,而且你只越界5*4byte。

我想不到为什么不能正常运行
你在代码里增加printf("%x %x",&years,money);
看看两者在内存中的位置
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-27 15:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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