《2022年C程序设计第七章课后练习答案 .pdf》由会员分享,可在线阅读,更多相关《2022年C程序设计第七章课后练习答案 .pdf(5页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、C程序设计(第三版)谭浩强著 课后习题答案第 7 章2009-05-16 10:56 7.7 打印“魔方阵”。所谓魔方阵是指这样的方阵,它的每一行、每一列和对角线之和均相等。例如,三阶魔方阵为8 1 6 3 5 7 4 9 2 要求打印出由1 到 n2 的自然数构成的魔方阵。/* * 算法思路:魔方阵中各数的排列规律如下:*(1) 将 1 放在第一行中间一列*(2) 从 2 开始直到 nn 止各数依次按下列规则存放:每一个数存放的行比前一个数的* 行数减 1,列数加 1 *(3) 如果上一个数的行数为1,则下一个数的行数为n(指最下一行 ) *(4) 当上一个数的列数为n 时,下一个数的列数应
2、为1,行数减 1 *(5) 如果按上面的规则确定的位置数已有数,或者上一个数是第1 行第 n 列时,则把* 下一个数放在上一个数的下面*/ #include void main() int a1616,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(矩阵阶数是 %dn,n); p=0; for(i=1;i=n;i+) for(j=1;j=n;j+) aij=0; /* 建立魔方 */ j=n/
3、2+1; a1j=1; for(k=2;k=n*n;k+) i=i-1; j=j+1; if(in) 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 1 页,共 5 页 - - - - - - - - - i=i+2; j=j-1; else if(in) j=1; if(aij=0) aij=k; else i=i+2; j=j-1; aij=k; /* 输出*/ for(i=1;i=n;i+) for(j=1;j=n;j+) printf(%5d,aij); p
4、rintf(n); 7.8 找出一个二维数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小。也可能没有鞍点。#include #define N 10 #define M 10 void main() int i,j,k,m,n,flag1,flag2,aNM,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,&aij); for(i=0;in
5、;i+) for(j=0;jm;j+) printf(%5d,aij); printf(n); flag2=0; for(i=0;in;i+) 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 2 页,共 5 页 - - - - - - - - - max=ai0; for(j=0;jmax) max=aij; maxj=j; for(k=0,flag1=1;kakmaxj) flag1=0; if(flag1) printf(n第%d行, 第%d列的%d是鞍点 n,
6、i,maxj,max); flag2=1; if(!flag2) printf(n矩阵中无鞍点 !n); 7.9 有 15 个数按由大到小顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中, 则打印出“无此数”。#include #define N 15 void main() int x,top,bot,middle,succ; int aN=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; if(x
7、aN-1) succ=-1; while(succ=0)&(top=bot) middle=(bot+top)/2; if(x=amiddle) succ=middle; printf(%d location:%dn,x,succ+1); else if(xamiddle) bot=middle-1; else top=middle+1; if(succ=0|succ=-1) printf(%d not in array.n,x); 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - -
8、- - - 第 3 页,共 5 页 - - - - - - - - - 7.10 有一篇文章,共有3 行文字,每行有80 个字符。要求分别统计出其中英文大写字母、小写字母、数字、空格以及其他字符的个数。#include void main() int i,j,upper,lower,digit,space,other; char article380; i=j=upper=lower=digit=space=other=0; for(i=0;i3;i+) printf(Input %d row:n,i); gets(articlei); for(j=0;j=A&articleij=a&arti
9、cleij=0&articleij=9) digit+; else if(articleij= ) space+; else other+; for(i=0;i3;i+) puts(articlei); printf(upper=%dn,upper); printf(lower=%dn,lower); printf(digit=%dn,digit); printf(space=%dn,space); printf(other=%dn,other); 7.11 打印以下图案:* * * * * * * * * * * * * * * * * * * * *#include (可不写)void m
10、ain() char a6=*; char space= ; int i,j,k; for(i=0;i5;i+) for(j=0;ji;j+) printf(%c,space); 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 4 页,共 5 页 - - - - - - - - - for(k=0;k5;k+) printf(%c,ak); printf(n); 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 5 页,共 5 页 - - - - - - - - -