下列程序的功能是:利用以下所示的简单迭代方法求方程cos(x)-x=0的一个实根。xn+l=cos(xn)
迭代步骤如下:
(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()实现程序要求,最后调用函数writeDAT()把结果输出到文件out9.dat中。
注意:部分源程序已给出。
请勿改动主函数main()和写函数writeDAT()的内容。
[试题程序]
#include<stdlib.h>
#include<math.h>
#include<stdio.h>
void writeDAT();
float countValue()
voidmain()
system("CLS");
printf("实根=% f\n",countValue());
printf("% f\n",cos(countValue())-countValue());
writeDAT();
void writeDAT()
FILE *wf;
wf=fopen("out9.dat","W");
fprintf(wf,"% f\n",countValue());
fclose(wf);
参考答案:
float countValue()
{
float x0,xA=0.0; /*定义两个浮点型变量进行迭代*/
while(A) /*无条件循环*/
{
x0=xA; /*将xA值赋给x0*/
xA=cos(x0); /*求出新的xA值*/
if(fabs(x0-xA)<Ae-F)break;/*若xO-xA的绝对值小于0.00000A,则结束循环*/
}
return xA; /*返回xA的值*/
}
解析:
在本题中,因为要求一个实数的余弦值,在结束迭代的时候要判断绝对值,所以这里要用到函数cos(double x)和fabs(double x)。先设一个条件永远为真的while循环结构,按照步骤提示,要先为x1取初值,将x1的值赋给x0,使x1=cos(x0),判断x0-x1的绝对值并将其作为强行退出循环的条件。