14 结构体与共用体及用户定义类型.docx
- 文档编号:24683553
- 上传时间:2023-05-31
- 格式:DOCX
- 页数:37
- 大小:26.18KB
14 结构体与共用体及用户定义类型.docx
《14 结构体与共用体及用户定义类型.docx》由会员分享,可在线阅读,更多相关《14 结构体与共用体及用户定义类型.docx(37页珍藏版)》请在冰豆网上搜索。
14结构体与共用体及用户定义类型
第十四部分:
结构体与共用体及用户定义类型
一、选择题:
(1)有以下程序段
typedefstructNODE
{int num; structNODE *next;
}OLD;
以下叙述中正确的是
A)以上的说明形式非法
B)NODE是一个结构体类型
C)OLD是一个结构体类型
D)OLD是一个结构体变量
(2)有以下程序
#include
structSTU
{int num;
float TotalScore; };
voidf(structSTU p) p.num=s[1].num; p.TotalScore=s[1].TotalScore;
}
main() f(s[0]);
printf("%d %3.0f\n",s[0].num,s[0].TotalScore);
}
程序运行后的输出结果是
A)20045537
B)20044550
C)20042580
D)20041703
(3)有以下程序
#include
structSTU
{char name[10];
int num;};
voidf(char *name, int num)
{structSTU s[2]={{"SunDan",20044},{"Penghua",20045}};
num=s[0].num;
strcpy(name,s[0].name);
}
main()
{structSTU s[2]={{"YangSan",20041},{"LiSiGuo",20042}},*p;
p=&s[1]; f(p->name,p->num);
printf("%s %d\n",p->name,p->num);
}
程序运行后的输出结果是
A)SunDan 20042
B)SunDan 20044
C)LiSiGuo 20042
D)YangSan 20041
(4)有以下程序
structSTU
{char name[10]; int num; float TotalScore; };
voidf(structSTU *p)
*q=s;
++p; ++q; *p=*q;
}
main() f(s);
printf("%s %d %3.0f\n",s[1].name,s[1].num,s[1].TotalScore);
}
程序运行后的输出结果是
A)SunDan 20044 550
B)Penghua 20045 537
C)LiSiGuo 20042 580
D)SunDan 20041703
(5)若有以下说明和定义
union dt
{
int a; char b; double c;
}data;
以下叙述中错误的是
A)data的每个成员起始地址都相同
B)变量data所占内存字节数与成员c所占字节数相等
C)程序段:
data.a=5;printf("%f\n",data.c);输出结果为5.000000
D)data可以作为函数的实参
(6)设有如下说明
typedef struct ST
{
longa;
int b;
char c[2];
}NEW;
则下面叙述中正确的是
A)以上的说明形式非法
B)ST是一个结构体类型
C)NEW是一个结构体类型
D)NEW是一个结构体变量
(7)有以下结构体说明和变量定义,如图所示,指针pqr分别指向此链表中三个连续结点。
struct node
{
intdata;
structnode *next;
}*p,*q,*r;
现要将q所指结点从链表中删除,同时保持链表的连续,以下不能完成指定操作的语句是
A)p->next=q->next;
B)p->next=p->next->next;
C)p->next=r;
D)p=q->next;
(8)以下对结构体类型变量td的定义中,错误的是
A)typedef struct aa
{
int n;
float m;
}AA;
AA td;
B)struct aa
{
int n;
float m;
} td;
struct aatd;
C)struct
{
int n;
float m;
}aa;
struct aatd;
D)struct
{
int n;
float m;
}td;
(9)有以下说明和定义语句
structstudent
{intage;charnum[8];};
structstudentstu[3]={{20,"200401"},{21,"200402"},{10\9,"200403"}};
structstudent*p=stu;
以下选项中引用结构体变量成员的表达式错误的是
A)(p++)->num
B)p->num
C)(*p).num
D)stu[3].age
10~12.以下程序的功能是:
建立一个带有头结点的单向链表,并将存储在数组中的字符依次转储到链表的各个结点中,请从与下划线处号码对应的一组选若中选择出正确的选项。
#include
stuctnode
{chardata;structnode*next;};
(10) CreatList(char*s)
{structnode*h,*p,*q);
h=(structnode*)malloc(sizeof(structnode));
p=q=h;
while(*s!
='\0')
{ p=(structnode*)malloc(sizeof(structnode));
p->data= (11) ;
q->next=p;
q= (12) ;
s++;
}
p->next='\0';
returnh;
}
main()
{charstr[]="linklist";
structnode*head;
head=CreatList(str);
...
}
(10)A)char* B)structnode C)structnode* D)char
(11)A)*s B)s C)*s++ D)(*s)++
(12)A)p->next B)p C)sD)s->next
(13)设有以下语句
typedefstruct S
{ intg; char h;} T;
则下面叙述中正确的是
A)可用S定义结构体变量 B)可以用T定义结构体变量
C)S是struct类型的变量 D)T是struct S类型的变量
(14)有以下程序
strucSTU
{ charname[10];
intnum;
};
voidf1(structSTUC)
{ structSTU b={“LiSiGuo”,2042};
c=b;
}
voidf2(structSTU*C)
{ structSTU b={“SunDan”,2044};
*c=b;
}
main()
{ struct STU a={“YangSan”,2041},b={“WangYin”,2043};
f1(A);f2(&B);
printf(“%d%d\n”,a.num,b.num);
}
执行后的输出结果是
A)20412044
B)20412043
C)2042 2044
D)2042 2043
(15)有以下程序
structSTU
{ charname[10];
intnum;
intScore;
}; inti,j;
for(i=0;i<5;i++) p[i]=&s[i];
for(i=0;i<4;i++)
for(j=i+1;j<5;j++)
if(p[i]->Score>p[j]->Score)
{t=p[i];p[i]=p[j];p[j]=t;}
printf(“5d %d\n”,s[1].Score,p[1]->Score);
}
执行后输出结果是
A)550 550
B)680 680
C)580 550
D)580 680
(16)有以下程序
#include
structNODE{
intnum;
structNODE*next;
};
main()
{ structNODE*p,*q,*r;
intsum=0;
p=(structNODE*)malloc(sizeof(structNODE));
q=(structNODE*)malloc(sizeof(structNODE));
r=(structNODE*)malloc(sizeof(structNODE));
p->num=1;q->num=2;r->num=3;
p->next=q;q->next=r;r->next=NULL;
sum+=q->next->num;sum+=p->num;
printf(“%d\n”,sum);
}
执行后的输出结果是
A)3
B)4
C)5
D)6
(17)以下选项中不能正确把c1定义成结构体变量的是
A)typedef struct B)struct color cl
{int red; {int red;
int green; int green;
int blue; int blue;
}COLOR; };
COLOR cl;
C)struct color D)struct
{int red; {int red;
int green; int green;
int blue; int blue;
}cl; }cl;
(18)有以下程序
struct s
main()
{ struct s *p=data;
printf("%d\n",++(p->x));
}
程序运行后的输出结果是
A)10
B)11
C)20
D)21
(19)有以下结构体说明和变量定义,如图所示,指针p、q、r分别指向一个链表中的三个连续结点。
struct node
{int data
struct node *next;
}*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;
(20)设有如下说明
typedefstruct
{ int n; char c; double x;}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}};
(21)有以下程序
main()
{ union { unsignedint n;
unsignedchar c;
}u1;
ul.c=`A`;
printf("%c\n",u1.n);
}
执行后输出结果是
A)产生语法错
B)随机值
C)A
D)65
(22)若要说明一个类型名STP,使得定义语句STPs等价于char *s,以下选项中正确的是
A)typedef STP char *s;
B)typedef *char STP;
C)typedef stp *char;
D)typedef char* STP;
(23)设有如下定义
struct ss
{ char name[10];
int age;
char sex;
}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));
(24)有以下程序
structSTU
{charnum[10]; floatscore[3];};
main()
inti; floatsum=0;
for(i=0;i<3,i++)
sum=sum+p->score[i];
printf(“%6.2f\n”,sum);
}
程序运行后的输出结果是
A)260.00
B)270.00
C)280.00
D)285.00
(25)设有如下定义:
strucksk
{ inta;
floatb;
}data;
int*p;
若要使P指向data中的a域,正确的赋值语句是
A)p=&a;
B)p=data.a;
C)p=&data.a;
D)*p=data.a;
(26)有以下程序
#include
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)10
B)20
C)30
D)40
(27)若有以下说明和定义
typedefint*INTEGER;
INTEGERp,*q;
以下叙述正确的是
A)P是int型变量
B)p是基类型为int的指针变量
C)q是基类型为int的指针变量
D)程序中可用INTEGER代替int类型名
(28)若有下面的说明和定义:
structtest
{ int ml;char m2; float m3;
unionuu{charul[5];int u2[2];}ua;
} myaa;
则sizeof(structtest)的值是
A)12
B)16
C)14
D)9
(29)若以下定义:
struct link
{ int data;
struck link *next;
}a,b,c,*p,*q;
且变量a和b之间已有如下图所示的链表结构:
a b
data next data next
┌──┬──┐ ┌──┬──┐
│5 │ ┼──→│9 │\0│
└──┴──┘ └──┴──┘
↑p
c
data next
┌──┬──┐
│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;
(30)设有以下说明语句
typedef struct
{ int n;
char ch[8];
}PER;
则下面叙述中正确的是
A)PER是结构体变量名 B)PER是结构体类型名
C)typedef struct是结构体类型 D)struct是结构体类型名
(31)以下各选项企图说明一种新的类型名,其中正确的是
A)typedef v1 int; B)typedef v2=int;
C)typedefv1 int v3; D)typedef v4:
int;
(32)以下程序的输出结果是
structHAR
{ int x,y;struct HAR *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],p=h;
printf(“%d%d\n”,(h[0],p)->x,(h[1],p)->y);
}
A)12 B)23 C)14 D)32
(33)以下程序的输出结果是
unionmyun
{ struct
{ int x,y,z;}u;
int k;
}a;
main()
{ a.u.x=4;a.u.y=5;a.u.z=6;
a.k=0;
printf(%d\n”,a.u.x);
}
A)4 B)5 C)6 D)0
(34)设有以下说明语句
struct ex
{ int x; float y; char z;} example;
则下面的叙述中不正确的是
A)struct结构体类型的关键字 B)example是结构体类型名
C)x,y,z都是结构体成员名 D)struct ex是结构体类型
(35)以下程序的输出是
A)10 B)11 C)51 D)60
struct st
{ int x; int *y;} *p;
struct st aa[4]={50,&dt[0],60,&dt[0],60,&dt[0],60,&dt[0],};
main()
{ p=aa;
printf(“%d\n”,++(p->x));
}
(36)假定建立了以下链表结构,指针p、q分别指向如图所示的结点,则以下可以将q所指结点从链表中删除并释放该结点的语句组是
A)free(q); p->next=q->next;
B)(*p).next=(*q).next; free(q);
C)q=(*q).next; (*p).next=q; free(q);
D)q=q->next; p->next=q; p=p->next;free(p);
(37)有如下定义
structperson{char name[9];intage;};
strictperson class[10]={“Johu”, 17,
“Paul”, 19
“Mary”, 18,
“Adam 16,};
根据上述定义,能输出字母M的语句是
A)prinft(“%c\n”,class[3].mane);
B)pfintf(“%c\n”,class[3].name[1]);
C)prinft(“%c\n”,class[2].name[1]);
D)printf(“%^c\n”,class[2].name[0]);
(38)以下对结构体类型变量的定义中,不正确的是
A)typedefstructaa B)#defineAA structaa
{ int n; AA{intn;
floatm; floatm;
}AA; }td1;
AAtd1;
C)struct
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 14 结构体与共用体及用户定义类型 结构 共用 用户 定义 类型