零基础学数据结构-第0章-C语言基础.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
零基础学数据结构-第0章-C语言基础

第2章 C语言基础 ;2.1 C语言开发环境;2.1 C语言开发环境;2.1 C语言开发环境;2.1 C语言开发环境;2.1 C语言开发环境;2.1 C语言开发环境;2.1 C语言开发环境;2.1 C语言开发环境;2.1 C语言开发环境;2.1 C语言开发环境;2.1 C语言开发环境;2.1 C语言开发环境;2.1 C语言开发环境;2.1 C语言开发环境;2.1 C语言开发环境;2.1 C语言开发环境;2.1 C语言开发环境;2.1 C语言开发环境;2.1 C语言开发环境;2.1 C语言开发环境;2.2 递归与非递归;2.2 递归与非递归;2.2 递归与非递归;2.2 递归与非递归;2.2 递归与非递归;2.2 递归与非递归;2.2 递归与非递归;2.2 递归与非递归;2.2 递归与非递归;【例2_3】利用递归函数输出正整数和等于n的所有不增的正整数和式。例如,当n=4时,不增的和式如下: 5=5 5=4+1 5=3+2 5=3+1+1 5=2+2+1 5=2+1+1+1 5=1+1+1+1+1;2.2 递归与非递归;2.2 递归与非递归;2.2 递归与非递归;2.2.3 迭代与递归 迭代和递归是程序设计中最为常用的两种结构。任何能使用递归解决的问题都能使用迭代的方法解决。迭代和递归的区别是:迭代使用的是循环结构,递归使用的是选择结构。使用递归能够使程序的结构更清晰,设计出的程序更简洁、程序更容易让人理解。 但是,递归也有许多不利之处,大量的递归调用会耗费大量的时间和大量的内存。每次递归调用都会建立函数的一份拷贝,会占用大量的内存空间。迭代则不需要反复调用函数和占用额外的内存。通过分析递归求n的阶乘n!的计算过程,我们可以把它转化为非递归实现。 ;其非递归实现如下。 int NonRecFact(int n) /*非递归求前n的阶乘*/ { int i,s=1; for(i=1;i=n;i++) /*利用迭代求n的阶乘*/ s*=i; return s; };对于大整数问题 考虑到n值非常大的情况,运算结果超出一般整数的位数,可以用一维数组存储长整数,存储长整数数组的每个元素只存储长整数的一位数字。如有m位长整数N用数组a[]存储: N=a[m]*10m-1+a[m-1]*10m-2+…+a[2]*101+a[1]*100 并用a[0]存储长整数N的位数m,即a[0]=m。按上述约定,数组的每个元素存储k的阶乘k!的每一位数字,并从低位到高位依次存储于数组的第2个元素、第3个元素……,??如,6!=720,在数组中的存储形式如图2.23所示。; 在计算阶乘k!时,可以采用对已求得的阶乘(k-1)!连续累加k次后得到。例如,已知5!=120,计算6!,可对原来的120再累加6次得到720。具体程序实现如下: void fact(int a[],int k) { int *b,m,i,j,r,carry; m=a[0]; b=(int*)malloc(sizeof(int)*(m+1)); for(i=1;i=m;i++) b[i]=a[i]; for(j=1;jk;j++) { for(carry=0,i=1;i=m;i++) { r=(i=a[0]?a[i]+b[i]:a[i])+carry; a[i]=r%10; carry=r/10; } if(carry) a[++m]=carry; } free(b); a[0]=m; };void write(int *a,int k) { int i; printf(%4d!=,k); for(i=a[0];i0;i--) printf(%d,a[i]); printf(\n); } void main() { int a[N],n,k; printf(请输入正整数n的值:); scanf(%d,n); a[0]=1;a[1]=1; write(a,1); for(k=2;k=n;k++) { fact(a,k); write(a,k); } }; 指针是C语言中的一个重要概念,也是最不容易掌握的内容。指针常常用在函数的参数传递和动态内存分配中。指针与数组相结

文档评论(0)

shuwkb + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档