C语言作业:【问题描述】 输入2个正整数m和n(m≥1,n≤10 000),输出m ~n 之间所有的Fibonacci数。

Fibonacci数列(第一项起):1,1,2,3,5,8,13,21,…。要求定义并调用函数fib(n),它的功能是返回第n项Fibonacci 数。例如,fib(7)的返回值是13。
【输入形式】
从键盘输入2个整数m和n。
【输出形式】
输出m ~n之间所有的Fibonacci 数。
【样例输入1】(下划线部分为键盘输入,其余部分为程序输出)
Input m: 20
Input n: 100
【样例输出1】
21 34 55 89
【样例输入2】(下划线部分为键盘输入,其余部分为程序输出)
Input m: 50
Input n: 300
【样例输出2】
55 89 144 233

我的答案运行时间过长
#include<stdio.h>
int main(void)
{
int i,m,n;
int fib(int n);
printf("Input m: ");
scanf("%d",&m);
printf("Input n: ");
scanf("%d",&n);
while(m>=1&&n<=10000&&m<=n)
{
for(i=1;i<=n;i++)
if(fib(i)>=m&&fib(i)<=n)
printf("%d ",fib(i));
}
return 0;
}

int fib(int n)
{
if(n==1)
return 1;
if(n==2)
return 1;
else
return fib(n-1)+fib(n-2);
}

作业系统说错误是:

5_7.c: (in function main)

5_7.c:14:9: Function fib shadows outer declaration
An outer declaration is shadowed by the local declaration. (Use -shadow to
inhibit warning)

5_7.c:10:1: Previous definition of fib: [function (int) returns int]

5_7.c:16:5: Return value (type int) ignored: scanf("%d", &m)
Result returned by function call is not used. If this is intended, can cast
result to (void) to eliminate message. (Use -retvalint to inhibit warning)

5_7.c:18:2: Return value (type int) ignored: scanf("%d", &n)

5_7.c:22:7: Variable fib used before definition
An rvalue is used that may not be initialized to a value on some execution
path. (Use -usedef to inhibit warning)

5_7.c:2:5: Function exported but not used outside 5_7: fib
A declaration is exported, but not used outside this module. Declaration can
use static qualifier. (Use -exportlocal to inhibit warning)

5_7.c:10:1: Definition of fib

第1个回答  推荐于2018-03-02
我也在做这道题,借鉴了你的调用函数,上传后没问题的~
#include<stdio.h>
int main(void){
int m,n,k,i;
int fib(int i);

printf("Input m: ");
scanf("%d",&m);
printf("Input n: ");
scanf("%d",&n);

for(k=m;k<=n;k++)
for(i=1;fib(i)<=n;i++){
if(k==fib(i))
printf("%.d ",k);
}
return 0;
}

int fib(int i){

if(i==1)
return 1;
if(i==2)
return 1;
else
return fib(i-1)+fib(i-2);
}本回答被网友采纳
第2个回答  2012-05-06
将FOR里面的i<=n改成fib(i)<=n,就可以了
第3个回答  2018-05-29
你这个很明显是while导致一直循环 因为你m和n总是满足while里面的条件,结果就会一直做while循环里的语句。导致死循环了。可以的话把while删了或者换成if就行了
第4个回答  2012-05-05
酱油~~~~~~~~
第5个回答  2012-05-05
while(m>=1&&n<=10000&&m<=n)
{
for(i=1;i<=n;i++)
if(fib(i)>=m&&fib(i)<=n)
printf("%d ",fib(i));
break;
}//加一句break;本回答被提问者采纳

...输入2个正整数m和n(m≥1,n≤10 000),输出m ~n 之间所有的Fibonacci...
return 1;else return fib(i-1)+fib(i-2);}

C语言:输出m ~n 之间所有的Fibonacci 数
输入2个正整数m和n(m≥1,n≤10 000),输出m ~n 之间所有的Fibonacci数。Fibonacci数列(第一项起):1,1,2,3,5,8,13,21,…。定义并调用函数fib(n),它的功能是返回第n项Fibonacci 数。例如,fib(7)的返回值是13。【输入形式】从... 展开 峰★印 浏览3685 次 |举报 我有更的答案 推荐于-...

C语言函数 【问题描述】输入2个正整数m和n(m>=1,n<=1000),输出m~n之 ...
include <stdio.h>int factorsum(int n){int sum,i;for(i=1,sum=0;i<n;++i){if(n%i==0)sum+=i;}return sum;}int main(void){int m,n;while(scanf("%d , %d",&m,&n)==2){for(;m<n;++m){if(m==factorsum(m)){printf("%d ",m);}}printf("\\n");}return 0;} ...

输入2 个正整数m和n(1<=m,n<=10000),输出m 和n之间所有的Fibonacci数...
public static void main(String args[]) { int ri, repeat;int i, m, n;long f;Scanner in = new Scanner(System.in);repeat = in.nextInt();for (ri = 1; ri <= repeat; ri++) { m = in.nextInt();n = in.nextInt();for (int j = 1;; j++) { int fibJ=fib(j)...

急!!输入2个正整数m和n(m>=1,n<=1000),输出m~n之间的所有完数,完数就是...
int m,n,a; m>=1; n<=1000; scanf("%d,%d",&m,&n);\/\/要输入逗号 你输入数据时有没输入逗号呢? for (a=m;a<=n;a++) {if (a==factorsum(a))\/\/是等于号 就这一个问题 其它地方都是对的 printf("%d ",a); } } int factorsum(int number) {int i=1,a=0; for(i=1;i<number;i...

输入2 个正整数m 和n(m≥1,n≤1 000),输出m ~n 之间的所有完数
void main(){ int i;long wanshu=0;int n,x,y;cout<<"输入n:"<<endl;cin>>n;cout<<"输入x:"<<endl;cin>>x;cout<<"输入y:"<<endl;cin>>y;for(i=1;i<=n;i+=2){ wanshu+=pow(i,3);if(wanshu==1){ continue;} if(wanshu>=x&&wanshu<=y)cout<<"n以内的完数:"<...

C语言函数 【问题描述】输入2个正整数m和n(m>1,n<=500),统计并输出m...
r=1; for ( i=2;i<=m\/2;i++ ) if ( m%i==0 ) {r=0;break;} return r;}void main() { int m,n,i,k,s; scanf("%d,%d",&m,&n); k=s=0; for ( i=m;i<=n;i++ ) if ( prime(i) ) { k++; s+=i; } printf("count=%d,sum=%d\\n",k,s);} ...

...输入2 个正整数m和n(1<=m,n<=10000),输出m 和n之间所有的Fibonacci...
public static void main(String args[]) { int ri,repeat; int i, m, n; long f; Scanner in=new Scanner(System.in); repeat=in.nextInt(); for(ri=1; ri<=repeat; ri++) { m=in.nextInt(); n=in.nextInt(); for(i=1;;i++) { if...

简单C语言程序
1.输入2个正整数m和n,求其最大公约数和最小公倍数 include include int main(){ int m,n,p,q,s,r;printf("请输入两个正整数;m,n\\n");scanf("%d,%d",&m,&n);s=m*n;if(m<n){ p=m;m=n;n=p;} printf("%d\\t%d\\n",m,n);\/*按从大到小输出m,n *\/ while(n!=0...

C语言:输出m ~n 之间所有的Fibonacci 数
include<stdio.h> include<stdlib.h> int fib(int n){int i,*A;A=(int *)malloc(sizeof(int)*n)。\/\/动态申请内存A[0]=1;A[1]=1;if(n==1)return A[0];if(n==2)return A[1];for(i=2;A[i]<n;i++)A[i]=A[i-1]+A[i-2];return A[n-1];}。

相似回答