习题5及其解答.docx
- 文档编号:26887707
- 上传时间:2023-06-23
- 格式:DOCX
- 页数:22
- 大小:20.46KB
习题5及其解答.docx
《习题5及其解答.docx》由会员分享,可在线阅读,更多相关《习题5及其解答.docx(22页珍藏版)》请在冰豆网上搜索。
习题5及其解答
习题5及其解答
5.1选择题
1.有说明
structpoint
{intx;inty;}p;
正确的赋值语句是(c)。
(a)point.x=1;point.y=2;(b)point={1,2};
(c)p.x=1;p.y=2;(d)p={1,2};
2.已知有职工情况结构变量emp定义为:
structDate
{intyear;
intmonth;
intday;
};
strnctEmployee
{charname[20];
longcode;
Datebirth
};
Employeeemp;
下列对emp的birth的正确赋值方法是(d)。
(a)year=1980;month=5;day=1;
(b)birth.year=1980;birth.month=5;birth.day=1;
(c)emp.year=1980;emp.month=5;emp.day=1;
(d)emp.birth.year=1980;emp.birth.month=5;emp.birth.day=1;
3.假定有以下说明语句,则下面引用形式错误的是(b)。
structStudent
{intnum;
doublescore;
};
Studentstu[3]={{1001,80},{1002,75},{1003,91}},*p=stu;
(a)p->num(b)(p++).num(c)(p++)->num(d)(*p).num
4.若有以下说明语句,则下列错误的引用是(d)。
structWorker
{intno;
charname[20];
};
Workerw,*p=&w;
(a)w.no(b)p->no(c)(*p).no(d)*p.no
5.s1和s2是两个结构类型变量,若要赋值s1=s2合法,则它们的说明应该是(c)。
(a)s1只能接受相同类型的数据成员(b)结构中的成员相同
(c)同一结构类型的变量(d)存储字节长度一样的变量
5.2阅读下列程序,写出执行结果。
1.
#include
usingnamespacestd;
structData
{intn;
doublescore;
};
intmain()
{Dataa[3]={1001,87,1002,72,1003,90},*p=a;
cout<<(p++)->n< cout<<(p++)->n< cout< cout<<(*p).n++< } 【解答】 1001 1002 1003 1004 2. #include usingnamespacestd; structEmployee {charname[20]; charsex; }; voidfun(Employee*p) {if((*p).sex=='m') cout<<(*p).name< } intmain() {Employeeemp[5]={"Liming",'m',"Wangxiaoping",'f',"Luwei",'m'}; inti; for(i=0;i<3;i++) fun(emp+i); } 【解答】 Liming Luwei 3. #include usingnamespacestd; structNode {char*s; Node*q; }; intmain() {Nodea[]={{"Mary",a+1},{"Jack",a+2},{"Jim",a}}; Node*p=a; cout< cout< cout< cout< } 【解答】 Mary Jack Jim Mary 5.3思考题 1.分析以下说明结构的语句 structNode {intdata; Nodeerror;//错误 Node*ok;//正确 }; error和ok分别属于什么数据类型? 有什么存储要求? error出错的原因是什么? 【解答】 error是Node结构类型数据成员,错误。 原因是结构定义的数据成员若为本身的结构类型,是一种无穷递归。 ok是指向Node类型的指针,定义正确,占4字节。 2.本章例5-5中用辅助数组对结构数组做关键字排序,有定义 person*index[100]; index数组存放结构数组元素的地址。 如果把index定义改为 intindex[100]; 用于存放结构数组元素的下标。 可以实现对结构数组的索引排序吗? 如何修改程序? 请你试一试。 【解答】 可以。 关键是通过整型索引数组元素作为下标访问结构数组。 表示为: all[pi[i]].nameall[pi[i]].idall[pi[i]].salary 有关程序如下: #include usingnamespacestd; structperson//说明结构类型 {charname[10]; unsignedintid; doublesalary; }; voidInput(person[],constint); voidSort(person[],int[],constint); voidOutput(constperson[],int[],constint); intmain() {personallone[100];//说明结构数组 intindex[100];//说明索引数组 inttotal; for(inti=0;i<100;i++)//索引数组元素值初始化为结构数组元素下标 index[i]=i; cout<<"输入职工人数: "; cin>>total; cout<<"输入职工信息: \n"; Input(allone,total); cout<<"以工资做关键字排序\n"; Sort(allone,index,total); cout<<"输出排序后信息: \n"; Output(allone,index,total); } voidInput(personall[],constintn) {inti; for(i=0;i {cout< 姓名: "; cin>>all[i].name; cout<<"编号: "; cin>>all[i].id; cout<<"工资: "; cin>>all[i].salary; } } voidSort(personall[],intpi[],constintn) {inti,j; intt;//交换用中间变量 for(i=1;i {for(j=0;j<=n-1-i;j++) if(all[pi[j]].salary>all[pi[j+1]].salary)//通过索引数组访问结构数组元素 {t=pi[j];//交换索引数组元素值 pi[j]=pi[j+1]; pi[j+1]=t; } } } voidOutput(constpersonall[],intpi[],constintn) {for(inti=0;i cout< } 3.有以下结构说明和遍历单向链表的函数。 函数内有错误吗? 是什么性质的错误? 请上机验证你的分析。 structNode {intdata;Node*next;}; voidShowList(Node*head) {while(head) {cout< head++; } } 【解答】 head++错误,原因是动态链表的结点存放不是连续顺序的内存空间,它们是逐个结点通过new建立的,所以不能用++做地址偏移运算。 应该用: head=head->next 5.4编程题 1.使用结构类型表示复数。 设计程序输入两个复数,可以选择进行复数的+、-、×或÷运算,并输出结果。 【解答】 #include #include usingnamespacestd; structcomplex {doublere,im; }; intmain() {complexa,b,c;charoper; cout<<"输入复数a的实部和虚部: "; cin>>a.re>>a.im; cout<<"输入复数b的实部和虚部: "; cin>>b.re>>b.im; cout<<"输入运算符: "; cin>>oper; switch(oper) {case'+': c.re=a.re+b.re;c.im=a.im+b.im;break; case'-': c.re=a.re-b.re;c.im=a.im-b.im;break; case'*': c.re=a.re*b.re-a.im*b.im; c.im=a.im*b.re+a.re*b.im;break; case'/': c.re=(a.re*b.re+a.im*b.im)/(b.re*b.re+b.im*b.im); c.im=(a.im*b.re-a.re*b.im)/(b.re*b.re+b.im*b.im); break; default: cout<<"inputerror! "< return0; } cout<<"c="< cout< : showpos);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 习题 及其 解答