电子技术 第十章 结构体与共用体
- 格式:doc
- 大小:109.50 KB
- 文档页数:6
第10章结构体与共用体1.以下叙述中错误的是()。
A) 可以通过typedef增加新的类型B) 可以用typedef将已存在的类型用一个新的名字来代表C) 用typedef定义新的类型名后,原有类型名仍有效D) 用typedef可以为各种类型起别名,但不能为变量起别名参考答案:A【解析】关键字typedef的作用只是将C语言中的已有的数据类型作了置换,并不是增加新的类型,所以A)错误。
2.以下关于typedef的叙述错误的是A) 用typedef可以增加新类型B) typedef只是将已存在的类型用一个新的名字来代表C) 用typedef可以为各种类型说明一个新名,但不能用来为变量说明一个新名D) 用typedef为类型说明一个新名,通常可以增加程序的可读性参考答案:A【解析】typedef并不是增加了新类型,而是用一个新名字替代已存在的类型,不能为变量说明一个新名,使用typedef可以增强移植性。
所以A选项错误。
3.若有以下语句typedef struct S{ int g; char h; } T;以下叙述中正确的是A) 可用S定义结构体变量B) 可用T定义结构体变量C) S是struct 类型的变量D) T是struct S类型的变量参考答案:B【解析】本题考查typedef重新声明一种结构体类型,那么T为结构体类型,而不是结构体变量,所以B选项正确。
4.设有以下语句typedef struct TT{ char c; int a[4]; } CIN;则下面叙述中正确的是A) CIN是struct TT类型的变量B) TT是struct类型的变量C) 可以用TT定义结构体变量D) 可以用CIN定义结构体变量参考答案:D【解析】本题考查typedef重新声明一种结构体类型,其中CIN为结构体类型名,而不是结构体变量,所以D 选项正确。
5.以下叙述中错误的是A) 可以用typedef将已存在的类型用一个新的名字来代表B) 可以通过typedef增加新的类型C) 用typedef定义新的类型名后,原有类型名仍有效D) 用typedef可以为各种类型起别名,但不能为变量起别名参考答案:B【解析】本题考查typedef的用法,typedef并不是增加一种新的类型,而是对已存在的类型用一个新的名字来代表,所以B选项错误。
结构体与共用体笔记定义结构体C语言允许用户自己建立由不同类型数据组成的组合型的数据结构,它称为结构体(structre)。
在其他一些高级语言中称为“记录”.定义后的结构体类型和系统提供的标准类型(如int, char, float, double 等)具有相似的作用,都可以用来定义变量,只不过int等类型是系统已声明的,而结构体类型是由用户根据需要在程序中指定的。
定义一个结构体类型的一般形式为:struct 结构体名{ 成员表列};注意:1.结构体类型的名字是由一个关键字struct和结构体名组合而成的(例如struct Student) ,结构体名是由用户指定的,又称“结构体标记”,以区别于其他结构体类型。
上面的结构体声明中Student就是结构体名(结构体标记)。
2.花括号内是该结构体所包括的子项,称为结构体的成员。
“成员表列"(member list)也称为“域表”(field list),成员表列由若干个成员组成,每一个成员是结构体中的一个域。
对每个成员也必须作类型说明,其形式为:类型说明符成员名;成员名的命名应符合标识符的书写规定。
例如:struct stu{int num;char name[20];char sex;float score;};3.一个结构体的成员可以属于另一个结构体类型(嵌套)。
例如:struct Date //声明一个结构体类型struct Date{ int month;//月int day;//日int year;//年}struct Student//声明一个结构体类型struct Student{ int num;char name[20];char sex;int age;struct Date birthday;//成员birthday属于struct Date 类型char addr[30];};结构体类型变量1.定义结构体类型变量说明结构变量有以下三种方法。
第十章结构体与共用体一、选择题1.在说明一个结构体变量时系统分配给它的存储空间是。
(0级)A)该结构体中第一个成员所需存储空间B)该结构体中最后一个成员所需存储空间C)该结构体中占用最大存储空间的成员所需存储空间D)该结构体中所有成员所需存储空间的总和2.若有以下说明和语句:struct worker{int no; char ﹡name;}work, ﹡p=&work;则以下引用方式不正确的是。
(1级)A) work.no B) (﹡p).noC) p->no D)work->no3.有如下定义:struct date { int year,month,day; };structworklist {char name[20]; char sex;struct datebirthday; }person;对结构体变量person的出生年份进行赋值时,下面正确的赋值语句是。
(1级)A) year=1958B) birthday.year=1958C) person.birthday.year=1958 D) person.year=19584.以下对结构体类型变量的定义中不正确的是。
(1级)A)#define STUDENT struct studentB) struct studentSTUDENT{ int num;{ intnum;floatage;floatage; }std1; }std1;C)struct D) struct{intnum;{ intnum;float age;float age; } student;}std1;structstudent std1;5.设有以下说明语句struct stu{ int a; float b;}stutype;则下面的叙述不正确的是。
(1级)A)struct是结构体类型的关键字B)struct stu是用户定义的结构体类型C)stutype是用户定义的结构体类型名D)a和b都是结构体成员名6.C语言结构体类型变量在程序执行期间。
(0级)A)所有成员一直驻留在内存中B)只有一个成员主留在内存中C)部分成员驻留在内存中D)没有成员驻留在内存中7.以下程序的运行结果是。
(1级)#include <stdio.h>main(){ structdate{ int year, month,day; }today;printf(“%d\n”,sizeof(struct date)); }A)6B)8 C) 10 D)128.有如下定义ﻫstruct person{char name[9]; intage;};ﻫstruct personclass[10]={“Johu”, 17,ﻫ“Paul”, 19“Mary”,18,ﻫ“Adam 16,}; ﻫ根据上述定义,能输出字母M的语句是。
(1级)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]);9.设有如下定义structssﻫ{charname[10];int age;ﻫcharsex;ﻫ}std[3],* p=std;下面各输入语句中错误的是。
(1级)A)scanf("%d",&(*p).age);ﻫB) scanf("%s",&std.name);ﻫC)scanf("%c",&std[0].sex);ﻫD)scanf("%c",&(p->sex))10.设有以下说明语句,则下面的叙述中不正确的是。
(1级)struct ex{int x ;float y; char z ;}example;ﻫA) struct结构体类型的关键字B) example 是结构体类型名C)x,y,z都是结构体成员名D) structex是结构体类型11.若程序中有下面的说明和定义:struct stt{int x;char b;}struct stt a1,a2;则会发生的情况是。
(1级)A)程序将顺利编译、连接、执行。
B)编译出错。
C)能顺利通过编译、连接,但不能执行。
D)能顺利通过编译,但连接出错。
12.已知教师记录定义为:struct student{int no;charname[30];struct{unsigned int year;unsignedintmonth;unsignedint day;}birthday;}stu;struct student*t= &stu;若要把变量t中的生日赋值为“1980年5月1日”,则正确的赋值方式为。
(1级)A) year=1980; B) t.year=1980;month = 5;t.month = 5;day =1; t.day= 1;C)t.birthday.year =1980;D)t-> birthday.year = 1980;t.birthday.month = 5; t-> birthday.mo nth =5;t.birthday.day= 1; t->birthday.day =1;13.以下结构类型可用来构造链表的是。
(1级)ﻫA)structaa{int a;int* b;};B)structbb{ inta;bb*b;};C)struct cc{ int * a;cc b;};D)structdd{int * a;aa b;};14.以下程序的输出结果是。
(2级)amovep(int *p, int a[3][3],int n){ inti,j;for( i=0;i<n;i++)for(j=0;j<n;j++){*p=a[i][j];p++; }}main(){ int *p,a[3][3]={{1,3,5},{2,4,6}};ﻫp=(int*)malloc(100);amovep(p,a,3);printf("%d %d \n",p[2],p[5]);free(p);ﻫ}ﻫA)56B) 25C)34 D) 程序错误15.以下程序的输出结果是。
(2级)ﻫstruct HARﻫ{ 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].x;h[1].p=&h[0].x;printf("%d %d \n",(h[0].p)->x,(h[1].p)->y);}ﻫA) 12 B)23 C) 14D) 32二、填空题1.有如下定义:(1级)struct{int x;inty; }s[2]={{1,2},{3,4}}, ﹡p=s;则:表达式++p->x 的结果是。
表达式++p->x 的结果是。
2.若有定义:(2级)struct num{int a; intb;float f; }n={1, 3, 5.0}};struct num﹡pn=&n;则表达式pn->b/n.a﹡++pn->b的值是,表达式(﹡pn).a+pn->f的值是。
3.若要使指针p指向一个double类型的动态存储单元,请填空。
(1级)p=malloc(sizeof(double));4.设有以下结构类型说明和变量定义,则变量a在内存所占字节数是。
(1级)ﻫStruct stud ﻫ{charnum[6];int s[4]; ﻫdouble ave;} a,*p;三、程序填空题1.结构数组中存有三人的姓名和年龄,以下程序输出三人中最年长者的姓名和年龄。
请填空。
(1级)static structman{ char name[20];int age;}person[ ]={“li-ming”,18, “wang-hua”,19,”zhang-ping”,20};main(){structman *p,*q; int old=0;p=person; for( ;(1))if(old<p->age) {q=p;(2);}printf(“%s %d”,(3)); }2.以下程序段的功能是统计链表中结点的个数,其中first为指向第一个结点的指针(链表不带头结点)。
请填空。
(1级)struct link{char data; structlink*next;};……structlink *p, * first; int c=0;p=first;while((1)){ (2);p= (3); }3.已知head指向一个带头结点的单向链表,链表中每个结点包含数据域(data)和指针域(next),数据域为整型。
以下函数求出链表中所有链结点数据域的和值,作为函数值返回。
请填空。
(2级)structlink{int data; struct link *next; };main(){struct link *head;...sum(head);...}sum( (1)){ struct link *p;int s=0;p=head->next;while(p){s+= (2) ;p=(3) ; }return(s);}4.已知head指向单链表的第一个结点,以下函数完成往降序单向链表中插入一个结点,插入后链表仍有序。
请填空。
(2级)# include <stdio.h>structstudent{intinfo;struct student*link;};structstudent*insert(struct student* head, struct student* stud){ struct student* p0,* p1,*p2; p1=head; p0=stud;if(head= =NULL) {head=p0; p0->link=NULL;}else while(p0->info<p1->info)&&(p1->link!=NULL)){p2=p1;p1=p1->link;}if(p0->info>=p1->info) {if(head==p1) {(1); h ead=p0; }else {p2->link=p0;(2); }}else {p1->link=p0;(3) ; }return(head);}四、读程序写结果题1.以下程序的运行结果是。