第11章 结构体.docx
《第11章 结构体.docx》由会员分享,可在线阅读,更多相关《第11章 结构体.docx(21页珍藏版)》请在冰豆网上搜索。
![第11章 结构体.docx](https://file1.bdocx.com/fileroot1/2022-12/16/3deb869d-78e7-4962-b1ec-912b420b8e05/3deb869d-78e7-4962-b1ec-912b420b8e051.gif)
第11章结构体
单项选择题
1101.当说明一个结构体变量时系统分配给它的内存是( )。
A.各成员所需内存量的总和
B.结构中第一个成员所需内存量
C.成员中占内存量最大者所需的容量
D.结构中最后一个成员所需内存量
1002.设有以下说明语句
structuu
{intn;
charch[8];
}PER;
则下面叙述中正确的是( )。
A.uu是结构体标识名
B.PER是结构体标识名
C.structuu是结构体标识名
D.struct是结构体标识名
1003.已知有如下定义:
structa{charx;doubley;}data,*t;
若有t=&data,则对data中的成员的正确引用是( )。
A.(*t).x
B.(*t).data.x
C.t->data.x
D.t.data.x
1004.设有如下定义:
structsk
{inta;
floatb;
}data;
int*p;
若要使P指向data中的b域,正确的赋值语句是( )。
A.p=&data.b;
B.p=&b;
C.p=data.b;
D.*p=data.b;
1005.已知学生记录描述为:
structstudent
{intno;
charname[20],sex;
struct
{intyear,month,day;
}birth;
};
structstudents;
设变量s中的“生日”是“1984年11月12日”,对“birth”正确赋值的程序段是( )。
A.s.birth.year=1984;s.birth.month=11;s.birth.day=12;
B.birth.year=1984;birth.month=11;birth.day=12;
C.s.year=1984;s.month=11;s.day=12;
D.year=1984;month=11;day=12;
1006.有如下定义
structperson{charname[9];intage;};
structpersonclass[10]={"John",17,"paul",19,"Mary",18,"Adam",16,};
根据上述定义,能输出字母M的语句是( )。
A.printf("%c\n",class[3].name[1]);
B.printf("%c\n",class[3].name);
C.printf("%c\n",class[2].name[1]);
D.printf("%c\n",class[2].name[0]);
1007.若程序中有以下的说明和定义:
structabc
{intx;chary;}
structabcs1,s2;
则会发生的情况是( )。
A.编译出错
B.程序将顺序编译、连接、执行
C.能顺序通过编译、连接、但不能执行
D.能顺序通过编译、但连接出错
1008.有以下程序段
structst
{intx;int*y;}*pt;
inta[]={1,2};b[]={3,4};
structstc[2]={10,a,20,b};
pt=c;
以下选项中表达式的值为11的是( )。
A.++pt->x
B.*pt->y
C.pt->x
D.(pt++)->x
1009.有以下说明和定义语句
structstudent
{intage;charnum[8];};
structstudentstu[3]={{20,"200401"},{21,"200402"},{19,"200403"}};
structstudent*p=stu;
以下选项中引用结构体变量成员的表达式错误的是( )。
A.stu[3].age
B.(p++)->num
C.p->num
D.(*p).num
1010.在VC++6.0下,定义以下结构体类型
structs
{
inta;
charb;
floatf;
};
则语句printf("%d",sizeof(structs))的输出结果为( )。
A.9
B.8
C.7
D.6
1011.在VC++6.0下,定义以下结构体类型
structs
{intx;
floatf;
}a[3];
语句printf("%d",sizeof(a))的输出结果为( )。
A.24
B.20
C.16
D.12
1012.定义以下结构体数组
structc
{intx;
inty;
}s[2]={1,3,2,7};
语句printf("%d",s[0].x*s[1].x)的输出结果为( )。
A.2
B.3
C.4
D.5
1013.在VC++6.0下,定义以下结构体类型
structstudent
{
charname[10];
intscore[50];
floataverage;
}stud1;
则stud1占用内存的字节数是( )。
A.214
B.210
C.206
D.202
1014.如果有下面的定义和赋值,
structSNode
{
unsignedid;
intdata;
}n,*p;
p=&n;
则使用( )不可以输出n中data的值。
A.p.data
B.n.data
C.p->data
D.(*p).data
1015.根据下面的定义,能输出Mary语句的是( )。
structperson
{
charname[9];
intage;
};
structpersonclass[5]={"John",17,"Paul",19,"Mary",18,"Adam",16};
A.printf("%s\n",class[2].name);
B.printf("%s\n",class[1].name);
C.printf("%s\n",class[0].name);
D.printf("%s\n",class[3].name);
1016.定义以下结构体数组
structdate
{intyear;
intmonth;
intday;};
structs
{structdatebirthday;
charname[20];
}x[4]={{2008,10,1,"guangzhou"},{2009,12,25,"Tianjin"}};
语句printf("%s,%d",x[0].name,x[1].birthday.year);的输出结果为( )。
A.guangzhou,2009
B.guangzhou,2008
C.Tianjin,2008
D.Tianjin,2009
1017.定义以下结构体数组
struct
{
intnum;
charname[10];
}x[3]={1,"china",2,"USA",3,"England"};
语句printf("\n%d,%s",x[1].num,x[2].name)的输出结果为( )。
A.2,England
B.2,USA
C.3,England
D.1,china
1018.定义以下结构体数组
structdate
{
intyear;
intmonth;
};
structs
{
structdatebirth;
charname[20];
}x[4]={{2008,8,"hangzhou"},{2009,3,"Tianjin"}};
语句printf("%c,%d",x[1].name[1],x[1].birth.year);的输出结果为( )。
A.i,2009
B.a,2008
C.hangzhou,2008
D.Tianjin,2009
1019.根据下面的定义,能打印出字母M的语句是( )。
structperson{charname[9];intage;};
structpersonclass[10]={"John",17,"Paul",19,"Mary",18,"Adam",16};
A.printf("%c\n",class[2].name[0]);
B.printf("%c\n",class[2].name[1]);
C.printf("%c\n",class[3].name[1]);
D.printf("%c\n",class[3].name);
1020.设有以下语句:
structst{intn;structst*next;};
staticstructsta[3]={5,&a[1],7,&a[2],9,'\0'},*p;
p=&a[0];
则表达式( )的值是6。
A.++p->n
B.(*p).n++
C.p->n++
D.p++->n
1021.设有如下定义:
structsk
{inta;floatb;}data,*p;
若有p=&data;,则对data中的a域的正确引用是( )。
A.(*p).a
B.(*p).data.a
C.p->data.a
D.p.data.a
1022.在VC++6.0下,变量a在内存所占字节数是( )。
Structstud
{charnum[6];
ints[4];
doubleave;
}a;
A.30
B.26
C.32
D.34
1023.在VC++6.0下,变量a所占的内存字节数是( )。
structstu
{
charname[20];
longintn;
intscore[4];
}
A.40
B.28
C.30
D.36
1024.设有以下定义语句,输出结果是( )。
structdate
{
intcat;
charnext[10];
doubledog;
}too;
printf(”%d”,sizeof(too));
A. 22
B. 20
C. 24
D.26
1025.设有变量定义
structstu
{
intage;
intnum;
}std,*p=&std;
能正确引用结构体变量std中成员age的表达式是( )。
A. (*p).age
B. *p.age
C. *std->age
D.std->age
1026.根据下面的定义,能打印出字符串"Mary"的语句是( )。
structperson{charname[9];intage;};
structpersonclass[10]={"John",17,"Paul",19,"Mary",18,"Adam",16};
A.printf("%s\n",class[2].name);
B.printf("%s\n",class[2].name[0]);
C.printf("%s\n",class[3].name[0]);
D.printf("%s\n",class[3].name);
1027.设有变量定义
structstu
{
intage;
intnum;
}std,*p=&std;
不能正确引用结构体变量std中成员age的表达式是( )。
A. *p.age
B. (*p).age
C. p->age
D.std.age
1028.设有以下语句:
structst{intn;structst*next;};
staticstructsta[3]={5,&a[1],7,&a[2],9,'\0'},*p;
p=&a[0];
则表达式( )的值是6。
A.p->n+1
B.(*p).n++
C.p->n++
D.p++->n
1029.定义以下结构体数组
structdate
{
intyear;
intmonth;
};
structs
{
structdatebirth;
charname[20];
}x[4]={{2008,8,"hangzhou"},{2009,3,"Tianjin"}};
语句printf("%s,%d",x[1].name,x[1].birth.year);的输出结果为( )。
A.Tianjin,2009
B.a,2008
C.hangzhou,2008
D.i,2009
1030.根据下面的定义,能输出字符M的语句是( )。
structperson
{
charname[9];
intage;
};
structpersonclass[5]={"John",17,"Paul",19,"Mary",18,"Adam",16};
A.printf("%c\n",class[2].name[0]);
B.printf("%c\n",class[1].name);
C.printf("%s\n",class[0].name[0]);
D.printf("%s\n",class[3].name);
1031.如果有下面的定义和赋值,
structSNode
{
unsignedid;
intdata;
}n,*p;
p=&n;
则使用( )可以输出n中data的值。
A.(*p).data
B.n->data
C.*p.data
D.p.data
1032.已知有如下定义:
structa{charx;doubley;}data,*t;
若有t=&data,则对data中的成员的不正确引用是( )。
A.(*t)->x
B.(*t).x
C.t->x
D.data.x
1033.有以下定义:
structperson{charname[9];intage;};
structpersonclass[10]={"Johu",17,"Paul",19,"Mary",18,"Adam",16};
则下面能够输出字母M的语句是( )。
A.printf("%c\n",class[2].name[0]);
B.printf("%c\n",class[3].name);
C.printf("%s\n",class[0].name[0]);
D.printf("%s\n",class[3].name);
1034.有以下程序:
#include
main()
{
structcmplx{intx;inty;}cunu[2]={1,3,2,7};
printf(“%d\n”,cunu[0].y/cunu[0].x*cunu[1].y);
}
程序的运行结果是( )。
A.21
B.6
C.7/3
D.0
1035.设有如下定义:
structsk
{inta;
floatb;
}data;
下面选项中正确定义指针变量,并指向data变量的( )。
A.structsk*p;p=&data;
B.structskp;p=&data;
C.structsk*p;p=data;
D.structsk*p;p=data;
1036.设有如下定义:
structsk
{inta;
floatb;
}data;
下面选项中正确定义指针变量,并指向data变量a成员的( )。
A.int*p;p=&data.a;
B.int*p;p=data.a;
C.intp;p=&data.a;
D.intp;p=data.a;
1037.设有以下说明语句
structuu
{intn;
charch[8];
}PER;
则下面叙述中正确的是( )。
A.PER是结构体变量名
B.PER是结构体标识名
C.structuu是结构体变量名
D.struct是结构体标识名
1038.对于下面程序段的分析,以下四个选项中正确的是( )。
structabc
{inta,b,c,s;};
main()
{structabcs[2]={{1,2,3},{4,5,6}};intt;
t=s[0].a+s[1].b;
printf("%d\n",t);
}
A. 数组s占32个字节的存储空间
B. 数组s占36个字节的存储空间
C. t的值为2
D.t的值为8
1039.设有如下程序定义:
main()
{structcmplx{intx;inty;}cnum[2]={1,3,2,7};
printf("%d\n",cnum[0].y/cnum[0].x*cnum[1].x);}
则以下说法正确的是( )。
A. 数组cnum有2个元素
B. 数组cnum有4个元素
C. 数组cnum有6个元素
D.编译错误
读程序题
1040.以下程序的运行结果是
#include"stdio.h"
main()
{structdate
{intyear,month,day;}today;
printf("%d\n",sizeof(structdate));
}
输出结果:
6
1041.以下程序的输出是
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));
}
输出结果:
51
1042.下列程序的输出结果是
structabc
{inta,b,c,s;};
main()
{structabcs[2]={{1,2,3},{4,5,6}};intt;
t=s[0].a+s[1].b;
printf("%d\n",t);
}
输出结果:
6
1043.运行下列程序段,输出结果是
structcountry
{intnum;
charname[10];
}x[5]={1,"China",2,"USA",3,"France",4,"England",5,"Spanish"};
structcountry*p;
p=x+2;
printf("%d,%c",p->num,(*p).name[2]);
输出结果:
3,a
1044.下面程序的运行结果是
structKeyWord
{
charKey[20];
intID;
}kw[]={"void",1,"char",2,"int",3,"float",4,"double",5};
main()
{
printf("%c,%d\n",kw[3].Key[0],kw[3].ID);
}
输出结果:
i,3
1045.运行下列程序段,输出结果是
structcountry
{intnum;
charname[20];
}x[5]={1,"China",2,"USA",3,"France",4,"England",5,"Spanish"};
structcountry*p;
p=x+2;
printf("%d,%s",p->num,x[0].name);
输出结果:
3,China
1046.下面程序的运行结果是
structcontry
{
intnum;
charname[20];
}x[5]={1,"China",2,"USA",3,"France",4,"Englan",5,"Spanish"};
main()
{
inti;
for(i=3;i<5;i++)
printf("%d%c",x[i].num,x[i].name[0]);
}
输出结果:
4E5S
1047.下面程序的运行结果是
main()
{structcmplx{intx;inty;}cnum[2]={1,3,2,7};
printf("%d\n",cnum[0].y/cnum[0].x*cnum[1].x);}
输出结果:
6
1048.下面程序的运行结果是
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}
输出结果:
6
1049.下面程序的运行结果是
struct HAR
{ int x,y;
struct HAR *p; } h[2];
main()
{ int 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);
}
输出结果:
32
1050.下面程序的运行结果是
struct HAR
{ int x,y;
struct HAR *p; } h[2];
main()
{ int 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\n",(*h[0].p).x*(h[1].p)->y);
}
输出结果:
6