C语言程序设计第四版第六章答案谭浩强.docx

上传人:b****6 文档编号:7422536 上传时间:2023-05-11 格式:DOCX 页数:15 大小:38.26KB
下载 相关 举报
C语言程序设计第四版第六章答案谭浩强.docx_第1页
第1页 / 共15页
C语言程序设计第四版第六章答案谭浩强.docx_第2页
第2页 / 共15页
C语言程序设计第四版第六章答案谭浩强.docx_第3页
第3页 / 共15页
C语言程序设计第四版第六章答案谭浩强.docx_第4页
第4页 / 共15页
C语言程序设计第四版第六章答案谭浩强.docx_第5页
第5页 / 共15页
C语言程序设计第四版第六章答案谭浩强.docx_第6页
第6页 / 共15页
C语言程序设计第四版第六章答案谭浩强.docx_第7页
第7页 / 共15页
C语言程序设计第四版第六章答案谭浩强.docx_第8页
第8页 / 共15页
C语言程序设计第四版第六章答案谭浩强.docx_第9页
第9页 / 共15页
C语言程序设计第四版第六章答案谭浩强.docx_第10页
第10页 / 共15页
C语言程序设计第四版第六章答案谭浩强.docx_第11页
第11页 / 共15页
C语言程序设计第四版第六章答案谭浩强.docx_第12页
第12页 / 共15页
C语言程序设计第四版第六章答案谭浩强.docx_第13页
第13页 / 共15页
C语言程序设计第四版第六章答案谭浩强.docx_第14页
第14页 / 共15页
C语言程序设计第四版第六章答案谭浩强.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

C语言程序设计第四版第六章答案谭浩强.docx

《C语言程序设计第四版第六章答案谭浩强.docx》由会员分享,可在线阅读,更多相关《C语言程序设计第四版第六章答案谭浩强.docx(15页珍藏版)》请在冰点文库上搜索。

C语言程序设计第四版第六章答案谭浩强.docx

C语言程序设计第四版第六章答案谭浩强

C语言程序设计第四版第六章答案-谭浩强

1、用筛选法求100之内的素数。

解:

#include

#include

intmain()

{inti,j,n,a[101];

for(i=1;i<=100;i++)

a[i]=i;

a[1]=0;

for(i=2;i

for(j=i+1;j<=100;j++)

{if(a[i]!

=0&&a[j]!

=0)

if(a[j]%a[i]==0)

a[j]=0;

}

printf("\n");

for(i=2,n=0;i<=100;i++)

{if(a[i]!

=0)

{printf("%5d",a[i]);

n++;

}

if(n==10)

{printf("\n");

n=0;

}

}

printf("\n");

return0;

}

 

2、用选择法对10整数排序。

解:

#include

intmain()

{inti,j,min,temp,a[11];

printf("enterdata:

\n");

for(i=1;i<=10;i++)

return0;

}

 

3、有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中。

解:

#include

intmain()

{inta[11]={1,4,6,9,13,16,19,28,40,100};

inttemp1,temp2,number,end,i,j;

printf("arraya:

\n");

for(i=0;i<10;i++)

printf("%5d",a[i]);

printf("\n");

printf("insertdata:

");

scanf("%d",&number);

end=a[9];

if(number>end)

a[10]=number;

else

{for(i=0;i<10;i++)

{if(a[i]>number)

{temp1=a[i];

a[i]=number;

for(j=i+1;j<11;j++)

{temp2=a[j];

a[j]=temp1;

temp1=temp2;

}

break;

}

}

}

printf("Nowarraya:

\n");

for(i=0;i<11;i++)

printf("%5d",a[i]);

printf("\n");

return0;

}

 

4、将一个数组中的值按逆序重新存放。

例如,原来顺序为8、6、5、4、1。

要求改为1、4、5、6、8。

解:

#include"stdio.h"

#defineN5

voidmain()

{inta[N],i,temp;

printf("enterarrya:

\n");

for(i=0;i

scanf("%d",&a[i]);

printf("arrya:

\n");

for(i=0;i

printf("%4d",a[i]);

for(i=0;i

{temp=a[i];

a[i]=a[N-i-1];

a[N-i-1]=temp;

}

printf("\nNow,arrya:

\n");

for(i=0;i

printf("%4d",a[i]);

printf("\n");

}

 

5、输出以下的杨辉三角形(要求输出10行)。

1

11

121

1331

14641

15101051

解:

#include"stdio.h"

voidmain()

{inti,j,n=0,a[31][31]={0};

while(n<1||n>30)/*最多可输出30行*/

{printf("请输入杨辉三角形的行数:

");

scanf("%d",&n);

}

for(i=0;i

a[i][0]=1;/*第一列全置为一*/

for(i=1;i

for(j=1;j<=i;j++)

a[i][j]=a[i-1][j-1]+a[i-1][j];/*每个数是上面两数之和*/

for(i=0;i

{for(j=0;j<=i;j++)

printf("%5d",a[i][j]);

printf("\n");

}

}

 

6、输出“魔方阵”。

所谓魔方阵是指这样的方阵,它的每一行、每一列和对角线之和均相等。

例如,三阶魔方阵为

816

357

492

解:

#include

intmain()

{inta[15][15],i,j,k,p,n;

p=1;

while(p==1)

{printf("entern(n=1--15):

");

scanf("%d",&n);

if((n!

=0)&&(n<=15)&&(n%2!

=0))

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((i<1)&&(j>n))

{i=i+2;

j=j-1;

}

else

{if(i<1)i=n;

if(j>n)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");

}

return0;

}

7、找出一个二维数组中的鞍点,即该位置上的元素在该行上最大、在该列上最小。

也可能没有鞍点。

解:

#include

#defineN4

#defineM5/*数组为4行5列*/

intmain()

{

inti,j,k,a[N][M],max,maxj,flag;

printf("pleaseinputmatrix:

\n");

for(i=0;i

for(j=0;j

scanf("%d",&a[i][j]);

for(i=0;i

{max=a[i][0];/*开始时假设a[i][0]最大*/

maxj=0;/*将列号0赋给maxj保存*/

for(j=0;j

if(a[i][j]>max)

{max=a[i][j];/*将本行的最大数存放在max中*/

maxj=j;/*将最大数所在的列号存放在maxj中*/

}

flag=1;/*先假设是鞍点,以flag为1代表*/

for(k=0;k

if(max>a[k][maxj])/*将最大数和其同列元素相比*/

{flag=0;/*如果max不是同列最小,表示不是鞍点令flag1为0*/

continue;}

if(flag)/*如果flag1为1表示是鞍点*/

{printf("a[%d][%d]=%d\n",i,maxj,max);/*输出鞍点的值和所在行列号*/

break;

}

}

if(!

flag)/*如果flag为0表示鞍点不存在*/

printf("Itisnotexist!

\n");

return0;

}

 

8、有15个数按由大到小顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。

如果该数不在数组中,则输出“无此数”。

解:

#include

#defineN15

intmain()

{inti,number,top,bott,mid,loca,a[N],flag=1,sign;

charc;

printf("enterdata:

\n");

scanf("%d",&a[0]);

i=1;

while(i

{scanf("%d",&a[i]);

if(a[i]>=a[i-1])

i++;

else

printf("enterthisdataagain:

\n");

}

printf("\n");

for(i=0;i

printf("%5d",a[i]);

printf("\n");

while(flag)

{printf("inputnumbertolookfor:

");

scanf("%d",&number);

sign=0;

top=0;//top是查找区间的起始位置

bott=N-1;//bott是查找区间的最末位置

if((numbera[N-1]))//要查的数不在查找区间内

loca=-1;//表示找不到

while((!

sign)&&(top<=bott))

{mid=(bott+top)/2;

if(number==a[mid])

{loca=mid;

printf("Hasfound%d,itspositionis%d\n",number,loca+1);

sign=1;

}

elseif(number

bott=mid-1;

else

top=mid+1;

}

if(!

sign||loca==-1)

printf("cannotfind%d.\n",number);;

printf("continuornot(Y/N)?

");

scanf("%c",&c);

if(c=='N'||c=='n')

flag=0;

}

return0;

}

 

9、有一篇文章,共有3行文字,每行有80个字符。

要求分别统计出其中英文大写字母、小写字母、数字、空格以及其他字符的个数。

解:

#include"stdio.h"

voidmain()

{inti,j,upp,low,dig,spa,oth;

chartext[3][80];

upp=low=dig=spa=oth=0;

for(i=0;i<3;i++)

{printf("pleaseinputline%d:

\n",i+1);

gets(text[i]);

for(j=0;j<80&&text[i][j]!

=0;j++)

{if(text[i][j]>='A'&&text[i][j]<='Z')

upp++;

elseif(text[i][j]>='a'&&text[i][j]<='z')

low++;

elseif(text[i][j]>='0'&&text[i][j]<='9')

dig++;

elseif(text[i][j]=='')

spa++;

else

oth++;

}

}

printf("\nuppercase:

%d\n",upp);

printf("lowercase:

%d\n",low);

printf("digit:

%d\n",dig);

printf("space:

%d\n",spa);

printf("other:

%d\n",oth);

}

 

10、输出以下图案:

*****

*****

*****

*****

*****

解:

#include

intmain()

{chara[5]={'*','*','*','*','*'};

inti,j,k;

charspace='';

for(i=0;i<5;i++)

{printf("\n");

printf("");

for(j=1;j<=i;j++)

printf("%c",space);

for(k=0;k<5;k++)

printf("%c",a[k]);

}

printf("\n");

return0;

}

 

11、有一行电文,已按下面规律译成密码:

A→Za→z

B→Yb→y

C→Xc→x

..

..

..

即第1个字母变成第26个字母,第i个字母变成第(26-i+1)个字母,非字母字符不变。

要求编程序将密码译回原文,并输出密码和原文。

解:

(1)

#include

intmain()

{intj,n;

charch[80],tran[80];

printf("inputciphercode:

");

gets(ch);

printf("\nciphercode:

%s",ch);

j=0;

while(ch[j]!

='\0')

{if((ch[j]>='A')&&(ch[j]<='Z'))

tran[j]=155-ch[j];

elseif((ch[j]>='a')&&(ch[j]<='z'))

tran[j]=219-ch[j];

else

tran[j]=ch[j];

j++;

}

n=j;

printf("\noriginaltext:

");

for(j=0;j

putchar(tran[j]);

printf("\n");

return0;

}

(2)

#include

intmain()

{intj,n;

charch[80];

printf("inputciphercode:

\n");

gets(ch);

printf("\nciphercode:

%s\n",ch);

j=0;

while(ch[j]!

='\0')

{if((ch[j]>='A')&&(ch[j]<='Z'))

ch[j]=155-ch[j];

elseif((ch[j]>='a')&&(ch[j]<='z'))

ch[j]=219-ch[j];

else

ch[j]=ch[j];

j++;

}

n=j;

printf("originaltext:

");

for(j=0;j

putchar(ch[j]);

printf("\n");

return0;

}

 

12、编一程序,将两个字符串连接起来,不要用strcat函数。

解:

#include

intmain()

{chars1[80],s2[40];

inti=0,j=0;

printf("inputstring1:

");

scanf("%s",s1);

printf("inputstring2:

");

scanf("%s",s2);

while(s1[i]!

='\0')

i++;

while(s2[j]!

='\0')

s1[i++]=s2[j++];

s1[i]='\0';

printf("\nThenewstringis:

%s\n",s1);

return0;

}

 

13、编一个程序,将两个字符串s1和s2比较,若s1>s2,输出一个正数;若s1=s2,输出0;若s1

不要用strcpy函数。

两个字符串用gets函数读入。

输出的正数或负数的绝对值应是相比较的两个字符串相应的ASCII码的差值。

例如,“A”与“C”相比,由于“A”<“C”,应输出负数,同时由于‘A’和‘C’的ASCII码差值为2,因此应输出“-2”。

同理:

“And”“Aid”比较,根据第2个字符比较结果,“n”比“i”大5,因此应输出“5”。

解:

#include

intmain()

{inti,resu;

chars1[100],s2[100];

printf("inputstring1:

");

gets(s1);

printf("\ninputstring2:

");

gets(s2);

i=0;

while((s1[i]==s2[i])&&(s1[i]!

='\0'))i++;

if(s1[i]=='\0'&&s2[i]=='\0')

resu=0;

else

resu=s1[i]-s2[i];

printf("\nresult:

%d.\n",resu);

return0;

}

 

14、编写一个程序,将字符数组s2中的全部字符复制到字符数组s1中。

不用strcpy函数。

复制时,‘/0’后面的字符不复制。

解:

#include

#include

main()

{

inti;

charstr1[100],str2[100];

printf("inputstring2:

");

scanf("%s",str2);

for(i=0;i<=strlen(str2);i++)

str1[i]=str2[i];

printf("str1:

%s\n",str1);

}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2