第06章习题解答.docx
- 文档编号:25696495
- 上传时间:2023-06-11
- 格式:DOCX
- 页数:27
- 大小:29.78KB
第06章习题解答.docx
《第06章习题解答.docx》由会员分享,可在线阅读,更多相关《第06章习题解答.docx(27页珍藏版)》请在冰豆网上搜索。
第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<
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 06 习题 解答