c语言结构体共用体选择题新
- 格式:docx
- 大小:1.95 MB
- 文档页数:10
C语言练习题1第八章结构体与共用体1练习题一、c语言基础知识1.1选择题1.以下不是c语言的特点的就是(b)。
a.语言简洁紧凑b.能够编制出功能复杂的程序c.c语言可以直接对硬件操作d.c 语言移植性好2.以下字符序列中,不容用做c语言标识符的就是(b)。
a.abc123b.no.1c._123_d._ok3.正确的c语言标识符是(a)。
a._buy_2b.2_buyc.?_buyd.buy?4.恳请挑选出可以用做c语言用户标识符的一组标识符(b)。
a.voidb.a3_b3c.ford.2adefine_123-abcdowordifcasesizeof5.以下符号中,不属于转义字符的就是(b)。
a.\\\\b.\\0xaac.\\td.\\06.不属于c语言关键字的是(d)。
a.intb.breakc.whiled.character7.就是c语言提供更多的合法关键字的就是(b)。
a.floatb.signedc.integerd.char8.以下不能定义为用户标示符的是(d)。
a.一个主程序和若干子程序共同组成b.一个或多个函数共同组成c.若干过程共同组成d.若干子程序共同组成10.c语言程序的基本单位是(c)。
a.程序行b.语句c.函数d.字符20.下列变量定义中合法的是aa.short_a=1-.le-1;b.doubleb=1+5e2.5;c.longdo=0xfdal;d.float2_and=1-e-3;9xn21.与数学式子对应的c语言表达式是(c)。
2x?1a.9*x^n/(2*x-1)b.9*x**n/(2*x-1)c.9*pow(x,n)*(1/(2*x-1))d.9*pow(n,x)/(2*x-1)第八章结构体与共用体222.若存有代数式3ab,则不正确的c语言表达式是(c)。
cda.a/c/d*b*3b.3*a*b/c/dc.3*a*b/c*dd.a*b/d/c*323.已知各变量的类型说明如下:intm=8,n,a,b;unsignedlongw=10;doublex=3.14,y=0.12;则以下符合c语言语法的表达式是(a)。
结构体与共用体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;述中正确的是()。
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语言机试(结构体、共用体、位运算及文件操作)模拟试卷14(总分:56.00,做题时间:90分钟)一、选择题(总题数:28,分数:56.00)1.有以下程序 #include main() { int a=5,b=1,t; t=(a<(分数:2.00)A.11B.6C.21 √D.1解析:解析:本题考查位操作运算符。
“<<”是左移运算符,左移一位相当于乘2,“|”是按位或运算符。
5序移两位相当于乘4,得到20,20的二进制数是00010100,和00000001进行按位或操作得到00010101,即十进制的21。
2.若变量已正确定义,则以下语句的输出结果是 s=32; s^=32; printf("%d",s);(分数:2.00)A.-1B.1C.32D.0 √解析:解析:“按位异或”运算的规则是:参与运算的两个运算数中相对应的二制位上,若数相同,则该位的结果为0;若数不同,则该位的结果为1。
因为语句“s=32;s^=32;”相当于s与自身做按位异或运算,所以其结果等于0。
3.若有以下程序 main(){int c; c=10^5; printf("%d\n",c); } 则程序的输出结果是(分数:2.00)A.15 √B.10000C.5D.105解析:解析:按位异或(^)的运算规则是:参与运算的两个运算数中相对应的二进制位上,若数相同,则该位的结果为0;若数不同,该位的结果为1。
整数10和5的二进制编码分别为1010和0101,异或结果为1111,其十进制数据位15。
4.若有以下程序 main(){int c; C=1315; printf("%d\n",c); } 则程序的输出结果是(分数:2.00)A.15B.18C.13 √D.5解析:解析:按位或(|)的运算规则是:参加运算的两个运算数中,只要两个相应的二进制位中一个为1,则该位的运算结果即为1:只有当两个相应位的数都为0时,该位的运算结果才为0。
国家二级C语言(结构体和共用体、文件)机试模拟试卷2(总分:52.00,做题时间:90分钟)一、选择题(总题数:26,分数:52.00)1.若有语句typedef struet S{int g;char h;}T;,则下列叙述中正确的是( )。
(分数:2.00)A.可用S定义结构体变量B.可用T定义结构体变量√C.S是struct类型的变量D.T是struet S类型的变量解析:解析:本题考查typedef重新声明一种结构体类型。
那么T为结构体类型,而不是结构体变量,所以B选项正确。
2.设有语句typedef struet TT{char c;int a[4];}CIN;,则下列叙述中正确的是( )。
(分数:2.00)A.CIN是struet TT类型的变量B.,IT是struct类型的变量C.可以用TT定义结构体变量D.可以用CIN定义结构体变量√解析:解析:本题考查typedef重新声明一种结构体类型。
其中CIN为结构体类型名,而不是结构体变量,所以D选项正确。
3.下列叙述中错误的是( )。
(分数:2.00)A.可以用typedef将已存在的类型用一个新的名字来代表B.可以通过typedef增加新的类型√C.用typedef定义新的类型名后,原有类型名仍有效D.用typedef可以为各种类型起别名,但不能为变量起别名解析:解析:本题考查typedef的用法。
typedef并不是增加一种新的类型,而是对已存在的类型用一个新的名字来代表,所以B选项错误。
4.有以下程序:#include<stdio.h>main(){struet STU{char name[9];char sex:double score[2];};struct STU a={"Zhao",'m',85.0,90.0},b={"Qian",'f',95.0,92.0};b=a;printf("%s,%c,%2.0f,%2.0f\n",b.name,b.sex,b.score[0],b.score[1]);}程序的运行结果是( )。
第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语言结构体共用体选择
题新
The pony was revised in January 2021
1、变量a所占的内存字节数是________。
(假设整型i n t为4字节) struct stu
{ char name[20];
long int n;
int score[4];
} a ;
A) 28 B) 30
C) 32 D) 46
C
2、下列程序的输出结果是
A)5 B)6 C)7 D)8
struct 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);
}
B
3、有如下定义
struct person{ char name[9]; int age;};
struct person calss[4]={ "Johu",17,
"Paul",19,
"Mary",18,
"Adam",16,};
根据以上定义,能输出字母M的语句是________。
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]);
D
4、以下程序的输出是________。
struct st
{int x;int *y;} *p;
int dt[4]={10,20,30,40};
struct st aa[4]={50,&dt[0],60,&dt[0],60,&dt[0],60,dt[0],}; main()
{ p=aa;
printf("%d\n",++(p->x));
}
A) 10 B) 11
C) 51 D) 60
C
6、以下程序的输出结果是________。
struct HAR
{ int x,y; struct HAR *p; } h[2];
main()
{ int h[0].x=1; h[0].y=2;
h[1].x=3;h[1].y=4;
h[0].p=&h[1]; h[1].p=h;
printf("%d%d\n",(h[0].p)->x,(h[1].p)->y); } A) 12 B) 23
C) 14 D) 32
D
7、下面程序的输出是________。
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) 6
D
8、设有变量定义
struct stu
{int age;
int num;
}std,*p=&std;
能正确引用结构体变量std中成员age的表达式是A) std->age B) *std->age
C) * D) (*p).age
D
9、设有定义语句
"struct {int x;int y;}d[2]={{1,3},{2,7}};",则printf("%d\n",d[0].y/d[0].x*d[1].x);的输出结果是
A) 0 B) 1
C) 3 D) 6
D
11、若有如下定义,则对data中的a成员的正确引用是
struct sk {int a;float b;}data,*p=&data;
A) (*p). B) (*p).a
C) p-> D) 、若有以下说明和定义语句,则变量w在内存中所占的字节数是 union aa {float x;float y;char c[6];};
struct st {union aa v;float w[5];double ave;}w;
A) 42 B) 34
C) 30 D) 26
B
15、变量a所占的内存字节数是
union U
{char st[4];
int i;
long l;
};
struct A
{int c;
union U u;
}a;
A) 4 B) 5
C) 6 D) 8
D
16、执行下面的程序后,输出的结果是
struct 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);}
A) 5 B) 6
C) 7 D) 8
C
18、下面程序的输出结果是typedef union
{long x[2];
int y[4];
char z[8];
}MYTYPE;
MYTYPE them;
main()
{printf("%d\n",sizeof(them));} A) 32 B) 16
C) 8 D) 24
C
19、若有以下的说明:
struct person
{char name[20];
int age;
char sex;
}a={"li ning",20,'m'},*p=&a;
则对字符串li ning的引用方式不可以的是A) (*p).name B)
C) D) p->name
B。