C++语言程序设计

程序：
根据上面的算法，我们可以编出计算一个正数的、n次方的、正实根的函数NewtonRoot，也编写一个main函数，就得到一个完整的程序如下：

| 例5-29

#include <iostream.h>
#include <math.h>
#include <assert.h>
const double SMALLFRACTION = 1.0E-8;
double NewtRoot(double x, int n)
{
double x0, x1, f0, f1;
assert(x > 0.0);
x0 = x / 2.0;x1 =x;
while(fabs(x1-x0) > SMALLFRACTION*x1) {
cout << r << endl;
x0 = x1;
f0 = pow(x0, n) - x;
f1 = n*pow(x0, n-1) - x0;
x1 = x0 - f0/f1;
}
return x1;
}
void main()
{
double x;
int n;
cout << "Enter number : ";
cin >> x;
cout << "\nEnter exponent : ";
cin >> n;
cout << "Number was : " << x << ", root is "
<< NewtRoot (x, n) << endl;
}

在上面的程序中，我们定义了一个double型全局常量SMALLFRACTION，它是给定的计算精度。也就是说，迭代出的近似解必须满足该精度要求（10-8）。
NewtRoot函数有两个形参x和n，分别是待求方根的正实数及方根次数。定义了4个double型变量：x1、x0、f0和f1，分别表示：当前迭代值、前一次迭代值、前一次迭代值的函数值和前一次迭代值的函数的一阶导数值。x0的初值取形参x，x1的初始值取形参x的一半。
NewtRoot函数中用到了几个C++库函数：assert、fabs和pow。assert函数在assert.h中定义，其功能是：若形参表达式为假，则打印诊断信息，并停止应用程序的运行。fabs和pow在math.h中定义，分别是求一个double型数的绝对值与乘方。
在main函数中，分别输入待求方根的正实数及方根次数，然后调用NewtRoot，并输出计算结果。
假定编译、运行该程序，并输入：
Enter number : 2↙
Enter exponent : 2↙
输出结果如下：
1
1.5
1.41667
1.41422
1. 41421