结构体与联合体习题含答案

合集下载

(完整版)结构体与联合体习题与参考答案

(完整版)结构体与联合体习题与参考答案

(完整版)结构体与联合体习题与参考答案第八章结构体与联合体选择题1、若程序中有以下的说明和定义:struct abc{ int x;char y; } 花括号后少了分号。

struct abc s1,s2;则会发生的情况是______。

A) 编译时错B) 程序将顺序编译、连接、执行C) 能顺序通过编译、连接、但不能执行D) 能顺序通过编译、但连接出错2、有以下程序段struct st{ int x; int *y;}*pt;int a[]={1,2};b[]={3,4};struct st c[2]={10,a,20,b};pt=c;以下选项中表达式的值为11的是A) *pt->y B) pt->x C) ++pt->x D) (pt++)->x3、有以下说明和定义语句struct student{ int age; char num[8];};struct student stu[3]={{20,"200401"},{21,"200402"},{19,"200403"}};struct student *p=stu;以下选项中引用结构体变量成员的表达式错误的是______。

A) (p++)->num B) p->num C) (*p).num D) stu[3].age4、设有如下枚举类型定义enum language{Basic=3,Assembly=6,Ada=100,COBOL,Fortran};枚举量Fortran的值为______。

A) 4 B) 7 C) 102 D) 1035、以下叙述中错误的是_________。

A)可以通过typedef增加新的类型B)可以用typedef将已存在的类型用一个新的名字来代表C)用typedef定义新的类型名后,原有类型名仍有效D)用typedef可以为各种类型起别名,但不能为变量起别名6、有以下程序段typedef struct NODE{ int num; struct NODE *next;} OLD;以下叙述中正确的是A)以上的说明形式非法B) NODE是一个结构体类型C) OLD是一个结构体类型D) OLD是一个结构体变量7、以下选项中不能正确把cl定义成结构体变量的是______。

结构体与链表习题附答案

结构体与链表习题附答案

结构体与链表习题附答案一、选择题1、在说明一个结构体变量时系统分配给它的存储空间是().A)该结构体中第一个成员所需的存储空间B)该结构体中最后一个成员所需的存储空间C)该结构体中占用最大存储空间的成员所需的存储空间D)该结构体中所有成员所需存储空间的总和。

2.设有以下说明语句,则以下叙述不正确的是( )struct stu{int a;float b;}stutype;A. struct 是结构体类型的关键字B. struct stu 是用户定义的结构体类型C. stutype 是用户定义的结构体类型名D. a 和b 都是结构体成员名3、以下对结构体变量stu1中成员age的合法引用是()#includestruct student{int age;int num;}stu1,*p;p=&stu1A)stu1->age B)student.age C)p->age D) p.age4、有如下定义:Struct date{int year,month,day;};Struct worklist{Char name[20];Char sex;Struct date birthday;}person;对结构体变量person的出生年份进行赋值时,下面正确的赋值语句是( ) 。

A worklist .birthday.year=1978B birthday.year=1978C person.birthday.year=1958D person.year=19585、以下程序运行的结果是( ) 。

#include”stdio.h”main(){ struct date{ int year , month , day ;} today ;printf(“%d\n”,sizeof(struct date));}A .6 B.8 C.10 D.126、对于时间结构体struct date{ int year , month , day ;char week[5];}则执行printf(“%d\n”,sizeof(struct date))的输出结果为( ) 。

编程选择题40道:C语言结构体与联合体:数据组织与管理.Tex

编程选择题40道:C语言结构体与联合体:数据组织与管理.Tex

1.在C语言中,结构体(struct)能够存储不同类型的数据。

以下哪种说法是正确的关于结构体成员变量的访问?o A. 结构体成员变量只能在定义结构体的函数中访问。

o B. 结构体成员变量的访问必须通过指向结构体的指针。

o C. 结构体成员变量不能被直接初始化。

o D. 结构体成员变量可以通过结构体变量名直接访问。

答案:D解析:结构体成员变量可以直接通过结构体变量名访问,无需指针,选项A和B错误。

C语言支持在定义结构体时直接初始化成员变量,因此选项C也错误。

2.C语言中的联合体(union)与结构体(struct)有何不同?o A. 联合体和结构体都共享相同的内存空间。

o B. 联合体允许成员变量共享同一段内存空间,而结构体的成员变量各自占用独特内存空间。

o C. 联合体的成员变量不能有相同的类型。

o D. 联合体不能在函数间传递。

答案:B解析:联合体的特性是所有成员共享同一段内存空间,而结构体的成员各自有自己的内存空间。

3.下面的代码片段中,结构体Person定义了一个成员变量name和一个成员函数printName。

在C语言中,这段代码的语法是否正确?o B. 错误,C语言的结构体不能定义成员函数。

o C. 错误,printName函数的定义中缺少返回类型。

o D. 错误,printName函数定义需要在结构体定义外部。

答案:B解析:C语言的结构体不具备成员函数,不能在结构体内直接定义函数。

4.如果一个结构体包含多个成员,结构体的大小如何确定?o A. 结构体的大小是其所有成员大小的总和。

o B. 结构体的大小是其最长成员的大小。

o C. 结构体的大小是其所有成员大小的总和,加上成员间可能的填充大小,以满足对齐要求。

o D. 结构体的大小是所有成员中最大小别的成员乘以成员数量。

答案:C解析:结构体的大小是成员变量大小的总和加上为了内存对齐而添加的填充大小。

5.在C语言中,使用typedef struct的目的何在?o A. 为了使结构体的定义更复杂。

结构体与联合体习题含答案

结构体与联合体习题含答案

)(含答案结构体与联合体习题结构体与联合体习题2013年选择题1、若程序中有以下的说明和定义:struct abc{ int x;char y; } 花括号后少了分号。

struct abc s1,s2;。

则会发生的情况是______B) 程序将顺序编译、连接、执行A) 编译时错D) 能顺序通过编译、但连接出错C) 能顺序通过编译、连接、但不能执行2、有以下程序段struct st{ int x; int *y;}*pt;int a[]={1,2};b[]={3,4};struct stc[2]={10,a,20,b};pt=c;的是以下选项中表达式的值为11D) (pt++)->x C) ++pt->x A)*pt->y B) pt->x、有以下说明和定义语句3struct student{ int age; char num[8];};,?403}};structstudent *p=stu;______。

以下选项中引用结构体变量成员的表达式错误的是 stu[3].age D)B)p->num C) (*p).num A) (p++)->num 4、设有如下枚举类型定义 enum language{Basic=3,Assembly=6,Ada=100,COBOL,Fortran};。

Fortran枚举量的值为______D) 103 102 B) 7 C) A) 4。

、以下叙述中错误的是_________5增加新的类型可以通过typedef A)typedef可以用将已存在的类型用一个新的名字来代表B)typedef定义新的类型名后,原有类型名仍有效C)用typedef可以为各种类型起别名,但不能为变量起别名D)用6、有以下程序段typedef struct NODE{ int num; struct NODE *next;} OLD;以下叙述中正确的是A)以上的说明形式非法 B) NODE是一个结构体类型C) OLD是一个结构体类型 D) OLD是一个结构体变量7、以下选项中不能正确把cl定义成结构体变量的是______。

C语言各章节单元测试题及答案——结构体与共用体

C语言各章节单元测试题及答案——结构体与共用体

第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。

第十章结构体与共用体

第十章结构体与共用体

试题汇编之:结构体与共用体一.选择题1.共用体定义为“union data{char ch;int x;}a;”下列语句正确的是。

A:a.ch=‟x‟;a=10; B:a a=‟x‟,10;C:a.x=10;a.ch=‟x‟; D:a=‟x‟;2.共用体定义为“union data{char ch;int x;}a;”下列语句不正确的是。

A:a={…x‟,10}; B:a.x=10;a.x++;C:a.ch=‟x‟;a.ch++; D:a.x=10;a.ch=‟x‟;3.对于:struct node{double x;char c;}*p;下列哪个赋值是错的。

A:p->x=2B:p.x=2.0 C.p->c=2 D.(*p).c=‟a‟4.对于以下结构定义:struct{int len;char *str;}*p;(*p)->str++中的++加在。

A:指针str上B:指针p上. C.str所指的内容上 D:表达式语法有错5.对如下定义:struct{char a1;int a2;}xx; union{char a1;int a2;int a3;}yy;如果sizeof(xx)的值为3,则sizeof(yy)的值应为:A:2 B:4 C:5 D:定义有错6.以下结构体变量定义语句中错误的是。

A.struct staffer{ long int code; float salary;} one;B.struct staffer{ long int code; float salary;} staffer one;C.typedef struct { long int code ; float salary;} STAFFER;D.struct { long int code; float salary; }one;-7.形如上题中定义的结构体变量,下列对此变量的输入形式中正确的是。

国家二级C语言(结构体和共用体、文件)机试模拟试卷3(题后含答案及解析)

国家二级C语言(结构体和共用体、文件)机试模拟试卷3(题后含答案及解析)

国家二级C语言(结构体和共用体、文件)机试模拟试卷3(题后含答案及解析)题型有:1. 选择题选择题1.若有语句typedef struet S{int g;char h;}T;,则下列叙述中正确的是( )。

A.可用S定义结构体变量B.可用T定义结构体变量C.S是struet类型的变量D.T是struet S类型的变量正确答案:B解析:本题考查typedef重新声明一种结构体类型。

那么T为结构体类型,而不是结构体变量,所以B选项正确。

知识模块:结构体和共用体2.设有语句typedef struet TT{char c;int a[4];}CIN;,则下列叙述中正确的是( )。

A.CIN是struet TT类型的变量B.TT是struet类型的变量C.可以用TT定义结构体变量D.可以用CIN定义结构体变量正确答案:D解析:本题考查typedef重新声明一种结构体类型。

其中CIN为结构体类型名,而不是结构体变量,所以D选项正确。

知识模块:结构体和共用体3.下列叙述中错误的是( )。

A.可以用typedef将已存在的类型用一个新的名字来代表B.可以通过typedef增加新的类型C.用typedef定义新的类型名后,原有类型名仍有效D.用typedef可以为各种类型起别名,但不能为变量起别名正确答案:B解析:本题考查typedef的用法。

typedef并不是增加一种新的类型,而是对已存在的类型用一个新的名字来代表,所以B选项错误。

知识模块:结构体和共用体4.有以下程序:#include<stdio.h>main( ){struet STU{char name[9];char sex;double score[2];};struet STU a={“Zhao”,’m’,85.0,90,0},b={“Qian”,’f’,95.0,92.0};b=a;prinff(“%s,%c,%2.0f,%2.0f\n”,b.name,b.sex,b.score[0],b.score[1]);}程序的运行结果是( )。

c高级试题及答案

c高级试题及答案

c高级试题及答案C高级试题及答案1. 问题:解释C语言中的指针和引用的区别。

答案:在C语言中,指针是一个变量,它存储了另一个变量的内存地址。

指针可以被重新赋值指向不同的内存地址。

引用则是一种别名,它在声明时必须初始化,并且不能改变指向。

引用与指针的主要区别在于,引用必须在声明时初始化,并且不能重新赋值。

2. 问题:描述C语言中结构体和联合体的区别。

答案:结构体(struct)是一种构造数据类型,允许将多个不同类型的数据项组合成一个单一的数据结构。

结构体中的每个成员可以是不同的数据类型,并且每个成员占据不同的内存空间。

联合体(union)也是一种构造数据类型,它允许在相同的内存位置上存储不同的数据类型。

联合体中的所有成员共享相同的内存空间,一次只能存储一个成员的值。

3. 问题:解释C语言中的预处理器指令`#include`的作用。

答案:预处理器指令`#include`用于将指定的文件包含到当前的源文件中。

它允许程序员在不同的源文件中共享代码,并且可以包含标准库的头文件,以便使用库中定义的数据类型、函数和宏。

`#include`指令可以带双引号或尖括号,双引号用于包含用户自定义的头文件,而尖括号用于包含标准库的头文件。

4. 问题:如何使用C语言实现文件的读写操作?答案:在C语言中,可以使用标准I/O库函数来实现文件的读写操作。

`fopen`函数用于打开文件,`fprintf`函数用于向文件写入数据,`fscanf`函数用于从文件读取数据,`fclose`函数用于关闭文件。

例如,使用`fopen`函数打开文件后,可以使用`fprintf`向文件写入字符串,使用`fscanf`读取文件内容,最后使用`fclose`关闭文件。

5. 问题:解释C语言中的递归函数。

答案:递归函数是一种自我调用的函数,它在其定义中调用自己。

递归函数通常用于解决可以分解为更小、相似问题的问题。

递归函数必须有一个明确的退出条件,以防止无限递归。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2013年结构体与联合体习题选择题1、若程序中有以下的说明和定义:struct abc{ int x;char y; } 花括号后少了分号。

struct abc s1,s2;则会发生的情况是______。

A) 编译时错B) 程序将顺序编译、连接、执行C) 能顺序通过编译、连接、但不能执行D) 能顺序通过编译、但连接出错2、有以下程序段struct st{ int x; int *y;}*pt;int a[]={1,2};b[]={3,4};struct st c[2]={10,a,20,b};pt=c;以下选项中表达式的值为11的是A) *pt->y B) pt->x C) ++pt->x D)(pt++)->x3、有以下说明和定义语句struct student{ int age; char num[8];};struct student stu[3]={{20,"200401"},{21,"200402"},{19,"200403"}};struct student *p=stu;以下选项中引用结构体变量成员的表达式错误的是______。

A) (p++)->num B) p->num C) (*p).num D) stu[3].age4、设有如下枚举类型定义enum language {Basic=3,Assembly=6,Ada=100,COBOL,Fortran};枚举量Fortran的值为______。

A) 4 B) 7 C) 102 D) 1035、以下叙述中错误的是_________。

A)可以通过typedef增加新的类型B)可以用typedef将已存在的类型用一个新的名字来代表C)用typedef定义新的类型名后,原有类型名仍有效D)用typedef可以为各种类型起别名,但不能为变量起别名6、有以下程序段typedef struct NODE{ int num; struct NODE *next;} OLD;以下叙述中正确的是A)以上的说明形式非法B) NODE是一个结构体类型C) OLD是一个结构体类型D) OLD是一个结构体变量7、以下选项中不能正确把cl定义成结构体变量的是______。

1.typedef struct{int red;int green;int blue;} COLOR;COLOR cl;2.struct color cl{ int red;int green;int blue;};3.struct color{ int red;int green;int blue;}cl;4.struct{int red;int green;int blue;}c1;A) 1 B) 2C) 3 D) 48、设有以下语句typedef struct S{ int g; char h;} T;则下面叙述中正确的是______。

A)可用S定义结构体变量B)可以用T定义结构体变量C) S是struct类型的变量D) T是struct S类型的变量9、设有如下说明typedef struct ST{long a;int b;char c[2];} NEW;则下面叙述中正确的是_____。

A)以上的说明形式非法B) ST是一个结构体类型C) NEW是一个结构体类型D) NEW是一个结构体变量10、以下对结构体类型变量td的定义中,错误的是______。

A) typedef struct aa B) struct aa { int n; { int n;float m; float m;}AA; };AA td; struct aa td;C) struct D) struct{ int n; { int n;float m; float m;}aa; }td;struct aa td;11、根据下面的定义,能打印出字母M的语句是_____。

struct person { char name[9]; int age;};struct person class[10]={"John",17, "Paul",19,"Mary",18, "Adam",16};A) printf("%c\n",class[3].name); B)printf("%c\n",class[3].name[1]);C) printf("%c\n",class[2].name[1]); D)printf("%c\n",class[2].name[0]);12、设有以下语句:struct st {int n; struct st *next;};static struct st a[3]={5,&a[1],7,&a[2],9,'\0'},*p;p=&a[0];则表达式的值是6。

A) p++ ->n B) p->n++ C) (*p).n++ D) ++p->n13、下面程序的输出结果为} *p;int dt[4]={10,20,30,40};main(){ p=aa;printf("%d\n", ++( *p->y));}A) 10 B) 50 C) 51 D) 6020 60 60 7020 21 21 31 14、若已建立下面的链表结构,指针p、s分别指向图中所示的结点,则不能将s所指的结点插入到链表末尾的语句组是__________。

A) s->next=NULL; p=p->next; p->next=s;B) p=p->next; s->next=p->next; p->next=s;C) p=p->next; s->next=p; p->next=s;D) p=(*p).next; (*s).next=(*p).next; (*p).next=s;15、下面程序的输出是main(){ enum team {my,your=4,his,her=his+10};printf("%d %d %d %d\n",my,your,his,her);}A) 0 1 2 3 B) 0 4 0 10 C) 0 4 5 15 D) 1 4 5 1516、下面程序的输出是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) 617、设有如下定义:struct sk{int a;float b;}data,*p;若有p=&data;,则对data中的a域的正确引用是__________。

A) (*p).data.a B)(*p).a C) p->data.a D) p.data.a18、有以下程序: *#include<stdio.h>union pw{ int i; char ch[2]; } a;main(){ a.ch[0]=13; a.ch[1]=0; printf("%d\n",a.i); }程序的输出结果是。

(注意: ch[0]在低字节,ch[1]在高字节。

)A) 13 B) 14 C) 208 D) 20919、已知字符0的ASCII码为十六进制的30,下面程序的输出是___________。

main(){ union { unsigned char c;unsigned int i[4];} z;z.i[0]=0x39;z.i[1]=0x36;printf("%c\n",z.c);}A) 6 B) 9 C) 0 D) 320、字符'0'的ASCII码的十进制数为48,且数组的第0个元素在低位,则以下程序的输出结果是_____________。

#include<stdio.h>main( ){ union { int i[2]; long k; char c[4]; }r,*s=&r;s->i[0]=0x39;s->i[1]=0x38;printf("%c\n",s->c[0]) ; }A) 39 B) 9 C) 38 D) 8填空题1、以下函数creat用来建立一个带头结点的单向链表,新产生的结点总是插在链表的末尾。

单向链表的头指针作为函数值返回.请填空:#include<stdio.h>struct list { char data; struct list * next; };struct list * creat(){ struct list * h,* p,* q;char ch;h=(struct list *) malloc(sizeof(struct list));p=q=h;ch=getchar();while(ch!='?'){ p=(struct list *)malloc(sizeof(struct list));p->data=ch;p->next=p;q=p;ch=getchar();}p->next='\0';return(h);}2、有以下说明定义和语句,可用a.day引用结构体成员day, 请写出引用结构体成员 a.day的其它两种形式(*b).day、b->day 。

struct{int day;char mouth;int year;}a,*b; b=&a;3、现有如图所示的存储结构,每个结点含两个域,data是指向字符串的指针hea域,next是指向结点的指针域。

请填空完成此结构的类型定义和说明。

struct link{ char *data ; struct link *next;} *head;4、若有以下说明和定义语句,则变量w在内存中所占的字节数是40。

union aa{ float x, y;char c[6];};struct st { union aa v; float w[5]; double ave; } w;//325、设有以下结构类型说明和变量定义,则变量a在内存所占字节数是32__ 。

相关文档
最新文档