-2

使用与我的另一个问题中提到的相同的机器和 IDE(代码中的问题或我的 IDE/comp 有问题的第三段? )

我尝试运行此代码:

#include <stdio.h>
#define n 3
int main()
{
    int i;
    float values[n],sumval,svmean,tmp;
    for(i=0;i<n;++i)
    {
        scanf("%f",&tmp);
        values[i]=tmp;
        sumval = sumval + values[i];
    }
    svmean = sumval/n;
    printf("%f \n",svmean);
    return(0);
}

上面的代码应该运行这个公式

http://img850.imageshack.us/img850/6894/95871186.jpg

这意味着它必须添加一些值并将结果除以它们的总数。

正如您在上面看到的,我创建了一个包含随机位置的数组,n并要求用户为每个位置填写一个值,然后将它们全部相加并除以它们。

问题是它不起作用。无论输入是什么,它都只输出结果 7。

但是,如果我将 stdlib.h 包含到代码中,它就可以正常工作。

所以

  • 问题 A:为什么只使用 stdio.h 库代码不能正常工作?代码的哪个元素需要 stdlib.h 库?

如您所见,该数组values[n]似乎具有随机n数量的单元格,但实际上我已经将此数字设置为等于 3(使用#define

  • 问题 B:有没有办法用相同的 porpuse 运行代码,但让用户定义数组的大小,values[n]或者换句话说,让用户输入一个整数来设置nin的值values[n]
4

6 回答 6

2

首先,你忘了初始化sumval。你希望它0在一开始。

如果您希望在运行时确定数组的大小,则必须使用 动态分配它malloc,例如:

int n;
float *values,sumval=0,svmean,tmp;
scanf("%d", &n);
values = (float *) malloc (n * sizeof(float));

稍后,您应该释放通过调用分配的内存free

free(values);
于 2012-12-21T10:47:53.757 回答
0

将 sumVal 初始化为 o。因为对于第一次迭代,它会将垃圾+值 [i] 添加到 sumValue 中。

 #include <stdio.h>
 #define n 3
 int main()
 {
 int i;
 float values[n],sumval=0,svmean,tmp;
 for(i=0;i<n;++i){
 scanf("%f",&tmp);
 values[i]=tmp;
 sumval = sumval + values[i];
 }
  sumean = sumval/n;
  printf("%f \n",svmean);
  return(0);

}

于 2012-12-21T10:49:28.370 回答
0

问题是您没有初始化sumval. 您应该在循环0.0之前将其设置为。for

包含/不包含时发生的变化stdio.h可能是由于使用堆栈的一些初始化函数,并在您输入函数之前更改了内存中的值,并且恰好该内存用于您的sumval变量。

但是你不应该依赖这个。

于 2012-12-21T10:49:48.950 回答
0

您可以像这样在程序的堆中分配一个可变大小的数组:

#include <stdio.h>
int main(int argc, char **argv)
{
   int i;
   //Get the size of the array from input parameter
   int n = atoi(argv[1]);                
   float sumval,svmean,tmp;
   //Allocate the array of values
   float *values = malloc(sizeof(float)*n);
   // Initialize sumval
   for(sumval=0,i=0;i<n;++i){
      scanf("%f",&tmp);
      values[i]=tmp;
      sumval = sumval + values[i];
   }
   svmean = sumval/n;
   printf("%f \n",svmean);
   //Free it
   free( values );               
   return(0);
  }

您还需要将 sumval 初始化为 0。启动程序时会传递数组大小的参数(如果您使用 IDE,您应该检查它是如何做到的)

于 2012-12-21T10:51:23.293 回答
0

问题 A 答案 在您发布的代码中,不需要 stdlib.h。如果您使用动态分配内存的函数(例如 malloc()),则需要此库。

问题 B 答案: 这是一种做你想做的事情的方法:

#include <stdio.h>

int main()
{
    int i, choice;
    float *values,sumval,svmean,tmp;
    printf("Please enter the size of the array: ");
    scanf("%d", &choice);
    values = (float*) malloc(choice*sizeof(float));
    for(i=0;i<n;i++){
        scanf("%f",&tmp);
        values[i]=tmp;
        sumval = sumval + values[i];
    }
    svmean = sumval/n;
    printf("%f \n",svmean);
    free(values);
    return 0;
}

另外,我修改了 for 语句中 i 的增量,使其在运行循环后增加。

于 2012-12-21T10:51:45.787 回答
0

尝试这个..

#include <stdio.h>

int main()
{
    int i = 0;
    int n = 0;
    float sumval = 0;
    float svmean = 0;
    float tmp = 0;

    printf("Enter count : ");
    scanf("%d", &n);

    for (i = 0; i < n; ++i) {
        scanf("%f", &tmp);
        sumval = sumval + tmp;
    }

    svmean = sumval/n;
    printf("%f \n",svmean);

    return(0);
}

在您的代码中,不需要 values[] 数组来计算输出。您是否出于任何原因存储这些值??

于 2012-12-24T02:57:15.627 回答