应用题
程序test.c的功能是:利用以下所示的简单迭代方法求方程cos(x)-x=0的一个实根。
迭代公式:x
n+1=cos(x
n)(n是迭代次数)
迭代步骤如下:
(1)取x1初值为0.0;
(2)x0=x1,把x1的值赋给x0;
(3)x1=cos(x0),求出一个新的x1;
(4)若x0-x1的绝对值小于0.000001,执行步骤(5),否则执行步骤(2);
(5)所求x1就是方程cos(x)-x=0的一个实根,作为函数值返回。
请编写函数countValue()实现程序的功能,最后main()函数调用函数writeDAT()把结果输出到文件out.dat中。
请勿改动主函数main()和输出数据函数writeDAT()的内容。
#include <math.h> //表示这个程序中要引用vc6.0的数学库函数
#include <stdio.h> //表示这个程序要引用vc6.0的标准输入输出函数
void writeDAT(); //writeDAT()函数的说明语句
double countValue()
{
}
main ()
{
printf ('实根=%f\n', countValue ()); //在屏幕上显示方程的一个实根
printf (' %f\n', cos (countValue ()) -countValue ()); //在屏幕显示求得这个实根的精度
writeDAT (); //把结果输出到文件out.dat中
}
/ *函数writeDAT()把结果输出到文件out.dat中* /
void writeDAT()
{
FILE *wf; //定义文件指针变量wf
wf=fopen ( 'out.dat', 'w' ); //以只写的方式打开out.dat,并使wf指向这个文件
fprintf(wf, '%fkn', countValue()); //把求得的实根写入到文件out.dat
fclose (wf); //关闭文件out.dat
}
【正确答案】double x1,x1=0.0; //定义双精度型变量x0,x1,变量x1赋初值为0.0 while(1) //执行while循环语句 { x0=x1; //把x1的值赋给x0 x1=cos(x0); //求出一个新的x1 if(fabs(x0-x1)<0.000001) //如果x0-x1的绝对值小于0.000001,则退出循环 break; //退出循环 } return x1; //此时x1的值就是方程的一个实根
【答案解析】Xn+1=cos(Xn)的迭代计算。 ①因为方程cos(x)-x=0的根为实数,所以定义两个双精度型变量x0,x1。并把变量x1的初值设为0.0。 ②根据题目中给出的求方程一个实根的迭代算法,在while循环中,首先把变量x1的值赋给x0,然后利用表达式cos(x0)求出一个值x1,再调用vc6.0的求绝对值的库函数fabs(),判断如果x0与x1差的绝对值小于0.000001,就认为x1的值是方程cos(x)-x=0的一个实根,此时退出循环,把x1的值返回。