浮点值给出随机值
float value gives random value
#include <stdio.h>
float average(float arr[], int n)
{
float sum ;
for (int i = 0; i<n; i++){
sum = sum+arr[i];
printf("%p\n", arr+i);
printf("%f\n", arr[i]);
printf("%f\n",sum );
}
return sum/n;
}
int main() {
float arr1[5] = {1,2,3,4,5};
printf("%f is the average.\n",average(arr1, 5));
return 0;
}
你好,我在学校学c,就遇到了这种奇怪的情况。
我想编写一个函数来获取长度为 n 的浮点数组并输出数字的平均值。
我正在使用两种不同的文本编辑器进行测试,一种是 VSC 和 repl.it 在线。
我得到
0x7ffe72970cc0
1.000000
1.000000
0x7ffe72970cc4
2.000000
3.000000
0x7ffe72970cc8
3.000000
6.000000
0x7ffe72970ccc
4.000000
10.000000
0x7ffe72970cd0
5.000000
15.000000
3.000000 is the average.
与repl.it,但当我使用 VSC 时,
我得到
0x7ffeeab1b770
1.000000
-107423728669532035777298432.000000
0x7ffeeab1b774
2.000000
-107423728669532035777298432.000000
0x7ffeeab1b778
3.000000
-107423728669532035777298432.000000
0x7ffeeab1b77c
4.000000
-107423728669532035777298432.000000
0x7ffeeab1b780
5.000000
-107423728669532035777298432.000000
-21484745272737805312720896.000000 is the average.
这个。
我的代码有什么错误的地方吗?为什么这两者不同?
感谢任何反馈,谢谢!
你需要在声明时将sum
变量初始化为零,像这样:
float sum = 0;
还有几件事:
如果您使用以下值初始化数组,则不需要数组大小:
float arr1[5] = {1,2,3,4,5};
相当于:
float arr1[] = {1, 2, 3, 4, 5};
此外,除了传递 5 作为数组大小,您还可以传递:
sizeof(arr1)/sizeof(float)
无论元素数量如何,它始终是正确的大小。
在大多数 C 编译器中,未初始化变量的值是垃圾。当你说
int x;
,它实际上做了什么,它将内存定位在某个地址。它不对 x
的值进行 任何 种初始化,因此 x
现在包含一些以前存在的值(垃圾)。
似乎 repl.it 正在将默认初始化为 0;我不推荐使用这种编译器,因为它会阻止你真正理解 C 是如何工作的。
#include <stdio.h>
float average(float arr[], int n)
{
float sum ;
for (int i = 0; i<n; i++){
sum = sum+arr[i];
printf("%p\n", arr+i);
printf("%f\n", arr[i]);
printf("%f\n",sum );
}
return sum/n;
}
int main() {
float arr1[5] = {1,2,3,4,5};
printf("%f is the average.\n",average(arr1, 5));
return 0;
}
你好,我在学校学c,就遇到了这种奇怪的情况。 我想编写一个函数来获取长度为 n 的浮点数组并输出数字的平均值。 我正在使用两种不同的文本编辑器进行测试,一种是 VSC 和 repl.it 在线。 我得到
0x7ffe72970cc0
1.000000
1.000000
0x7ffe72970cc4
2.000000
3.000000
0x7ffe72970cc8
3.000000
6.000000
0x7ffe72970ccc
4.000000
10.000000
0x7ffe72970cd0
5.000000
15.000000
3.000000 is the average.
与repl.it,但当我使用 VSC 时, 我得到
0x7ffeeab1b770
1.000000
-107423728669532035777298432.000000
0x7ffeeab1b774
2.000000
-107423728669532035777298432.000000
0x7ffeeab1b778
3.000000
-107423728669532035777298432.000000
0x7ffeeab1b77c
4.000000
-107423728669532035777298432.000000
0x7ffeeab1b780
5.000000
-107423728669532035777298432.000000
-21484745272737805312720896.000000 is the average.
这个。 我的代码有什么错误的地方吗?为什么这两者不同? 感谢任何反馈,谢谢!
你需要在声明时将sum
变量初始化为零,像这样:
float sum = 0;
还有几件事:
如果您使用以下值初始化数组,则不需要数组大小:
float arr1[5] = {1,2,3,4,5};
相当于:
float arr1[] = {1, 2, 3, 4, 5};
此外,除了传递 5 作为数组大小,您还可以传递:
sizeof(arr1)/sizeof(float)
无论元素数量如何,它始终是正确的大小。
在大多数 C 编译器中,未初始化变量的值是垃圾。当你说
int x;
,它实际上做了什么,它将内存定位在某个地址。它不对 x
的值进行 任何 种初始化,因此 x
现在包含一些以前存在的值(垃圾)。
似乎 repl.it 正在将默认初始化为 0;我不推荐使用这种编译器,因为它会阻止你真正理解 C 是如何工作的。