#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的答案。任何人都可以解释我的代码有什么问题吗?
答案 0 :(得分:1)
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)
。
解决方案:你需要
将指针传递给您要在其中存储来自被调用函数的结果的变量,然后在调用者中使用它们来检索更新的值。
形成一个结构,其中包含要为其返回计算值的所有变量,填充并返回结构。然后,在调用者中,在另一个结构类型变量中收集返回的值,然后使用单个成员元素来打印该值。
答案 1 :(得分:0)
您的代码中几乎没有接受点。
因此,最简单的解决方法是使用全局变量。
set(handles.axes1,'Rotation',-25);