【问题标题】:Reading floats into an array将浮点数读入数组
【发布时间】:2009-05-09 16:21:48
【问题描述】:

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

【问题讨论】:

  • 过早优化是万恶之源。
  • 闻起来像家庭作业标签?我还没有看到那个:)
  • 这看起来很像家庭作业,所以这样做: 1. 仔细阅读你的课程材料。 2. 选择迄今为止在课程中向您展示过的正确功能,这些功能可以按照您的要求读取输入并存储结果。如果你在这里得到答案,它不会帮助你学习。您需要经过思考过程,使用自己提供的工具找到正确的解决方案。

标签: c floating-point floating-point-conversion


【解决方案1】:
int size = 10;
float vet[size];
   for(i = 0; i < size; i++){
      scanf("%f", &vet[i]);
   }

尽可能简单:)

【讨论】:

  • 我也从键盘 10 读取的浮点数只是一个示例
  • 完全使用scanf?糟糕的程序员,没有cookie! :-)
【解决方案2】:

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

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

看看this tutorial


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

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 的指针。您有&amp;temp,它也是指向float 的指针,因为&amp; 是地址运算符,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++); 
}

【讨论】:

  • 我是这样想的..但还是有问题 int n,index;浮动温度; scanf("%d",&n);浮动 *pValues=(float *)calloc(n,sizeof(float)); for(index=0;index
【解决方案3】:

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

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

听起来像你想要的东西。

总和 = 0;

阅读当前
总和 += 当前
while(你还没有读过 10 个数字);

【讨论】:

  • 我相信 OP 在他写 add 时的意思是 store
【解决方案4】:

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

【讨论】:

  • 假设浮点值[100];诠释n;整数索引; scanf("%d",&n); for(index=0;index
【解决方案5】:
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]);
}

【讨论】:

    【解决方案6】:

    听起来像家庭作业。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多