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

合集下载

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

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

(完整版)结构体与联合体习题与参考答案第八章结构体与联合体选择题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语言二级考试试题及答案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

编程选择题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高级面试题及答案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语言中用于控制变量和函数的生命周期和作用域。

结构体与公用体 习题十及参考答案

结构体与公用体 习题十及参考答案
习题十 1、 单选题 1、下面的四个运算符中,优先级最低的是( )。 A)( ) B). C)-> D)++ 2、已知: struct {int i; char c; float a; }test; 则sizeof(test)的值是( )。 A)4 B)5 C)6 D)7 3、选择出错误的函数定义( )。 A)struct tree funa(s) B)int *funb(s) C)struct tree *func(s) D)int *fund(s) Struct tree s[ ]; char s[ ]; char **s; char *s[10][ ]; { … {… {… {… } } } } 4、以下对C语言中联合类型数据的正确叙述是( )。 A) 一旦定义了一个联合变量后,即可引用该变量或该变量中的任 意成员 B) 一个联合变量中可以同时存放其所有成员 C) 一个联合变量中不能同时存放其所有成员 D) 联合类型数据可以出现在结构类体型定义中,但结构体类型数 据不能出现在联合类型定义中 5、已知函数原型为: struct tree *f(int x1,int x2,struct tree x3,struct tree *x4) 其中tree为已定义过的结构,且有下列变量定义: struct tree pt,*p;int i; 请选择正确的的函数调用语句( )。 A)&pt=f(10,&i,pt,p); B)p=f(i++,(int *)p,pt,&pt); C)p=f(i+1,&(i+2),*p,p); D)f(i+1,&i,p,p);
住址、入学成绩)的信息。请在输入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语言各章节单元测试题及答案——结构体与共用体

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”),我们也可以使⽤联合体来发挥其长处。

国家二级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语言程序设计(考研)一、单项选择题(每题2分,共20分)1. 下列关于C语言中数组的描述,错误的是()。

A. 数组的元素在内存中是连续存放的B. 数组的大小在程序运行时可以改变C. 数组的下标从0开始D. 数组一旦定义,其类型不能改变2. C语言中,以下哪个关键字用于声明函数?()A. intB. staticC. voidD. return3. 在C语言中,以下哪个操作符不能用于位操作?()A. &B. |C. ^D. %4. 下列关于C语言中指针的描述,正确的是()。

A. 指针的值是它所指向的变量的地址B. 指针变量的大小与它所指向的数据类型有关C. 指针可以存储任意类型的数据D. 指针变量不能被初始化为NULL5. C语言中,以下哪个不是标准库函数?()A. printf()B. scanf()C. malloc()D. strcpy()6. 在C语言中,以下哪个是正确的字符串字面量?()A. "Hello, World!"B. 'Hello, World!'C. "Hello", "World!"D. {"Hello", "World!"}7. C语言中,以下哪个语句可以正确实现循环结构?()A. whileB. do-whileC. forD. 所有选项都是8. 在C语言中,以下哪个是正确的函数原型声明?()A. int func(int a, int b);B. int func();C. int func(int, int);D. int func(int a; int b);9. C语言中,以下哪个操作符用于结构体成员的访问?()A. ->B. .C. ++D. --10. 下列关于C语言中函数的描述,错误的是()。

A. 函数可以嵌套定义B. 函数可以递归调用C. 函数可以有返回值D. 函数的参数可以是数组答案:1. B2. C3. D4. A5. D6. A7. D8. C9. B10. A二、简答题(每题10分,共20分)1. 请简述C语言中结构体和联合体的区别。

第8章结构型联合型和枚举型习题(C语言程序设计)

第8章结构型联合型和枚举型习题(C语言程序设计)

* char ;
* STP;
一单项选择题.6
某结构型变量定义如下,对该结构型变量中成员的 引用形式正确的是( )
struct abc{int s; char ch;}a1,*p; p=&a1;
A. a1->s B. p->ch C. p.ch D. *p.s
一单项选择题. 8. 若有下面的说明和定义: struct test m3 m1 { int m1; char m2; m2 float m3; ua union uu { char u1[c]; u1[5] int u2[2]; u2[2] }ua; }myaa; 则sizeof(struct test)的值是:
一单项选择题. 4.
定义如下结构型变量和结构型指针 struct sk { int a;float b}data,*p; 若指针p已经通过p=&data;指向结构型变量data,则引用 data中a成员的正确方式是: data p a A. (*p).data.a &data B. (*p).a C. p->data.a 结构体变量名.成员名 b D. p.data.a (*指针变量).成员 指针变量->成员
第8章 结构体联合体枚举
习题
一单项选择题. 1.
设有以下定义语句,下列叙述中不正确的是( struct ex { int x; float y ;char z ;}example; )
A. struct是结构型的保留字 B. example是结构型名 C. x,y,z是结构型成员名
D. ex是结构型名
D. struct abc {double a; char b[10]; }abc; struct abc s;

C语言常识结构体与联合体

C语言常识结构体与联合体

C语言常识结构体与联合体C语言常识结构体与联合体结构体与联合体是C语言的常见数据类型,可对C的基本数据类型进行组合使之能表示复杂的数据结构,意义深远,是优异代码的必备工具。

一.struct与union的基本用法,在语法上union与struct 相同,因此只以struct为例1.1 基本用法:1.struct AA{ int a; int b;}; //结构体的声明和定义2.struct AA s1; //变量的声明和定义3.s1.a=3; //变量的使用:1.2 在声明结构体的同时定义变量:1.struct AA{int a; int b}s2={1, 2}; //此处AA为可选项,初始化部分为可选2.s2.a=5; //变量的使用1.3 使用typedef 来简化struct的类型说明:1.typedef struct AA{int a; int b;}SAA;2.SAA s3, s4; //变量的声明和定义3.s3.a=8; //变量的使用1.4 使用时尤其注意后面的分号,必不可少;二.struct 与union的区别2.1 struct中的成员是按顺序依次排列,互相独立,在排列时引入了对齐问题(2.2);而union中的成员共用一块内存,起始地址都是相同的,即union中的成员是对同一地址的多个引用、对同一地址的多种表达方法。

2.2 struct的对齐问题对齐问题即struct中每个成员起始地址的分配。

为了可以快速访问到每个成员,(以EW430为例)编译器根据成员的类型放到合适的地址上,默认为2字节对齐。

如:Struct AA{char c; int d;}aa;假设aa被分配在地址N上,并且N为偶数,则aa.c的地址为N,aa.d的地址为N+2,而N+1地址未使用被浪费了。

对齐字节大小的指定:通过#pragma pack(n)来指定对齐字节的大小,n为某些常量(EW430中可取1,2,4,8,16),指定以n字节对齐。

C++语言选择题40道:C++结构体与联合.Tex

C++语言选择题40道:C++结构体与联合.Tex

C++结构体与联合试题1.结构体成员的访问哪个符号是正确的?o A. &o B. ->o C. .o D. ::答案: C解析: 结构体成员通过.操作符访问。

2.在C++中,结构体和类的主要区别是?o A. 结构体不能有方法o B. 类不能继承结构体o C. 结构体默认的访问属性是publico D. 类默认的访问属性是public答案: C解析: 结构体在C++中的默认访问属性是public,而类的默认访问属性是private。

3.联合体(union)成员的访问方式与结构体相同吗?o A. 不相同o B. 相同,但只在初始化时有效o C. 相同o D. 联合体不能访问成员答案: C解析: 联合体成员与结构体成员的访问方式相同,都是通过.或->操作符访问。

4.在C++中,联合体的成员变量共享什么?o A. 内存空间o B. 类别信息o C. 名称空间o D. 函数指针答案: A解析: 联合体的所有成员共享同一段内存空间。

5.结构体和联合体的成员初始化,以下说法正确的是?o A. 结构体成员不能初始化o B. 联合体成员只能在定义时初始化o C. 结构体和联合体成员都可以在定义时初始化o D. 结构体和联合体成员都不能在定义时初始化答案: C解析: 结构体和联合体成员都可以在定义时初始化。

6.以下哪种说法是关于结构体的?o A. 所有成员的总和决定了结构体的大小o B. 结构体成员不共享内存空间o C. 结构体成员的初始化顺序无关紧要o D. 结构体的大小等于最大成员的大小答案: A解析: 结构体的大小是其所有成员总和的大小。

7.以下代码union Data { int i; float f; } d;中,变量d.i和d.f共享多少字节?o A. 4字节o B. 8字节o C. 12字节o D. 16字节答案: A解析: union Data中的int和float类型数据在32位系统下都占用4字节,二者共享同一段内存。

9 结构体与共用体 答案

9 结构体与共用体 答案

9 结构体与共用体一、选择填空9.1 答案:C分析:在本题的说明中定义了一个名为wc的结构,它由两个成员组成:整型变量a和指针变量b。

在定义的同时说明了一个指向这一结构类型的指针变量p。

数组x0和x1都是含有两个整型元素的一维数组,并赋有初值。

x为一结构型数组,共有两个元素,每一个元素都具有struct wc型的结构(含有两个成员),并赋有初值。

执行p=x;语句后,p指向这一结构数组的首地址。

由于p指向了x数组的首地址,也就是x[0]的地址,所以答案A中的*p->b等价于*(x[0].b),其值为11(注意:运算符->优先于*);答案B中的p->a即是x[0].a,其值为100;答案C中的++p->a是找到p->a(其值为100),再将此值自增1,取增加1以后的值,故为101;答案D是先将指针p增1,指向x数组的第二个元素x[1],即(p++)->a在此等价于x[1].a,其值为300。

9.2 答案:D分析:本题中的初始数据的构成情况与上题相同。

如前所述,答案A的值为11;答案B的值与上题的答案D相同,为300;答案C是先取内容,后自增1,等价于*p->b, p++,故其值也为11;而答案D是p先自增1,指向x[1],后取值,等价于++p, *p->b,所以其值为31。

9.3 答案:D分析:关键字typedef是利用已定义的类型标识符来定义新的类型标识符。

它并不产生新的数据类型。

其一般形式为:typedef 类型名标识符;题中的long int就是一个已存在的类型名,而新定义的类型名BIGGY就代表着long int 这个类型标识符。

9.4 答案:D分析:由于本题中定义了一个名为st的结构,它由两个成员组成:一个是整型变量n;一个是指向自身结构的指针变量next。

接着又定义了具有这一类型的一维数组a和指针变量p。

a数组含有3个元素并赋有初值。

p指向a数组的第一个元素。

结构体和共用体习题

结构体和共用体习题

结构体和共用体习题习题六1. 从下列四个选项中选择一个正确的填入括号中。

(1)在说明一个结构体变量时系统分配给它的存储空间是( D)。

A该结构体中第一个成员所需存储空间 B该结构体中最后一个成员所需存储空间C该结构体中占用最大存储空间的成员所需存储空间 D该结构体中所有成员所需存储空间的总和(2)在说明一个共用体变量时系统分配给它的存储空间是(D )。

A该共用体中第一个成员所需存储空间 B该共用体中最后一个成员所需存储空间C该共用体中占用最大存储空间的成员所需存储空间 D该共用体中所有成员所需存储空间的总和(3)共用体类型在任何给定时刻, ( B)。

A所有成员一直驻留在内存中 B只有一个成员驻留在内存中 C部分成员驻留在内存中D没有成员驻留在内存中(4)以下定义结构体类型的变量st1,其中不正确的是(A )A typedef stuct student{int num; int age; }STD; STD st1; B struct student{int num,age; }st1; C struct{int num; float age; }st1;D struct student{int num; int age; };struct student st1;(5)已知职工记录描述为:struct workers {int no;char name[20]; char sex; struct {int day; int month; int year; }birth; };struct workers w;设变量w中的”生日”应是”1993年10月25日”,下列对”生日”的正确赋值方式是( C)。

A day=25; month=10; year=1993;B w.day=25w.month=10; w.year=1993;C w.birth.day=25; w.birth.month=10; w.birth.year=1993;D birth.day=25; birth.month=10; birth.year=1993;(6)设有如下定义:struct sk {int a; float b; }data,*p;若有p=&data;则对data中的a成员的正确引用是( B)。

结构体和联合体例题

结构体和联合体例题

第11章结构体与联合体例题例11-1.以下叙述中错误的是()。

2007.9A)用typedef可以增加新类型√B)typedef只是将已存在的类型用一个新的名字来代表C)用typedef可以为各种类型说明一个新名,但不能用来为变量说明一个新名D)用typedef为类型说明一个新名,通常可以增加程序的可读性例11-2 设有以下说明:typedef struct ST{lont a;int b;char c[2];}NEW;则下面叙述中正确的是()。

2005.4A) 以下说明形式非法B)ST是一个结构体类型C)NEW是一个结构体类型√D)NEW是一个结构体变量例11-3.有以下程序段:typedef struct node{int data;struct node *next;} *NODE;NOE p;以下叙述中正确的是()。

2007.4A)p是指向struct node结构变量的指针的指针B)NODE p;语句出错C) p是指向struct node结构变量的指针√D)p是struct node结构变量例11-4.设有说明:struct DATA{int year;int month;int day;};请写出一条定义语句,该语句定义d为上述结构体变量,并同时为其成员year、month、day依次赋值为2006、10、1:。

(2007.4)例11-5.以下程序运行后的输出结果是()(2005.9)#include<stdio.h>struct STU{int num;float TotalScore;};void f(struct STU p){struct STU s[2]={{20044,550},{20045,537}};p.num=s[1].num;p.TotalScore=s[1].TotalScore;}main(){struct STU s[2]={20041,703},{20042,580}};f(s[0]);printf("%d %3.0f\n",s[0].num,s[0].TotalScore);}程序运行后的输出结果是()。

C语言-第06讲-结构-答案.docx

C语言-第06讲-结构-答案.docx

第6讲结构体和共同体6.6强化练习6.6.1选择题[6-1] A)各成员所需内存量的总和[6-2JC) 一个共用体变量中不能同时存放其所有成员[6-3] C) stutype是用户定义的结构类型名[6-4] A)所有成员一直驻留在内存中[6-5] C) a不可以作为函数参数[6-6] D) ++[6-7] D) 7简析:按16位机[6-8] A) 4[6-9] D) int *fund( s )char *s[10][];{•••}[6-10] C) 10[6-11] C) p=f( i+l,&( i+2), *p, p);[6-12] D) s.birth.year= 1984;s.birth.month= 11;s. birth, day =11;[6-13] D) struct{ int num;float age;}student;struct student std 1;[6-14] D) 11简析:按16位机[6-15] B) ( *p ).a[6-16] D) printff "%c\n M, class[2].name[0]);[6-17] D) p=&stu.age[6-18] D) scan# "%d", p->age );[6-19] D) *ptr->il[6-20] B) p=( struct sk* )&data.n;[6-21 ] D) *p.age[6-22] D) *(++p)->m[6-23] C) (*p).sex[6-24] D) ++p・>n[6-25] D) (*++p).num[6-26] B) student.age[6-27] D) ++ptr->il[6-28] D) (int*)简析:动态分配存储空间函数,在头文件stdlib.h 中,void *malloc( size_t, size );分配size字节的内存。

c语言程序设计苏小红课后答案

c语言程序设计苏小红课后答案

c语言程序设计苏小红课后答案C语言程序设计是一门基础而重要的计算机编程课程,它为学生提供了学习程序设计的基本概念、原理和方法。

苏小红编写的《C语言程序设计》是一本广泛使用的教材,其课后习题答案对于学生理解和巩固知识点非常有帮助。

以下是部分课后习题的答案示例,以供参考。

第一章:C语言概述1. 问题:C语言的特点是什么?答案:C语言具有简洁、紧凑、灵活、高效等特点。

它是一种结构化语言,支持多种数据类型,并且具有丰富的运算符。

C语言的程序设计语言简洁,语法结构清晰,易于学习。

2. 问题:C语言的主要应用领域有哪些?答案:C语言广泛应用于系统软件、应用软件、嵌入式系统、操作系统、数据库管理系统等领域。

第二章:数据类型、运算符和表达式1. 问题:C语言中的基本数据类型有哪些?答案:C语言的基本数据类型包括整型(int)、字符型(char)、浮点型(float和double)等。

2. 问题:如何理解C语言中的运算符优先级?答案:C语言中的运算符优先级决定了表达式中各个运算符的执行顺序。

例如,乘除运算符的优先级高于加减运算符,括号内的运算优先级最高。

第三章:控制结构1. 问题:C语言中的三种基本控制结构是什么?答案:C语言中的三种基本控制结构是顺序结构、选择结构和循环结构。

2. 问题:if语句的基本形式有哪些?答案:if语句的基本形式包括单分支if语句、双分支if-else语句和多分支if-else if-else语句。

第四章:数组1. 问题:什么是一维数组?答案:一维数组是具有相同数据类型元素的集合,这些元素在内存中连续存储,可以通过索引访问。

2. 问题:如何声明和初始化一个一维数组?答案:声明一维数组的语法是 `type arrayName[arraySize];`。

初始化可以使用 `{value1, value2, ...}` 的方式,例如 `intarr[5] = {1, 2, 3, 4, 5};`。

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

相关文档
最新文档