C 程问题?????????

来源:百度知道 编辑:UC知道 时间:2024/05/26 22:21:01
要求:
某级数的前两项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文件中。

我写的函数是:
#include<stdio.h>
int b[3];
void writeDat();

void jsValue( )
{
int i,j,a[100];
int sum=2;
int c[3]={100,1000,10000};
for(j=0;j<3;j++)
{
a[1]=1;
a[2]=1;
for(i=1;i<????????????;i++)
{
a[i+2]=a[i]+2*a[i+1];
sum=sum+a[i+2];
a[i+3]=a[i+1]+2*a[i+2];
if(sum<c[j] && (sum+a[i+3])>=c[j])
b[j]=i+2;
}
}
}

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("out.dat","w");
fprintf(fp,"%d

for(i=1;i;i++)//不设上限
{
a[i+2]=a[i]+2*a[i+1];
sum=sum+a[i+2];
a[i+3]=a[i+1]+2*a[i+2];
if(sum<c[j] && (sum+a[i+3])>=c[j])
{
b[j]=i+2;
break; //加语句当判断出i的值时即跳出就OK了
}
}

先写个求An的函数
再写求和函数

int An(int n)
{
int sum;
if(n == 1||n ==2)
return(1);
else if(n>=3)sum = 2*An(n-1) + An(n-2);
return(sum);
}
int Sum(int n)
{
int sum;
sum = 0;
for(;n>0;n--)
sum+= An(n);
return(sum);
}
int *jsvalue(int *b)
{
int i;
for( i = 1; Sum(i)<10000;i++)
{
if(Sum(i)>100 &&Sum(i-1)<100)b[0]=i;
if(Sum(i)>1000 &&Sum(i-1)<1000)b[1]=i;
}
b[2]=i;
return(b);
}
void writeDat(int *b)
{
FILE *fp;
fp=fopen("out.dat","w");
fprintf(