【发布时间】:2017-10-22 05:52:40
【问题描述】:
我正在尝试编写一个程序,该程序旨在运行无限 for 循环,以找到两个函数相交的 (x, y) 坐标。我已经完成了程序的编写,但是在运行程序时,没有任何反应。
这是我认为缺陷所在的部分:
for (;;) {
// Calculate the y-coordinate's of the Midline.
midLine = (low + high) / 2;
fMid = f(midLine);
gMid = g(midLine);
// if the y-coordinate of fMid == gMid, break and return midLine
if (fMid == gMid) break;
if (fLow < gLow && fHigh > gHigh) {
high = midLine;
fHigh = fMid;
gHigh = gMid;
}
else {
low = midLine;
fLow = fMid;
gLow = gMid;
}
}
我相信问题出在我的数学逻辑上,但无论我怎么想,我的大脑都无法理解我哪里出错了。对于我的逻辑出现问题的任何提示或提示,我将不胜感激。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
double solveEq (double(*f)(double x), double(*g)(double x), double low, double high);
double quadratic (double);
double cubic (double);
int main() {
double lo = 0, hi = 0;
printf ("Enter two values for lo and hi: ");
scanf_s ("%lf%lf", &lo, &hi);
double x = solveEq(quadratic, cubic, lo, hi);
printf("\nSuccessful. x = %f.\n", x);
system("Pause");
return 0;
}
double solveEq (double(*f)(double x), double(*g)(double x), double low, double high) {
double fLow = (*f)(low);
double fHigh = (*f)(high);
double gLow = (*g)(low);
double gHigh = (*g)(high);
// check if fLow == gLow intersects or fHigh == gHigh. If they do, break and return X.
if (fLow == gLow) return low;
if (fHigh == gHigh) return high;
double midLine = 0, fMid = 0, gMid = 0;
for (;;) {
// Calculate the y-coordinate's of the Midline.
midLine = (low + high) / 2;
fMid = f(midLine);
gMid = g(midLine);
// if the y-coordinate of fMid == gMid, break and return midLine
if (fMid == gMid) break;
if (fLow < gLow && fHigh > gHigh) {
high = midLine;
fHigh = fMid;
gHigh = gMid;
}
else {
low = midLine;
fLow = fMid;
gLow = gMid;
}
}
return midLine;
}
double quadratic(double x) {
return x*x;
}
double cubic(double x) {
return x*x*x;
}
【问题讨论】:
-
你不能使用二分搜索来求解任意方程。
-
你试过用调试器单步调试吗?