① c語言編程:求一元二次方程的根
#include<iostream>
#include<cmath>
usingnamespacestd;
intmain()
{floata,b,c;floatx1,x2; cin>a>>b>>c;floatdlt=b*b-4*a*c;if(dlt>=0){x1=-b/2/a+sqrt(dlt)。
/2/ax2=-b/2/a-sqrt(dlt)/2/a。
cout<<a<<"x^2+"<<b<<"x+"<<c<<"=0有兩個實根:";cout<<"x1="<<x1<<",x2="<<x2<<endl;}
else
{x1=-b/2/a;x2=sqrt(-dlt)/2/a;cout<<a<<"x^2+"<<b<<"x+"<<c<<"=0有兩個虛根:"。
cout<<"x="<<x1<<"+/-"<<x2<<"i"<<endl;}
return0。
(1)c語言求函數的根擴展閱讀:
成立條件:
一元二次方程成立必須同時滿足三個條件:
①是整式方程,即等號兩邊都是整式,方程中如果有分母;且未知數在分母上,那麼這個方程就是分式方程,不是一元二次方程,方程中如果有根號,且未知數在根號內,那麼這個方程也不是一元二次方程(是無理方程)。
②只含有一個未知數;
③未知數項的最高次數是2。
② C語言求二元一次方程的根
#include <stdio.h>
#include <math.h>
#include <malloc.h>
void main()
{
double a,b,c;
double s;
double *e,*f;
void d(double a ,double b,double c,double s,double* e,double* f);
void de(double a ,double b,double c,double *e);
void x();
e=(double*)malloc(sizeof(double));
f=(double*)malloc(sizeof(double));
*e=0;
*f=0;
printf("Please input coefficient:\n");
scanf("%lf%lf%lf",&a,&b,&c);
if(a==0)
{
if(b==0&&c==0)
printf("x is any number");
if(b==0&&c!=0)
x();
if(b!=0)
{
*e=-c/b;
printf("%lf",*e);
}
}
else
{
s=(b*b-4*a*c);
if(s<0)
x();
else
{
s=sqrt(s);
printf("The equation is %lf x^2 + %f x + %f\n",a,b,c);
printf("s=%lf\n",s);
if(s>0)
{
d(a,b,c,s,e,f);
printf("%lf\n",*e);
printf("%lf\n",*f);
}
else if(s==0)
{
de(a,b,c,e);
printf("%lf\n",*e);
}
}
}
}
void d(double a ,double b,double c,double s,double *e ,double *f)
{
double m,n;
m=-0.5*(b+s)/a;
n=-0.5*(b-s)/a;
*e=m;
*f=n;
}
void de(double a ,double b,double c,double *e)
{
double m;
m=-0.5*b/a;
*e=m;
}
void x()
{
printf("The equation has no root!\n");
}
這是改後正確的代碼,以下是你代碼的錯誤:
1.函數如果想在main中聲明,不能在執行語句後聲明。
2.當調用d(double a...)函數時,e和f作為參數穿過去只是他們的值,在函數內部對它們賦值是不能改變他們內存真正的值的。
3.if(s=0)是對s賦值使s=0,如果是判斷應該是if(s==0)。
4.x函數中參數a、b、c沒有用到,而且你已經把abc設為全局變數,就不需要把他們當成參數傳遞,所以我把所有變數都改為局部變數。
5.d函數的演算法錯誤,應該是e=-(b+s)/2a;f=-(b-s)/2a;
6.你沒有考慮當a=0,b=0,時的情況。
7.當b2-4ac<0時,用sqrt開方就已經錯誤啦。
寫的有些亂,見諒~
③ c語言二分法求方程的根的演算法
如果連續函數在給定區間不單調,很有可能中值*下界值和中值*上界值都大於0,那麼會跳出認為沒有根,而事實上很有可能這個中值點靠近函數極點。
而真正用二分法求給定區間的思路是:
首先為函數求導,算出導函數的零點,然後再判斷零點性質,最後將函數區間分為單調遞增和單調遞減間隔的形式,對每一段進行二分法求根。
#include<stdio.h>
#include<math.h>
#defineDEFAULT_UPPER(10)
#defineDEFAULT_LOWER(-10)
#defineDEFAULT_E(0.00000001)
#define_MID(x,y)((x+y)/2)
#define_VALUE(x)(2*x*x*x-4*x*x+3*x-6)
double_e;
intgetRoot(doublelower,doubleupper,double*result);
main()
{
doubleroot;
printf("Enteradeviation:");
scanf("%lf",&_e);
if(_e==0.0)
_e=DEFAULT_E;
if(getRoot(DEFAULT_LOWER,DEFAULT_UPPER,&root))
printf("Root:%2.8lf ",root);
else
printf("Root:NoSolution. ");
}
intgetRoot(doublelower,doubleupper,double*result)
{
*result=_MID(lower,upper);
if(upper-lower<=_e)
return1;
if(_VALUE(lower)*_VALUE(*result)<=0)
returngetRoot(lower,*result,result);
elseif(_VALUE(*result)*_VALUE(upper)<=0)
returngetRoot(*result,upper,result);
else
return0;
}
④ c語言函數求方程的根
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{
float a,b,c,x,x1,x2,d;
scanf("%f %f %f",&a,&b,&c);
d=b*b-4*a*c;
if(a==0)
{
if(b==0)
{
if(0==c)
{
printf("等式0!\n");
}
else
{
printf("輸入錯誤!\n");
}
}
else
{
printf("只能構成一元一次方程,x=%.6f\n",0==-(float)c/b ? 0 : -(float)c/b);
}
}
else
{
if(d<0)
{
x1=(-b+sqrt(-d))/(2.0*a);
x2=(-b-sqrt(-d))/(2.0*a);
printf("x1=%.6f+%.6fi\nx2=%.6f-%.6fi\n",(-b)/(2.0*a),sqrt(-d)/(2.0*a),(-b)/(2.0*a),sqrt(-d)/(2.0*a));
}
else if(d==0)
{
printf("x1=x2=%.6f\n",(-b)/(2.0*a));
}
else
{
x1=(-b+sqrt(d))/(2.0*a);
x2=(-b-sqrt(d))/(2.0*a);
printf("x1=%.6f\nx2=%.6f\n",x1,x2);
}
}
system("PAUSE");
return EXIT_SUCCESS;
}
⑤ C語言從鍵盤輸入求方程根.
%1f寫錯了——float型時用%f,double型時用%lf。是LF的小寫,你寫成1f了。寫成%1f後被解釋為只接收一個數字的浮點型,即0~9,所以即便是float型,輸入兩位以上數字就要出錯。
⑥ 用C語言編程怎麼求一個數的根號
#include<stdio.h>
#include<math.h>
intmain()
{
floata=5,b;
b=sqrt(a);
printf("a的平方根為:%f ",b);
return0;
}
⑦ c語言求二次函數的根
#include <stdio.h>
int main(void)
{
double a,b,c,d,e;
double x1,x2;
printf("請輸入ax^2+bx +c = 0中a,b,c的值");
scanf("%lf,%lf,%lf",&a,&b,&c);
e = b * b - 4 * a * c;
if (e<0) {
printf("無解,請重新輸入\n");
scanf("%lf,%lf,%lf",&a,&b,&c);
}
printf("輸入正確,正在計算....\n");
d = sqrt(e);
x1 = (-b + d)/(2 * a);
x2 = (-b - d)/(2 * a);
printf("x1=%f\n",x1);
printf("x2=%f\n",x2);
return 0;
}
⑧ c語言中如何開根號運算
用math.h里封裝好的函數,具體如下:
求平方根:double sqrt(double x)
例:
#include <math.h>
#include <stdio.h>
int main(void)
{
double x = 4.0, result;
result = sqrt(x);
printf("The square root of %lf is %lf
", x, result);
return 0;
}
(8)c語言求函數的根擴展閱讀:
關於c語言的基本運算
1.加法運算符 +
int a = 10;
int b = a + 5;
在第3行利用加法運算符 + 進行了加法運算,再將和賦值給了變數b,最終變數b的值是15
2.減法運算符 或 負值運算符-
int b = 10 - 5;
int a = -10;
1> 在第1行利用減法運算符 - 進行了減法運算,再將差賦值給了變數b,最終變數b的值是5
2> 在第3行中,這個 - 並不是什麼減法運算符,而算是一個負值運算符,-10代表的是負十
3.乘法運算符*
int b = 10 * 5;
注意:乘法運算符並不是x或者X,而是星號*。變數b最終的值是50。
4.除法運算符/
double a = 10.0 / 4;
double b = 10 / 4;
printf("a=%f, b=%f
", a, b);
注意:除法運算符並不是÷,而是一個正斜杠 /
1> 第1行中的10.0是浮點型,4是整型,因此會將4自動類型提升為浮點型後再進行運算,最後變數b的值是2.5
2> 第2行中的10和4都是整型,計算機中的運算有個原則:相同數據類型的值才能進行運算,而且運算結果依然是同一種數據類型。因此,整數除於整數,求出來的結果依然是整數,會損失小數部分。最後變數b的值是2。
5.模運算符或稱取余運算符 %
注意:這個%並不是除號÷,它是一個取余運算符,或者叫做模運算符。取余的意思是,取得兩個整數相除之後的余數。比如,5除於2的余數是1,5除於3的余數是2。因此使用這個%有個原則:%兩側必須都為整數。
錯誤的寫法:1 int a = 5.0 % 2;
編譯器會直接報錯,因為5.0並非整數。
⑨ 用C語言求方程的根,用3個函數分別求當大於0、等於0和小於0時的根並輸出結果。從主函數中輸入abc的值。
給你重寫一個你對照看——
#include"stdio.h"
#include"math.h"
voidzero(floata,floatb){
printf("x1=%f ",-b/2/a);
printf("x2=%f ",-b/2/a);
}
voidone(floata,floatb,floatd){
printf("x1=%f ",(-b+d)/2/a);
printf("x2=%f ",(-b-d)/2/a);
}
voidtwo(floata,floatb,floatd){
printf("x1=%f%+fi ",-b/2/a,d/2/a);
printf("x2=%f%+fi ",-b/2/a,-d/2/a);
}
intmain(intargc,char*argv[]){
floata,b,c,dlt;
printf("Inputa,b,c(R:all)... ");
scanf("%f%f%f",&a,&b,&c);
if((dlt=b*b-4*a*c)==0)
zero(a,b);
elseif(dlt>0){
one(a,b,sqrt(dlt));
}
else
two(a,b,sqrt(-dlt));
return0;
}
運行樣例:
有問題續問。