- 1、本文档共96页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* 将上题改成一个宏定义语句 #includestdlib.h #define Y for(i=0;i10;i++) { a[i]=rand()%100; printf(a[%d]=%d\n,i,a[i]); } \ for(i=0;i9;i++) for(j=i+1;j10;j++) \ if(a[i]a[j]){t=a[i];a[i]=a[j];a[j]=t;} \ printf(\n); for(i=0;i10;i++) printf(a[%d]=%d\n,i,a[i]); main() { int a[10],i,j,t; randomize(); Y; getch(); } * #include stdio.h #define MAXN 100 int a[MAXN]={0}; int counts=0; void comb(int m,int k) { int i,j; for (i=m;i=k;i--) { a[k]=i; if (k1) comb(i-1,k-1); else { counts++; for (j=a[0];j0;j--) printf(%d ,a[j]); printf(\n); } } } int main() { int m,r; printf(Please input m:); scanf(%d,m); printf(Please input n:); scanf(%d,r); counts=0; a[0]=r; comb(m,r); printf(All kinds is:%d\n,counts); getch(); } * 计算机所能表示与处理的数的有效数字位数是有限的,例如,对基本整型而言,它能处理的数的范围为-32768到+32767之间,对于长整型同样有一个范围。不管什么样类型的数据,总有计算机不能表示的时候,这种情况称为溢出。那么我们怎样来计算两个大数的和或两个大数的积呢?如:计算两个大整数之和: 123456789654321+98765432123300 这两个整数计算机均不能正确存储,可以用数组的办法来加以解决。我们可以将两个大数在输入时通过一定的方法将各位数字分别转储到一个数组的各个元素中,两个大数的相加转换为两个数组对应元素的相加。讲到这里我不得不打住,因为这个问题属于程序设计课程的“高级研究专题”——高精度数的运算问题。希望课后有同学与我讨论这个问题。 * 从上图可知,求解可分为两个阶段: 第一阶段是“回推”,即将第n个人的年龄表示为第(n-1) 个人年龄的函数,直至“回推”到第1个人。 第二阶段是“递推”,从第1个人的已知年龄推算出第2个人的年龄,一直推算出第5个人的年龄为止。 一个递归问题要经历许多步才能求出最后的值。显而易见,如果要求递归过程不是无限进行下去,必须具有一个结束递归过程的条件。例如,age(1)=10,就是使递归结束的条件。 * ⑴如:上面的S(a+b)中,在宏展开时并不求a+b的值,而只将a+b代替r。 ⑵ ⑶宏定义时,字符串可以是任何类型的数据。(字符、数值等) 说明: 1.带参宏定义中,宏名与参数间不能有空格; 2.如上例程序改为: #define PI 3.1415926 #define S(r) PI*r*r main() { float a, b, area; a=3.6; b=4.1; area=S(a+b); printf(“r=%f\narea=%f\n”,a+b, area); } 则宏展开为: area=3.1415926*a+b*a+b 3.带参宏定义,形参不分配内存单元,因此不必作类型定义(与函数区别之一); 4.带参宏与函数的区别之二:见以
文档评论(0)