C语言实现一元二次方程求解

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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值