lhitzlerc 发表于 2016-11-6 10:37:40

有关数组的赋值问题

/*
按年份输出银行存款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;//定义金额数组
    money = 100;//给数组第一个数赋值
    printf("年      %.2f\n",rate);
    for (n = 1; n <= years; n++) {
      money=money*rate;//数组第n+1个数按照第n个数乘以rate来进行赋值
      printf("%d         %.2f\n",n,money);
    }
    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)


前三年的输出都还正常,为什么后面的都不可以了?
尝试了其他利率,都是只能算到第三年。
然后存款年份如果是三年以下就可以正常结束程序……
请问这个是错在什么地方了?
是浮点型的数据类型计算问题?
还是数组的定义有问题?

alltolove 发表于 2016-11-6 11:00:54

有可能是位数太多了,给money换double类型试试行不?

lhitzlerc 发表于 2016-11-6 11:36:51

alltolove 发表于 2016-11-6 11:00
有可能是位数太多了,给money换double类型试试行不?

我试了试,并不可以……
改成double以后,竟然第二年开始就不能继续计算了。

巴塞罗那 发表于 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;//定义金额数组,应该要定义好长度
    printf("请输入年利率:");
    scanf("%f",&rate);
    printf("请输入存款年份:");
    scanf("%d",&years);
    money = 100;//给数组第一个数赋值
    printf("年      %.2f\n",rate);
    for (n = 1; n <= years; n++) {
      money=money*rate;//数组第n+1个数按照第n个数乘以rate来进行赋值
      printf("%d         %.2f\n",n,money);
    }
    return 0;
}

Cy86183570 发表于 2016-11-6 12:37:53

数组的定义是固定的长度,不能指定一个变量n,c语言不允许动态数组类型

lhitzlerc 发表于 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;
    for (n = 0; n < a; n++) {
      money = 100.0f;
    }
这样就可以给一个动态数组赋值。我就随便粘贴过来一段刚刚测试的代码。不要在意细节{:10_250:}

lhitzlerc 发表于 2016-11-6 17:39:06

巴塞罗那 发表于 2016-11-6 12:24
应该是要将数组的长度定义好吧。
#include
int main(){


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

fc1735 发表于 2016-11-6 21:02:30

看上去只有数组越界的问题,但是你用变数定义数组长度的时候,编译器会预留很多空间才是,应该不会影响,而且你只越界5*4byte。

我想不到为什么不能正常运行
你在代码里增加printf("%x %x",&years,money);
看看两者在内存中的位置
页: [1]
查看完整版本: 有关数组的赋值问题