结构体和联合体例题.docx

上传人:b****7 文档编号:9222153 上传时间:2023-02-03 格式:DOCX 页数:16 大小:24.23KB
下载 相关 举报
结构体和联合体例题.docx_第1页
第1页 / 共16页
结构体和联合体例题.docx_第2页
第2页 / 共16页
结构体和联合体例题.docx_第3页
第3页 / 共16页
结构体和联合体例题.docx_第4页
第4页 / 共16页
结构体和联合体例题.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

结构体和联合体例题.docx

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

结构体和联合体例题.docx

结构体和联合体例题

第11章结构体与联合体例题

例11-1.以下叙述中错误的是()。

2007.9

A)用typedef可以增加新类型√

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

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

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

例11-2设有以下说明:

typedefstructST

{

lonta;

intb;

charc[2];

}NEW;

则下面叙述中正确的是()。

2005.4

A)以下说明形式非法B)ST是一个结构体类型

C)NEW是一个结构体类型√D)NEW是一个结构体变量

例11-3.有以下程序段:

typedefstructnode

{

intdata;

structnode*next;

}*NODE;

NOEp;

以下叙述中正确的是()。

2007.4

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

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

例11-4.设有说明:

structDATA{intyear;intmonth;intday;};

请写出一条定义语句,该语句定义d为上述结构体变量,并同时为其成员year、month、day依次赋值为2006、10、1:

(2007.4)

例11-5.以下程序运行后的输出结果是()(2005.9)

#include

structSTU

{

intnum;

floatTotalScore;

};

voidf(structSTUp)

{

structSTUs[2]={{20044,550},{20045,537}};

p.num=s[1].num;

p.TotalScore=s[1].TotalScore;

}

main()

{

structSTUs[2]={20041,703},{20042,580}};

f(s[0]);

printf("%d%3.0f\n",s[0].num,s[0].TotalScore);

}

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

(2005.9)

A)20045537B)20044550C)20042580D)20041703

例11-6.有以下程序:

#include

#include

typedefstruct

{

charname[9];

charsex;

floatscore[2];

}STU;

STUf(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];

returna;

}

main()

{

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

d=f(c);

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

}

程序的运行结果是()。

(2007.9)

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

例11-7.以下程序运行后的输出结果是()。

2005.9

#include

srtructSTU

{

charname[10];

intnum;

};

voidf(char*name,intnum)

{

structSTUs[2]={{"SunDan",20044},{"PengHua",20045}};

num=s[0].num;

strcpy(name,s[0].name);

}

main()

{

structSTUs[2]={{"YanhSan",20041},{"LiSiGuo",20042}},*p;

p=&s[1];

f(p->name,p->num);

printf("%s%d\n",p->name,p->num);

}

A)SunDan20042√B)SunDan20044C)LiSiGuo20042D)YangSan20041

例11-8.以下程序运行后的输出结果是()。

2007.4

#include

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√

例11-9.以下程序运行后的输出结果是()。

2007.4

#include

structS{intn;inta[20];};

voidf(structS*p)

{inti,j,t;

for(i=0;in-1;i++)

for(j=i+1;jn;j++)

if(p->a[i]>p->a[j])

{t=p->a[i];

p->a[i]=p->a[j];

p->a[j]=t;

}

}

main()

{inti;

structSs={10,{2,3,1,6,8,7,5,4,10,9}};

f(&s);

for(i=0;i

printf("%d",s.a[i]);

}

A)1,2,3,4,5,6,7,8,9,10,√B)10,9,8,7,6,5,4,3,2,1,

C)2,3,1,6,8,7,5,4,10,9,D)10,9,8,7,6,1,2,3,4,5,

例11-10.以下结构体说明和变量定义如图所示。

 

structnode

{

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

例11-11.以下程序运行后的输出结果是()。

(2005.9)

#defineNULL0

structNODE

{intnum;

structNODE*next;

}

main()

{structNODEs[3]={{1,NULL},{2,NULL},{3,NULL}},*p,*q,*r;

intsum=0;

s[0].next=s+1;

s[1].next=s+2;

s[2].next=s;

p=s;

q=p->next;

r=q->next;

sum+=q->next->num;

sum+=r->next->next->num;

printf("%d\n",sum);

}

答案:

5

例11-12.以下程序运行后的输出结果是()。

(2007.9)

#include

structtt

{intx;

structtt*y;

}*p;

structtta[4]={20,a+1,15,a+2,30,a+3,17,a};

main()

{inti;

p=a;

for(i=1;i<=2;i++)

{

printf("%d,",p->x);

p=p->y;

}

}

A)20,30B)30,17C)15,30D)20,15√

例11-13.若有以下说明和定义:

uniondt

{inta;

charb;

doublec;

}data;

以下叙述中错误的是()。

(2005.4)

A)data的每个成员起始地址都相同

B)变量data所占的内存字节数与成员c所占字节数相等

C)程序段:

data.a=5;printf(“%f\n”,data.c);输出结果为5.000000

D)data可以作为函数的实参

例11-14.设有以下定义:

uniondata

{intd1;

floatd2;

}demo;

下面叙述中错误的是()。

(2007.9)

A)变量demo与成员d2所占的内存字节数相同

B)变量demo中各成员的地址相同

C)变量demo和个成员的地址相同

D)若给demo.d1赋99后,demo.d2中的值是99.0√

例11-14.在说明一个结构体变量时相同分配给它的存储空间是()。

A)该结构体中第一个成员所需的存储空间

B)该结构体中最后一个成员所需的存储空间

C)该结构体中占用最大存储空间的成员所需的存储空间

D)该结构体中所有成员所需存储空间的总和

例11-15在说明一个共用体变量时相同分配给它的存储空间是()。

A)该共用体中第一个成员所需的存储空间

B)该共用体中最后一个成员所需的存储空间

C)该共用体中占用最大存储空间的成员所需的存储空间

D)该共用体中所有成员所需存储空间的总和

例11-16以下关于typedif的叙述不正确的是()。

A)用typedef可以定义各种类型名,但不能用来定义变量

B)用typedef可以增加新类型√

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

D)使用typedef语句不能创建新的类型,只是给定义的类型取一个新名字。

例11-17以下关于枚举的叙述不正确的是()。

A)枚举变量只能取对应枚举类型的枚举元素表中的元素

B)可以在定义枚举类型时对枚举元素进行初始化

C)枚举元素表中的元素有先后次序,可以进行比较

D)枚举元素的值可以是数字或字符串√

例11-18正确的k值是()。

enum{a,b=5,c,d=4,e}k;

k=e;

A)3B)4C)5D)6

例11-19正确的k值是()。

enum{a,b=5,c,d=4,e}k;

k=a;

A)0B)4C)1D)6

例11-20以下对结构体变量stu1中成员age的非法引用是()。

structstudent

{intage;

intnum;

}stu1,*p;

p=&stu1;

A)stu1.ageB)student.ageC)p->ageD)(*p).age

例11-21有以下定义:

structdate

{intyear,month,day;};

structwoklist

{charname[20];

charsex;

structdatebirthday;

}person;

对结构体变量person的出生年份进行赋值时,下面正确的赋值语句是()。

A)year=1988;B)birthday.year=1988;

C)person.birthday.year=1988;D)person.year=1988;

例11-22若有以下说明和语句,则表达式()的值为101。

structwe

{inta;

int*b;

}*p;

intx0[]={11,12},x1[]={31,32};

staticstructwex[2]={100,x0,300,x1};

p=x;

A)*p->bB)p->aC)++p->aD)(p++)->a

例11-23设有以下说明,则下面不正确的叙述是()。

uniondata

{

inti;

charc;

floatf;

}a;

A)a所占的内存长度等于成员f的长度

B)a的地址和它的成员地址都是同一地址

C)a可以作为函数参数

D)不能对a赋值,但可以在定义a时对它初始化

解共用体不能作为函数参数(但共用体变量指针可以作为函数参数),所以本体答案C。

 

二、填空题:

例11-24下列程序的运行结果是。

#include

structs

{

intn;

int*m;

}*p;

intd[5]={30,10,40,20,50};

structsarr[5]={300,&d[0],100,&d[1],400,&d[2],200,&d[3],500,&d[4]};

main()

{p=arr;

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

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

printf("%d\n",++(*p->m));

}

答案:

301,100,11

例11-25以下程序的运行结果是。

#include

typedefunion

{

longi;

intk[5];

charc;

}DATE;

structdate

{

intcat;

DATEcow;

doubledog;

}too;

DATEmax;

main()

{

printf("%d\n",sizeof(structdate)+sizeof(max));

}

答案52(VC++)

例11-26以下程序的运行结果是。

#include

structst

{

intx;

int*y;

}*p;

ints[]={10,20,30,40};

structsta[]={1,&s[0],2,&s[1],3,&s[2],4,&s[3]};

main()

{

p=a;

printf("%d,",p->x);

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

printf("%d,",*(++p)->y);

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

}

答案:

1,2,30,41

例11-27;有以下定义:

struct

{

intx;

int*y;

}tab[2]={{1,"ab"},{2,"cd"}},*p=tab;

则表达式*p->y的结果是;表达式*(++p)->y的结果是.

答案:

‘a’,‘c’

例11-28有如下定义:

struct

{

intx;

inty;

}s[2]={{1,2},{3,4}},*p=s;

则表达式++p->x的结果是;表达式(++p)->x的结果是。

答案23

例11-29以下函数creat()用来建立一个带头节点的单链表,新产生的节点总是插在链表的末尾,单链表的头指针为函数值返回。

请填空。

#include

structlist

{

chardata;

structlist*next;

};

structlistcreat()

{

structlist*h,*p,*q;

charch;

h=①malloc(sizeof(②));/*建立头节点*/

p=q=h;/*p,q指向头节点*/

while(ch!

='?

')/*输入非‘?

‘循环*/

{

p=③malloc(sizeof(④));/*建立要插入的节点*/

q->data=ch;

q->next=p;/*将节点*p插在*q之后*/

q=p;/**q始终指向新健链表的最后节点*/

ch=getchar();

}

p->next='\0';/*将最后节点next域置空*/

⑤;/*返回头节点指针*/

}

答案:

①(structlist*);②structlist③(structlist*)

④structlist⑤return(h)

例11-30以下min()函数的功能是:

查找带有头结点的单链表中节点数据域的最小值作为函数值返回。

请填空。

structnode

{

intdata;

structnode*next;

};

intmin(structnode*fist)

{

structnode*p;

intm;

p=first->next;

m=p->data;

for(p=p->next;p!

='\0';p=①;

if(②)m=p->data;

returnm;

}

答案:

①p->next②p->data

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

当前位置:首页 > 工作范文 > 演讲主持

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

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