首先分两种情况:
创新互联长期为上1000家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为孝感企业提供专业的成都网站设计、做网站,孝感网站改版等技术服务。拥有十余年丰富建站经验和众多成功案例,为您定制开发。
一、a为0,bx+c=0,求得一解。
二、a不为0,按照一元二次方程公式:
当判别式b^2-4ac,>0则两个解,=0则一个解,0则无解。
最后,代入公式求解。
函数参数:a,b,c及存放结果的数组x。返回解的个数。
下面是代码:
#include stdio.h
#include math.h
int fun(double a,double b,double c,double *x);
int main()
{
int n;
double a,b,c,x[2];
printf("请输入a,b,c的值:"),scanf("%lf%lf%lf",a,b,c);
n=fun(a,b,c,x);
printf("一元二次方程%.2lfx^2+%.2lfx+%.2lf=0,",a,b,c);
switch(n)
{
case 0: printf("无解!\n");break;
case 1: printf("一个解:x=%lf!\n",x[0]);break;
case 2: printf("两个解:x1=%lf,x2=%lf!\n",x[0],x[1]);break;
}
return 0;
}
int fun(double a,double b,double c,double *x)
{
double delta;
if(a==0)
{
x[0]=-1*c/b;
return 1;
}
delta=b*b-4*a*c;
if(delta0) return 0;
if(delta==0)
{
x[0]=-1*b/(2*a);
return 1;
}
if(delta0)
{
x[0]=(-1*b+sqrt(delta))/(2*a);
x[1]=(-1*b-sqrt(delta))/(2*a);
return 2;
}
return 0;
}
改成这样就对了。三个函数定义出现了不少语法错误。定义三个函数来对待delta的不同情况。
#include"stdio.h"//这个别忘了
#include"math.h"
float x1,x2,disc,p,q;
void greater_than_zero(float a,float b);//函数无返回值,float放这 里
//x1,x2是全局变量,在函数内赋值即可
{ //括号别丢
x1=(-b+sqrt(disc))/(2*a);
x2=(-b-sqrt(disc))/(2*a);
}
void equal_to_zero(float a,float b)//也无返回值
{
x1=x2=(-b)/(2*a);
}
void smaller_than_zero(float a,float b)
{
p=-b/(2*a); //p、q也是全局变量
q=sqrt(disc)/(2*a);
}
void main()
{
float a,b,c;
printf("输入a,b,c:\n")
scanf("%f,%f,%f",a,b,c);
printf("\n 方程:%5.2f*x+%5.2f=0\n",a,b,c);
disc=b*b-4*a*c;//一元二次方程的delta
printf("方程的解是:\n");
if(disc0) //判断delta是否小于0,如果大于0
{
great_than_zero(a,b);
printf("x1=%5.2f\tx2=%5.2f\n\n",x1,x2);
}
else if(disc0) //delta小于0,复根
{
small_than_zero(a,b,c)
printf("x1=%5.2f+%5.2f\tx2=%5.2f-%5.2fi\n",p,q,p,q);
}
else//等于0,有等根
{
equal_to_zero(a,b);
printf("x1=%5.2f\tx2=%5.2f\n\n",x1,x2);
}
}//结束
# include stdio.h
# include math.h
int main(void)
{
//把三个系数保存到计算机中
int a = 1; //=不表示相等,表示赋值
int b = 5;
int c = 6;
double delta; //delt存放的是 b*b - 4*a*c
double x1; //存放一元二次方程的其中一个解
double x2; //存放一元二次方程的其中一个解
delta = b*b - 4*a*c;
if (delta 0)
{
x1 = (-b + sqrt(delta)) / (2*a);
x2 = (-b - sqrt(delta)) / (2*a);
printf("该一元二次方程有两个解, x1 = %f, x2 = %f\n", x1, x2);
}
else if (delta == 0)
{
x1 = (-b) / (2*a);
x2 = x1; //右边赋给左边
printf("该一元二次方程有一个唯一解, x1 = x2 = %f\n", x1);
}
else
{
printf("无解\n");
}
return 0;
}
int GetRoot(float a, float b, float c ,double* root){
double delta, deltasqrt ;
delta = b* b - 4*a*c ;
if(delta0) return 0 ;
deltasqrt = sqrt(delta) ;
if (a!=0.0){
root[0] = (deltasqrt - b)/(2.0*a) ;
root[1] = (-deltasqrt - b)/(2.0*a) ;
}
if (root[0] == root[1]) return 1;
else return 2 ;
}
int main(void){
//计算方程的根
float a = 2.0,b =6.0,c=3.0 ;//a,b,c s是参数
double root[2] ;//root是得到的两个根
int n = GetRoot(a,b,c,root) ;
if (n1){
printf("方程无根") ;
}else{
printf("方程的解为:%f,%f",root[0],root[1]) ;
}
}
扩展资料:
C语言是一门面向过程、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。尽管C语言提供了许多低级处理的功能,但仍然保持着跨平台的特性,以一个标准规格写出的C语言程序可在包括一些类似嵌入式处理器以及超级计算机等作业平台的许多计算机平台上进行编译。
C语言特点:
(1)简洁的语言
C语言包含有各种控制语句仅有9种,关键字也只有32
个,程序的编写要求不严格且多以小写字母为主,对许多不必要的部分进行了精简。实际上,语句构成与硬件有关联的较少,且C语言本身不提供与硬件相关的输入输出、文件管理等功能,如需此类功能,需要通过配合编译系统所支持的各类库进行编程,故c语言拥有非常简洁的编译系统。
(2)具有结构化的控制语句
C语言是一种结构化的语言,提供的控制语句具有结构化特征,如for语句、if⋯else语句和switch语句等。可以用于实现函数的逻辑控制,方便面向过程的程序设计。
(3)丰富的数据类型
C语言包含的数据类型广泛,不仅包含有传统的字符型、整型、浮点型、数组类型等数据类型,还具有其他编程语言所不具备的数据类型,其中以指针类型数据使用最为灵活,可以通过编程对各种数据结构进行计算。
(4)丰富的运算符
C语言包含34个运算符,它将赋值、括号等均视作运算符来操作,使C程序的表达式类型和运算符类型均非常丰富。
(5)可对物理地址进行直接操作
C语言允许对硬件内存地址进行直接读写,以此可以实现汇编语言的主要功能,并可直接操作硬件。C语言不但具备高级语言所具有的良好特性,又包含了许多低级语言的优势,故在系统软件编程领域有着广泛的应用。
(6)代码具有较好的可移植性
C语言是面向过程的编程语言,用户只需要关注所被解决问题的本身,而不需要花费过多的精力去了解相关硬件,且针对不同的硬件环境,在用C语言实现相同功能时的代码基本一致,不需或仅需进行少量改动便可完成移植,这就意味着,对于一台计算机编写的C程序可以在另一台计算机上轻松地运行,从而极大地减少了程序移植的工作强度
(7)可生成的高质量目标代码,高执行效率的程序
与其他高级语言相比,C语言可以生成高质量和高效率的目标代码,故通常应用于对代码质量和执行效率要求较高的嵌入式系统程序的编写。
看下我的,应该没有问题
#include cstdio
#include cmath
using namespace std;
void GetCoefficients(double a,double b,double c)
{
scanf("%lf%lf%lf",a,b,c);
}
void SolveQuadratic(double a, double b, double c, double x1, double x2)
{
double delta = b*b-4*a*c;
if( delta=0)
{
x1=((-1*b + sqrt(delta))/2*a);
x2=((-1*b - sqrt(delta))/2*a);
}
else
{
x1=(double)0xffffff;
x2=(double)0xffffff;
}
}
void DisplayRoots(double x1, double x2)
{
if(x1==double(0xffffff) x2==(double)(0xffffff))
printf("无解!\n");
else printf("两个根分别为%.3lf %.3lf\n",x1,x2);
}
int main()
{
double a,b,c,x1,x2;
GetCoefficients(a,b,c);
SolveQuadratic(a,b,c,x1,x2);
DisplayRoots(x1,x2);
return 0;
}