练习题-第十章 结构体与共用体(有答案)

合集下载

结构体和共用体习题

结构体和共用体习题

习题六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)。

C语言试题库(完整版)

C语言试题库(完整版)

C语言试题库一、单项选择第一章C语言概述(1)一个C程序的执行是从A、本程序的MAIN函数开始,到MAIN 函数结束.B、本程序文件的第一个函数开始,到本程序文件的最后一个函数结束。

C、本程序的MAIN函数开始,到本程序的最后一个函数结束。

D、本程序文件的第一个函数开始,到本程序的MAIN函数结束。

(2)以下叙述正确的是A、在C程序中,MAIN函数必须位于程序的最前面.B、C程序的每行中只能写一条语句。

C、C语言本身没有输入输出语句。

D、在对一个C程序进行编译的过程中,可发现注释中的拼写错误。

(3)C语言规定,在一个源程序中,MAIN主函数的位置是在:A、必须在最前面。

B、必须在系统调用的库函数的后面C、可以在任意位置。

D、必须在最后面(4)一个C程序是由:A、一个主程序和若干子程序组成B、函数组成C、若干过程组成D、若干子程序组成(5)以下叙述不正确的是:A、一个C源程序可由一个或多个函数组成B、一个C源程序必须包含一个MAIN函数C、C程序的基本组成单位是函数D、在C程序中,注释说明只能位于一条语句的后面第二章数据类型、运算符与表达式(1)若x,i, j,k都是int型变量,则计算下面表达式后,x的值为x=( i=4, j=16,k=32)A、4B、16C、32D、52(2)下列四组选项中,均不是C语言键字的选项是A、define ,IF,typeB、getc,char, printfC、include,scanf,caseE、i f, struct, type(3)下面四个选项中,均是不合法的用户标识符的选项是A、A,P_0,doB、float,1a0,_AC、b—a, goto,intD、_123, temp,INT(4)若有代数式3ae/bc,则正确的C语言表达式是A、a/b/c*e*3B、3*a*e/bcC、3*a*e/b*cD、a*e/c/b*3(5)已知各变量的类型说明如下:int k, a,b;unsinged long w=5;double x=1。

结构体与共用体相关题目练习

结构体与共用体相关题目练习

结构体与共用体1.说明一个结构体变量时系统分配给它的内存是A)各成员所需要内存量的总和 B)结构体中第一个成员所需内存量C)成员中占内存量最大者所需的容量 D)结构中最后一个成员所需内存量2.C语言结构体类型变量在程序执行期间A)所有成员一直驻留在内存中 B)只有一个成员驻留在内存中C)部分成员驻留在在内存中 D)没有成员驻留在内存中3.设有以下说明语句struct stu { int a ; float b ; } stutype ;则下面的叙述不正确的是A) struct 是结构体类型的关键字 B) struct stu 是用户定义的结构体类型C) stutype 是用户定义的结构体类型名 D) a和b都是结构体成员名4.设有以下结构类型说明和变量定义,则变量a在内存所占字节数是【】。

struct stud { char num[6]; int s[4]; double ave; } a,*p;5.程序中有下面的说明和定义struct abc { int x;char y;}struct abc s1,s2;则会发生的情况是A)编译出错B)程序将顺利编译、连接、执行C)能顺利通过编译、连接、但不能执行 D)能顺利通过编译、但连接出错6.有如下定义struct person { char name[9]; int age;};struct person class[10]={ " Johu", 17,"Paul", 19,"Mary", 18,"Adam", 16};根据上述定义,能输出字母M的语句是A) prinft(" %c\n",class[3].name); B) printf(" %c\n",class[3].name[1]);C) prinft(" %c\n",class[2].name[1]); D) printf(" %c\n",class[2].name[0]);7.下面程序的输出是A)0 B)1 C)3 D)6main(){ struct cmplx { int x; int y;} cnum[2]={1,3,2,7};printf("%d\n",cnum[0].y/cnum[0].x*cnum[1].x);}8.下列程序的输出结果是A)5 B)6 C)7 D)8struct abc { int a, b, c; };main(){ struct abc s[2]={{1,2,3},{4,5,6}};int t;t=s[0].a+s[1].b;printf("%d \n",t);}9.有以下程序struct stu{ int num;char name[10];int age;};void fun(struct stu *p){ printf("%s\n" ,(*p).name); }main(){ struct stu students[3]={{9801,"Zhang",20} ,{9802,"Wang", 19} , {9803,"Zhao",18} };fun(students+2);}输出结果是A)Zhang B)Zhao C)Wang D)1810.设有如下定义: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.a11.下面程序的输出结果为int dt[4]={10 ,20 ,30 ,40} ;struct st aa[4]={50,&dt[0],60,&dt[1],70,&dt[2],80,&dt[3] } ;main(){ p=aa ;printf("%d\n" , ++p->x );printf("%d\n" ,(++p)->x);printf("%d\n" , ++( *p->y));}A)10 B)50 C)51 D)6020 60 60 7020 21 21 3112.为了建立如图所示的存储结构(即每个结点含两个域, data 是数据域,next是指向结点的指针域,)请填空。

结构体、共用体

结构体、共用体

结构体,公用体一、选择题:(20题)1.本题序号:552当说明一个结构体变量时系统分配给它的内存是A 各成员所需内存量的总和;B 结构体中第一个成员所需的内存量;C 成员中内存量最大者所需的容量;D 结构体中最后一个成员所需的内存量;参考答案 A2.本题序号:554当说明一个共用体变量时系统分配给它的内存是A 各成员所需内存量的总和;B 第一个成员所需的内存量;C 成员中内存量最大者所需的容量;D 最后一个成员所需的内存量;参考答案 C3.本题序号:555下面对共用体类型的叙述描述正确的是A 可以对共用体变量名直接赋值;B 一个共用体变量中可以同时存放其所有成员;C 一个共用体变量中不可以同时存放其所有成员;D 共用体类型定义中不能出现结构体类型的成员;参考答案 B4.本题序号:639设有以下说明语句typedef struct{ int n;char ch[8];}PER;则下面叙述中正确的是A PER 是结构体变量名B PER是结构体类型名C typedef struct 是结构体类型D struct 是结构体类型名参考答案B5.本题序号:748设有如下说明typedef struct ST{long a;int b;char c[2];} NEW;则下面叙述中正确的是()。

A 以上的说明形式非法B ST是一个结构体类型C NEW是一个结构体类型D NEW是一个结构体变量参考答案 C6.本题序号:756以下对结构体类型变量td的定义中,错误的是A typedef struct aa{int n;float m;}AA;AA td;B struct aa{int n;float m;} ;struct aa td;C struct{int n;float m;}aa;struct aa td;D struct{int n;float m;}td;参考答案C7.本题序号:774有以下程序段typedef struct NODE{ int num; struct NODE *next;} OLD;述中正确的是()。

c语言结构体共用体数据类型求大小例题

c语言结构体共用体数据类型求大小例题

c语言结构体共用体数据类型求大小例题(原创版)目录一、C 语言结构体和共用体的概念二、结构体和共用体的大小计算方法三、例题解析四、总结正文一、C 语言结构体和共用体的概念C 语言中,结构体和共用体是两种特殊的数据类型,它们都可以用来描述一个复合数据类型。

结构体和共用体的主要区别在于它们存储数据的方式不同。

结构体是一种复合数据类型,它可以包含多个不同类型的成员变量。

结构体中的成员变量按照定义的顺序排列,并且每个成员变量都有一个唯一的名字。

结构体可以看作是一个数据容器,它可以存储多个相关类型的数据。

共用体是一种特殊的结构体,它的每个成员变量都共享同一段内存空间。

共用体的每个成员变量都有一个基地址,它们之间的关系是连续的。

共用体的大小等于其最大成员变量的大小。

二、结构体和共用体的大小计算方法结构体和共用体的大小计算方法相同,都是按照定义的顺序依次计算每个成员变量的大小,并累加得到总体大小。

需要注意的是,结构体和共用体的大小通常会进行对齐处理,以提高数据访问的效率。

三、例题解析假设有一个结构体如下:```cstruct example {int a;char b;float c;};```首先,我们需要知道每个成员变量的大小。

在 32 位系统下,int 类型占用 4 个字节,char 类型占用 1 个字节,float 类型占用 4 个字节。

因此,结构体 example 的大小为:```size = 4(int a 的大小) + 1(char b 的大小) + 4(float c 的大小)= 9```接下来,我们需要考虑对齐问题。

在 32 位系统下,数据对齐的粒度是 4 个字节。

因此,结构体 example 的大小应该为 4 的倍数。

由于 9 不是 4 的倍数,所以需要进行对齐处理。

将结构体 example 的大小调整为 12,这样每个成员变量都可以从 4 的倍数地址开始存储。

```size = 12```因此,结构体 example 的大小为 12 字节。

结构体和共用体习题

结构体和共用体习题

习题六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)。

C语言(结构体与共用体)习题与答案

C语言(结构体与共用体)习题与答案
A.int strcmp4(char *s,char *t)
{ for ( ; *s==*t; s++, t++ )
if (!*s) return 0 ;
return (*t-*s) ;
}
B.int strcmp2(char *s,char *t)
{ for ( ; *s++=*t++; )
if (!*s) return 0 ;
1、指针的含义是()。
A.名
B.一个标志
C.地址
D.值
正确答案:C
2、若已定义a为int型变量,则下面的语句中正确的是()。
A.int *p=*a;
B.int *p=&a;
C.int *p=a;
D.int p=&a;
正确答案:B
3、若有定义:int x,*p;则以下正确的赋值表达式是()。
A.*p=&x
sub(10,5,&a);
sub(7,a,&b);
sub(a,b,&c);
printf("%4d,%4d,%4d\n",a,b,c);
}
A.5,-2,-7
B.5,2,3
C.-5,-12,7
D.-5,-12,-7
正确答案:D
11、以下程序运行的结果是()。
#include<stdio.h>
void main()
D.char *s="china";等价于char *s; s="china" ;
正确答案:D
15、函数strcmp(char *s,char *t)功能是()。

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

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

第十章结构体与共用体

第十章结构体与共用体

试题汇编之:结构体与共用体一.选择题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语言 选择题库第10章 结构体与共用体

C语言 选择题库第10章 结构体与共用体

第10章结构体与共用体1.以下叙述中错误的是()。

A) 可以通过typedef增加新的类型B) 可以用typedef将已存在的类型用一个新的名字来代表C) 用typedef定义新的类型名后,原有类型名仍有效D) 用typedef可以为各种类型起别名,但不能为变量起别名参考答案:A【解析】关键字typedef的作用只是将C语言中的已有的数据类型作了置换,并不是增加新的类型,所以A)错误。

2.以下关于typedef的叙述错误的是A) 用typedef可以增加新类型B) typedef只是将已存在的类型用一个新的名字来代表C) 用typedef可以为各种类型说明一个新名,但不能用来为变量说明一个新名D) 用typedef为类型说明一个新名,通常可以增加程序的可读性参考答案:A【解析】typedef并不是增加了新类型,而是用一个新名字替代已存在的类型,不能为变量说明一个新名,使用typedef可以增强移植性。

所以A选项错误。

3.若有以下语句typedef struct S{ int g; char h; } T;以下叙述中正确的是A) 可用S定义结构体变量B) 可用T定义结构体变量C) S是struct 类型的变量D) T是struct S类型的变量参考答案:B【解析】本题考查typedef重新声明一种结构体类型,那么T为结构体类型,而不是结构体变量,所以B选项正确。

4.设有以下语句typedef struct TT{ char c; int a[4]; } CIN;则下面叙述中正确的是A) CIN是struct TT类型的变量B) TT是struct类型的变量C) 可以用TT定义结构体变量D) 可以用CIN定义结构体变量参考答案:D【解析】本题考查typedef重新声明一种结构体类型,其中CIN为结构体类型名,而不是结构体变量,所以D 选项正确。

5.以下叙述中错误的是A) 可以用typedef将已存在的类型用一个新的名字来代表B) 可以通过typedef增加新的类型C) 用typedef定义新的类型名后,原有类型名仍有效D) 用typedef可以为各种类型起别名,但不能为变量起别名参考答案:B【解析】本题考查typedef的用法,typedef并不是增加一种新的类型,而是对已存在的类型用一个新的名字来代表,所以B选项错误。

谭浩强c语言程序设计习题集

谭浩强c语言程序设计习题集

目录重要次重要重复或欲删除基础第一章 C语言概述1.1 选择题1.2 填空题第二章数据类型、运算符与表达式2.1 选择题2.2 填空题第三章最简单的C程序设计3.1 选择题3.2 填空题第四章逻辑运算和判断选取控制4.1 选择题4.2 填空题4.3 编程题第五章循环控制5.1 选择题5.2 填空题5.3 编程题第六章数组6.1 选择题6.2 填空题6.3 编程题第七章函数7.1 选择题7.2 填空题7.3 编程题第八章编译预处理8.1 选择题8.2 填空题8.3 编程题第九章指针9.1 选择题9.2 填空题9.3 编程题第十章结构体和共用体10.1 选择题10.2 填空题10.3 编程题第十一章位运算11.1 选择题11.2 填空题11.3 编程题第十二章文件12.1 选择题12.2 填空题12.3 编程题第一章 C语言概述1.1 选择题*1.1一个C程序的执行是从。

A)本程序的main函数开始,到main函数结束B)本程序文件的第一个函数开始,到本程序文件的最后一个函数结束C)本程序的main函数开始,到本程序文件的最后一个函数结束D)本程序文件的第一个函数开始,到本程序main函数结束参考答案:A参考分析:C语言总是从main函数开始,main函数结束。

但是C语言中存在一个exit(0)函数,它可以使得程序在任何时候、任何位置结束程序的运行。

如果不考虑exit(0)等函数的特殊作用,C则总是在main函数结束。

*1.2以下叙述正确的是。

A)在C程序中,main函数必须位于程序的最前面B)在C程序的每一行只能写一条语句C)C语言本身没有输入输出语句D)在对一个C程序进行编译的过程中,可发现注释中的拼写错误参考答案:C参考分析:C程序对main函数的位置没有任何要求;其书写格式自由,一行可以写多条语句,一条语句(多关键字语句)可以写在多行;C语言忽略注释,把注释看作是一个空格,不会对注释中的内容进行语法检查。

结构体,共用体,链表相关试题

结构体,共用体,链表相关试题

十.结构体和共用体(1)下列程序中fun()函数的功能是:构成一个如图所示的带头结点的单向链表,在结点的数据域中放入了具有两个字符的字符串。

disp()函数的功能是显示输出该单链表中所有结点中的字符串。

请填空完成(06.4)disp()函数。

#includetypedef struct node /*链表结点结构*/{ char sub[3];struct node *next;}Node;Node fun(char s) /*建立链表*/{ …… }void disp(Node *h){ Node *p;p=h− >next;while( 【】){printf("%s\n",P− >sub);p= 【】; }}main( ){ Node *hd;hd=fun( ); disp(hd); printf("\n");}(2)设有以下语句:typedef struct TT{char c,int a[4];}CIN;则下面叙述中正确的是(06.9)。

A)可以用TT定义结构体变量B)TT是struct类型的变量C)可以用CIN定义结构体变量D)CIN是struct TT类型的变量(3)有以下结构体说明、变量定义和赋值语句: struct STD{char name[10];int age;char sex;}s[5],*ps;ps=&s[0];则以下scanf函数调用语句中错误引用结构体变量成员的是(06.9)。

A)scanf(%s",s[0].name); B)scanf(%d",&s[0].age); C)scanf(%c",&(ps->sex)); D)scanf(%d",ps->age);(4) 若有以下定义和语句printf("%d\n",sum);}(7)有下列程序:struct S{int n;int a[20];};void f (struct S *p){int i,j,t;for(i=0;i<p->n-1;i+ +)for(j=i+1;j<p->n;j+ +)if(p->a[i]>p->a[j]){t=p->a[i];p->a[i]=p->a [j];p->a[j]=t;}}main( ){ int i; struct S s={10,{2,3,l,6,8,7,5,4,10,9}};f(&s);for(i=0;i<s.n;i+ +) printf("%d,",s.a[i]);}程序运行后的输出结果是(07.4 )。

结构体与共同体习题

结构体与共同体习题
A.25 B.30 C.18 D.8
4、若已建立下面的链表结构,指针p,s分别指向图中所示的结点,则不能将所指的结点插入到链表末尾的语句组是( )。
节点总是插入在链表的末尾。链表的头指针作为函数值返回。链表最后一个节点的next域放入NULL,作为链表结束的标志。data为字符型数据域,next为指针域。读入时字符以#表示输入结束(#不存入链表)。请填空。
int y[4];
char z[8];
} MYTYPE;
MYTYPE them;
main()
{ printf("%d\n",sizeof(them));
}
A.32 B.16 C.8 D.24
6.以下函数creatlist用来建立一带头节点的单链表,链表的结构如下图所示,新的
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;
char *aa[]={"AA","BB","CC","DD"};
printf("%s%s%s\n",aa[em1],aa[em2],aa[em3]);
}
D. p=(*p).next;(*s).next=(*p).next;(*p).next=s;
5、下列程序的执行结果为( )。
struct s1
{ char *s;
int i;
struct s1 *sip;

c语言9结构体与共用体

c语言9结构体与共用体

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. 填空题(1) 定义结构体的关键字是,定义共用体的关键字是。

(2) 结构体和共用体的相同点是,不同点是。

(3) 若有以下定义和语句,则sizeof(a)的值是__ ___,而sizeof(b)的值是__ _。

struct tu{ int m; char n; int y;}a;struct{ float p, char q; struct tu r} b;(4) 设有下面结构类型说明和变量定义,则变量a在内存所占字节数是。

如果将该结构改成共用体,结果为。

struct stud{ char num[6]; int s[4]; double ave; } a;(5) 下面程序用来输出结构体变量ex所占存储单元的字节数,请填空。

struct st{ char name[20]; double score; };main(){ struct st ex ; printf("ex size: %d\n",sizeof( )); }(6) 下面定义的结构体类型拟包含两个成员,其中成员变量info用来存入整形数据;成员变量link是指向自身结构体的指针,请将定义补充完整。

struct node{ int info; link; }(7) 以下程序执行后输出结果是。

main(){ union { unsigned int n; unsigned char c; } u1;u1.c='A'; printf("%c\n",u1.n); }(8) 变量root如图所示的存储结构,其中sp是指向字符串的指针域,next是指向该结构的指针域,data用以存放整型数。

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

rootstruct{ char *sp ; __ __; _ _; } root;2. 阅读下面的程序,写出程序结果(1)struct info{ char a,b,c;};main(){ struct info s[2]={{‘a’,‘b’,‘c’},{‘d’,‘e’,‘f’}};int t;t=(s[0].b-s[1].a)+(s[1].c-s[0].b);printf("%d\n",t); }(2)void main(){ union { char i[2]; int k; } stu;stu.i[0]='2'; stu.k=0;printf("%s,%d\n",stu.i,stu.k);}(3)union myun{ struct{ int x, y, z; } u; int k; } a;main(){ a.u.x=4; a.u.y=5; a.u.z=6; a.k=0; printf(“%d\n",a.u.x); }3. 程序设计题(1)设计一个程序,用结构类型实现两个复数相加。

c语言结构体共用体数据类型求大小例题

c语言结构体共用体数据类型求大小例题

c语言结构体共用体数据类型求大小例题C语言中的结构体和共用体是非常重要的数据类型,它们能够帮助程序员更好地组织和管理数据。

在本文中,我将为你详细介绍C语言中结构体和共用体的特点、用法及例题。

一、结构体的定义和特点1. 结构体是什么?在C语言中,结构体是一种用户自定义的数据类型,它可以包含不同类型的数据,用于表示和管理复杂的数据结构。

结构体的定义以关键字struct开头,后面跟着结构体的名称和大括号内包含的成员变量列表。

2. 结构体的特点结构体的成员变量可以是不同的数据类型,包括基本数据类型、指针类型和其他结构体类型。

这使得结构体非常适合用于表示复杂的数据结构,如学生信息、员工信息等。

二、共用体的定义和特点1. 共用体是什么?共用体也是C语言中的一种用户自定义数据类型,它与结构体类似,不同的是共用体的成员变量共享同一块内存空间。

这意味着共用体的所有成员变量使用同一块内存,修改一个成员变量会影响其他成员变量。

2. 共用体的特点共用体的成员变量共享同一块内存空间,因此共用体非常节省内存。

但也正是由于这种特点,使用共用体需要特别小心,避免出现数据混淆和错误。

三、结构体和共用体的例题为了更好地理解结构体和共用体的用法,我们来看一个例题:如何计算结构体和共用体的大小?```c#include <stdio.h>// 定义一个结构体struct Student {char name[20];int age;float score;};// 定义一个共用体union Data {int num;char str[20];};int main() {// 计算结构体的大小printf("Size of struct Student: %lu bytes\n", sizeof(struct Student));// 计算共用体的大小printf("Size of union Data: %lu bytes\n", sizeof(union Data));return 0;}```在这个例题中,我们定义了一个学生结构体和一个数据共用体,并在主函数中分别计算了它们的大小。

结构体与共用体习题

结构体与共用体习题

2.下面程序运行结果: #include <stdio.h> struct st { int x;int *y;} *p ; int dt[4]={10,20,30,40}; struct st aa[4]={50,&dt[0],60,&dt[1],70,&dt[2],80,&dt[3] }; void main() { p=aa; printf("%d, ", ++p->x); printf("%d, ",(++p)->x); printf("%d\n",++(*p->y)); }
1.下面程序运行结果: #include <stdio.h> struct stu { char num[10]; float score[3]; }; void main() { struct stu s[3]={{“20021”,90,95,85},{“20022”,95,80,75}, {“20023”,100,95,90}},*p=s; int i; float sum=0; p++; for(i=0;i<3;i++) sum=sum+p->score[i]; printf(“%6.2f\n”,sum); }
5.以下程序运行结果: #include <string.h> struct STU { char name[10]; int num;}; void f(char *name,int num) { struct STU s[2]={{"SunDan",20044},{"Penghua",20045}}; num=s[0].num; strcpy(name,s[0].name); } main() { struct STU s[2]={{"YangSan",20041},{"LiSiGuo",20042}},*p; p=&s[1]; f(p->name,p->num); printf(“%s %d\n”,p->name,p->num); }

阅读程序写结果(结构体与共用体)-答案

阅读程序写结果(结构体与共用体)-答案

1.以下程序段的运行结果是【1】struct date{ int year,month,day; } today;main(){ printf("%d\n",sizeof(struct date)); }答案:struct date有三个成员,每个成员占4个字节,所以运行结果:3×4=122.以下程序段的运行结果是【2】struct st { int x; int *y;} *p;int dt[4]={ 10,20,30,40 };struct st aa[4]={ 50,&dt[0],60,&dt[1],60,&dt[2],60,&dt[3] };main(){ p=aa; printf("%d\n",++(p->x)); }答案:p指向aa[0],++(p->x)的执行结果:aa[0]的x成员增13.以下程序段的运行结果是【3】union pw { int i; char ch[2];}a;main(){ a.ch[0]=13; ch[1]=0;printf("%d\n",a.i); }答案:忽略4.以下程序段的运行结果是【4】struct abc{ int a, b, c, s; };{ struct abc s[2]={{1,2,3},{4,5,6}};int t; t=s[0].a + s[1].b;printf("%d\n",t); }答案:s是一个结构数组,初始化的结果:s[0].a=1,s[0].b=2,s[0].c=3,s[0].s=0,s[1].a=4,s[1].b=5,s[1].c=6,s[1].s=0t的值为:s[0].a(1)+ s[1].b(5)=6输出结果:65.以下程序段的运行结果是【5】struct st{ int x; int *y; } *p;int dt[4]={10,20,30,40};struct st aa[4]={ 50,&dt[0],60,21,70,&dt[2],80,&dt[3]};main(){ p=aa; 答案:printf("%d\n",++p->x); 51printf("%d\n",(++p)->x); 60printf("%d\n",++(*p->y)); } 216.以下程序段的运行结果是【6】union myun{ struct{ int x, y, z; } u;int k;} a;{ a.u.x=4; a.u.y=5; a.u.z=6; a.k=0;printf("%d\n",a.u.x);}答案:忽略7.以下程序段的运行结果是【7】struct STU{ char num[10]; float score[3];};main(){ struct STU s[3]={ {"20021",90,95,85},{"20022",95,80,75},{"20023",100,95,90} };struct STU *p=s; int i; float sum=0;for(i=0;i<3;i++)sum=sum+p->score[i];printf("%6.2f\n",sum); }答案:p指向s[0], sum求的是s[0]的三个成绩和,结果:2708.以下程序段的运行结果是【8】struct NODE{ int num; struct NODE *next; };main(){ struct NODE *p,*q,*r;p=(struct NODE*)malloc(sizeof(struct NODE));q=(struct NODE*)malloc(sizeof(struct NODE));r=(struct NODE*)malloc(sizeof(struct NODE));p->num=10; q->num=20; r->num=30;p->next=q;q->next=r;printf("%d\n ",p->num+q->next->num);}答案:p,q,r分别指向三个结点,p->num+q->next->num,就是:p->num + r->num ,即:10+309.以下程序段的运行结果是【9】struct a{ int x;int y;}num[2]={{20,5},{6,7}};main(){ printf("%d\n",num[0].x/num[0].y*num[1].y);}答案:num[0].x=20;num[0].y=5;num[1].x=6;num[1].y=7;输出结果:20/5×7=2810.以下程序段的运行结果是【10】typedef union{ long x[2];int y[4];char z[8];} atx;typedef struct aa{ long x[2];int y[4];char z[8];} stx;main(){ printf("union=%d, struct aa = %d\n",sizeof(atx),sizeof(stx)); }答案:忽略11.阅读下列程序段,则程序段实现的功能是【11】。

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

一、填空题
1.若有如下结构体定义:
struct student
{ int num;
float age;
char sex;
}stud;
则stud所占的内存空间是9 字节。

2.已有定义和语句:
union data
{ int i;
char c;
float f;
}a,*p;
p=a;
则对a中成员c的正确访问形式可以是 a.c 或: p->c或:(*p).c。

(只需
写出一种)
二、单项选择题:
1.若有下列定义:
struct b
{ float a[5];
double c;
int d;}x;
则变量x在内存中所占的字节为下列哪一个:( C )
A.6 B. 10 C. 30 D. 14
2.设有以下说明语句,则下面的叙述不正确的是( C )
struct stu
{ int a;
float b;
} stutype;
A. struct 是结构体类型的关键字。

B. struct stu 是用户定义的结构体类型。

C. stutype是用户定义的结构体类型名。

D. a和b都是结构体成员名。

3.下面程序的运行结果是( )
#include <stdio.h>
main( )
{ struct date
{ int year, month, day;
}today;
printf(“%d\n”,sizeof(struct date));
}
A. 6
B. 8
C. 10
D. 12
4.设有以下说明语句,则下面的叙述正确的是( B )
typedef struct
{ int a;
float b;
} stutype;
A. stutype是结构体变量名。

B. stutype 是结构体类型名。

C. struct是结构体类型名。

D. typedef struct是结构体类型名。

三、填程序
1.结构数组中存有三人的姓名和年龄,以下程序输出三人中最年长者的姓名和年龄。

请填
空。

static struct man
{ char name[20];
int age;
}person[ ]={{“LiMing”,18},{“WangHua”,19},{“ZhangPing”,20}};
main( )
{ struct man *p,*q;
int old=0;
p=person;
for(; p <person+3 ; p++)
if(old<p->age){ q=p; old=p->age ;}
printf(“%s %d”, q->name,q->age );
}。

相关文档
最新文档