2

我如何读取 10 个浮点数并将它们存储在一个数组中而不浪费任何内存?

4

6 回答 6

4
int size = 10;
float vet[size];
   for(i = 0; i < size; i++){
      scanf("%f", &vet[i]);
   }

尽可能简单:)

于 2009-05-09T16:30:34.093 回答
2

啊哈。问题不是读取浮点数,而是内存。您读入i ,并且需要一个恰好包含i浮点数的数组。

这确实闻起来像家庭作业,这很好,但我太老师了,无法给你完整的答案。所以我会告诉你,你需要的是一个名为malloc()的 C 函数和一个名为sizeof的 C 运算符(它看起来像一个函数,但它实际上是内置在语言中的)。

看看这个教程


是的,你明白了。这是您评论中的代码,已格式化。

int n,index;
float temp;
scanf("%d",&n);
float *pValues=(float *)calloc(n,sizeof(float));
for(index=0;index<n;index++) {
    scanf("%f",&temp); 
    *(pValues+index)=temp;
}

我会做两个改变:

  1. malloc除了字符之外,它更适合用于任何东西
  2. 在 C 中,数组和指针有着非常密切的关系;实际上*(pValues+index)完全等价于pValues[index]

所以我将其重写为:

int n,index;
float temp;
scanf("%d",&n);
float *pValues=(float *)malloc(n*sizeof(float));
for(index=0;index<n;index++) {
    scanf("%f",&temp); 
    pValues[index]=temp;
}

让我们再看一下代码的另一种转换。你有pValues,它是一个指向float. 您有&temp,它也是指向 的指针float,因为&它是地址运算符并且tempfloat. 而且,您只是在使用索引进行指针运算。因此,我们可以再次将其重写为:

int n,index;    // Don't need temp
scanf("%d",&n);
float *pValues=(float *)malloc(n*sizeof(float));
for(index=0;index<n;index++) {
    scanf("%f",pValues+index); 
}

现在,测验问题:如果你做了循环会发生什么

for(index=0;index<n;index++) {
    scanf("%f",pValues++); 
}
于 2009-05-09T17:13:41.793 回答
0

您必须更具体地了解问题。

除非您需要对这些数字进行其他处理,否则节省内存的最简单方法是不要将它们存储在数组中。

这听起来像你想要的东西。

总和 = 0;
do
  read current
  sum += current
while(你还没有读过 10 个数字);

于 2009-05-09T16:29:26.907 回答
0

您的问题的答案是您不能将内容添加到数组并期望数组使用任何内存。

于 2009-05-09T16:41:56.613 回答
0
float arr[10];
for(i = 0; i < 10; i++){
    scanf("%f", &arr[i]);
}

我知道,就像上面那样,但不使用额外的 int 以防它没有被优化。呵呵

要使用更少的内存,请使用下面的代码。它们都被读入一个数组,但只有最后一个被读入的是数组:

float arr[1];
for(i = 0; i < 10; i++){
    scanf("%f", &arr[0]);
}
于 2009-05-09T17:09:11.053 回答
0

听起来像家庭作业。

从输入中读取浮点数。将其乘以单个浮点数的大小 分配将地址存储在指向浮点数的指针中的确切字节数 从输入中读取浮点数 有一个循环将数组中的所有浮点数相加

我的猜测是家庭作业课是实现术语指针和数组之间的联系,虽然你可以在没有任何数组索引的情况下做到这一点,但你的问题暗示你必须使用数组。

于 2009-05-24T14:58:34.423 回答