PAGE
PAGE 83
《计算机常用算法与程序设计案例教程》
源程序清单
说明:
1. 程序编号的前2位为所在章节,第3位数字为序号。
2. 可直接复制程序文本,“粘贴”到VC++6.0当前文件,编译运行。
3. 该文本在排版时最好不改变字体,以免改变某些符号的属性。
第 1 章 算法与程序设计概述
// 横竖折对称方阵,c131
#include // 调用2个头文件
#include
void main()
{int i,j,m,n,a[30][30]; // 定义数据结构
printf(" 请确定方阵阶数(奇数)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+j<=n+1 && i<=j || i+j>=n+1 && i>=j)
a[i][j]=m-abs(m-j); // 方阵上、下部元素赋值
if(i+jj || i+j>n+1 && i
a[i][j]=m-abs(m-i); // 方阵左、右部元素赋值
}
printf(" %d阶对称方阵为:\n",n);
for(i=1;i<=n;i++)
{ for(j=1;j<=n;j++) // 输出对称方阵
printf("%3d",a[i][j]);
printf("\n");
}
}
// 斜折对称方阵,c132
#include
#include
void main()
{int i,j,m,n,a[30][30];
printf(" 请确定方阵阶数(奇数)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 && j<=m || i>m && j>m)
a[i][j]=abs(i-j); // 方阵左上部与右下部元素赋值
if(i<=m && j>m || i>m && j<=m)
a[i][j]=abs(i+j-n-1); // 方阵右上部与左下部元素赋值
}
printf(" %d阶对称方阵为:\n",n);
for(i=1;i<=n;i++)
{ for(j=1;j<=n;j++) // 输出对称方阵
printf("%3d",a[i][j]);
printf("\n");
}
}
// 求整数a,b的最大公约数(a,b),c133
#include
void main()
{ long a,b,c,r;
printf("请输入整数a,b: ");
scanf("%ld,%ld",&a,&b);// 输入整数a,b
printf("(%ld,%ld)",a,b);
if(a
{c=a;a=b;b=c;}// 交换a,b,确保a>b
r=a%b;
while(r!=0)
{a=b;b=r;// 实施"辗转相除"
r=a%b;
}
printf("=%ld\n",b);// 输出求解结果
}
// 求n个整数的最大公约数,c134
#include
void main()
{ int k,n;
long a,b,c,r,m[100];
printf("请输入整数个数n: ");// 输入原始数据
scanf("%d",&n);
printf("请依次输入%d个整数: ",n);
for(k=0;k<=n-1;k++)
{ printf("\n请输入第%d个整数: ",k+1);
?scanf("%ld",&m[k]);
}
b=m[0];
for(k=1;k<=n-1;k++) // 控制应用n?1次欧几里德算法
{a=m[k];
if(a<