#include <stdio.h>
#include <math.h>
float math(int, int, int, int, int, float, float, float);
main() {
int a, b, c, d, e;
float sum, avg, sd;
printf("Enter Five Integers->");
scanf("%d%d%d%d%d", &a, &b, &c, &d, &e);
math(a, b, c, d, e, sum, avg, sd);
printf("Sum=%.2f\nAverage=%.2f\nStandard Deviation=%.2f", sum, avg, sd);
}
float math(int a, int b, int c, int d, int e, float sum, float avg, float sd) {
sum = a + b + c + d + e;
avg = (sum) / 5;
sd = pow(
((pow(a - avg, 2) + pow(b - avg, 2) + pow(c - avg, 2) + pow(d - avg, 2),
pow(e - avg, 2)) /
5),
0.5);
return sum, avg, sd;
}
我的程序总是返回答案 0.00。谁能解释一下我的代码有什么问题吗?
最佳答案
TL;DR 因为,您的代码调用 undefined behavior并且无法证明输出的合理性。
首先要详细说明声明
return sum, avg, sd;
没有做你认为它正在做的事情。它不会同时返回三个值,而是由于使用 comma operator ,它仅返回 sd
。
也就是说,您没有在代码中的任何位置收集函数调用的返回值,因此您无法在调用者中获得从函数调用返回的任何有效输出。
之后,您最终会使用
printf("Sum=%.2f\nAverage=%.2f\nStandard Deviation=%.2f", sum, avg, sd);
其中,提供的变量(自动、局部变量)保持未初始化状态,本质上是试图利用调用 undefined behavior 的不确定值。 .
最后,对于托管环境,main()
的一致签名至少应为 int main(void)
。
解决方案:您需要执行以下任一操作
将指针传递给您要在其中存储被调用函数结果的变量,然后在调用方中您可以使用它们来检索更新的值。
形成一个包含要返回其计算值的所有变量的结构,填充并返回该结构。然后,在调用方中,将返回值收集到另一个结构类型变量中,然后使用各个成员元素打印该值。
关于c - 为什么我的代码返回 0.00?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42465783/