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

(完整版)结构体与联合体习题与参考答案第八章结构体与联合体选择题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名教师和学生的信息后, 按姓名进行排序,最后按排序后的顺序进行输出,对于教师要输 出姓名、单位、住址和职称,对学生要输出姓名、班级、住址和 入学成绩。请编程实现。
第十章结构体与共用体

试题汇编之:结构体与共用体一.选择题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.形如上题中定义的结构体变量,下列对此变量的输入形式中正确的是。
联合体和结构体

联合体和结构体联合体⽤途:使⼏个不同类型的变量共占⼀段内存(相互覆盖)结构体是⼀种构造数据类型⽤途:把不同类型的数据组合成⼀个整体-------⾃定义数据类型总结:声明⼀个联合体: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”),我们也可以使⽤联合体来发挥其长处。
国家二级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]);}程序的运行结果是( )。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
)(含答案结构体与联合体习题结构体与联合体习题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定义成结构体变量的是______。
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) 2 C) 3 D) 48、设有以下语句typedef struct S{ int g; char h;} T;则下面叙述中正确的是______。
A)可用S定义结构体变量可以用T定义结构体变量B)是struct类型的变量C) S是struct S 类型的变量D) T9、设有如下说明typedef struct ST{long a;int b;char c[2];} NEW;_____。
则下面叙述中正确的是A)以上的说明形式非法B) ST 是一个结构体类型C) NEW是一个结构体类型是一个结构体变量D) NEW。
、以下对结构体类型变量td的定义中,错误的是______10A) typedef struct aa B) struct aa{ int n; { int n;float m; float m;}; }AA;struct aa td; AA td;C) D) struct 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、下面程序的输出结果为struct st这里是设了一个结构体指针变量*p。
这个结构体中又嵌套了一个指针变量*y。
{ int x;然后再设了一个普通数数组dt[4]。
然后下一步是给结构体定义的一个变量数组:de[4],并且分别给结构体内的 int *y;成员直接赋值:里面分别赋了四次。
} *p;int dt[4]={10,20,30,40};structstaa[4]={ 50,&dt[0],60,&dt[1],70,&dt[2],80,&dt[3] };main()直接赋值。
因为是x和*y这里面是给结构体里的50;对应xdt[4]所以赋了四次。
第一次:{ p=aa; 10.然后这样一次下去。
也就是对应的是地址*yde[0]printf(%d\n, ++p->x );printf(%d\n, (++p)->x);)结构体与联合体习题(含答案 printf(%d\n, ++( *p->y));}D) 60B) 50C) 51 A) 10 20 60 60 7020 21 21 31所指的结点插分别指向图中所示的结点,则不能将s14、若已建立下面的链表结构,指针p、s。
入到链表末尾的语句组是__________data nextA) s->next=NULL; p=p->next; p->next=sB) p=p->next; s->next=p->next; p->next=s E FNULL headC p=p->next; s->next=p; p->next=sD) p=(*p).next; (*s).next=(*p).next; (*p).next=s1、下面程序的输出s G pmain(){ 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);} 9 C) 0 D) 3B)A) 6 则以下程序的输出结果是,0个元素在低位ASCII码的十进制数为48,且数组的第'0'20、字符的。
_____________#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]) ; } D) 8A) 39 B) 9 C) 38 填空题用来建立一个带头结点的单向链表,新产生的结点总是插在链表的末尾。
单、以下函数creat1: .请填空向链表的头指针作为函数值返回#include<stdio.h>struct list { char data; struct list * next; };struct list * creat(){ struct list* h,* p,* q;char ch; malloc(sizeof(struct list));h= (struct list *)p=q=h;ch=getchar();while(ch!='?')malloc(sizeof(struct list));{ p= (struct list *)p->data=ch;p->next=p;q=p;ch=getchar();}p->next='\0';return(h);}的a.day引用结构体成员day, 请写出引用结构体成员2、有以下说明定义和语句,可用a.day 。
b->day 、(*b).day其它两种形式。
hgf4wYrstruct{int day;char mouth;int year;}a,*b; b=&a;是指向是指向字符串的指针域,next3、现有如图所示的存储结构,每个结点含两个域,datahead)含答案结构体与联合体习题( 结点的指针域。
请填空完成此结构的类型定义和说明。
struct link;} *head; struct link *next { char *data ;。