【問題】請問C++ 要怎麼寫"解二次方程式"的程式?


Recommended Posts

如題

我剛開始自學C++,用的是dev 想先寫個解二次方程式的程式

我寫的如下:

問題在他無法接受 (-b+(b^2+4*a*c)^0.5)/2*a 裡的 ^ (次方) 運算

x^y x,y為小數時會顯試錯誤; "^" 運算結果也不正確 (我測試2^3 結果為1)

---------------------------------------------------------------------------------------------------------------

#include <iostream>

#include <math.h>

#include <stdlib.h>

using namespace std;

int main()

{

int a;

int b;

int c;

int d;

int e;

cout << "此為解二次方程式程式!\n" << endl;

cout << "請輸入二次項係數:";

cin >> a;

cout << "您輸入的二次項係數為:" << a <<"\n"<< endl;

cout << "請輸入一次項係數:";

cin >> b;

cout << "您輸入的一次項係數為:" << b <<"\n"<< endl;

cout << "請輸入常數項:";

cin >> c;

cout << "您輸入的常數項為:" << c <<"\n"<< endl;

d=(-b+(b^2+4*a*c)^0.5)/2*a;

e=(-b-(b^2+4*a*c)^0.5)/2*a;

cout << "您輸入的二次方程式之二根分別為:" << d << "," << e << endl;

system("pause") ;

return 0;

}

-----------------------------------------------------------------------------------------------------------------------

我知道這個遇到非有理數或非實數解時會有問題 我只是想先試試看簡單的

麻煩各位高手指點! 是哪裡出錯了呢? 或是有更好的寫法嗎?

鏈接文章
分享到其他網站

二次方就直接b*b解決比較快....

不過要小心溢位的問題....

如果要用次方功能的話....

 y

x

我們可以這樣寫....

x,y是double型態的...


#.....
#include <math.h>

int main(void)
{

....

double ans;
....

ans = pow(x,y);

....

}

或是自己寫一個也可以啊....

正整數次方的....


long mypow(long x,long y)
{
long s,i;
for(i=0,s=1;i<y;i++)
s*=x;
return s;
}

鏈接文章
分享到其他網站

C 裡面, "^" 指的是xor運算,不是n次方. 要n次方, 請用: (溢出自行防範... 結果不可超過2^31)


long RaiseToNthPower( long base, long exponent )
{
long result = 1; // 1 is base to the power of 0
for ( long i = 0; i < exponent; i++ )
result = result * base;
}
return result;
};

還有, 這種東西一般用float/double較為適當, 你的程式碼我做了一些修正.


#include <iostream>
#include <math.h>
#include <stdlib.h>

using namespace std;

int main()
{
float a;
float b;
float c;
float d;
float e;

cout << "此為解二次方程式程式!\n" << endl;

cout << "請輸入二次項係數:";
cin >> a;
cout << "您輸入的二次項係數為:" << a <<"\n"<< endl;

cout << "請輸入一次項係數:";
cin >> b;
cout << "您輸入的一次項係數為:" << b <<"\n"<< endl;

cout << "請輸入常數項:";
cin >> c;
cout << "您輸入的常數項為:" << c <<"\n"<< endl;

d=((-b)+sqrt(b*b-4*a*c))/(2*a);
e=((-b)-sqrt(b*b-4*a*c))/(2*a);

cout << "您輸入的二次方程式之二根分別為:" << d << "," << e << endl;

system("pause");
return 0;
}

鏈接文章
分享到其他網站
  • 3 weeks later...
  • 2 months later...
  • 1 month later...

請登入後來留意見

在登入之後,您才能留意見



立即登入