【问题标题】:Integrating 2 Mathematical Equations in 1 C在 1 C 中积分 2 个数学方程
【发布时间】:2021-01-13 08:06:33
【问题描述】:

我编写了一个程序来根据函数 y = (sqrt(3+x^2))/(20x^2+sqrt(x)) 的给定 x 值计算 y 值。使用两个计数器,一个用于 x 值 [i],一个用于 y 值 [n]。我的 x 值显示得很好,但是,y 值返回零。这里会有什么错误?非常感谢。

    for (i = 0; i < 30; i++)
    {
        x[i] = 20 i * 2 + 3;
    }   

    for (n = 0; i < 30 && n < 50; i++, n++)
    {
        y[n] = (sqrt(3 + (pow(x[i], 2))))) / (20 * pow(x[i], 2) + sqrt(x[i]));
    }

    for (i = 0, n = 0; i < 30 && n < 50; i++, n++)
    printf("x %lf, y %lf", x[i], y[n]);

return 0;

}

【问题讨论】:

  • 您应该使用像 2.0 vs 2 这样的浮点常量来排除表达式中的整数运算。在最后一个循环中你不需要 i 和 n。

标签: c arithmetic-expressions math-functions


【解决方案1】:

您将继续使用i,而不是在第一个for 循环后将其重新初始化为0。因为i 的值保持在times 的值,所以第二个for 循环从不 开始运行。但是您在最后一个循环中打印xy 的值时正确地初始化了它。

将您的第二个 for 循环更改为

for (i =0, n = 0; i < times && n < Ymax; i++, n++)
//   ^^^^^
{
    y[n] = 1 - (1 - (sqrt(4 - (pow(x[i], 2))))) / (40 * pow(x[i], 2) + sqrt(x[i]));
}

【讨论】:

    【解决方案2】:

    在第二个 for 循环的初始化程序部分添加“i=0”行。

    你应该像这样使用 C99 风格的循环:

    for (int i = 0; ...)
    

    避免此类错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-23
      • 2012-02-02
      • 1970-01-01
      • 2017-04-25
      • 2014-11-28
      • 2014-03-10
      • 2018-07-11
      • 1970-01-01
      相关资源
      最近更新 更多