C语言程序设计第四版第六章答案谭浩强文档格式.docx
- 文档编号:6401718
- 上传时间:2023-05-06
- 格式:DOCX
- 页数:19
- 大小:18.57KB
C语言程序设计第四版第六章答案谭浩强文档格式.docx
《C语言程序设计第四版第六章答案谭浩强文档格式.docx》由会员分享,可在线阅读,更多相关《C语言程序设计第四版第六章答案谭浩强文档格式.docx(19页珍藏版)》请在冰点文库上搜索。
2、用选择法对10整数排序。
{inti,j,min,temp,a[11];
enterdata:
=10;
a[%d]="
i);
scanf("
%d"
&
a[i]);
Theorginalnumbers:
=9;
{min=i;
if(a[min]>
a[j])min=j;
temp=a[i];
a[i]=a[min];
a[min]=temp;
\nThesortednumbers:
3、求一个3×
3的整型矩阵对角线元素之和。
{
inta[3][3],sum=0;
inti,j;
for(i=0;
3;
for(j=0;
%3d"
a[i][j]);
sum=sum+a[i][i];
sum=%6d\n"
sum);
4、有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中。
{inta[11]={1,4,6,9,13,16,19,28,40,100};
inttemp1,temp2,number,end,i,j;
arraya:
10;
insertdata:
"
number);
end=a[9];
if(number>
end)
a[10]=number;
else
{for(i=0;
{if(a[i]>
number)
{temp1=a[i];
a[i]=number;
11;
{temp2=a[j];
a[j]=temp1;
temp1=temp2;
break;
Nowarraya:
5、将一个数组中的值按逆序重新存放。
例如,原来顺序为8、6、5、4、1。
要求改为1、4、5、6、8。
解:
#include"
stdio.h"
#defineN5
voidmain()
{inta[N],i,temp;
enterarrya:
for(i=0;
N;
arrya:
%4d"
N/2;
{temp=a[i];
a[i]=a[N-i-1];
a[N-i-1]=temp;
\nNow,arrya:
6、输出以下的杨辉三角形(要求输出10行)。
1
11
121
1331
14641
15101051
{inti,j,n=0,a[31][31]={0};
while(n<
1||n>
30)/*最多可输出30行*/
请输入杨辉三角形的行数:
n);
}
n;
i++)
a[i][0]=1;
/*第一列全置为一*/
for(i=1;
for(j=1;
=i;
j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];
/*每个数是上面两数之和*/
i++)/*输出杨辉三角*/
{for(j=0;
a[i][j]);
7、输出“魔方阵”。
所谓魔方阵是指这样的方阵,它的每一行、每一列和对角线之和均相等。
例如,三阶魔方阵为
816
357
492
{inta[15][15],i,j,k,p,n;
p=1;
while(p==1)
entern(n=1--15):
if((n!
=0)&
(n<
=15)&
(n%2!
=0))
p=0;
=n;
for(j=1;
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((i<
1)&
(j>
n))
{i=i+2;
j=j-1;
{if(i<
1)i=n;
if(j>
n)j=1;
if(a[i][j]==0)
a[i][j]=k;
{for(j=1;
8、找出一个二维数组中的鞍点,即该位置上的元素在该行上最大、在该列上最小。
也可能没有鞍点。
#defineN4
#defineM5/*数组为4行5列*/
inti,j,k,a[N][M],max,maxj,flag;
pleaseinputmatrix:
i++)/*输入数组*/
M;
{max=a[i][0];
/*开始时假设a[i][0]最大*/
maxj=0;
/*将列号0赋给maxj保存*/
j++)/*找出第i行中的最大数*/
if(a[i][j]>
max)
{max=a[i][j];
/*将本行的最大数存放在max中*/
maxj=j;
/*将最大数所在的列号存放在maxj中*/
flag=1;
/*先假设是鞍点,以flag为1代表*/
for(k=0;
if(max>
a[k][maxj])/*将最大数和其同列元素相比*/
{flag=0;
/*如果max不是同列最小,表示不是鞍点令flag1为0*/
continue;
if(flag)/*如果flag1为1表示是鞍点*/
a[%d][%d]=%d\n"
i,maxj,max);
/*输出鞍点的值和所在行列号*/
if(!
flag)/*如果flag为0表示鞍点不存在*/
Itisnotexist!
9、有15个数按由大到小顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。
如果该数不在数组中,则输出“无此数”。
#defineN15
{inti,number,top,bott,mid,loca,a[N],flag=1,sign;
charc;
a[0]);
i=1;
while(i<
N)
{scanf("
if(a[i]>
=a[i-1])
i++;
enterthisdataagain:
while(flag)
inputnumbertolookfor:
sign=0;
top=0;
//top是查找区间的起始位置
bott=N-1;
//bott是查找区间的最末位置
if((number<
a[0])||(number>
a[N-1]))//要查的数不在查找区间内
loca=-1;
//表示找不到
while((!
sign)&
(top<
=bott))
{mid=(bott+top)/2;
if(number==a[mid])
{loca=mid;
Hasfound%d,itspositionis%d\n"
number,loca+1);
sign=1;
elseif(number<
a[mid])
bott=mid-1;
top=mid+1;
sign||loca==-1)
cannotfind%d.\n"
number);
;
continuornot(Y/N)?
%c"
c);
if(c=='
N'
||c=='
n'
)
flag=0;
10、有一篇文章,共有3行文字,每行有80个字符。
要求分别统计出其中英文大写字母、小写字母、数字、空格以及其他字符的个数。
{inti,j,upp,low,dig,spa,oth;
chartext[3][80];
upp=low=dig=spa=oth=0;
{printf("
pleaseinputline%d:
i+1);
gets(text[i]);
for(j=0;
80&
text[i][j]!
=0;
{if(text[i][j]>
='
A'
text[i][j]<
Z'
upp++;
elseif(text[i][j]>
a'
z'
low++;
0'
9'
dig++;
elseif(text[i][j]=='
'
spa++;
else
oth++;
\nuppercase:
%d\n"
upp);
lowercase:
low);
digit:
dig);
space:
spa);
other:
oth);
11、输出以下图案:
*****
*****
{chara[5]={'
*'
'
};
inti,j,k;
charspace='
5;
"
%c"
space);
a[k]);
12、有一行电文,已按下面规律译成密码:
A→Za→z
B→Yb→y
C→Xc→x
..
即第1个字母变成第26个字母,第i个字母变成第(26-i+1)个字母,非字母字符不变。
要求编程序将密码译回原文,并输出密码和原文。
(1)
{intj,n;
charch[80],tran[80];
inputciphercode:
gets(ch);
\nciphercode:
%s"
ch);
j=0;
while(ch[j]!
\0'
{if((ch[j]>
)&
(ch[j]<
))
tran[j]=155-ch[j];
elseif((ch[j]>
tran[j]=219-ch[j];
tran[j]=ch[j];
j++;
n=j;
\noriginaltext:
putchar(tran[j]);
(2)
{intj,n;
charch[80];
\nciphercode:
%s\n"
ch[j]=155-ch[j];
ch[j]=219-ch[j];
ch[j]=ch[j];
originaltext:
putchar(ch[j]);
13、编一程序,将两个字符串连接起来,不要用strcat函数。
{chars1[80],s2[40];
inti=0,j=0;
inputstring1:
s1);
inputstring2:
s2);
while(s1[i]!
while(s2[j]!
s1[i++]=s2[j++];
s1[i]='
\nThenewstringis:
14、编一个程序,将两个字符串s1和s2比较,若s1>
s2,输出一个正数;
若s1=s2,输出0;
若s1<
s2,输出一个负数。
不要用strcpy函数。
两个字符串用gets函数读入。
输出的正数或负数的绝对值应是相比较的两个字符串相应的ASCII码的差值。
例如,“A”与“C”相比,由于“A”<
“C”,应输出负数,同时由于‘A’和‘C’的ASCII码差值为2,因此应输出“-2”。
同理:
“And”“Aid”比较,根据第2个字符比较结果,“n”比“i”大5,因此应输出“5”。
{inti,resu;
chars1[100],s2[100];
gets(s1);
\ninputstring2:
gets(s2);
i=0;
while((s1[i]==s2[i])&
(s1[i]!
))i++;
if(s1[i]=='
&
s2[i]=='
resu=0;
resu=s1[i]-s2[i];
\nresult:
%d.\n"
resu);
15、编写一个程序,将字符数组s2中的全部字符复制到字符数组s1中。
不用strcpy函数。
复制时,‘/0’后面的字符不复制。
#include<
string.h>
main()
inti;
charstr1[100],str2[100];
inputstring2:
str2);
=strlen(str2);
str1[i]=str2[i];
str1:
str1);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 第四 第六 答案 谭浩强