某级数的前两项A1=1,A2=1,以后各项具有如下关系:An=An-2+2An-1。使用非递归的算法求解满足要求的n值的程序。

某级数的前两项A1=1,A2=1,以后各项具有如下关系:An=An-2+2An-1。(n-2  n-1 均为小标)

下列程序的功能是:要求依次对于整数M=100、1000和10000求出对应的n值,使其满足:Sn<M且Sn+1>=M(n+1为下标),这里Sn=A1+A2+…+An,并依次把n值存入数组单元b[0]、b[1]和b[2]中,请编制jsvalue()函数来实现此功能,最后调用函数writeDat()把数组b[]中的值输出到OUT98.DAT文件中。


程序很挫,今天晚上脑子很乱。随便编的。望各位能给小弟修改下。。。。。。


#include  <stdio.h>
int  b[3];
void jsvalue()
{
	int i=1,s1=1,s2=1,s0=s2+2*s1,sum=s1+s2,j=sum;//s1表示s(n-1) s2表示s(n-2) s0表示s(sn)
	while(!((j<100)&&(sum>=100)))
	{
		j=sum;
		sum = sum+s0; 
		s2 = s1;
		s1 = s0;
		s0 = s2+2*s1;//s0表示Sn
		i++;	
	}
	b[0]=i;

	while(!((j<1000)&&(sum>=1000)))
	{
		j=sum;
		sum = sum+s0; 
		s2 = s1;
		s1 = s0;
		s0 = s2+2*s1;
		i++;	
	}
	b[1]=i;

	while(!((j<10000)&&(sum>=10000)))
	{
		j=sum;
		sum = sum+s0;
		s2 = s1;
		s1 = s0;
		s0 = s2+2*s1;
		i++;	
	}
	b[2]=i;
}
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("OUT98.DAT","w");
  fprintf(fp,"%d\n%d\n%d\n",b[0],b[1],b[2]);
  fclose(fp);
}


博主个人网站 http://henghui.web-126.com/



你可能感兴趣的:(算法,File,FP)