某级数的前两项A1=1,A2=1,以后各项具有如下关系: An=An-2+2An-1 下列程序的功能是:要求依次对于整数M=100,1000和10000求出对应的n值,使其满足:Sn<M且Sn+1≥M,这里Sn=A1+A

admin2009-02-24  15

问题 某级数的前两项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()函数来实现
此功能,最后调用函数writeDar()把数组b的值输出到out48.dat文件中。
   注意:部分源程序已给出。
   请勿改动主函数main()和输出函数writeDat()的内容。
   试题程序:
       #include<stdio. h>
       int b[3];

       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 ()
       {
          FILE *fp;
          fp=fopen ("out48.dat", "w");
          fprintf(fp,"%d\n%d\n%d\n",b[0],b[1],b[2]);
          fclose (fp);
       }

选项

答案jsValue ( ) { int al=1, a2=1, n=1, an; int sum0, sum; sum0=a1+a2; while (1) { an=al+a2*2; /*求下一个级数*/ Sum=s umO +an; /*求级数和*/ a1=a2; /*将a2赋给a1*/ a2=an; /*将an赋给a2* / n++; if(sumo<100 && sum>=100) /*如果满足Sn<100且Sn+1>=100*/ b[0] =n; /*则将n存入数组单元b[0]中*/ if(sumo<l000 && sum>=1000) /*如果满足Sn<1000且sn+1>=1000*/ b[1] =n; /*则将n存入数组单元b[1]中*/ if(sumo<l0000 && sum>=10000) /*如果满足Sn<10000且Sn+1>=10000*/ { b [2] =n; /*则将n存入数组单元b[2]中*/ break; /*并强行退出循环*/ } sumo=sum; /*将sum赋给sum0,为下一次循环的求和作准备*/ } }

解析 本题考查的知识点如下:
   (1)利用循环和判断求级数。
   (2)循环的强行退出。
   (3)多个条件的“与”运算。
   由级数的表达式可以看出,级数中的各项可以由循环依次求得。当级数的和达到要求的条件时就可以退出循环结构。因为退出循环的两个条件Sn<M,Sn+1≥M要同时满足,所以两条件之间要用到“与”运算。这里使用break退出整个循环结构。
转载请注明原文地址:https://kaotiyun.com/show/iRYZ777K
0

随机试题
最新回复(0)