问题 问答题

某级数的前两项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的值输出到out81.dat文件中。
注意:部分源程序已给出。
请勿改动主函数main()和输出函数writeDat()的内容。
试题程序:
#include <stdio.h>
int b[3];
void writeDat();
void JsValue()


void main()

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

void writeDat()

FILE * fp;
fp=fopen("out81.dat","w");
fprintf(fp,"% d\n% d\n% d\n",b[0],b[1],b[2]);
fclose(fp);

答案

参考答案:void jsValue()
{
int n=1; /*定义计数器变量,保存求得的项数*/
int a1=1,a2=1,an; /*用来保存级数的值*/
int sum0,sum; /*用来存储级数的和的变量*/
sum0=a1+a2; /*计算前两项的级数和*/
while(1) /*无条件循环,循环体内有控制是否结束循环的语句*/
{
an=a1+a2*2; /*求下一个级数*/
sum=sum0+an; /*求级数和*/
a1=a2; /*将a2赋给a1*/
a2=an; /*将an赋给a2*/
n + +;
if(sum0<100 && sum>=100) /*如果满足Sn<100且Sn+1≥100*/
b[0]=n; /*则将n存入数组单元b[0]中*/
if(sum0<1000 && sum>=1000) /*如果满足Sn<1000且Sn+1≥1000*/
b[1]=n; /*则将n存入数组单元b[1]中*/
if(sum0<10000 && sum>=10000) /*如果满足Sn<10000且Sn+1≥10000*/
{
b[2]=n; /*则将n存入数组单元b[2]中*/
break; /*并强行退出循环*/
}
sum0=sum; /*将sum赋给sum0,为下一次循环的求和作准备*/
}
}

解析: 本题主要考查的是利用循环和判断结构求级数。
由级数的表达式可以看出,级数中的各项可以由循环依次求得。当级数的和达到要求的条件时就可以退出循环结构。因为退出循环的两个条件Sn<M、Sn+1≥M要同时满足,所以两条件之间要用到“与”运算。这里使用break语句退出整个循环结构。

不定项选择
单项选择题