问答题 某级数的前两项A1=1,A2=1,以后各项具有如下关系:
An=An-2+2An-1
下列程序的功能是:依次对于整数M=100、1000和10000求出对应的n值,使其满足:Sn<M且Sn+1≥M,这里Sn=A1+A2+…+An,并依次把n值存入数组单元b[0]、b[1]和b[2]中。请编写jsvalue()函数来实现此功能,最后调用函数、writeDat()把数组b[]中的值输出到out.dat文件中。
注意:部分源程序已给出。
请勿改动主函数main()和写函数writeDat()的内容。
#include<stdio.h>
int b[3];
void jsValue()


main()

jsValue();
printf("M=100,n=%d/nM=1000,n=%d/nM=10000,n=%d/n",b[0],b[1],b[2]);
writeDat();

writeDat()

FTLE *fp;
fp=fopen("out.dat","w");
printf("%d/n%d/n%d/n",b[0],b[1],b[2]);
fprintf(fp, "%d/n%d/n%d/n",b[0],b[1],b[2]);
fclose(fp);


【正确答案】void jsVahe ()
int A1=1,A2=1,n=1,An;
int sum0,sum;
sum0=A1+A2;
while(1)
An=A1+A2*2; /*计算下一项的值*/
sum=sum0+An; /*将刚计算的项加上前面累加的和得到新的累加和*/
A1=A2; /*A1、A2分别往后移动一项*/
A2=An;
n++; /*计数值n增1*/
/*若旧的累加和sum0小于100,且新的累加和sum大于100*/
if(sum0<100&&sum>=100)
b[0]=n; /*将计数值n存入数组b*/
/*若旧的累加和sum0小于1000,且新的累加和sum大于1000*/
if(sum0<1000&&sum>=1000)
b[1]=n; /*将计数值n存入数组b*/
/*若旧的累加和sum0小于10000,且新的累加和sum大于10000*/
if(sum0<10000&&sum>=10000)
b[2]=n; /*将计数值n存入数组b*/
break; /*三个n均已找出,跳出循环*/
}
sum0=sum; /*将新的累加和赋给sum0准备开始下一轮循环*/
}
}
【答案解析】