我正在完成一项帮助我理解指针使用的作业。除了从函数返回指针外,我觉得自己掌握得很好。以下是我遇到问题的代码:
#include <stdlib.h>
#include <stdio.h>
//#include <time.h>
double *ptr;
double * userallocate(double numbers)
{
if (numbers < 1000000)
{
ptr = malloc(sizeof(double)*numbers);
return ptr;
}
else
{
printf("You have allocated too many numbers... SHAME\n");
exit(0);
}
}
double * gendata(double *ptr, double numbers)
{
int i;
for (i=0;i<numbers;i++)
ptr[i] = rand()/RAND_MAX;
return ptr;
}
void average(double numbers)
{
int i;
double sum, average;
for (i=0;i<numbers;i++)
sum+=ptr[i];
average = sum/numbers;
printf("%f,",sum);
printf("We have averaged %d random numbers for you.\n The average is %f",(int) numbers,average);
}
int main(int argc, char *argv[])
{
double num;
if (argc !=2)
{
printf("Not enough arguements... SHAME\n");
exit(0);
}
num = atof(argv[1]);
userallocate(num);
gendata(ptr,num);
average(num);
getchar();
return 0;
}
第一个函数userallocate()
用于创建一个缓冲区,该缓冲区包含双精度空间,其大小由命令行参数确定。我的代码编译但是当我尝试将随机数放入缓冲区并对其求平均值时,我得到0.0000
。我认为我在userallocate()
中返回指针并将其传递给其他函数的方式存在问题。任何帮助将不胜感激!
答案 0 :(得分:2)
您看到0.0000
的原因与指针无关。
rand()
返回int
,而RAND_MAX
也是int
,很可能会大于rand()
返回的值,因此整数除法的结果为0的时间。
如果需要浮点结果,则需要将除法的一个参数设置为浮点类型。
ptr[i] = rand()/(double)RAND_MAX;