本文共 2434 字,大约阅读时间需要 8 分钟。
先来无事,写了一个简单的二分法求三次方程根的 C 程序,主要代码如下:
#include#include //函数声明float resultOfEquation(float a,float b,float c,float d,float e,float key);float dichotomyRoot(float a,float b,float c,float d,float e,float lowerLimit,float upperLimit);int main(int argc, const char * argv[]) { // insert code here... //求方程 2*pow(x, 3) - 4*pow(x, 2) + 3*x - 6 = 0 在 x = 1.5 附近的根 //定义变量 float lowerLimit = 0.0f, upperLimit = 0.0f; float resultFunLowerLimit = 0.0f,resultFunUpperLimit = 0.0f; //提示输入区间 printf("请输入求根区间(用空格隔开):\n"); //判断区间是否合适 do{ resultFunLowerLimit = 0.0f,resultFunUpperLimit = 0.0f; scanf("%f%f",&lowerLimit,&upperLimit); resultFunLowerLimit = resultOfEquation(2,-4,3,-6,0,lowerLimit); resultFunUpperLimit = resultOfEquation(2,-4,3,-6,0,upperLimit); if (resultFunLowerLimit * resultFunUpperLimit > 0) { //提示重新输入区间 printf("区间输入有误,请重新输入(用空格隔开):\n"); continue; } }while(resultFunLowerLimit * resultFunUpperLimit > 0); //调用求根函数求方程根 float root = dichotomyRoot(2, -4, 3, -6, 0, lowerLimit, upperLimit); //打印结果 printf("root = %.2f\n",root); return 0;}//二分法求根 float dichotomyRoot(float a,float b,float c,float d,float e,float lowerLimit,float upperLimit){ //定义变量 float mid = (lowerLimit + upperLimit) / 2; float resultFunLowerLimit = 0.0f; float resultFunUpperLimit = 0.0f; float resultFunMid = 0.0f; //判断下限是否小于上限,否则换位 if (lowerLimit >= upperLimit) { //若下限大于上线,进行交换 lowerLimit = lowerLimit + upperLimit; upperLimit = lowerLimit - upperLimit; lowerLimit = lowerLimit - upperLimit; } //计算函数值 //计算函数值放在此处,有重复计算? resultFunLowerLimit = resultOfEquation(2,-4,3,-6,0,lowerLimit); resultFunUpperLimit = resultOfEquation(2,-4,3,-6,0,upperLimit); //循环求根 do{ mid = (lowerLimit + upperLimit) / 2; resultFunMid = resultOfEquation(2,-4,3,-6,0,mid); if (resultFunLowerLimit * resultFunMid < 0) { upperLimit = mid; resultFunUpperLimit = resultFunMid; }else{ lowerLimit = mid; resultFunLowerLimit = resultFunMid; } }while (fabs(resultFunMid)>1e-5); return mid; }//计算函数值的函数float resultOfEquation(float a,float b,float c,float d,float e,float key){ return a*pow(key, 3) + b*pow(key, 2) + c*key + d + e;}
转载地址:http://wbwci.baihongyu.com/