问答题 下列程序的功能是:利用如下的简单迭代方法求方程cos(x)-x=0的一个实根。
x(n+1)=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(),把结果输出到文件OUT.DAT中。
请勿改动主函数main()和写函数writeDAT()的内容。
[试题程序]
#include<stdlib.h>
#include<math.h>
#include<stdio.h>
void writeDAT();
float countValue()
{
}
void main()
{
system("CLS");
printf("实根=%f\n",countValue());
printf("%f\n",cos(countValue())-
countValue());
writeDAT();
}
void writeDAT()
{
FILE* wf;
wf=fopen("OUT.DAT","w");
fprintf(wf,"%f\n",countValue());
fclose(wf);
}
【正确答案】
【答案解析】Float countValue( )
{
float x0,x1=0.0; /*定义两个浮点型变量进行迭代*/
while(1) /*无条件循环*/
{
x0=x1; /*将x1赋值给x0*/
x1=cos(x0); /*求出新的x1*/
if(fabs(x0-x1)<1e-6) break; /*若x0-x1的绝对值小于0.000001,则结束循环*/
}
return x1; /*返回 x1的值*/
} [考点] 本题考查数学计算问题。考查的知识点主要包括:C语言循环结构,迭代算法,if判断结构和逻辑表达式,浮点型数据的相等比较。
此题属于数学计算题型。题目要求实现函数countValue()的功能。本题的解题思路是:首先通过一个无条件循环结构作为程序的主体,在该循环体中实现迭代运算,且当条件"x0-x1的绝对值小于0.000001"满足时,退出循环,停止计算,此时x1就是要计算的结果,最后函数返回该结果。