我编写了以下代码来计算二次方程的根:
int quadroots(int *ap, int *bp, int *cp,int *root1p, int *root2p, int *dp);
int main (void) {
int ap,bp,cp;
int dp, root1p, root2p;
quadroots(&ap, &bp, &cp, &root1p, &root2p, &dp);
printf("The solutions are: %f, %f", root1p, root2p);
}
int quadroots(int *ap, int *bp, int *cp,int *root1p, int *root2p, int *dp){
int a, b, c, d, root1, root2;
printf("Enter a, b, c \n");
scanf("%d, %d, %d", &a, &b, &c);
if (a==0) {
printf ("The system is linear. The roots cannot be computed using this program: a cannot be 0. Please recompile");
return 0;
}
int b_sqared = b*b;
d = b_sqared - (4 * a * c);
if (d<0) {
d=-d;
printf("The roots of this equation are the complex numbers: \n");
printf("%.3f+%.3fi", ((-b) / (2*a)), (sqrt(d) / (2 * a)));
printf(", %.3f%.3fi", (-b / (2*a)), (-sqrt(d) / (2*a)));
}
else if (d==0) {
printf("The root of this equation are real and equal. \n");
root1= (-d / (2*a));
printf("The roots of this equation are: %.3f, %.3f", root1, root1);
}
else {
printf ("The roots of the quadratic equation are real numbers. \n");
root1 = (-b + sqrt(d)) / (2*a);
root2 = (-b - sqrt(d)) / (2*a);
printf("Roots of the quadratic equation are the real numbers %.3f, %.3f", root1,root2);
}
return 0;
*root1p=root1;
*root2p=root2;
}
这是基于我之前编写的有效的代码,但在那时,我还没有使用函数。
就像现在一样,它编译并运行正常(即它接收数字并执行计算),但它打印出的答案是完全错误的。
EG。输入&#34; 1 5 6&#34; (对应于等式x ^ 2 + 5x + 6,它应该打印出来&#34;根是实数。 根是实数6和1&#34; 因为那些是等式的根源。但是,它没有。印刷的是一些荒谬的巨大数字(输入a,b,c 1 5 6 这个等式的根源是复数: -2719010580126301300000000000.000 + 0.000i,-2719010580126301300000000000.0000.000i解决方案:0.000000,0.000000)
非常感谢任何帮助。
非常感谢!最好的。
答案 0 :(得分:0)
"instanceView": {
"bootDiagnostics": null,
"disks": [
{
"name": "testvm-1480595334683-os-disk",
"statuses": [
{
"code": "ProvisioningState/succeeded",
"displayStatus": "Provisioning succeeded",
"level": "Info",
"message": null,
"time": "2016-12-01T12:30:35.583526+00:00"
}
]
}
]
您在printf("%.3f+%.3fi", ((-b) / (2*a)), (sqrt(d) / (2 * a)));
中使用整数除法因此您将获得某些数字的不正确值。
你可以使用。
((-b) / (2*a))
在分割前强制转换为双精度。您需要对代码中两个整数之间的所有除法执行此操作。
答案 1 :(得分:0)
这个程序的设计很可怕,但如果你
#include <math.h>
(因此sqrt
已知)int
替换为float
s(此处不想要整数数学)scanf("%f, %f, %f", &a, &b, &c);
替换为scanf("%f %f %f", &a, &b, &c);
(scanf
的正确格式字符串)。它应该或多或少地起作用。
我没有进一步挖掘,所以可能还有其他问题。