- 1、本文档共5页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C程序设计(第三版)谭浩强 著 课后习题答案第7章
2009-05-16 10:56
8 1 6
3 5 7
4 9 2
要求打印出由1 到n2 的自然数构成的魔方阵。
/********************************************************************
**算法思路:魔方阵中各数的排列规律如下:
**(1)将1放在第一行中间一列
**(2)从2开始直到n×n止各数依次按下列规则存放:每一个数存放的行比前一个数的** 行数减1,列数加1
**(3)如果上一个数的行数为1,则下一个数的行数为n(指最下一行)
**(4)当上一个数的列数为n时,下一个数的列数应为1,行数减1
**(5)如果按上面的规则确定的位置数已有数,或者上一个数是第1行第n列时,则把
** 下一个数放在上一个数的下面
********************************************************************/
#include stdio.h
void main(){
int a[16][16],i,j,k,p,m,n;
/*初始化*/
p=1;
while(p==1){
printf(input n.(0n=15,n是奇数.)\n);
scanf(%d,n);
if((n != 0) (n=15) (n%2 != 0))
{
printf(矩阵阶数是%d\n,n);
p=0;
}
}
for(i=1;i=n;i++)
for(j=1;j=n;j++) a[i][j]=0;
/*建立魔方*/
j=n/2+1;
a[1][j]=1;
for(k=2;k=n*n;k++)
{
i=i-1;
j=j+1;
if((i1)(jn)){
i=i+2;
j=j-1;
}
else{
if(i1) i=n;
if(jn) j=1;
}
if(a[i][j]==0) a[i][j]=k;
else{
i=i+2;
j=j-1;
a[i][j]=k;
}
}
/*输出*/
for(i=1;i=n;i++){
for(j=1;j=n;j++)
printf(%5d,a[i][j]);
printf(\n);
}
}
7.8 找出一个二维数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小。
也可能没有鞍点。
#include stdio.h
#define N 10
#define M 10
void main(){
int i,j,k,m,n,flag1,flag2,a[N][M],max,maxi,maxj;
printf(\ninput row n:);
scanf(%d,n);
printf(\ninput column m:);
scanf(%d,m);
for(i=0;in;i++){
printf(第%d行?\n,i);
for(j=0;jm;j++)
scanf(%d,a[i][j]);
}
for(i=0;in;i++){
for(j=0;jm;j++)
printf(%5d,a[i][j]);
printf(\n);
}
flag2=0;
for(i=0;in;i++){
max=a[i][0];
for(j=0;jm;j++)
if(a[i][j]max)
{
max=a[i][j];
maxj=j;
}
for(k=0,flag1=1;kn flag1;k++)
if(maxa[k][maxj]) flag1=0;
if(flag1){
printf(\n第%d行,第%d列的%d是鞍点\n,i,maxj,max);
flag2=1;
}
}
if(!flag2)
printf(\n矩阵中无鞍点!\n);
}
7.9 有15 个数按由大到小顺序存放在一个数组中,输入一个数,要求用折半查找
法找出该数是数组中第几个元素的值。如果该数不在数组中,则打印出“无此数”。
#include stdio.h
#define N 15
void main()
{
int x,top,bot,middle,succ;
int a[N]={1,3,5,7,9,11,12,35,46,57,68,79,80,91,102};
printf(Enter x:);
scanf(%d,x);
succ=0;
top=0;bot=N-1;
文档评论(0)