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

(完整版)结构体与联合体习题与参考答案第八章结构体与联合体选择题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定义成结构体变量的是______。
c语言二级考试试题及答案

c语言二级考试试题及答案C语言二级考试试题及答案一、选择题(每题2分,共20分)1. 下列关于C语言中数组的描述,正确的是:A. 数组名是一个变量名B. 数组名是一个常量C. 数组名是一个指针D. 数组名是一个函数答案:B2. 以下哪个是C语言中的合法变量名?A. 2variableB. variable-nameC. variable_nameD. variable name答案:C3. 在C语言中,以下哪个是正确的字符串字面量?A. "Hello World"B. 'Hello World'C. "Hello World" + "Hello World"D. "Hello\nWorld"答案:D4. C语言中,以下哪个不是标准输入输出库函数?A. printf()B. scanf()C. getchar()D. puts()答案:C5. 下列哪个是C语言中的条件语句?A. ifB. switchC. forD. while答案:A6. C语言中,以下哪个是正确的函数定义?A. int function_name(int x, int y) { /* ... */ }B. int function_name(int x, int y);C. int function_name(int x, y) { /* ... */ }D. int function_name(int x; int y) { /* ... */ }答案:A7. 在C语言中,以下哪个是正确的递归函数调用?A. function_name(x)B. function_name(x, y)C. function_name(function_name(x))D. function_name(&x)答案:C8. 在C语言中,以下哪个是正确的结构体定义?A. struct person { int age; char name[50]; };B. struct person { int age; char name[50] }C. struct person { int age; char name[50]; }D. struct person { int age; char name[50] } person;答案:A9. 在C语言中,以下哪个是正确的指针声明?A. int *ptr;B. int ptr*;C. *int ptr;D. int * ptr;答案:A10. 下列哪个是C语言中的位运算符?A. &&B. ||C. &D. ++答案:C二、填空题(每题2分,共10分)1. C语言中,使用________运算符可以实现两个整数的按位与操作。
编程选择题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. 为了使结构体的定义更复杂。
c高级面试题及答案

c高级面试题及答案C高级面试题及答案1. 问题:请解释C语言中的指针和引用的区别。
答案:在C语言中,指针是一个变量,它存储了另一个变量的内存地址。
指针可以被重新赋值为其他地址,也可以被解引用,访问或修改它所指向的内存中的数据。
而引用在C语言中并不存在,这是C++的一个特性。
在C++中,引用是一个别名,它为一个已存在的变量提供了另一个名字。
一旦引用被初始化,它就不能被重新赋值为另一个变量的引用,也不能被解引用,因为引用本身就是别名。
2. 问题:C语言中如何实现函数的递归调用?答案:在C语言中,实现函数的递归调用需要在函数内部调用自身。
递归函数通常包含一个或多个终止条件,以防止无限递归。
例如,计算阶乘的递归函数可以这样实现:```cint factorial(int n) {if (n == 0) return 1; // 终止条件return n * factorial(n - 1); // 递归调用}```3. 问题:解释C语言中的结构体和联合体的区别。
答案:结构体(struct)和联合体(union)都是C语言中用于创建自定义数据类型的复合数据结构。
结构体可以包含不同类型的多个成员,每个成员都占据自己的内存空间。
联合体则是一种特殊的结构体,它允许所有成员共享相同的内存位置。
在任何时刻,联合体只能存储一个成员的值,这个值的类型决定了联合体的大小。
4. 问题:C语言中如何实现多线程编程?答案:C语言本身不直接支持多线程编程,但可以通过使用POSIX 线程库(pthreads)来实现。
首先需要包含头文件`<pthread.h>`,然后定义线程函数,创建和初始化线程,最后同步线程的执行。
例如: ```c#include <pthread.h>void* thread_function(void* arg) {// 线程执行的代码return NULL;}int main() {pthread_t thread_id;pthread_create(&thread_id, NULL, thread_function, NULL);pthread_join(thread_id, NULL);return 0;}```5. 问题:什么是C语言中的静态存储类?答案:静态存储类(static)在C语言中用于控制变量和函数的生命周期和作用域。
结构体与公用体 习题十及参考答案

住址、入学成绩)的信息。请在输入10名教师和学生的信息后, 按姓名进行排序,最后按排序后的顺序进行输出,对于教师要输 出姓名、单位、住址和职称,对学生要输出姓名、班级、住址和 入学成绩。请编程实现。
结构体与联合体习题含答案

)(含答案结构体与联合体习题结构体与联合体习题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语言各章节单元测试题及答案——结构体与共用体

第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 abc{2. int i;3. char m;4. };1. 在联合体abc中,整型量i和字符m公⽤同⼀内存位置。
2. 当⼀个联合被说明时,编译程序⾃动地产⽣⼀个变量,其长度为联合中最⼤的变量长度。
========================================================================================================结构体变量所占内存长度是各成员占的内存长度的总和。
共同体变量所占内存长度是各最长的成员占的内存长度。
共同体每次只能存放哪个的⼀种!!共同体变量中起作⽤的成员是最后⼀次存放的成员,在存⼊新的成员后原有的成员失去了作⽤!=====================================================================================Struct与Union主要有以下区别:1. struct和union都是由多个不同的数据类型成员组成, 但在任何同⼀时刻, union中只存放了⼀个被选中的成员, ⽽struct的所有成员都存在。
在struct中,各成员都占有⾃⼰的内存空间,它们是同时存在的。
⼀个struct变量的总长度等于所有成员长度之和。
在Union中,所有成员不能同时占⽤它的内存空间,它们不能同时存在。
Union变量的长度等于最长的成员的长度。
2. 对于union的不同成员赋值, 将会对其它成员重写, 原来成员的值就不存在了, ⽽对于struct的不同成员赋值是互不影响的。
在C/C++程序的编写中,当多个基本数据类型或复合数据结构要占⽤同⼀⽚内存时,我们要使⽤联合体;当多种类型,多个对象,多个事物只取其⼀时(我们姑且通俗地称其为“n 选1”),我们也可以使⽤联合体来发挥其长处。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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__ 。