第10章 结构与链表.docx
《第10章 结构与链表.docx》由会员分享,可在线阅读,更多相关《第10章 结构与链表.docx(10页珍藏版)》请在冰豆网上搜索。
第10章结构与链表
一.选择题
1.C语言结构体类型变量在程序执行期间()
A)所有成员一直驻留在内存中B)只有一个成员驻留在内存中
C)部分成员驻留在内存中D)没有成员驻留在内存中
2.当说明一个结构体变量时系统分配给它的内存是()
A)各成员所需内存量的总和
B)结构中第一个成员所需内存量
C)成员中占内存量最大者所需的容量
D)结构中最后一个成员所需内存量
3.以下对结构体类型变量的定义中,不正确的是()
A)typedefstructaaB)#defineAAstructaa
{intn;AA{intn;
floatm;floatm;
}AA;}td1;
AAtd1;
C)structD)struct
{intn;{intn;
floatm;floatm;
}aa;}td1;
stuctaatd1;
4.设有以下说明语句
structstu
{inta;
floatb;
}stutype;
则下面的叙述不正确的是()
A)struct是结构体类型的关键字
B)structstu是用户定义的结构体类型
C)stutype是用户定义的结构体类型名
D)a和b都是结构体成员名
5.以下选项中不能正确把cl定义成结构体变量的是()
A)typedefstructB)structcolorcl
{intred;{intred;
intgreen;intgreen;
intblue;intblue;
}COLOR;};
COLORcl;
C)structcolorD)struct
{intred;{intred;
intgreen;intgreen;
intblue;intblue;
}cl;}cl;
6.若有如下定义
structdata
{inti;
charch;
doublef;
}b;
则结构变量b占用内存的字节数是()
A)1B)2C)8D)11
7.以下关于共用体的叙述正确的是()
A)一个共用体变量中可同时存放所有成员的数据
B)一个共用体变量中不可同时存放所有成员的数据
C)可直接对共用体变量进行赋值操作
D)共用体不能嵌套定义
8.下列程序的输出结果是()
enumweek{sun=7,mon,tue,wed,thu,fri,sat}day=wed;
main()
{printf(“%d”,day);
}
A)2B)3C)7D)10
9.下面对typedef的叙述中不正确的是()
A)用typedef可以定义各种类型名,但不能用来定义变量
B)用typedef可以增加新类型
C)用typedef只是将已存在的类型用一个新的标识符来代表
D)使用typedef有利于程序的通用和移植
10.以下程序的运行结果是()
#include"stdio.h"
main()
{structdate
{intyear,month,day;
}today;
printf("%d\n",sizeof(structdate));
}
A)6B)8C)10D)12
11.设有以下说明,则下面不正确的叙述是()
uniondata
{inti;
charc;
floatf;
}a;
A.a所占的内存长度等于成员f的长度
B.a的地址和它的各成员地址都是同一地址
C.a可以作为函数参数
D.不能对a赋值,也不可以在定义a时对它初始化
12.已知学生记录描述为
structstudent
{intno;
charname[20];
charsex;
struct
{intyear;
intmonth;
intday;
}birth;
};
structstudents;
设变量s中的“生日”应是“1984年11月11日”,下列对“生日”的正确赋值方式是()
A)year=1984;month=11;day=11;
B)birth.year=1984;birth.month=11;birth.day=11;
C)s.year=1984;s.month=11;s.day=11;
D)s.birth.year=1984;s.birth.month=11;s.birth.day=11;
13.变量a所占内存字节数是()
unionU
{charst[4];
inti;
longl;
};
structA
{intc;
unionUu;
}a;
A)4B)5C)6D)8
14.有以下结构体说明和变量的定义,指针p指向变量a,指针q指向变量b。
则不能把结点b连接到结点a之后的语句是()
structnode
{chardata;
structnode*next;
}a,b,*p=&a,*q=&b;
A)a.next=q;B)p.next=&b;
C)p->next=&b;D)(*p).next=q;
15.下列程序的输出结果是()
structabc
{inta,b,c;};
main()
{structabcs[2]={{1,2,3},{4,5,6}};intt;
t=s[0].a+s[1].b;
printf("%d\n",t);
}
A)5B)6C)7D)8
16.设有如下定义:
strucksk
{inta;
floatb;
}data;
int*p;
若要使P指向data中的a域,正确的赋值语句是()
A)p=&a;B)p=data.a;C)p=&data.a;D)*p=data.a;
17.根据下面的定义,能打印出字母M的语句是()
structperson{charname[9];
intage;
};
structpersonclass[10]={"John",17,
"Paul",19,
"Mary",18,
"adam",16
};
A)printf("%c\n",class[3].name);
B)printf("%c\n",class[3].name[1]);
C)printf("%c\n",class[2].name[1]);
D)printf("%c\n",class[2].name[0]);
18.有以下程序
#include“stdio.h”
structNODE
{intnum;structNODE*next;};
main()
{structNODE*p,*Q,*R;
p=(structNODE*)malloc(sizeof(structNODE));
q=(structNODE*)malloc(sizeof(structNODE));
r=(structNODE*)malloc(sizeof(structNODE));
p->num=10;q->num=20;r->num=30;
p->next=q;q->next=r;
printf(“%d\n”,p->num+q->next->num);
}
程序运行后的输出结果是()
A)10B)20C)30D)40
19.设有如下定义
structss
{charname[10];
intage;
charsex;
}std[3],*p=std;
下面各输入语句中错误的是()
A)scanf("%d",&(*p).age);B)scanf("%s",&std.name);
C)scanf("%c",&std[0].sex)D)scanf("%c",&(p->sex));
20.有以下程序
main()
{union{unsignedintn;
unsignedcharc;
}u1;
ul.c='A';
printf("%c\n",u1.n);
}
执行后输出结果是()
A)产生语法错B)随机值C)AD)65
21.设有如下说明
typedefstruct
{intn;charc;doublex;}STD;
则以下选项中,能正确定义结构体数组并赋初值的语句是()
A)STDtt[2]={{1,'A',62},{2,'B',75}};
B)STDtt[2]={1,"A",62},{2,"B",75}};
C)structtt[2]={{1,'A'},{2,'B'}};
D)structtt[2]={{1,"A",62.5},{2,"B",75.0}};
22.有以下结构体说明和变量定义,如图所示,指针p、q、r分别指向一个链表中的三个连续结点。
structnode
{intdata;
structnode*next;
}*p,*q,*r;
_______________________________
|datanextdatanextdatanext|
|→□□→□□→□□→|
| ↑p↑q↑r|
|_______________________________|
现要将q和r所指结点的先后位置交换,同时要保持链表的连续,以下错误的程序段是()
A)r->next=q;q->next=r->next;p->next=r;
B)q->next=r->next;p->next=r;r->next=q;
C)p->next=r;q->next=r->next;r->next=q;
D)q->next=r->next;r->next=q;p->next=r;
23.有以下程序
structs
{intx,y;}data[2]={10,100,20,200};
main()
{structs*p=data;
printf("%d\n",++(p->x));
}
程序运行后的输出结果是()
A)10B)11C)20D)21
24.若以下定义:
structlink
{intdata;
structlink*next;
}a,b,c,*p,*q;
且变量a和b之间已有如下图所示的链表结构:
ab
datanextdatanext
┌──┬──┐┌──┬──┐
│5│-+─→│9│\0│
└──┴──┘└──┴──┘
↑p
c
datanext
┌──┬──┐
│7││
└──┴──┘
↑q
指针p指向变量a,q指向变量c。
则能够把c插入到a和b之间并形成新的链表的语句组是:
()
A)a.next=c;c.next=b;B)p.next=q;q.next=p.next;
C)p->next=&c;q->next=p->next;D)(*p).next=q;(*q).next=&b;
25.以下程序的输出是()
structst
{intx;int*y;}*p;
intdt[4]={10,20,30,40};
structstaa[4]={50,&dt[0],60,&dt[0],60,&dt[0],60,&dt[0],};
main()
{p=aa;
printf("%d\n",++(p->x));
}
A)10B)11C)51D)60
26.设有以下说明语句
structex
{intx;floaty;charz;}example;
则下面的叙述中不正确的是()
A)struct结构体类型的关键字B)example是结构体类型名
C)x,y,z都是结构体成员名D)structex是结构体类型
27.设有以下说明语句
typedefstruct
{intn;
charch[8];
}PER;
则下面叙述中正确的是()
A)PER是结构体变量名B)PER是结构体类型名
C)typedefstruct是结构体类型D)struct是结构体类型名
28.若有下面的说明和定义:
structtest
{intml;charm2;floatm3;
unionuu{charul[5];intu2[2];}ua;
}myaa;
则sizeof(structtest)的值是()
A)12B)16C)14D)9
29.以下程序的输出结果是()
unionmyun
{struct
{intx,y,z;}u;
intk;
}a;
main()
{a.u.x=4;a.u.y=5;a.u.z=6;
a.k=0;
printf(“%d\n",a.u.x);
}
A)4B)5C)6D)0
30.以下程序的输出结果是()
structHAR
{intx,y;structHAR*p;}h[2];
main()
{h[0].x=1;h[0].y=2;
h[1].x=3;h[1].y=4;
h[0].p=&h[1];h[1].p=h;
printf("%d%d\n",(h[0].p)->x,(h[1].p)->y);
}
A)12B)23C)14D)32
二.填空题
1.已有定义如下:
structnode
{intdata;
structnode*next;
}*p;
以下语句调用malloc函数,使指针p指向一个具有structnode类型的动态存储空间。
请填空。
p=(structnode*)malloc();
2.设有以下结构类型说明和变量定义,则变量a在内存所占字节数是()。
Structstud
{charnum[6];
ints[4];
doubleave;
}a,*p;
3.以下程序段用于构成一个简单的单向链表,请填空。
structSTRU
{intx,y;
floatrate;
()p;
}a,b;
a.x=0;a.y=0;a.rate=0;a.p=&b;
b.x=0;b.y=0;b.rate=0;b.p=NULL;
4.写出下面程序运行的结果()
structs
{intx,*y;}*p;
intdata[]={10,20,30,40,50};
structs
array[5]={100,&data[0],200,&data[1],300,&data[2],400,&data[3],
500,&data[4]};
main()
{p=array;
printf("%d\t",++p->x);
printf("%d\t",(++p)->x);
printf("%d\t",++(*p->y));
printf("%d\t",*p->y);
}
5.以下程序用来输出结构体变量ex所占存储单元的字节数,请填空。
structst
{charname[20];doublescore;};
main()
{structstex;
printf("exsize:
%d\n",sizeof());
}
6.下面程序的运行结果是:
()。
typedefunionstudent
{charname[10];
longsno;
charsex;
floatscore[4];
}STU;
main()
{STUa[5];
printf(“%d\n”,sizeof(a));
}
7.以下定义的结构体类型拟包含两个成员,其中成员变量info用来存入整形数据;成员变量link是指向自身结构体的指针.请将定义补充完整。
structnode
{intinfo;
()link;
}
8.下面程序的运行结果是:
()
unionun{inta;charc;}a;
main()
{a.a=256;a.c=’b’;
printf(“%d”,a.a);
}
9.#include"stdio.h"
#defineM10
structmode
{floatdata;
structmode*next;
}
main()
{structmode*base,*p;
inti,n=0;
floatr=0,a[M];
printf("Pleaseinput10numbers:
\n");
for(i=0;i{scanf("%f",&a[i]);r+=a[i];}
r/=M;
for(i=0;iif(a[i]>r)
{n++;a[n]=a[i];}
base=NULL;
for(i=n;i>0;i--)
{p=(structmode*)malloc(sizeof(structmode));
p->data=a[i];
p->next=base;
base=p;
}
printf("average=%6.2f\n",r);
do{printf("%6.2f",p->data);
p=p->next;
}
while(p!
='\0');
}
执行程序时输入:
12.523.609.81088.25.119.26.82.8
执行程序时输出:
()
()