第九章 结构体与共用体
- 格式:doc
- 大小:73.00 KB
- 文档页数:6
第9章结构体与共用体9.1典型考试题剖析9.1.1选择题【例1】若指针p已经正确定义,要使p指向两个连续的整型动态存储单元,不正确的语句是。
A) p=2*(int *)malloc(sizeof(int)); B) p=(int*)malloc(2*sizeof(int));C) p=(int *)malloc(2*2); D) p=(int*)calloc(2,sizeof(int));✧考点:动态存储分配函数。
✧分析:根据动态存储分配函数malloc和calloc的函数原型可以知道,calloc函数的调用形式为:void * calloc(unsigned n,unsigned size);表示在动态存储区中分配n个长度为size的连续空间,函数返回一个指向分配域起始地址的指针,因此答案D是正确的。
malloc函数的调用形式为:void * malloc(unsigned int size);表示是在内存的动态存储区分配一个长度为size的连续空间,并返回一个指向分配域起始地址的指针,答案B和C中malloc的参数分别为:2*(sizeof(int))和2*2,都是整型数,因此调用形式正确。
答案A中(int *)malloc(sizeof(int))的返回值为一个地址值,将地址的值乘以2是没有意义的。
✧答案:A【例2】若有以下说明和定义:struct test{ int m1; char m2; float m3;union uu{ char u1[5]; int u2[2]; }ua;}myaa;则sizeof(struct test)的值是。
A) 12 B) 16 C) 14 D) 9✧考点:结构体类型和共用体类型所占内存的字节数。
✧分析:sizeof(struct test)的功能是求结构体类型test所占用的内存字节数。
它应该等于结构体每个成员所占的字节数之和。
m1为int型,占2字节,m2为char型,占1字节,m3为float型,占4字节,接下来是一个共用体类型uu,共用体所占的字节数应该等于成员中最长者所占的字节数,u1占5字节,u2占4字节,那么该共用体类型应该占用5字节,所以2+1+4+5=12。
c语言9结构体与共用体九、结构体与共用体(一) 选择题1、C语言结构体类型变量在程序执行期间_________。
A.所有成员一直驻留在内存中B.只有一个成员驻留在内存中C.部分成员驻留在内存中D.没有成员驻留在内存中2、下面程序的运行结果是_________。
main(){struct cmplx{ int x;int y;}cnum[2]={1,3,2,7};printf("%d\n",cnum[0].y/cnum[0].x*cnum[1].x);}A.0 B.1 C.3 D.63、设有如下定义:struct sk{int n;float x;}data ,*p;若要使p指向data中的n域,正确的赋值语句是_________。
A.p=&data.nB.*p=data.n;C.p=(struct sk *)&data.nD.p=(struct sk *)data.n4、以下对结构体变量stu1中成员age的非法引用是_________。
struct student{int age;int num;}stu1,*p;p=&stu1A.stu1.ageB.student.ageC.p->ageD.(*p).age5、下面对typedef的叙述中不正确的是_________。
A.用typedef可以定义各种类型名,但不能用来定义变量B.用typedef可以增加新类型C.用typedef只是将已存在的类型用一个新的标识符来代表D.使用typedef有利于程序的通用和移植6、以下scanf函数调用语句中对结构体变量成员的不正确引用是_________。
struct pupil{char name[20];int age;int sex;}pup[5],*p;p=pup;A.scanf("%s",pup[0].name);B.scanf("%d",&pup[0].age);C.scanf("%d",&(p->sex));D.scanf("%d",p->age);7、若有以下说明和定义union dt{int a;char b;double c;}data;以下叙述中错误的是_________。
第九章结构体与共用体一、选择题1.在说明一个结构体变量时系统分配给它的存储空间是。
(0级)A)该结构体中第一个成员所需存储空间B)该结构体中最后一个成员所需存储空间C)该结构体中占用最大存储空间的成员所需存储空间D)该结构体中所有成员所需存储空间的总和2.若有以下说明和语句:struct worker{ int no; char ﹡name; }work, ﹡p=&work;则以下引用方式不正确的是。
(1级)A) work.no B) (﹡p).no C) p->no D)work->no3.有如下定义:struct date { int year, month, day; };struct worklist { char name[20]; char sex;struct date birthday; }person;对结构体变量person的出生年份进行赋值时,下面正确的赋值语句是。
(1级)A) year=1958 B) birthday.year=1958C) person.birthday.year=1958 D) person.year=19584.以下对结构体类型变量的定义中不正确的是。
(1级)A)#define STUDENT struct student B) struct studentSTUDENT { int num;{ int num; float age;float age; }std1; }std1;C) struct D) struct{ int num; { int num;float age; float age; } student;}std1; struct student 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( ){ struct date{ int year, month, day; }today;printf(“%d\n”,sizeof(struct date)); }A) 6 B) 8 C) 10 D)128.有如下定义struct person{char name[9]; int age;};stru ct person class[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.设有如下定义struct ss{ char name[10];int age;char sex;} std[3],* p=std;下面各输入语句中错误的是。
(1级)A) scanf("%d",&(*p).age);B) scanf("%s",&);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) struct ex是结构体类型11.若程序中有下面的说明和定义:struct stt{ int x;char b;}struct stt a1,a2;则会发生的情况是。
(1级)A)程序将顺利编译、连接、执行。
B)编译出错。
C)能顺利通过编译、连接,但不能执行。
D)能顺利通过编译,但连接出错。
12.已知教师记录定义为:struct student{ int no;char name[30];struct{ unsigned int year;unsigned int month;unsigned int 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.month = 5;t.birthday.day = 1; t-> birthday.day = 1;13.以下结构类型可用来构造链表的是。
(1级)A)struct aa{ int a;int * b;};B)struct bb{ int a;bb * b;};C)struct cc{ int * a;cc b;};D)struct dd{ int * a;aa b;};14.以下程序的输出结果是。
(2级)amovep(int *p, int a[3][3],int n){ int i, 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)56 B)25 C)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)14 D)32二、填空题1.有如下定义:(1级)struct {int x; int y; }s[2]={{1,2},{3,4}}, ﹡p=s;则:表达式++p->x 的结果是。
表达式++p->x 的结果是。
2.若有定义:(2级)struct num {int a; int b; 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{ char num[6];int s[4];double ave;} a,*p;三、程序填空题1.结构数组中存有三人的姓名和年龄,以下程序输出三人中最年长者的姓名和年龄。
请填空。
(1级)static struct man{ char name[20]; int age; }person[ ]={ “li-ming”,18, “wang-hua”,19,”zhang-ping”,20};main( ){struct man *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; struct link *next; };……struct link * p, * first; int c=0; p=first;while ( (1)) { (2); p= (3); }3.已知head 指向一个带头结点的单向链表,链表中每个结点包含数据域(data)和指针域(next),数据域为整型。
以下函数求出链表中所有链结点数据域的和值,作为函数值返回。
请填空。
(2级)struct link{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>struct student{int info; struct student *link; };struct student *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); head=p0; }else {p2->link=p0; (2); }}else {p1->link=p0; (3); } return(head);}四、读程序写结果题1.以下程序的运行结果是。