14结构体共用体和用户定义类型修订版.docx
《14结构体共用体和用户定义类型修订版.docx》由会员分享,可在线阅读,更多相关《14结构体共用体和用户定义类型修订版.docx(11页珍藏版)》请在冰豆网上搜索。
14结构体共用体和用户定义类型修订版
第十四章结构体、共用体和用户定义类型
考点82结构体变量的定义和初始化
一、结构体
结构体是一种由多个成员组成的集合。
定义一个结构体的格式:
struct结构体名
{
类型名1结构成员名表1;
类型名2结构成员名表2;
…
}
例如:
structstu
{longnumber;
charname[20];
charsex;
intage;
floatscore[3];
};
二、结构型变量的定义和初始化
方法1:
先定义结构型、后定义变量
structstu
{longnumber;
charname[20];
charsex;
floatscore[3];
};
structstux,y;
structstux={L,”zhao1”,’f’,{89,94,86}},
y={L,”zhao2”,’m’,{78,86,92}};
numbernamesexscore[1][2][3]
变量xLzhao1f899486
变量yLzhao1f899486
方法2:
定义结构型的同时定义变量
structstu
{longnumber;
charname[20];
charsex;
floatscore[3];
}x={L,”zhao1”,’f’,{89,94,86}},
y={L,”zhao2”,’m’,{78,86,92}};
方法3:
定义无名称的结构型的同时定义变量
struct
{longnumber;
charname[20];
charsex;
intage;
floatscore[3];
}x={L,”zhao1”,’f’,{89,94,86}},
y={L,”zhao2”,’m’,{78,86,92}};
07418)设有说明
structDATE{intyear;intmonth;intday;};
请写出一条定义语句,该语句定义d为上述结构体类型变量,并同时为其成员year、month、day依次赋初值2006、10、1:
【19】。
05448)以下对结构体类型变量td的定义中,错误的是
A)typedefstructaa
{intn;
floatm;
}AA;
AAtd;
B)structaa
{intn;
floatm;
}td;
structaatd;
C)struct
{intn;
floatm;
}aa;
structaatd;
D)struct
{intn;
floatm;
}td;
考点83结构体数组和指针
数组中的每个元素都是结构体
05948)有以下程序
structSTU
{charname[10];intnum;floatTotalScore;};
voidf(structSTU*p)
{structSTUs[2]={{"SunDan",20044,550},{"Penghua",20045,537}},*q=s;
++p;++q;*p=*q;
}
main()
{structSTUs[3]={{"YangSan",20041,703},{"LiSiGuo",20042,580}};
f(s);
printf("%s%d%3.0f\n",s[1].name,s[1].num,s[1].TotalScore);
}
程序运行后的输出结果是
A)SunDan20044550B)Penghua20045537
C)LiSiGuo20042580D)SunDan20041703
05417)以下程序运行后的输出结果是【17】。
structNODE
{intk;
structNODE*link;
};
main()
{structNODEm[5],*p=m,*q=m+4;
inti=0;
while(p!
=q)
{p->k=++i;p++;
q->k=i++;q--;
}
q->k=i;
for(i=0;i<5;i++)printf("%d",m[i].k);
printf("\n");
}
考点84结构体变量的引用
三种形式:
1.结构体变量名.成员名
2.(*结构体指针变量名).成员名
3.结构体指针变量名—>成员名
06426)有以下程序段
structst
{intx;int*y;}*pt;
inta[]={1,2},b[]={3,4};
structstc[2]={10,a,20,b};
pt=c;
以下选项中表达式的值为11的是
A)*pb->yB)pb->xC)++pt->xD)(pt++)->x
考点85结构体与函数
向函数传递结构体变量:
函数体内对形参结构体变量中的任何成员操作,都不会影响对应实参中成员的值。
07433)有以下程序
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
05946)有以下程序
#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);
}
程序运行后的输出结果是
A)20045537B)20044550C)20042580D)20041703
考点86用户定义类型的定义方法和应用
typedef类型名标识符;可以用标识符代替类型名
07447)有以下程序段
typedefstructnode{intdata;structnode*next;}*NODE;
NODEp;
以下叙述中正确的是
A)p是指向structnode结构变量的指针的指针B)NODEp;语句出错
C)p是指向structnode结构变量的指针D)p是structnode结构变量
考点87链表结点的访问
链表是一种动态存储结构,链表中的每一个元素称为结点,每个结点由数据域和指针域构成。
06916
06416
考点88改变结点的位置
069
A)首结点成为尾结点B)尾结点成为首结点C)删除首结点D)删除尾结点
06425)
A)q->next=r->next;p->next=r;r->next=q;B)p->next=r;q->next=r->next;r->next=q;
C)q->next=r->next;r->next=q;p->next=r;D)r->next=q;p->next=r;q->next=r->next;
考点89从链表中删除结点
054
A)p->next=q->next;B)p->next=p->next->next;C)p->next=r;D)p=q->next;
考点90共用体类型数据的定义和初始化
定义共用体的格式:
union共用体标识名
{类型名1共用体成员名1;
类型名2共用体成员名2;
…
}变量名;
对共用体变量赋值要针对其成员进行,不能整体赋值。
编译程序将按照共用体变量中最大的成员长度分配一块内存。
06946)若有以下定义和语句
uniondata
{inti;charc;floatf;}x;
inty;
则以下语句正确的是
A)x=10.5;B)x.c=101;C)y=x;D)printf("%d\n",x);
05438)若有以下说明和定义
uniondt
{inta;charb;doublec;}data;
以下叙述中错误的是
A)data的每个成员起始地址都相同
B)变量data所占内存字节数与成员c所占字节数相等
C)程序段:
data.a=5;printf("%f\n",data.c);输出结果为5.
D)data可以作为函数的实参
考点91共用体类型数据的引用
同结构体
06441)有以下程序
main()
{union
{charch[2];
intd;
}s;
s.d=0x4321;
printf("%x,%x\n",s.ch[0],s.ch[1]);
}
在16位编译系统上,程序执行后的输出结果是
A)21,43B)43,21C)43,00D)21,00