【发布时间】:2015-02-06 06:42:55
【问题描述】:
我正在用 C 语言编写一个具有以下规范的函数:
float find_root(float a, float b, float c, float p, float q);
find_root 采用二次方程的系数 a,b,c 和区间 (p, q)。它将在给定的区间内返回这个方程的根。
例如:find_root(1, -8, 15, 2, 4) 应该产生一个“接近”3.0 的根
我已经写了下面的代码,但我不明白为什么它不起作用:
#include<stdio.h>
#include<math.h>
main()
{
printf("Hello World");
}
float find_root(float a, float b, float c, float p, float q) {
float d,root1,root2;
d = b * b - 4 * a * c;
root1 = ( -b + sqrt(d)) / (2* a);
root2 = ( -b - sqrt(d)) / (2* a);
if (root1<=q || root1>=p)
{
return root1;
}
return root2;
}
请告诉我错误是什么。
【问题讨论】:
-
您应该使用所有警告和调试信息 (
gcc -Wall -Wextra -g) 进行编译,然后使用调试器 (gdb) 逐步运行您的代码。 -
请定义
doesn't work。你有main()吗?为什么不给我们看?你链接到-lm了吗?为什么不告诉我们? -
@BasileStarynkevitch 嗨,我试过了,但无法修复错误。我想确认是我需要更改的调试器设置还是代码本身有什么问题
-
使用调试器是了解程序实际工作方式的好方法。当然,它不会神奇地纠正你的程序。你需要思考。如果您的程序的行为不是您想要的,则意味着您的程序中存在错误。您必须进行调查,然后改进您的源代码。
-
实际上问题是这个问题是前一段时间作为家庭作业给出的,在课程中我们将使用一个名为 seashell 的特定调试器-编译器集。因此,我无法真正更改或查看内容。
标签: c function imperative-programming