少年包青天卓云身世:两道c语言难题(各位帮帮忙啊)

来源:百度文库 编辑:高考问答 时间:2024/04/28 17:06:27
8、函数fun的功能是:求以下分数序列的前n项之和。
1/2,2/3,3/5,5/8,8/13,13/21,……
和值通过函数值返回main函数。例如,若n的值为:5,则应输出:3.007051。
9、编写函数fun,它的功能是:将一个数字字符串转换成一个整数(不得调用C语言提供的将字符串转换为整数的函数)。例如,若输入字符“-1234”,则函数把它转换为整数值-1234。

第一题是用C写的.
#include "stdio.h"
void main()
{int a,b,i;
double sum;
a=2;
b=1;
sum=0.;
for(i=0;i<20;i++)
{sum=sum+(double)b/a;
a=a+b;
b=a-b;}
printf("sum=%7f",sum);
getch();
}
这是第二个程序
#include<stdio.h>
void main()
{ long fun(char *p,int n);
char p[10]={'-','2','3','4',};
long n;
n=fun(p,4);
printf("%d",n);
getch();
}
long fun( char *p,int n)/*这个就是你要求的函数,不信你可以试试,完全运行*/
{ int i;
long sum=0;
if(*p=='-')
{for(i=1;i<n;i++)
sum=(sum+(*(p+i)-48))*10;
sum=-sum/10;
}
else
{ for(i=0;i<n;i++)
sum=(sum+(*(p+i)-48))*10;
sum=sum/10;
}
return sum;
}

我只看到第一个规律,分数上的分子是前两个分子的和,分母也是,好像用递归算法可以逐步相加。

可以把字符串的各个值依次赋给一个数组,然后根据不同数字对应不同的ascii码来解决.

#include<iostream.h>
const int N=1000;
float add(float arry[],int n,int i)
{
return arry[i+1]=arry[i]+arry[i-1];
}
float fun(float i[],float j[],int n)
{
int t;
float chu;
float tt=0;
for(t=0;t<n;t++)
{
chu=i[t]/j[t];
tt=tt+chu;
}
return tt;
}
void main()
{
int n;
cout<<"请输入n的大小";
cin>>n;
float fenzi[N];
float fenmu[N];
int i;
fenzi[0]=1;
fenzi[1]=2;
fenmu[0]=2;
fenmu[1]=3;
for(i=1;i<n-1;i++)
{
add(fenzi,n,i);
add(fenmu,n,i);
}
cout<<fun(fenzi,fenmu,n);
}
C不太熟,用C++写的,第二个问题变态啊,既然有方便的功能何必不用,~~~(脱了裤子放屁!)

第二个同上,没意思!
#include<stdio.h>
float fun(int n)
{ float i=1,j=2,p,num=0,i1=1,m;
for(p=1;p<=n;p++)
{num+=i/j;m=i;j+=i;i+=i1;i1=m;}
return num;
}
void main()
{
int n;
scanf("%d",&n);
printf("%f",fun(n));
}