我知道java,现在我正在努力学习C.我有一个数学问题,我试图在C上做,但我想我不知道我的代码的这一部分是否正确。数学练习是
这是我的代码:
for (x = a; x <= b; x = x + h) {
while (x < b) {
if (abs(x) > 1) {
y = 1 / sqrt(pow(x, 2) - 1);
printf("y= %d", y);
} else
if (abs(x) == 1) {
y = -9999;
printf("y= %d", y);
} else
if (abs(x) < 1) {
y = 1 / sqrt(1 - pow(x, 2));
printf("y= %d", y);
}
}
}
答案 0 :(得分:1)
您的代码具有无限循环:while
条件是常量,因为x
未在其正文中进行修改。这个while
循环实际上是多余的,应该删除。
您应该将代码移动到函数定义中并给出参数并返回类型为double
的值:
#include <math.h>
double f(double x) {
if (fabs(x) > 1.0) {
return 1.0 / sqrt(x * x - 1.0);
} else
if (fabs(x) == 1) {
return 0.0;
} else {
return 1.0 / sqrt(1.0 - x * x);
}
}
在此循环中使用它:
#include <stdio.h>
void print_values(double a, double b, double h) {
for (double x = a; x <= b; x = x + h) {
printf("f(%g) = %g\n", x, f(x));
}
}
如Peter所述,函数f(x)
可以进一步简化为:
double f(double x) {
if (fabs(x) == 1.0) {
return 0.0;
} else {
return 1.0 / sqrt(fabs(1.0 - x * x));
}
}
并使用三元运算符:
double f(double x) {
return (fabs(x) == 1.0) ? 0.0 : 1.0 / sqrt(fabs(1.0 - x * x));
}