第06章习题解答.docx

上传人:b****9 文档编号:25696495 上传时间:2023-06-11 格式:DOCX 页数:27 大小:29.78KB
下载 相关 举报
第06章习题解答.docx_第1页
第1页 / 共27页
第06章习题解答.docx_第2页
第2页 / 共27页
第06章习题解答.docx_第3页
第3页 / 共27页
第06章习题解答.docx_第4页
第4页 / 共27页
第06章习题解答.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

第06章习题解答.docx

《第06章习题解答.docx》由会员分享,可在线阅读,更多相关《第06章习题解答.docx(27页珍藏版)》请在冰豆网上搜索。

第06章习题解答.docx

第06章习题解答

6.7习题

6.7.1概念题

1.试写出下列程序段中各数组的元素个数和元素的下标范围。

#defineQWE36

constintRTY=50;

inta1[QWE+8];

doublea2[QWE+RTY];

chara3[‘a’];

答:

数组a1有44个元素,元素下标范围为0~43。

数组a2有86个元素,元素下标范围为0~85。

数组a3有97个元素,元素下标范围为0~96。

2.试问下列程序段中,数组a1、a2、a3的声明有没有错?

若有,错在何处,为何错?

(1)intn;

cin>>n;

doublea1[n];

(2)#definePI3.14

inta2[PI*5];

doublea3[int(PI*5)]

答:

(1)a1[n]错!

元素个数不能等运行时确定。

应该事先就确定好。

(2)a2[PI*5]错!

元素个数不可以是非整数类型。

(3)a3[int(PI*5)]没有错。

(PI*5)被强迫类型转换为int型,故没错。

3.试问下列程序的输出结果如何?

#include

usingnamespacestd;

intmain()

{

inta[6]={0,2,4,6};

for(inti=0;i<6;i++)

cout<

cout<

return0;

}

答:

程序运行结果为:

024600

4.试问下列程序的输出结果如何?

#include

usingnamespacestd;

intmain()

{

char*c[3]={"Practice","makes","perfect"};

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

cout<

cout<

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

cout<<*c[i]<<'\t';

cout<

return0;

}

答:

程序运行结果为:

Practicemakesperfect

Pmp

5.一维数组名是指向何变量的指针?

一维数组名按何目标走步?

答:

一维数组名是指向首元素的指针。

所指目标是元素,故按元素走步。

6.若已声明一个数组:

doubled[20];

则一维数组名d指向何变量?

d+3又指向何变量?

*(d+18)是表示什么意思?

答:

数组名d指向首元素d[0];d+3指向元素d[3];d+18指向元素d[18]。

*(d+18)是表示指针(d+18)所指存间的内容,简称(d+18)所指。

因(d+18)指向元素d[18],故其所指*(d+18)实际就是所指元素d[18]。

*(d+18)

d[18]

7.下列程序输出结果是怎样的?

#include

usingnamespacestd;

intmain()

{

charc[]={'q','a','z','w','s','x'};

*(c+3)='f';

*(c+5)='v';

for(inti=0;i<6;i++)

cout<<*(c+i)<<'\t';

cout<

return0;

}

答:

程序运行结果为:

qazfsv

8.看图6.4,试问下面的式子各表示元素的什么(是元素值还是元素地址?

是哪个元素?

(1)*(b[1]+2)

(2)*(b+2)+4(3)*(b+1)(4)**(b+2)(5)b[1](6)(*b)[3]

答:

看6.4图,可获解答如下。

(1)*(b[1]+2)是指针(b[1]+2)所指,是元素b[1][2]。

(2)*(b+2)+4是b[2]+4,是元素b[2][4]的地址。

(3)*(b+1)是(b+1)所指,是b[1],是元素b[1][0]的地址。

(4)**(b+2)是(b+2)的二级所指,是元素b[2][0]。

(5)b[1]是元素b[1][0]的地址。

(6)(*b)[3]是b[0][3]元素。

9.要表示数组首元素b[0][0]的地址,除了可用&b[0][0]表示外,从图6.4看,还可以有哪些表示法?

答:

首元素地址除可表示为&b[0][0]外,还可以表示为b[0]或*b。

10.如果将例6-24程序中A和B两行语句改为如下

(1)或

(2)中的语句行不行?

(1)chars1[20];s1="Youareaboy.";

(2)char*p1="Youareaboy.";

答:

(1)s1="Youareaboy.";此句错!

因为数组名s1没有变量存间,不可对它赋值。

(2)char*p1="Youareaboy.";此句行!

指针变量p1有存间,将字符串首字符地址赋给了它。

11.如果将例6-24程序改为如下程序,行不行?

(勿上机免惹祸,请自己思考。

#include

usingnamespacestd;

intmain()

{

chars1[]="Youareaboy.";

char*p1=s1;

char*p2;

for(;*p2++=*p1++;);

cout<<"p2:

"<

return0;

}

答:

不行!

因为指针变量p2未给赋值,因而是一个随机值指针,不可对随机值指针所指的存间赋值。

12.请判断下列每个小题中语句有无错误。

错在何处?

(1)int*pi;

pi=newint[8](0,1,2,3,4,5,6,7);

(2)doublep;

p=newdouble;

deletep;

*p=8;

(3)double*pf,k;

pf=newdouble;

*pf=56.7;

pf=&k;

deletepf;pf=NULL;

答:

(1)不可对动配数组进行初始化,故第二句错。

(2)用以接受动配double型存间地址的p应该是double型指针,故首句错。

指针pdelete后就成为随机值指针,不可对其所指进行赋值,故末句错!

(3)pf=&k;语句使原指向动配double存间的pf转而指向了变量k,致使动配存间的地址丢失,从此以后想delete动配存间就没有门儿了。

这时pf所指向的存间不是动配存间,因此不可对它进行double,因此语句deletepf;也错了。

6.7.2程序设计题

1.输入一组整数到一维数组中,设计一程序,找出其中最大的偶数和最大的奇数,输出之。

若没有奇数时,输出“没有奇数!

”。

#include

usingnamespacestd;

intmain()

{

intt,n,i=0,a[10];

intjimax=0,oumax=0;

cout<<"请输入一组整数,超过十个数或输入0就结束。

"<

cin>>t;

while((t!

=0)&&(i<10)){

a[i]=t;

cin>>t;

i++;

}

n=i;

for(i=0;i

cout<

if(a[i]%2==0&&a[i]>oumax)oumax=a[i];

if(a[i]%2==1&&a[i]>jimax)jimax=a[i];

}

cout<

if(jimax)cout<<"最大奇数为:

"<

elsecout<<"无奇数。

"<

if(oumax)cout<<"最大偶数为:

"<

elsecout<<"无偶数。

"<

return0;

}

2.输入一组非0整数(以输入0作为结束标志)到一维数组中。

设计一程序,求出数组元素的平均值,并分别统计出这一数组中正数和负数的个数。

#include

usingnamespacestd;

intmain()

{

intt,n,i=0,a[10];

ints=0,pos=0,neg=0;

cout<<"请输入一组整数,超过十个数或输入0就结束。

"<

cin>>t;

while((t!

=0)&&(i<10)){

a[i]=t;

s+=t;

cin>>t;

i++;

}

n=i;

for(i=0;i

cout<

if(a[i]>0)pos++;

if(a[i]<0)neg++;

}

cout<

cout<<"数组元素的平均值为:

"<

cout<<"正数个数为:

"<

cout<<"负数个数为:

"<

return0;

}

3.设计一程序,对数组元素依次输入8个整数,然后按倒序输出之。

#include

usingnamespacestd;

intmain()

{

inti,a[8];

cout<<"请输入8个整数。

"<

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

cin>>a[i];

}

for(i=7;i>=0;i--)cout<

cout<

return0;

}

4.将小组8个同学的数学成绩输入一维数组,随输入随按降序插入排序。

最后输出小组同学的按降序排好的成绩。

#include

usingnamespacestd;

intmain()

{

inta[8],n=1,t,k;

cout<<"请输入8个同学的分数。

"<

cin>>a[0];

while(n<8){

cin>>t;

for(inti=0;(a[i]>t)&&(i

k=i;

for(i=n;i>k;i--)a[i]=a[i-1];

a[k]=t;

n++;

}

for(inti=0;i

cout<

cout<

return0;

}

5.已声明一个一维字符数组,并用四位八进制字符初始化如下:

chara[4]={'2','4','6','5'};

试设计一程序,计算这四位八进制字符“2465”所表示的十进制数是多少,输出之。

#include

usingnamespacestd;

intmain()

{

chara[4]={'2','4','6','5'};

inti,k,s=0;

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

k=a[i]-48;

s=s*8+k;

}

cout<<"八进制2465所表示的十进制数是:

"<

return0;

}

6.设有一个数列,它的头四项是0、0、2、5,以后每项分别是各自前四项之和,试编程求此数列的前20项。

用一维数组完成此操作。

#include

#include

usingnamespacestd;

intmain()

{

inta[20]={0,0,2,5};

for(inti=4;i<20;i++)

a[i]=a[i-1]+a[i-2]+a[i-3]+a[i-4];

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

cout<

if((i+1)%5==0)cout<

}

return0;

}

7.已知一数组的十个元素值为3、5、2、5、6、4、6、8、9、7。

试设计程序,用指针变量求出最小的元素值以及奇下标元素之和。

#include

usingnamespacestd;

intmain()

{

ints=0,a[10]={3,5,2,5,6,4,6,8,9,7},*p=a;

intmin=*p;

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

if(*(p+i)%2==1)s+=*(p+i);

if(*(p+i)

}

cout<<"奇下标元素和="<

cout<<"最小的元素值="<

return0;

}

8.输入10个数到一维数组中,按从大到小排序后输出。

分别用三个函数实现数据的输入、排序和输出。

#include

usingnamespacestd;

#defineN10

voidin(int*x){

cout<<"请输入"<

"<

for(inti=0;i

cin>>*x++;

}

voidpaxu(int*x){

for(inti=0;i

for(intj=i+1;j

if(*(x+j)>*(x+i)){

intt=*(x+i);

*(x+i)=*(x+j);

*(x+j)=t;

}

}

voidout(int*x)

{

for(inti=0;i

cout<<*(x+i)<<'';

cout<

}

intmain()

{

inta[N];

in(a);

paxu(a);

out(a);

return0;

}

9.已知矩阵如图6.13所示。

试设计程序,用下标表示法求该矩阵两对角线元素之和。

#include

usingnamespacestd;

intmain()

{

inta[4][4]={21,22,23,24,25,26,27,28,

29,30,31,32,33,34,35,36};

ints=0;

for(inti=0;i<4;i++)

s+=a[i][i]+a[i][3-i];

cout<<"矩阵两对角线元素之和="<

return0;

}

10.已知两个二维数组声明如下:

inta[][4]={51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66},b[4][4];

试将数组a的转置矩阵存入数组b。

输出数组b。

#include

usingnamespacestd;

intmain()

{

inta[][4]={51,52,53,54,

55,56,57,58,

59,60,61,62,

63,64,65,66};

intb[4][4];

for(inti=0;i<4;i++)

for(intj=0;j<4;j++)

b[j][i]=a[i][j];

cout<<"转置矩阵如下:

"<

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

for(intj=0;j<4;j++){

cout<

if((j+1)%4==0)cout<

}

return0;

}

11.设计一程序,声明一个二维数组doubleb[5][2]用来存放小组内5个同学的两门课程(数学和物理)的成绩。

要求依次输入每个同学的成绩,求出全组的平均成绩和每一门课程的平均成绩。

#include

usingnamespacestd;

intmain()

{

doubles=0,sm=0,sp=0,b[5][2];

cout<<"请依次输入5位同学的数学和物理成绩。

"<

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

for(intj=0;j<2;j++){

cin>>b[i][j];

s+=b[i][j];

}

sm+=b[i][0];

sp+=b[i][1];

}

cout<<"总的平均成绩="<

cout<<"数学平均成绩="<

cout<<"物理平均成绩="<

return0;

}

12.某小组有4个同学,考了三门课程。

他们的成绩如表6-5所示。

试设计程序,求每位同学的平均成绩,输出之。

(用数组名表示形式对元素进行访问)

表6-5同学考试成绩表

数学

物理

外语

98

82

88

76

77

86

69

73

78

83

92

70

#include

#include

usingnamespacestd;

intmain()

{

inta[4][4]={98,82,88,0,

76,77,86,0,

69,73,78,0,

83,92,70,0};

for(inti=0;i<4;i++)

for(intj=0;j<3;j++)*(*(a+i)+3)+=*(*(a+i)+j);

cout<<"同学们的平均成绩分别为:

";

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

cout<

cout<

return0;

}

13.设计一程序,用首元素指针表示法求图6.13所示矩阵两对角线元素之和。

#include

usingnamespacestd;

intmain()

{

inta[4][4]={21,22,23,24,

25,26,27,28,

29,30,31,32,

33,34,35,36};

int*p=(int*)(a),s=0;

for(inti=0;i<4;i++)

s+=*(p+4*i+i)+*(p+4*i+(3-i));

cout<<"矩阵对角元素和="<

return0;

}

14.试声明一个二维数组,按图6.14所示矩阵初始化。

用一个指向一维数组的指针变量,输出该二维数组各元素。

#include

usingnamespacestd;

intmain()

{

inta[5][5]={1,2,3,4,5,

2,3,4,5,6,

3,4,5,6,7,

4,5,6,7,8,

5,6,7,8,9};

int(*p)[5]=a;

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

for(intj=0;j<5;j++){

cout<

if((j+1)%5==0)cout<

}

return0;

}

15.试设计一程序。

调用函数求二维数组全部元素的平均值。

函数用指向一维数组的指针变量作形参,实现元素平均值的计算。

设二维数组如图6.15所示。

#include

usingnamespacestd;

doubleave(int(*p)[5]){

ints=0;

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

for(intj=0;j<5;j++)

s+=p[i][j];

returns/15.0;

}

intmain()

{

inta[3][5]={1,2,3,4,5,

3,4,5,6,7,

5,6,7,8,9};

cout<<"数组元素平均值="<

return0;

}

16.声明一个二维数组:

intb[3][4];

采用数组名作实参,指向一维数组的指针变量作形参,调用函数实现输入各元素值,求平均值、最大元素值和最小元素值,并输出之。

#include

usingnamespacestd;

voidin(int(*p)[4],intn){

cout<<"请输入"<<4*n<<"个元素值。

"<

for(inti=0;i

for(intj=0;j<4;j++)

cin>>*(*(p+i)+j);

}

voidfun(int(*p)[4],intn,double&av,int&mx,int&mi){

mx=mi=**p;

av=0;

for(inti=0;i

for(intj=0;j<4;j++){

av+=*(*(p+i)+j);

if(*(*(p+i)+j)>mx)mx=*(*(p+i)+j);

if(*(*(p+i)+j)

}

av/=4.0*n;

}

voidout(doubleav,intmx,intmi){

cout<<"元素平均值="<

cout<<"最大元素值="<

cout<<"最小元素值="<

}

intmain()

{

doubleave;

intmax,min,n=3,b[3][4];

in(b,n);

fun(b,n,ave,max,min);

out(ave,max,min);

return0;

}

17.定义一个未初始化的二维数组,用编程的方法形成图6.16所示的矩阵(数据不准通过键盘输入),并按该矩阵形式输出之。

#include

usingnamespacestd;

intmain()

{

intb[5][5];

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

for(intj=0;j<5;j++){

if(j<=i)*(*(b+i)+j)=1;

else*(*(b+i)+j)=j+1-i;

cout<<*(*(b+i)+j)<<"";

if((j+1)%5==0)cout<

}

return0;

}

18.试设计程序,用cin输入一个无空格字符串。

然后按正序和反序输出该字符串。

例如输入“abcde”,正序输出得abcde,反序输出得edcba。

#include

usingnamespacestd;

intmain()

{

chara[50],*p=a;

cout<<"请输入一条无空格字符串。

"<

cin>>a;

cout<<"字符串正序输出为:

"<

展开阅读全文
相关搜索

当前位置:首页 > 工程科技

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1