0
点赞
收藏
分享

微信扫一扫

uniapp 日常业务 随便写写 源码

時小白 2024-08-16 阅读 26

《C程序设计教程(第四版)——谭浩强》


例题3.7 求ax²+bx+c=0方程的解。要求能处理任何情况下a、b、c的组合。


数学知识:

①当a=0时,为一次方程bx+c=0;x=-c/b;

②当a≠0时,为二次函数ax²+bx+c=0。b²-4c≥0时,有两个实根;

                                                              b²-4c≤0,有两个共轭复根。


代码:

//《C程序设计教程(第四版)——谭浩强》
//例题3.7 求ax²+bx+c=0方程的解。要求能处理任何情况下a、b、c的组合。

//数学知识:①当a=0时,为一次方程bx+c=0;x=-c/b;②当a≠0时,为二次函数ax²+bx+c=0。b²-4c≥0时,有两个实根;b²-4c≤0,有两个共轭复根

#include <stdio.h>
#include <math.h>
int main()
{
	float a = 0;
	float b = 0;
	float c = 0;
	 
	float d = 0;
	
	float x = 0;
	float x1 = 0;
	float x2 = 0; 
	
	printf("请输入a b c的值(三个值用空格隔开):\n");
	scanf("%f %f %f",&a,&b,&c);
	
	if(a!=0)
	{
		//d=pow(b,2)-4*a*c;//d=b²-4c
		d=b*b-4*a*c;
		if(d>=0)//b²-4c≥0时,有两个实根
		{
			x1=(-b+sqrt(d))/(2*a);
			x2=(-b-sqrt(d))/(2*a);
			if(d>0)
			{
				printf("当a≠0且△>0时,二次方程有两个不等实根,x1=%.2f,x2=%.2f\n",x1,x2);
				//printf("%.2f,%.2f",x1,x2);
			}
			else
			{
				printf("当a≠0时且a=0,二次方程有两个相等实根,x1=%.2f,x2=%.2f\n",x1,x2);
				//printf("%.2f,%.2f",x1,x2);
			}
		}
		else//b²-4c﹤0,有两个共轭复根
		{
			float p = 0;//实部
			float q = 0;//虚部
				
			p=-b/(2*a);
			q=sqrt(-d)/(2*a);
				
			printf("当a≠0时且a<0,二次方程有两个共轭复根,x1=%.2f+%.2fi,x2=%.2f-%.2fi\n",p,q,p,q);
			//printf("x1=%.2f+%.2fi,x2=%.2f-%.2fi",p,q,p,q);
		}
	}
	else//当a=0时,bx+c=0,x=-c/b
	{
		if(b==0)
		{
			printf("当a=0且b=0时,x=%.2f\n",c);	
		}
		else
		{
			x=-c/b;
			printf("当a=0时,一次方程bx+c=0有一个根,x=%.2f\n",x);	
		}
		
	}
	return 0;
}

运行结果:(只写4中情况)

(1)a=0,b=0

(2)a=0,b≠0

(3)a≠0且a>0,b≠0

(4)a≠0且a=0,b≠0

(5)a≠0且a<0,b≠0

代码编写过程中需要注意的问题:
  

(1)printf中的符号不要随便加

例如:在printf(“”);加一个符号

原来:

加上之后:(这个符号是在符号大全上随便添加的)

【运行出错!!!】

错误:

33    12    D:\课?套?业\C语言\C语言?伪?例?鈂??3.7.c    [Error] converting to execution character set: Illegal byte sequence

解决方法:
例外情况:

(2)

C语言相关知识点:

(1)次方的写法(以b²为例)

(2)if语句的嵌套使用

举报

相关推荐

0 条评论