C-为什么我的代码返回0.00


#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=%.2fnAverage=%.2fnStandard 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 ,因为,您的代码调用了不确定的行为,并且无法做出合理的理由。

要详细说明语句

 return sum, avg, sd;

不做您认为正在做的事情。它不会一起返回三个值,而是由于逗号运算符的使用,它仅返回sd

也就是说,您没有在代码中任何地方收集函数调用的返回值,因此您无法从呼叫者中的函数调用中返回任何有效的输出。

之后,您最终使用

 printf("Sum=%.2fnAverage=%.2fnStandard Deviation=%.2f", sum, avg, sd);

在哪里,所提供的变量(自动,本地变量)仍然是不可传统的,本质上是试图利用调用不确定行为的不确定值。

最后,对于托管环境,main()的符合签名至少应为int main(void)

解决方案:您需要

  • 将指针传递到要存储来自调用函数的结果的变量,然后,在呼叫者中,您可以使用它们来检索更新的值。

  • 形成一个结构,其中包含您希望返回,填充和返回结构的所有变量。然后,在呼叫者中,在另一个结构类型变量中收集返回的值,然后使用单个成员元素打印值。

您的代码中很少有要点。

  1. 在C中,您不能从函数中返回超过1个值。您正在尝试返回3个阀
  2. 两个函数的局部变量之间存在差异。您不能在1个函数中分配它们,并在没有适当参考的情况下将其分配。
  3. 您将功能作为"按值调用"(在链接中阅读更多有关它的信息)。当您想要更改的值时,您应该使用使用指示器的"引用"。

因此,最简单的修复程序将使用全局变量。

void math(int, int, int, int, int);     //Changed function declareation
 double sum,avg,sd; //New global variables
 int main()
 {
    int a, b, c, d, e;
    printf("Enter Five Integers->");
    scanf("%d%d%d%d%d", &a, &b, &c, &d, &e);
    math(a, b, c, d, e);        //Changed function calling
    printf("Sum=%.2fnAverage=%.2fnStandard Deviation=%.2fn", sum, avg, sd);
    return 0;
}
 void math(int a, int b, int c, int d, int e)
 {
    sum = a + b + c + d + e;
    avg = (sum) / 5;
    double result = (pow(a - avg, 2) + pow(b - avg, 2) + pow(c - avg, 2) +  pow(d - avg, 2) + pow(e - avg, 2) ) / 5;
    sd = pow(result , 0.5);
 }

相关内容

  • 没有找到相关文章

最新更新