《计算机常用算法与程序设计案例教程》源程序清单.doc
《《计算机常用算法与程序设计案例教程》源程序清单.doc》由会员分享,可在线阅读,更多相关《《计算机常用算法与程序设计案例教程》源程序清单.doc(110页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、计算机常用算法与程序设计案例教程源程序清单说明: 1. 程序编号的前2位为所在章节,第3位数字为序号。2. 可直接复制程序文本,“粘贴”到VC+6.0当前文件,编译运行。3. 该文本在排版时最好不改变字体,以免改变某些符号的属性。第 1 章 算法与程序设计概述/ 横竖折对称方阵,c131#include / 调用2个头文件#include void main()int i,j,m,n,a3030; / 定义数据结构 printf( 请确定方阵阶数(奇数)n: ); scanf(%d,&n); if(n%2=0) printf( 请输入奇数!);return; m=(n+1)/2; for(i=
2、1;i=n;i+) for(j=1;j=n;j+) if(i+j=n+1 & i=n+1 & i=j) aij=m-abs(m-j); / 方阵上、下部元素赋值 if(i+jj | i+jn+1 & ij) aij=m-abs(m-i); / 方阵左、右部元素赋值 printf( %d阶对称方阵为:n,n); for(i=1;i=n;i+) for(j=1;j=n;j+) / 输出对称方阵 printf(%3d,aij); printf(n); / 斜折对称方阵,c132#include #include void main()int i,j,m,n,a3030; printf( 请确定方阵阶
3、数(奇数)n: ); scanf(%d,&n);if(n%2=0) printf( 请输入奇数!);return; m=(n+1)/2; for(i=1;i=n;i+) for(j=1;j=n;j+) if(i=m & jm & jm) aij=abs(i-j); / 方阵左上部与右下部元素赋值 if(im | im & j=m) aij=abs(i+j-n-1); / 方阵右上部与左下部元素赋值 printf( %d阶对称方阵为:n,n); for(i=1;i=n;i+) for(j=1;j=n;j+) / 输出对称方阵 printf(%3d,aij); printf(n); / 求整数a,
4、b的最大公约数(a,b),c133#includevoid main() long a,b,c,r; printf(请输入整数a,b: ); scanf(%ld,%ld,&a,&b);/ 输入整数a,b printf(%ld,%ld),a,b); if(ab r=a%b; while(r!=0) a=b;b=r;/ 实施辗转相除 r=a%b; printf(=%ldn,b);/ 输出求解结果 / 求n个整数的最大公约数,c134#includevoid main() int k,n; long a,b,c,r,m100; printf(请输入整数个数n: );/ 输入原始数据 scanf(%d
5、,&n); printf(请依次输入%d个整数: ,n); for(k=0;k=n-1;k+) printf(n请输入第%d个整数: ,k+1); scanf(%ld,&mk); b=m0; for(k=1;k=n-1;k+) / 控制应用n1次欧几里德算法 a=mk; if(ab r=a%b; while(r!=0) a=b;b=r; / 实施辗转相除 r=a%b; printf(%ld,m0);/ 输出求解结果 for(k=1;k=n-1;k+) printf(,%ld,mk); printf()=%ldn,b);/ 实现欧几里德算法的函数,c135long gcd(long a,long
6、 b) long c,r;if(ab r=a%b; while(r!=0) a=b;b=r; / 实施辗转相除 r=a%b; return b;/ 求n个整数的最大公约数,c136#includevoid main() int k,n; long x,y,m100; printf(请输入整数个数n: ); scanf(%d,&n); printf(请依次输入%d个整数: ,n); for(k=0;k=n-1;k+) printf(n请输入第%d个整数: ,k+1); scanf(%ld,&mk); x=m0; for(k=1;k=n-1;k+) y=mk; x=gcd(x,y); printf
7、(%ld,m0); for(k=1;k=n-1;k+) printf(,%ld,mk); printf()=%ldn,x);第2章 枚举/ 含数字m且不能被m整除的n位整数的个数统计与求和,c221 #include void main() int c,j,m,n,f10; long d,k,g1,g2,s1,s2,t; printf( 请输入一位整数m,n: ); scanf(%d,%d,&m,&n); t=1; for(k=1;k=n-1;k+) t=t*10; / 求最小的n位整数t g1=0;s1=0; g2=0;s2=0; for(k=t;k=10*t-1;k+) / 枚举每一个n位
8、数 d=k; for(j=0;j=9;j+) fj=0; for(j=1;j0 & k%m0) / k含数字m且不能被m整除 g1+;s1+=k; if(fm=2 & k%m0) / k恰含2个数字m且不能被m整除 g2+;s2+=k; printf( 含数字%d且不能被%d整除的%d位整数的个数 g1=%ld n,m,m,n,g1); printf( 这些整数的和为 s1=%ld n,s1); printf( 恰含2个数字%d且不能被%d整除的%d位整数个数 g2=%ld n,m,m,n,g2); printf( 这些整数的和为 s2=%ld n,s2);/ 求分母在a,b的最简真分数的个数
9、及其和,c222 #include #include void main()int a,b,n,i,j,t,u; double s; printf( 最简真分数分母在a,b内,请确定a,b: );scanf(%d,%d,&a,&b); / 输入区间的上下限 n=0;s=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; / 分子分母有公因数舍去 if(t=0) n+; / 统计最简真分数个数 s+=(double)i/j; / 求最简
10、真分数和 printf( 最简真分数个数 n=%d n,n); printf( 其和 s=%.5f n,s);/ 解 PELL方程: x2-ny2=1, c231 #include #include void main()double a,m,n,x,y; printf( 解PELL方程: x2-ny2=1.n); printf( 请输入非平方整数 n:); scanf(%lf,&n); m=floor(sqrt(n+1); if(m*m=n) printf( n为平方数,方程无正整数解!n); return; y=1;while(y10000000)printf( 未求出该方程的基本解!);
11、 / 基于最小的枚举求精解超越方程 ,c232 #include #includedouble fny(double x) / 自定义函数fny,用来定义方程式 return 2*pow(x,2)*pow(sin(x),7)+3*pow(x,0.5)*cos(x)-exp(x)/5;void main() int k,t; double a,b,c,x,x1,y,mi;printf( 求方程在a,b中的一个解,请确定a,b: ); scanf(%lf,%lf,&a,&b); for(t=0,x=a;x=b;x+=0.1) / 按步长0.1初步扫描 if(fny(x)*fny(b)=0) / 调
12、用自定义函数fny() t=1;break; if(t=0) printf(无解!);return; c=0.1; k=1; mi=100.0; while(k=8) / 设置8次求精循环 for(x=a;x=b;x+=c) y=fny(x); if(fabs(y)mi) / 比较求取最小值mi mi=fabs(y);x1=x; c=c/10;a=x1-5*c;b=x1+5*c; / 缩小循环步长求精 k+; printf( 所求方程的一个解为 x=%.8f n,x1); / 输出所求解 / 符号判定枚举求精解超越方程,c233 #include #includedouble fny(doub
13、le x) / 自定义函数fny,用来定义方程式 return 2*pow(x,2)*pow(sin(x),7)+3*pow(x,0.5)*cos(x)-exp(x)/5; void main() int i,t=0; double a,b,x,x1,x2,c;printf( 求方程在a,b中的一个解,请确定a,b: ); scanf(%lf,%lf,&a,&b); for(x=a;x=b;x+=0.1) / 初步扫描 if(fny(x)*fny(b)=0) / 调用自定义函数fny() x1=x;x2=b;t=1;break; if(t=0) printf(无解!);return; c=0.
14、01; for(i=2;i=9;i+) / 逐位求精 for(x=x1;x0) / 如果变为同号,缩小循环范围 x2=x;x1=x-c;break; / 调整循环的初值x1与终值x2 c=c/10; / 缩小循环步长求精 x=(x1+x2)/2; printf( 所求方程的一个解为x=%.8f,x); / 输出解,小数点后6位 / 解分数不等式,c241 #include #includevoid main() long c,d,i,m1,m2; double s; printf( 请输入正整数m1,m2(m1m2): ); scanf(%ld,%ld,&m1,&m2); i=0;s=0; w
15、hile(s=m1) i=i+1;s=s+sqrt(i)/(i+1); c=i; do i=i+1;s=s+sqrt(i)/(i+1); while(s=m2); d=i-1; printf( 满足不等式的正整数n为: %ldn%ld n,c,d);/ 解不等式:d1+1/2-1/3+1/4+1/5-1/6+.1/n ,c242 #include void main() long d,n,k; double s; printf( 请输入正整数d: ); scanf(%d,&d); printf( %dd) break; n=n+3; printf( n=%ld n,n+1); / 得一个区间解
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机常用算法与程序设计案例教程 计算机 常用 算法 程序设计 案例 教程 源程序 清单
限制150内