结构体共用体.docx

上传人:b****5 文档编号:8513712 上传时间:2023-01-31 格式:DOCX 页数:18 大小:21.83KB
下载 相关 举报
结构体共用体.docx_第1页
第1页 / 共18页
结构体共用体.docx_第2页
第2页 / 共18页
结构体共用体.docx_第3页
第3页 / 共18页
结构体共用体.docx_第4页
第4页 / 共18页
结构体共用体.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

结构体共用体.docx

《结构体共用体.docx》由会员分享,可在线阅读,更多相关《结构体共用体.docx(18页珍藏版)》请在冰豆网上搜索。

结构体共用体.docx

结构体共用体

习题十一结构体和共用体

选择题

1.设有以下语句

typedefstructTT{charc;inta[4];}CIN;

则下面叙述中正确的是______。

A、可以用TT定义结构体变量B、TT是struct类型的变量

C、可以用CIN定义结构体变量D、CIN是structTT类型的变量

2.有以下结构体说明、变量定义和赋值语句

structSTD

{charname[10];intage;charsex;

}s[5],*ps;ps=&s[0];

则以下scanf函数调用语句中错误引用结构体变量成员的是______。

A、scanf("%s",s[0].name);B、scanf("%d",&s[0].age);

C、scanf("%c",&(ps->sex));D、scanf("%d",ps->age);

3.有以下程序

typedefstruct{intb,p;}A;

voidf(Ac)/*注意:

c是结构变量名*/

{intj;

c.b+=1;c.p+=2;}

main()

{inti;

Aa={1,2};

f(a);

printf("%d,%d\n",a.b,a.p);}

程序运行后的输出结果是______。

A、2,3B、2,4C、1,4D、1,2

4.若有以下定义和语句

uniondate

{inti;charc;floatf;}x;inty;

则以下语句正确的是______。

A、x=10.5;B、x.c=101;C、y=x;D、printf("%d\n",x);

5.有以下程序段

typedefstructNODE

{intnum;structNODE*next;}OLD;

以下叙述中正确的是______。

A、以上的说明形式非法B、NODE是一个结构体类型

C、OLD是一个结构体类型D、OLD是一个结构体变量

6.以下对结构体类型变量td的定义中,错误的是______。

A、typedefstructaaB、structaa

{intn;{intn;

floatm;floatm;

}AA;}td;

AAtd;structaatd;

C、structD、struct

{intn;{intn;

floatm;floatm;

}aa;}td;

structaatd;

7.有以下程序:

structSTU{charname[10];intnum;};

voidf1(structSTUc)

{structSTUb={"LiSiGuo",2042};c=b;}

voidf2(structSTU*c)

{structSTUb={"SunDan",2044};*c=b;}

main()

{structSTUa={"YangSan",2041},b={"WangYin",2043};

f1(a);

f2(&b);

printf(“%d%d”,a.num,b.num)

}

执行后输出结果是______。

A、20412044B、20412043C、20422044D、20422043

8.有以下程序:

#include

unionpw{inti;charch[2];}a;

main()

{a.ch[0]=13;a.ch[1]=0;

printf("%d\n",a.i);}

程序的输出结果是(注意:

ch[0]在低字节,ch[1]在高字节)______。

A、13B、14C、208D、209

10.有以下程序:

structs

{intx,y;}data[2]={10,100,20,200};

main()

{structs*p=data;

printf("%d\n",++(p->x));}

程序运行后的输出结果是______。

A、10B、11C、20D、21

11.有以下程序段

typedefstructnode{intdata;structnode*next;}*NODE;

NODEp;

以下叙述中正确的是______。

A、p是指向structnode结构变量的指针的指针B、NODEp;语句出错

C、p是指向structnode结构变量的指针D、p是structnode结构变量

12.有以下程序段

structst

{intx;int*y;}*pt;

inta[]={1,2},b[]={3,4};

structstc[2]={10,a,20,b};pt=c;

以下选项中表达式的值为11的是______。

A、*pt->yB、pt->xC、++pt->xD、(pt++)->x

13.有以下说明和定义语句

structstudent

{intage;charnum[8];};

structstudentstu[3]={{20,"200401"},{21,"200402"},{19,"200403"}};

structstudent*p=stu;

以下选项中引用结构体变量成员的表达式错误的是______。

A、(p++)->numB、p->numC、(*p).numD、stu[3].age

14.已知字符0的ASCII码为十六进制的30,下面程序

main()

{union{unsignedcharc;

unsignedinti[4];}z;

z.i[0]=0x39;z.i[1]=0x36;

printf("%c\n",z.c);}

A、6B、9C、0D、3

15.有以下程序

#include

#include

typedefstruct{charname[9];charsex;floatscore[2];}STU;

voidf(STUa)

{STUb={"Zhao",'m',85.0,90.0};inti;

strcpy(a.name,b.name);

a.sex=b.sex;

for(i=0;i<2;i++)a.score[i]=b.score[i];

}

main()

{STUc={"Qian",'f',95.0,92.0};

f(c);printf("%s,%c,%2.0f,%2.0f\n",c.name,c.sex,c.score[0],c.score[1]);

}

程序的运行结果是______。

A、Qian,f,95,92B、Qian,m,85,90C、Zhao,f,95,92D、Zhao,m,85,90

16.以下关于typedef的叙述错误的是______。

A、用typedef可以增加新类型

B、typedef只是将已存在的类型用一个新的名字来代表

C、用typedef可以为各种类型说明一个新名,但不能用来为变量说明一个新名

D、用typedef为类型说明一个新名,通常可以增加程序的可读性

17.以下结构体类型说明和变量定义中正确的是______。

A、typedefstruct

{intn;charc;}REC;

RECt1,t2;

B、structREC;

{intn;charc;};

RECt1,t2;

C、typedefstructREC;

{intn=0;charc='A';}t1,t2;

D、struct

{intn;charc;}REC;

RECt1,t2;

18.设有以下定义

uniondata

{intd1;floatd2;}demo;

则下面叙述中错误的是______。

A、变量demo与成员d2所占的内存字节数相同B、变量demo中各成员的地址相同

C、变量demo和各成员的地址相同D、若给demo.d1赋99后,demo.d2中的值是99.0

19.若程序中有以下的说明和定义:

structabc

{intx;chary;}//因为这里缺少分号

structabcs1,s2;

则会发生的情况是______。

A、编译时错B、程序将顺序编译、连接、执行

C、能顺序通过编译、连接、但不能执行D、能顺序通过编译、但连接出错

21.有以下程序

#include

structst

{intx,y;}data[2]={1,10,2,20};

main()

{structst*p=data;

printf("%d,",p->y);printf("%d\n",(++p)->x);

}

程序的运行结果是______。

A、10,1B、20,1C、10,2D、20,2

22.以下程序的输出结果是______。

main()

{union{chari[2];

intk;

}r;

r.i[0]=2;r.i[1]=0;

printf("%d\n",r.k);

}

A、2B、1C、0D、不确定

24.设有以下说明语句

structex

{intx;floaty;charz;}example;

则下面的叙述中不正确的是______。

A、struct是结构体类型的关键字B、example是结构体类型名

C、x,y,z都是结构体成员名D、structex是结构体类型

25.以下各选项企图说明一种新的类型名,其中正确的是______。

A、typedefv1int;B、typedefv2=int;C、typedefintv3;D、typedefv4:

int

26.以下程序的输出结果是______。

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

27.以下程序的输出结果是______。

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

28.设有以下说明语句

typedefstruct

{intn;

charch[8];

}PER;

则下面叙述中正确的是______。

A、PER是结构体变量名B、PER是结构体类型名

C、typedefstruct是结构体类型D、struct是结构体类型名

29.设有如下说明

typedefstruct

{intn;charc;doublex;}STD;

则以下选项中,能正确定义结构体数组并赋初值的语句是______。

A、STDtt[2]={{1,'A',62},{2,'B',75}};B、STDtt[2]={1,"A",62,2,"",75};

C、structtt[2]={{1,'A'},{2,'B'}};D、structtt[2]={{1,"A",62.5},{2,"B",75.0}};

30.设有如下定义:

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));

1.若有定义“structAA{inta;charb;doublec;}x;”,则x占用空间大小为____11或13____字节。

2.当定义一个结构体变量时,系统分配给该变量的内存大小等于各成员所需内存大小的__和_____。

3.C提供的预处理命令有宏定义命令,条件编译命令和___文件包含命令_________。

4.共用体变量所占用的内存空间是其各个成员所占内存空间_____的最大值_______。

5.调用系统函数时,要先使用#include命令包含该系统函数的原型语句所在的___头文件_______。

6.在#include命令中所包含的头文件,可以是系统定义的头文件,也可以是__用户______定义的头文件。

7.使用#include命令可以包含一个头文件,也可以包含一个__程序____文件。

8.在C程序中包含一个头文件或程序文件的预编译命令为____#include______。

9.程序中的预处理命令是指以__#____字符开头的命令。

10.设有如下宏定义

#defineMYSWAP(z,x,y){z=x;x=y;y=z;}

以下程序段通过宏调用实现变量a,b内容的交换,请填空。

floata=5,b=16,c;

MYSWAP(__c____,a,b);标准答案为:

c

11.共用体变量(能/不能)__不能___用做函数的参数,函数(能/不能)__不能____返回共用体变量。

12.以下程序的的输出结果是______。

#include

#defineM5

#defineNM+M

main()

{intk;

k=N*N*5;printf("%d\n",k);

}

标准答案为:

55

13.有以下定义和语句,则sizeof(a)的值是__10或_16___,而sizeof(a.share)的值是__4____。

structdate

{intday;

intmouth;

intyear;

union{intshare1;

floatshare2;

}share;

}a;

 

14.下面程序的运行结果是:

__80____。

typedefunionstudent

{charname[10];

longsno;

charsex;

floatscore[4];

}STU;

main()

{STUa[5];

printf("%d\n",sizeof(a));

}

15.引用结构体变量中成员的一般形式是____结构体变量名.成员名__。

指针、结构体

1.人员的记录由编号和出生年、月、日组成,N名人员的数据已在主函数中存入结构体数组std中,且编号唯一。

函数fun的功能是:

找出指定编号人员的数据,作为函数值返回,由主函数输出,若指定编号不存在,返回数据中的编号为空串。

#include

#include

#defineN8

typedefstruct

{charnum[10];

intyear,month,day;

}STU;

__STU____fun(STU*std,char*num)

{inti;STUa={"",9999,99,99};

for(i=0;i

if(strcmp(___std[i].num___,num)==0)

return(___std[i]___);

returna;

}

main()

{STUstd[N]={{"111111",1984,2,15},{"222222",1983,9,21},{"333333",1984,9,1},

{"444444",1983,7,15},{"555555",1984,9,28},{"666666",1983,11,15},

{"777777",1983,6,22},{"888888",1984,8,19}};

STUp;charn[10]="666666";

p=fun(std,n);

if(p.num[0]==0)

printf("\nNotfound!

\n");

else

{printf("\nSucceed!

\n");

printf("%s%d-%d-%d\n",p.num,p.year,p.month,p.day);

}

}

第1处内容为[STUfun(STU*std,char*num)]

第2处内容为[if(strcmp(std[i].num,num)==0)]

第3处内容为[return(std[i]);]

2.人员的记录由编号和出生年、月、日组成,N名人员的数据已在主函数中存入结构体数组std中。

函数fun的功能是:

找出指定出生年份的人员,将其数据放在形参k所指的数组中,由主函数输出,同时由函数值返回满足指定条件的人数。

#include

#defineN8

typedefstruct

{intnum;

intyear,month,day;

}STU;

intfun(STU*std,STU*k,intyear)

{inti,n=0;

for(i=0;i

if(___std[i].year___==year)

k[n++]=___std[i]___;

return(___n___);

}

main()

{STUstd[N]={{1,1984,2,15},{2,1983,9,21},{3,1984,9,1},{4,1983,7,15},

{5,1985,9,28},{6,1982,11,15},{7,1982,6,22},{8,1984,8,19}};

STUk[N];inti,n,year;

printf("Enterayear:

");scanf("%d",&year);

n=fun(std,k,year);

if(n==0)

printf("\nNopersonwasbornin%d\n",year);

else

{printf("\nThesepersonswerebornin%d\n",year);

for(i=0;i

printf("%d%d-%d-%d\n",k[i].num,k[i].year,k[i].month,k[i].day);

}

}

第1处内容为[if(std[i].year==year)]

第2处内容为[k[n++]=std[i];]

第3处内容为[return(n);]

3.给定程序通过定义并赋初值的方式,利用结构体变量存储了一名学生的学号、姓名和3门课的成绩。

函数fun的功能是将该学生的各科成绩都乘以一个系数a。

#include

typedefstruct

{intnum;

charname[9];

floatscore[3];

}STU;

voidshow(STUtt)

{inti;

printf("%d%s:

",tt.num,tt.name);

for(i=0;i<3;i++)

printf("%5.1f",tt.score[i]);

printf("\n");

}

voidmodify(___STU___*ss,floata)

{inti;

for(i=0;i<3;i++)

ss->__score[i]__*=a;

}

main()

{STUstd={1,"Zhanghua",76.5,78.0,82.0};

floata;

printf("\nTheoriginalnumberandnameandscores:

\n");

show(std);

printf("\nInputanumber:

");scanf("%f",&a);

modify(__&std__,a);

printf("\nAresultofmodifying:

\n");

show(std);

}

第1处内容为[voidmodify(STU*ss,floata)]

第2处内容为[ss->score[i]*=a;]

第3处内容为[modify(&std,a);]

4.给定程序中,函数fun的功能是:

将形参指针所指结构体数组中的三个元素按num成员进行升序排列。

#include

typedefstruct

{intnum;

charname[10];

}PERSON;

voidfun(PERSON___1___)std[]或*std

{

___2___temp;PERSON

if(std[0].num>std[1].num)

{temp=std[0];std[0]=std[1];std[1]=temp;}

if(std[0].num>std[2].num)

{temp=std[0];std[0]=std[2];std[2]=temp;}

if(std[1].num>std[2].num)

{temp=std[1];std[1]=std[2];std[2]=temp;}

}

main()

{PERSONstd[]={5,"Zhanghu",2,"WangLi",6,"LinMin"};

inti;

fun(___3___);std

printf("\nTheresultis:

\n");

for(i=0;i<3;i++)

printf("%d,%s\n",std[i].num,std[i].name);

}

4.给定程序中,函数fun的功能是:

将形参std所指结构体数组中年龄最大者的数据作为函数值返回,并在main函数中输出。

#include

typedefstruct

{charname[10];

intage;

}STD;

STDfun(STDstd[],intn)

{STDmax;inti;

max=___1___;*std或std[0]

for(i=1;i

if(max.age<___2___)max=std[i];

returnmax;

}

main()

{STDstd[5]={"aaa",17,"bbb",16,"ccc",18,"ddd",17,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1