C数组例题j讲解_第1页
C数组例题j讲解_第2页
C数组例题j讲解_第3页
C数组例题j讲解_第4页
C数组例题j讲解_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、6.1.1 Fibonacci数列/* Fibonacci数列递推求解 */main()int k,n; long s,f50; printf(求数列的第n项与前n项和,请输入n:); scanf(%d,&n); f1=1;f2=1;s=2; /* 数组元素与和变量赋初值 */ for(k=3;k=n;k+) fk=fk-1+fk-2; /* 实施递推 */ s+=fk; /* 实施求和 */ printf(F数列第%d项为:%ldn,n,fn); printf(F数前%d项之和为:%ldn,n,s); 6.1.2 幂序列/* 幂序列程序 */main()int k,n; long a,b,s

2、,f100; printf(求数列的第n项与前n项和,请输入n:); scanf(%d,&n); a=2;b=3;s=0; for(k=1;k=n;k+) if(ab) fk=a;a=a*2; /* 用2的幂给fk赋值 */ else fk=b;b=b*3; /* 用3的幂给fk赋值 */ s+=fk; printf(数列的第%d项为:%ldn,n,fn); printf(数列的前%d项之和为:%ldn,n,s);6.1.3 双关系递推数列/* 双关系2x+1,3x+1递推 */main()int n,i,j,h,m1500;m1=1;scanf(%d,&n);for(i=1;i=n;i+)

3、m2*i=2*mi+1;m2*i+1=3*mi+1; for(j=i+2;jmj) /* m(i+1)与m(j)比较 */ h=mj; mj=mi+1;mi+1=h; /* 交换,使m(i+1)最小 */ if(mi+1=mj) mj=20000+j; /* 置m(j)为一出界大数,以避免重复 */for(i=1;i=n;i+) printf( %4d,mi); if(!(i%10) printf(n);6.1.4 复杂递推数列/* 2x+3y递推程序 */main() int m,n,t,k,i,h,j,w,a30000; printf(n input m:); scanf(%d,&m);

4、a1=1;a2=2;t=2;n=0; for(k=2;k=m;k+) for(i=1;i=k-1;i+) w=2*ak+3*ai; if(w=m & ak!=ai) a+t=w; /* 判断 w是否为递推项 */ w=2*ai+3*ak; if(w=m & ak!=ai) a+t=w; /* 判断 w是否为递推项 */ for(j=1;j=m;j+) for(k=1;k=t;k+) if(ak=j) n+;printf(%4d(%3d) ,j,n);break; printf(n n=%d,n); 6.2.1 折叠方阵/* 层叠方阵 */main() int a,i,j,m,n,x,y,z20

5、20; printf(输入方阵的行数m:n); scanf(%d,&m); printf(输入方阵的起始数a:n); scanf(%d,&a); z11=a;n=a; for(i=2;i=m;i+) x=1;y=i;n+;zxy=n; /* 每一层的起始元素赋值 */ while(x1) n+;y-;zxy=n; /* 每一层的横元素赋值 */ for(x=1;x=m;x+) for(y=1;y=m;y+) printf(%4d,zxy); /* 循环打印层叠方阵 */ printf(n); 6.2.2 矩阵的和与转置main() int i,j,m,n,x,y,a45,b45; printf

6、(输入a矩阵:n); for(i=1;i=3;i+) for(j=1;j=4;j+) scanf(%d,&aij); /* 输入a矩阵的元素 */ printf(输入b矩阵:n); for(i=1;i=3;i+) for(j=1;j=4;j+) scanf(%d,&bij); /* 输入b矩阵的元素 */ printf(a矩阵:n); for(i=1;i=3;i+) for(j=1;j=4;j+) printf(%3d,aij); /* 打印a矩阵 */ printf(n); printf(b矩阵:n); for(i=1;i=3;i+) for(j=1;j=4;j+) printf(%3d,b

7、ij); /* 打印b矩阵 */ printf(n); printf(a,b矩阵之和:n); for(i=1;i=3;i+) for(j=1;j=4;j+) printf(%4d,aij+bij); /* 计算并打印a+b的元素 */ printf(n); printf(a矩阵的转置:n); for(j=1;j=4;j+) /* 打印a矩阵的转置 */ for(i=1;i=3;i+) printf(%4d,aij); printf(n); 6.2.3 矩阵的积/* 求a,b矩阵的积 */ main() int i,j,k,d,a45,b53; printf(输入a矩阵:n); for(i=1;

8、i=3;i+) for(j=1;j=4;j+) scanf(%d,&aij); /* 输入a矩阵的元素 */ printf(输入b矩阵:n); for(i=1;i=4;i+) for(j=1;j=2;j+) scanf(%d,&bij); /* 输入b矩阵的元素 */ printf(a矩阵:n); for(i=1;i=3;i+) for(j=1;j=4;j+) printf(%3d,aij); /* 打印a矩阵 */ printf(n); printf(b矩阵:n); for(i=1;i=4;i+) for(j=1;j=2;j+) printf(%3d,bij); /* 打印b矩阵 */ pr

9、intf(n); printf(a,b矩阵之积:n); for(i=1;i=3;i+) for(j=1;j=2;j+) for(d=0,k=1;k=4;k+) d+=aik*bkj; /* 求和计算积矩阵元素d(i,j) */ printf(%6d,d); /* 打印a,b积矩阵元素d */ printf(n); 6.2.4 杨辉三角形3程序设计与运行/* 杨辉三角形 */main()int n,i,j,k,a2020; scanf(%d,&n); for(i=1;i=n;i+) ai1=1;aii=1; /* 确定初始条件 */ for(i=3;i=n;i+) for(j=2;j=i-1;j

10、+) aij=ai-1j-1+ai-1j; /* 递推得到每一数组元素 */ for(i=1;i=n;i+) /* 控制输出n行 */ printf(n); for(k=1;k=40-3*i;k+) printf( ); for(j=1;j=i;j+) /* 控制输出第i行的i个数组元素 */ printf(%6d,aij); 6.3.1 猴子爬山/* 猴子爬山n级,一步跨1级或3级台阶 */main()int k,n;long f1000; printf(请输入台阶总数n:); scanf(%d,&n); f1=1;f2=1;f3=2; /* 数组元素赋初值 */ for(k=4;k=n;k

11、+) fk=fk-1+fk-3; /* 按递推关系实施递推 */ printf(s=%ld,fn);6.3.2 整币兑零 main()int x,f,t,n; x=0; for(t=0;t=50;t+) /* 变量t为2元币的张数*/for(f=0;f=0) x+; /* 变量n为非负时,用x统计兑零种数 */ printf(%d,x);6.3.3 整数拆分/* 连续数1-ms组合ss */#include #define MAXN 100 int aMAXN,t,n=0; comb(int m,int k,int s) /* 建立递归函数comb(m, k, s) */ int i,j; f

12、or(i=m;i=k;i-) ak=i; if(k1) comb(i-1,k-1,s); else for(t=0,j=a0;j0;j-) t=t+aj; if(t=s) n+;printf(“%d=”,s); /* 满足条件时输出 */ for(j=a0;j1;j-)printf(%2d+,aj); printf(%2dn,a1); main() int ms,ss,i,h,k,wmin,wmax; scanf(%d,%d,&ms,&ss); for(h=0,i=1;iss) wmax=i-1;break; for(h=0,i=1;iss) wmin=i-1;break; for(k=wmi

13、n;k=wmax;k+) a0=k;comb(ms,k,ss); printf(n=%dn,n); /* 输出拆分种数n */6.4.1 分类统计main()int k,m,sm,i,j,h,t,f1000,s9,n9,d10100; float x; sm=0; printf(请输入m个分数:n); scanf(%d,&m); for(k=1;k=m;k+) printf(请输入第%d个数:,k); scanf(%d,&fk); sm+=fk; /* sm统计总分 */ t=fk/10; if(t9) t=9; /* 计算确定分类号t */ st+=fk; nt+; dtnt=fk; pri

14、ntf(所有%d个原始数据为:n,m); for(k=1;k=m;k+) printf(%4d,fk); /* 每行10个打印原始数据 */ if(k%10=0) printf(n); printf(n); for(t=5;t=9;t+) for(i=1;i=nt-1;i+) /* 分段按逐个比较法从小到大排序 */ for(j=i+1;jdtj) h=dti;dti=dtj;dtj=h; for(t=9;t=5;t-) printf(%d段共%3d个数据,从小到大依次为:,t,nt); for(k=1;k=nt;k+) printf(%4d,dtk); x=(float)st/nt; pri

15、ntf(, 该段平均分为:%8.2fn,x); x=sm/m; printf(所有%d个数据的平均值为:%8.2fn,m,x); 6.4.2 大赛现场统分/* 竞赛现场统分排序 */#include#includemain()int i,j,n,m,u,sh40;float max,min,uf,sf40, f4020;printf(请输入选手个数(1n40):);scanf(%d,&n);printf(请输入评委个数(2m20):);scanf(%d,&m);for(i=1;i=n;i+) /* 现场为选手评分,报分 */ printf(n第%d个上场选手编号为:,i); scanf(%d,

16、&shi); sfi=0;max=0;min=10000; /* 数组元素与变量赋初值 */ for(j=1;j=m;j+) printf(第%d个评委评分为:,j); scanf(%f,&fij); sfi+=fij; if(maxfij) min=fij; printf(n去掉一个最高分:%.2f,max); printf(n去掉一个最低分:%.2f,min); sfi=(sfi-max-min)/(m-2); /* 计算第i个选手的最后得分 */ printf(n编号为%d号选手,shi); printf(最后得分为:%.2fn,sfi); for(i=1;i=n-1;i+) /* 选手

17、最后得分按冒泡法排序,打印名次表 */ for(j=1;j=n-i;j+) if(sfjsfj+1) uf=sfj;sfj=sfj+1;sfj+1=uf; /* 交换sf同时交换sh */ u=shj;shj=shj+1;shj+1=u; printf(n 参赛选手得分名次表:); /* 输出名次表 */ printf(n选手编号 得分 名次); for(i=1;i=1;k-) /* 从后往前逐位打印输出 */if(sk9) printf(%c,rsk); /* 超过9时打印相应字母 */ else printf(%d,sk); printf()%dn,p); /* 十进制小数转换为P进制 *

18、/main() float n;int c,m,k,p,t,s100;char r16; r10=A;r11=B;r12=C; r13=D;r14=E;r15=F; m=0; printf(n请输入十进制纯小数n:); scanf(%f,&n); printf(n请输入转换数制p(2-16):); scanf(%d,&p); printf(n请输入最多转换的位数t:); scanf(%d,&t); printf(%f)10=(0.,n); while(n!=0 & mt) n=n*p;c=n;n=n-c;m+;sm=c; /* 实施乘P取整 */ for(k=1;k9) printf(%c,r

19、sk); /* 每一位超过9时打印相应字母 */ else printf(%d,sk); printf()%dn,p); 6.4.4 真分数序列/* 求分母为a,b的最简真分数的增序列 */main()int a,b,k,n,i,j,h,t,u,c3000,d3000; scanf(%d,%d,&a,&b); /* 输入区间的上下限 */ scanf(%d,&k); /* 输入指定序号k */ n=0; for(j=a;j=b;j+) for(i=1;i=j-1;i+) for(t=0,u=2;u=i;u+) if(j%u=0 & i%u=0) t=1;break; /* 分子分母有公因数舍去

20、 */ if(t=0) n+;cn=i;dn=j; for(i=1;i=n-1;i+) /* 应用冒泡法排序 */ for(j=1;jcj+1*dj) /* 若c(j)/d(j)c(j+1)/d(j+1),交换 */ h=cj;cj=cj+1;cj+1=h; h=dj;dj=dj+1;dj+1=h; printf(n=%d n,n); printf(%d:%d/%d n,k,ck,dk);6.5.1 优美乘积main()long int x,y,t,i,k,m4,f11,a,b,c,n=0; for(a=2;a=98;a+) for(b=102;b=9876;b+) /* 对a,b 实施穷举

21、*/ c=a*b;m1=a;m2=b;m3=c; for(i=0;i=9;i+) fi=0; for(k=1;k0) x=y%10;fx=fx+1;y=y/10; /* 分离数字,f数组统计 */ for(t=0,i=0;i=9;i+)if(fi!=1) t=1; /* 检验数字0-9各只出现一次 */ if(t=0) printf(%3ld*%4ld=%5ld ,a,b,c);n+; /* 用n统计个数 */ if(n%4=0) printf(n); printf(n n=%d.n,n); 6.5.2 优美和/* 优美和程序 */main() int a,b,c,x,y,t,i,k,m4,f

22、11,n=0; for(a=10;a=987;a+) for(b=102;b=9876;b+) /* 对a,b 实施穷举 */c=a+b;m1=a;m2=b;m3=c; for(i=0;i=9;i+) fi=0; for(k=1;k0) x=y%10;fx=fx+1;y=y/10; /* 分离数字,用f数组统计 */ for(t=0,i=0;i=9;i+) if(fi!=1) t=1; /* 检验数字09是否各出现一次 */if(t=0 & a=1;k-) if(ai=ak) g=0; /* 两数相同,标记g=0 */ if(i=9 & g=1 & a1a4) m1=a2*10+a3;m2=a

23、5*10+a6;m3=a8*10+a9; if(a1*m2*m3+a4*m1*m3=a7*m1*m2) /* 判断是否满足等式 */ n+;printf(%2d). ,n);printf(%d/%ld+%d/,a1,m1,a4);printf(%ld=%d/%ldn,m2,a7,m3); if(i9 & g=1) i+;ai=1;continue; /* 不到9个数,往后继续 */ for(j=1;j1) i-;else break; /* 往前返回 */ if(ai=9 & i=1) break;else ai+; /* 至第1个数为9,结束 */ 6.6.1 阶乘的右边非零位/* 求n!右

24、边第一个非零数字 */main()int n,k;long f1000; f1=1; printf(n=);scanf(%d,&n); for(k=2;k2):); scanf(%ld,%ld,&c,&d); if (c%2=0) c+; e=(d-c)/2;i=1; /* 确定区间上e+1个奇数 */ while (i=sqrt(d) /* 在c,d中筛选素数 */ i=i+2;j=i; while (j=c) a(j-c)/2=-1; /* 筛去标记-1 */ for(n=0,k=0;k=e;k+) if(ak!=-1) /* 输出所得素数 */ n+; printf(%ld ,c+2*k); if(n%10=0) printf(n); printf(n%ld,%ld共%d个素数.n,c,d,n); 6.6.3 最小的连续n个合数 /* 求最小的连续n个合数 */#includemath.hmain() long int c,d,f,g,i,j,k,m,x;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论