C不使用指针,实现可变长数组,求斐波那契数列

原创 2018年04月16日 09:33:04
做编程题做到一题,要求斐波那契数列的第n项,以及前n项和。由于有一定的python基础,我想到可以这样做:创建一个第一、二项为0,1的列表a[2],用循环a[i]=a[i-1]+a[i-2]求出a[i]并把它append到列表里去。但C里没有列表,很遗憾我还没有学指针,而数组是“不可变长的”,原因是不定长的数组无法分配内存空间。
于是教材给的方法是,创建一个包含斐波那契数列前100项的数组,只要输入的n不超过100,就可以正常地输出,实现代码如下:
#include<stdio.h>
int main()
{
 int i,n,sum=0;
 int a[100]={0,1};
 printf("输入n的值(不超过100):\n");
 scanf("%d",&n);
 for (i=2;i<100;i++)
  a[i]=a[i-2]+a[i-1];
 for (i=0;i<=n;i++)
  sum=sum+a[i];
 printf("第%d项为:%d\n",n,a[n]);
 printf("前%d项和为:%d\n",n,sum);
 return 0;
}

我觉得这个办法相当笨,而且浪费内存空间,很不灵活。于是我就开始找“可变长数组”的实现方法。
在谭浩强的《C程序设计(第四版)》中我发现,可以在主函数之外“创建”变长数组。实现方法是:创建一个函数如int fib(int n),它接收主函数传递来的变量n,用这个n创建一个“可变长”数组。实现代码如下:
#include<stdio.h>
int main()
{
	int fib(int n);
	int n;
	printf("输入n的值:\n");
	scanf("%lld",&n);
	fib(n);
	return 0;
}
int fib(int n)
{
	int i,sum=0;
	int a[n]={0,1};
	for (i=2;i<=n;i++)
		a[i]=a[i-2]+a[i-1];
    for (i=0;i<=n;i++)
		sum=sum+a[i];
	printf("第%d项为:%lld\n",n,a[n]);
	printf("前%d项和为:%lld\n",n,sum);
	return 0;	 
 } 
需要注意的是,在函数fib中创建的数组,无法直接在主函数中调用(其实是我没找到可行的方法)。所以在以上的代码中,打印结果也是在函数fib中完成的,主函数只起到输入n和调用函数fib的作用。

【C语言】变长数组与柔性数组

前两天看程序,发现在某个函数中有下面这段程序:int n; //define a variable n int array[n]; //define an arr...
  • Always__
  • Always__
  • 2016-05-11 17:34:14
  • 3033

C语言实现变长数组

struct MyData  {     int nLen;     char data[0]; };          开始没有理解红色部分的内容,上网搜索下,发现用处很大,记录下来。 ...
  • Virtual_Func
  • Virtual_Func
  • 2015-09-26 11:47:40
  • 1863

C语言中变长数组的使用方法

先说说我的理解: struct example{     __u16 tag_type;     __u16 tag_len;     char tag_data[0]; } __attribute ...
  • yusiguyuan
  • yusiguyuan
  • 2014-12-28 10:10:47
  • 3785

变长结构体的应用

顾名思义,结构体长度是“可变”的。但是这个可变不针对sizeof()函数。 用例代码: //弹性数组的大小,各对象是否都不一样? //如果都一样,怎么看空间大小,用sizeof array来加? ...
  • huqinweI987
  • huqinweI987
  • 2016-02-29 22:30:32
  • 1847

Linux c 的可变长数组

#include #include #include static char arry_b[0]; void lengthen_arry(int n) { const...
  • yangzhongxuan
  • yangzhongxuan
  • 2012-03-19 23:49:26
  • 4550

C语言柔性数组(可变长数组)

C99中已经支持可变数组了,但VC中还不支持,但支持柔性数组(特殊的可变长数组)。 什么是柔性数组,怎么使用呢?请看下面代码! #include #include #include /...
  • chenjintaoxp
  • chenjintaoxp
  • 2014-03-18 13:32:27
  • 2477

C语言变长数组(zz)

C语言变长数组之剖析1、引言我们知道,与C++等现代编程语言不同,传统上的C语言是不支持变长数组功能的,也就是说数组的长度是在编译期就确定下来的,不能在运行期改变。不过,在C99标准中,新增的一项功能...
  • hannick
  • hannick
  • 2008-02-25 15:34:00
  • 13295

可变长数组

最近项目中需要目录遍历,把遍历到的文件/文件夹保存到数据结构中,其他模块根据索引找对对应的文件名和路径 实现如下: 1 2 3 4 5 6 7 8 9 10...
  • anyliwu
  • anyliwu
  • 2016-09-30 16:10:38
  • 209

C++编程实现变长数组

 首页 | 互联网 | IT动态 | IT培训 | Cisco | Windows | Linux | Java | .Net | Oracle | 软件测试 |...
  • hewusheng10
  • hewusheng10
  • 2015-11-23 19:20:10
  • 3857

C语言中使用“可变长数组”需注意!

标准C99语言教程中说,C语言不可动态定义数组大小,但在被调用函数中,可以借助参数定义“可变长数组”。 比如: void func(int x) { int num[x]; } ...
  • CharlesSimonyi
  • CharlesSimonyi
  • 2012-11-17 20:36:53
  • 3798
收藏助手
不良信息举报
您举报文章:C不使用指针,实现可变长数组,求斐波那契数列
举报原因:
原因补充:

(最多只允许输入30个字)