編程求一元二次方程
『壹』 用c語言編寫求一元二次方程根的程序
用C語言編寫求一元二次方程根的程序,條件判斷的充分,步驟如下:
void main()
{
float a,b,c,delta;
scanf("%f%f%f",&a,&b,&c);
if(a!=0)
{
delta=b*b-4*a*c;
if(delta==0)
printf("x1=x2=%7.2f",-b/(2*a));
else if(delta>0)
{
printf("x1=%7.2f",(-b+sqrt(delta))/(2*a));
printf("x2=%7.2f",(-b-sqrt(delta))/(2*a));
}
else
{
printf("x1=%7.2f+i%7.2f",-b/(2*a),sqrt(-delta)/(2*a));
printf("x2=%7.2f-i%7.2f",-b/(2*a),sqrt(-delta)/(2*a));
}
}
else if(b!=0)
printf("x=%7.2f",-c/b);
else if(c==0)
printf("0=0,x為任意解
");
else
printf("%f=0,error!",c);
}
『貳』 C語言編程 解一元二次方程
M宏不需要開方,delta只是b*b-4*a*c,如果它大於等於0,再開方才有意義.變數也應該使用浮點數類型,修改如下:
//---------------------------------------------------------------------------
#include<stdio.h>
#include<math.h>
#define M (b*b-4*a*c) /*注意這里*/
main()
{double a,b,c,x1,x2; /*注意這里*/
printf("請輸入方程的三個系數:");
scanf("%lf,%lf,%lf",&a,&b,&c); /*注意這里*/
if (M>0)
{ x1=(-b+sqrt(M))/(2*a); /*注意這里*/
x2=(-b-sqrt(M))/(2*a); /*注意這里*/
printf("方程的兩個根是:\nx1=%lf,x2=%lf\n",x1,x2);/*注意這里*/
}
else if (M==0)
{ x1=-b/(2*a);
printf("方程具有兩個相等的實根:x1=x2=%lf\n",x1); /*注意這里*/
}
else
printf("輸入錯誤,請重新輸入\n");
}
//---------------------------------------------------------------------------
『叄』 c語言解一元二次方程
多出一句「請正確輸入,謝謝合作!」與「是否正確?(是y\否n)」的原因:
注意一下scanf,scanf並不是像通常所誤解的,認為是直接讀取用戶的當前輸入為輸入值。
而是讀取當前鍵盤緩沖區中的數據為本次輸入值。
所以如果當前的鍵盤緩沖區內仍有數據,那麼就不會接受當前的用戶輸入值。
在這個程序中,
由於鍵盤緩沖區內仍有用戶上次輸入數據時所殘留的回車符(也就是輸入a,b,c時最後敲的回車),
所以scanf("%c",&z); 這一句就將鍵盤緩沖區中的回車讀入,作為z值了。
所以判斷失敗,多出一句「請正確輸入,謝謝合作!」與「是否正確?(是y\否n)」。
改正辦法:
在每句scanf前,加上強制清空鍵盤緩沖區的處理fflush(stdin);,以保證接收的數據的正確性。
這也是一個好的編程習慣。
改過以後的程序:
#include "stdio.h"
#include "math.h"
void main()
{
printf("求方程ax^2+bx+c=0的根:\n");
L: printf("請分別輸入a,b,c的值。\n");
double a,b,c,x1,x2,x,y;
char z;
printf("a=");
fflush(stdin); //強制清空鍵盤緩沖區
scanf("%lf",&a);
printf("b=");
fflush(stdin); //強制清空鍵盤緩沖區
scanf("%lf",&b);
printf("c=");
fflush(stdin); //強制清空鍵盤緩沖區
scanf("%lf",&c);
printf("你所輸入的方程為%lfx^2+%lfx+%lf=0。\n",a,b,c);
M: printf("是否正確?(是y\否n)\n");
fflush(stdin); //強制清空鍵盤緩沖區
scanf("%c",&z);
if (z=='n')
goto L;
else if (z=='y')
{
if ((b*b-4*a*c)>0)
x1=(-b+sqrt(b*b-4*a*c))/(2*a),
x2=(-b-sqrt(b*b-4*a*c))/(2*a),
printf("有兩個不同的實根:\nx1=%lf\nx2=%lf\n",x1,x2),
printf("\n");
if ((b*b-4*a*c)==0)
x1=-b/(2*a),
printf("有兩個相同的實根:\nx1=x2=%lf\n",x1),
printf("\n");
if ((b*b-4*a*c)<0)
x=-b/(2*a),
y=sqrt(4*a*c-b*b)/(2*a),
printf("有兩表個不同的曾根:\nx1=%lf+%lfi\nx2=%lf-%lfi\n",x,y,x,y),
printf("\n");
goto L ;
}
else printf("請正確輸入,謝謝合作!\n");
goto M;
}
『肆』 編程實現求一元二次方程的解。有圖看圖答題,謝謝各位大神!
代碼實現如下: 輸入的時候按照1 2 1類似的格式輸入,分別代表二次一次零次項的系數
#include <stdio.h>
#include <math.h>
void main()
{
float a,b,c,delt,x1,x2;
printf("輸入方程的三個系數:");
scanf("%f%f%f",&a,&b,&c);
delt = b*b-4*a*c;
if(delt>=0) {
x1 = (-b+sqrt(delt))/(2*a);
x2 = (-b-sqrt(delt))/(2*a);
printf("方程的解分別為:x1=%.2f x2=%.2f \n",x1,x2);
}
else {
printf("方程無實根\n");
}
return 0;
}
『伍』 怎樣用C語言編一個解一元二次方程的程序(可以看步驟)!
#include <stdio.h>
#include <math.h>
int main(void)
{
int a, b, c; //定義一元二次方程的三個數值;
printf("請依次輸入一元二次方程的三個參數a b c,中間以空格隔開\n");
scanf("%d %d %d", &a, &b, &c); //依次輸入一元二次方程的三個參數
double delta = b*b - 4*a*c; //定義delta的值為b*b - 4*a*c
double x1 = (-b + sqrt(delta))/(2 * a);
double x2 = (-b - sqrt(delta))/(2 * a);
if (delta>0) //delta大於0時,方程有兩個解
{
printf("一元二次方程有兩個解\n");
printf("一元二次方程的第一個解,x1 = %f\n",x1);
printf("一元二次方程的第二個解,x2 = %f\n",x2);
}
else if (delta ==0) //delta等於0,方程有兩個相同的解
{
printf("一元二次方程有兩個相同的解\n");
printf("一元二次方程的解為x1 = x2 =%f\n",x1);
}
else //delta小於0時,方程沒有解
{
printf("一元二次方程沒有解\n");
}
return 0;
}
『陸』 編程編寫一個程序求一元二次方程的解
第二題:
#include<iostream.h>
void main()
{
int i,g,s,b;
for(i=100;i<1000;i++)
{
g=i%100;
b=i/100; //百位數
s=g/10; //十位數
g=g%10; //個位數
if(g*g+s*s+b*b==99)
cout<<i<<endl;
}
}
第三題:
#include <iostream>
using namespace std;
int main()
{
int i,j,maxi,maxj,mini,minj,max,min;
int a[2][3];
cout<<"請輸入6個整數作為矩陣元素"<<endl;
for(i=0;i<=1;i++)
{
for(j=0;j<=2;j++)
cin>>a[i][j];
};
maxi=maxj=mini=minj=0;
max=a[maxi][maxj];min=a[mini][minj];
for(i=0;i<=1;i++)
{
for(j=0;j<=2;j++)
if(max<a[i][j])
{
max=a[i][j];
maxi=i;maxj=j;
};
}
for(i=0;i<=1;i++)
{
for(j=0;j<=2;j++)
if(min>a[i][j])
{
min=a[i][j];
mini=i;minj=j;
}
}
cout<<"矩陣中最大值為"<<max<<"\n"<<"其位置位於a["<<maxi<<"]["<<maxj<<"]"<<endl;
cout<<"矩陣中最小值為"<<min<<"\n"<<"其位置位於a["<<mini<<"]["<<minj<<"]"<<endl;
return 0;
}
第四題:
#include<stdio.h>
viod main()
{
int sum=0,a[3][3];
printf("輸入數據:\n");
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
{
printf("a[%d][%d]=",i,j);
scanf("%d",&a[i][j]);
}
printf("\n");
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
sum+=a[i][j];
printf("%d\n",sum);
}
第五題:
#include <iostream> using namespace std; double a(int m) { double n=1; for (int i=1;i<=m;i++) n=n*i; return n; } int main() { int t; double y=1; for(t=1;(1.0/a(t))>=1e-6;t++) { if(t%2==0) y=y-(1.0/a(t)); else y=y+(1.0/a(t)); } cout<<"y=1+1/1!-1/2!+1/3!-1/4!+......="<<y<<endl; return 0; }
