C语言实现一元二次方程(仅限整数解)
一、首先是我的做法,很不好
//一元二次方程 ax^2 + bx + c = 0 有解无解
/*
思路是接受完a,b,c之后while一直循环 满足表达式就输出x值
oh god 一元二次方程 最多有两个解,创建个数组,最后下标来表示有几个解
int a[3] 下标是2就说明有两个解
b^2 - 4*a*c可以判断有几个解
*/
#include <stdio.h>
int main()
{
int a=0, b, c,i=0,temp;
int num;
printf("请输入a:\n");
scanf("%d", &a);
printf("请输入b:\n");
scanf("%d", &b);
printf("请输入c:\n");
scanf("%d", &c);
num = b * b - 4 * a * c;
if (num < 0)num = 0;
if (num == 0)num = 1;
if (num > 0)num = 2;
/*printf("请分别输入a,b,c\n");
scanf("%d %d %d", &a, &b, &c);*/
//应该都行吧
/*printf("请分别输入a,b,c\n");
scanf("%d%d%d", &a, &b, &c);*/
if (num == 0)
{
printf("原方程无解");
}
else if(num==1)
{
printf("原方程只有一个解,解为%d", (-b) / (2*a));
}
else{
for (i = (-b) / (2 * a);; i++)
{
//if (a * i * i + b * i + c = 0) { 这样写当然是错的,你在给一个表达式赋值
if (a * i * i + b * i + c == 0) {
break;
}
}
//这里对应有两个解的情况,当找到一个解的时候,由于对称轴的存在,另一个解也呼之欲出了
printf("原方程有两个解,分别是%d和%d",i, (-b) / (2 * a)-i-(-b)/(2*a));
//结果意思是,一个是i,另一个是相关于对称轴对称的另一个解 但不知道a为什么报错了,别的地方都没报错
}
}
二、老师的做法,很好
#include<stdio.h>
#include<math.h>
int main()
{
int a, b, c;//分别存放一元二次方程系数
float x1, x2;//分别存放解
float delta;
scanf("%d %d %d", &a, &b, &c);
delta = b * b - 4 * a * c;
if (delta > 0)
{
x1 = (-b + sqrt(delta)) / 2 * a;
x2 = (-b - sqrt(delta)) / 2 * a;
printf("有两个解,分别是%f和%f", x1, x2);
}
else if (delta == 0)
{
x1 = (float)(-b) / (2 * a);
printf("只有一个解,为%f", x1);
}
else
{
printf("无解");
}
return 0;
}