第5章集合与结构

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第5章集合与结构5.1选择题1.语句cout(1&2),(1&&2)endl;的输出结果是(B)。(A)0,0(B)0,1(C)1,0(C)1,12.语句cout(1|2),(1||2)endl;的输出结果是(D)。(A)0,0(B)1,1(C)2,0(D)3,13.有以下说明语句: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};4.已知有职工情况结构变量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;5.有以下说明语句:structStudent{intnum;doublescore;};Studentstu[3]={{1001,80},{1002,75},{1003,91}},p=stu;则下面引用形式错误的是(B)。(A)pnum(B)(p++).num(C)(p++)num(D)(p).num6.有以下说明语句:structWorker{intno;charname[20];};Workerw,p=&w;则下列错误的引用是(D)。(A)w.no(B)p-no(C)(p).no(D)p.no7.s1和s2是两个结构类型变量,若要使赋值s1=s2合法,则它们的说明应该是(C)。(A)s1只能接收相同类型的数据成员(B)结构中的成员相同(C)同一结构类型的变量(D)存储字节长度一样的变量5.2阅读下列程序,写出运行结果。1.#includeiostreamusingnamespacestd;structData{intn;doublescore;};intmain(){Dataa[3]={1001,87,1002,72,1003,90},p=a;cout(p++)-nendl;cout(p++)-nendl;coutp-n++endl;cout(p).n++endl;}【解答】10011002100310042.#includeiostreamusingnamespacestd;structEmployee{charname[20];charsex;};voidfun(Employeep){if((p).sex=='m')cout(p).nameendl;}intmain(){Employeeemp[5]={Liming,'m',Wangxiaoping,'f',Luwei,'m'};inti;for(i=0;i3;i++)fun(emp+i);}【解答】LimingLuwei3.#includeiostreamusingnamespacestd;structNode{chars;Nodeq;};intmain(){Nodea[]={{Mary,a+1},{Jack,a+2},{Jim,a}};Nodep=a;coutp-sendl;coutp-q-sendl;coutp-q-q-sendl;coutp-q-q-q-sendl;}【解答】MaryJackJimMary5.3思考题1.判断一个整数n的奇偶性,可以利用位运算判断吗?请你试一试。【解答】可以。一个整数当最低位为1时,它是奇数,否则为偶数。以下函数返回对参数k的奇偶判断。boolodd(intk){return1&k;}2.长度为N的数组可以表示N个元素的集合,若有:S[i]==1,表示对应元素在集合中如何实现集合的基本运算?请你试一试。并从内存和处理要求上与5.2.2节中集合的实现方法进行比较。【解答】长度为N的数组S可以表示有N个元素的集合。当S[i]==1,表示元素i+1在集合中;当S[i]==0,表示元素i+1不在集合中。集合运算通过对数组元素操作完成。用数组实现集合运算的空间和时间消耗高于用无符号整数和位运算实现集合运算。用数组实现集合运算程序如下。#includeiostreamusingnamespacestd;voidsetPut(unsigned*S);//输入集合S的元素voidsetDisplay(constunsigned*S);//输出集合S中的全部元素boolputX(unsigned*S,unsignedx);//元素x并入集合voidCom(unsigned*C,constunsigned*A,constunsigned*B);//求并集C=A∪BvoidsetInt(unsigned*C,constunsignedA,constunsignedB);//求交集C=A∩BvoidsetDif(constunsignedA,constunsignedB);//求差集C=A-BboolInc(constunsigned*A,constunsigned*B);//判蕴含boolIn(constunsigned*S,constunsignedx);//判属于x∈SboolNull(constunsigned*S);//判空集constintN=32;//输入集合元素voidsetPut(unsigned*S){unsignedx;cinx;while(x0&&x=N){putX(S,x);//把输入元素并入集合Scinx;}}//输出集合S中的全部元素voidsetDisplay(constunsigned*S){cout{;if(Null(S))cout}\n;else{for(inti=0;iN;i++)//输出元素{if(S[i])couti+1,;}cout\b\b}\n;//擦除最后的逗号}return;}//元素x并入集合SboolputX(unsigned*S,unsignedx){if(x0&&x=N){S[x-1]=1;returntrue;}returnfalse;}//求并集C=A∪BvoidCom(unsigned*C,constunsigned*A,constunsigned*B){for(inti=0;iN;i++)C[i]=int(A[i]||B[i]);}//求交集C=A∩BvoidsetInt(unsigned*C,constunsigned*A,constunsigned*B){for(inti=0;iN;i++)C[i]=int(A[i]&&B[i]);}//求差集C=A-BvoidsetDif(unsigned*C,constunsigned*A,constunsigned*B){for(inti=0;iN;i++)C[i]=int(A[i]&&!(A[1]&&B[i]));}//判蕴含,A蕴含于B时返回trueboolInc(constunsigned*A,constunsigned*B){for(inti=0;iN;i++){if(A[i]&&!B[i])returnfalse;}returntrue;}//判属于,x∈S时返回trueboolIn(constunsigned*S,constunsignedx){returnS[x-1];}//判空集,S为空集时返回trueboolNull(constunsigned*S){for(inti=0;iN;i++){if(S[i])returnfalse;}returntrue;}intmain(){unsignedA[N]={0},B[N]={0},C[N]={0};unsignedx;coutInputtheelementsofsetA,1-N,untilinput0:\n;setPut(A);coutInputtheelementsofsetB,1-N,untilinput0:\n;setPut(B);coutA=;setDisplay(A);coutB=;setDisplay(B);coutInputx:;cinx;coutPutxinA=;putX(A,x);setDisplay(A);coutC=A+B=;Com(C,A,B);setDisplay(C);coutC=A*B=;setInt(C,A,B);setDisplay(C);coutC=A-B=;setDif(C,A,B);setDisplay(C);if(Inc(A,B))coutA=Bistrue\n;elsecoutnotA=B\n;coutInputx:;cinx;if(In(A,x))coutxinA\n;elsecoutxnotinA\n;}3.分析以下说明结构的语句:structNode{intdata;Nodeerror;//错误Nodeok;//正确};error和ok分别属于什么数据类型?有什么存储要求?error出错的原因是什么?【解答】error是Node结构类型数据成员,错误。原因是结构定义的数据成员若为本身的结构类型,是一种无穷递归。ok是指向Node类型的指针,定义正确,占4字节。4.本章例5-8中用辅助数组对结构数组进行关键字排序,有定义:personindex[100];index数组存放结构数组元素的地址。如果把index定义改为:intindex[100];用于存放结构数组元素的下标,可以实现对结构数组的索引排序吗?如何修改程序?请你试一试。【解答】可以。关键是通过整型索引数组元素作为下标访问结构数组。表示为:all[pi[i]].nameall[pi[i]].idall[pi[i]].salary有关程序如下:#includeiostreamusingnamespacestd;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;i100;i++)//索引数组元素值初始化为结构数组元素下标index[i]=i;cout输入职工人数:;cintotal;cout输入职工信息:\n;Input(allone,total);cout以工资做关键字排序\n;Sort(allone,index,total);cout输出排序后信息:\n;Output(allone,index,total);}voidInput(personall[],constintn){inti;for(i=0;in;i++)//输入数据{couti:姓名:;cinall[i].name;cout编号:;cinall[i].id;cout工资:;cinall[i].salary;}}voidSort(personall[],intpi[],constintn){inti,

1 / 19
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功