C语言求解一元二次方程代码错误分析及修正
#include<stdio.h> #include<math.h> int main() { float a, b, c, d, answer1, answer2; scanf_s("%f,%f,%f", &a, &b, &c); d = b * b - 4 * a * c; if (d < 0) printf("NONE"); else if (d == 0) { answer1 = (-b) / (2 * a); printf("ANSWER1=%.2lf,ANSWER2=%.2lf", answer1, answer1); } else if (d > 0) { answer1 = (-b + sqrt(d)) / (2 * a); answer2 = (-b - sqrt(d)) / (2 * a); printf("ANSWER1=%.2lf,ANSWER2=%.2lf", answer1, answer2); } return 0; }
这个代码有以下问题:
- 在条件判断语句中,比较相等应该使用'=='而不是'='。所以第8行应该改为'else if (d == 0)'。
- 在输出语句中,应该使用'%lf'来格式化输出双精度浮点数。所以第12行和第16行应该改为'printf("ANSWER1=%.2lf,ANSWER2=%.2lf", answer1, answer2);'。
- 输入的三个浮点数应该用逗号分隔,而不是逗号加换行符。所以第7行应该改为'scanf_s("%f,%f,%f", &a, &b, &c);'。
修正后的代码如下:
#include<stdio.h> #include<math.h> int main() { float a, b, c, d, answer1, answer2; scanf_s("%f,%f,%f", &a, &b, &c); d = b * b - 4 * a * c; if (d < 0) printf("NONE"); else if (d == 0) { answer1 = (-b) / (2 * a); printf("ANSWER1=%.2lf,ANSWER2=%.2lf", answer1, answer1); } else if (d > 0) { answer1 = (-b + sqrt(d)) / (2 * a); answer2 = (-b - sqrt(d)) / (2 * a); printf("ANSWER1=%.2lf,ANSWER2=%.2lf", answer1, answer2); } return 0; }
原文地址: https://www.cveoy.top/t/topic/CU3 著作权归作者所有。请勿转载和采集!