一. 选择题
1. C语言结构体类型变量在程序执行期间( )
A) 所有成员一直驻留在内存中 B) 只有一个成员驻留在内存中 C) 部分成员驻留在内存中 D) 没有成员驻留在内存中 2. 当说明一个结构体变量时系统分配给它的内存是( )
A) 各成员所需内存量的总和 B) 结构中第一个成员所需内存量
C) 成员中占内存量最大者所需的容量 D) 结构中最后一个成员所需内存量
3. 以下对结构体类型变量的定义中,不正确的是( )
A) typedef struct aa B) #define AA struct aa { int n; AA{int n; float m; float m; }AA; }td1; AA td1;
C) struct D) struct { int n; { int n; float m; float m; }aa; }td1; stuct aa td1; 4. 设有以下说明语句
struct stu { int a; float b; }stutype;
则下面的叙述不正确的是( ) A) struct是结构体类型的关键字
B) struct stu是用户定义的结构体类型 C) stutype是用户定义的结构体类型名 D) a和b都是结构体成员名
5. 以下选项中不能正确把cl定义成结构体变量的是( )
A) typedef struct B) struct color cl { int red; { int red; int green; int green; int blue; int blue; }COLOR; }; COLOR cl;
C) struct color D) struct { int red; { int red; int green; int green; int blue; int blue; }cl; } cl; 6. 若有如下定义
第 1 页 共 10 页
第十章 结构与链表
struct data {int i; char ch; double f; }b;
则结构变量b占用内存的字节数是( )
A) 1 B) 2 C) 8 D) 11 7. 以下关于共用体的叙述正确的是( )
A) 一个共用体变量中可同时存放所有成员的数据 B) 一个共用体变量中不可同时存放所有成员的数据 C) 可直接对共用体变量进行赋值操作 D) 共用体不能嵌套定义
8. 下列程序的输出结果是( )
enum week{ sun=7,mon,tue,wed,thu,fri,sat} day=wed; main()
{ printf(“%d”, day); }
A) 2 B) 3 C) 7 D) 10 9. 下面对typedef的叙述中不正确的是( )
A) 用typedef可以定义各种类型名,但不能用来定义变量 B) 用typedef可以增加新类型
C) 用typedef只是将已存在的类型用一个新的标识符来代表 D) 使用typedef有利于程序的通用和移植 10. 以下程序的运行结果是( )
#include \"stdio.h\" main()
{ struct date
{int year,month,day; }today;
printf(\"%d\\n\}
A) 6 B) 8 C) 10 D) 12 11. 设有以下说明,则下面不正确的叙述是( )
union data { int i; char c; float f; }a;
A. a所占的内存长度等于成员f的长度
B. a的地址和它的各成员地址都是同一地址 C. a可以作为函数参数
D. 不能对a赋值,也不可以在定义a时对它初始化 12. 已知学生记录描述为
第 2 页 共 10 页
第十章 结构与链表
struct student {int no;
char name[20]; char sex; struct
{int year; int month; int day; }birth; };
struct student s;
设变量s中的“生日”应是“1984年11月11日”,下列对“生日”的正确赋值方式是( )
A) year=1984;month=11;day=11;
B) birth.year=1984;birth.month=11;birth.day=11; C) s.year=1984;s.month=11;s.day=11;
D) s.birth.year=1984;s.birth.month=11;s.birth.day=11; 13. 变量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
14. 有以下结构体说明和变量的定义,指针p指向变量a,指针q指向变量b。则不能把
结点b连接到结点a之后的语句是( ) struct node { char data;
struct node *next; } a,b,*p=&a,*q=&b;
A) a.next=q; B) p.next=&b; C) p->next=&b; D) (*p).next=q; 15. 下列程序的输出结果是( )
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\
第 3 页 共 10 页
第十章 结构与链表
}
A) 5 B) 6 C) 7 D) 8 16. 设有如下定义:
struck sk { int a; float b; }data; int *p;
若要使P指向data中的a域,正确的赋值语句是( )
A) p=&a; B) p=data.a; C) p=&data.a; D) *p=data.a; 17. 根据下面的定义,能打印出字母 M 的语句是( )
struct person{char name[9]; int age; };
struct person class[10]={\"John\ \"Paul\ \"Mary\ \"adam\ };
A) printf(\"%c\\n\B) printf(\"%c\\n\C) printf(\"%c\\n\
D) printf(\"%c\\n\
18. 有以下程序
#include “stdio.h” 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); }
程序运行后的输出结果是( )
A) 10 B) 20 C) 30 D) 40 19. 设有如下定义
struct ss
{ char name[10]; int age;
第 4 页 共 10 页
第十章 结构与链表
char sex; }std[3],*p=std;
下面各输入语句中错误的是 ( )
A) scanf(\"%d\C) scanf(\"%c\20. 有以下程序
main()
{ union { unsigned int n; unsigned char c; }u1; ul.c='A';
printf(\"%c\\n\}
执行后输出结果是( )
A) 产生语法错 B) 随机值 C) A D) 65 21. 设有如下说明
typedef struct
{ int n; char c; double x;}STD;
则以下选项中,能正确定义结构体数组并赋初值的语句是 ( ) A) STD tt[2]={{1,'A',62},{2, 'B',75}}; B) STD tt[2]={1,\"A\C) struct tt[2]={{1,'A'},{2, 'B'}};
D) struct tt[2]={{1,\"A\
22. 有以下结构体说明和变量定义,如图所示,指针p、q、r分别指向一个链表中的三
个连续结点。 struct node { int data;
struct node *next; }*p, *q, *r;
_______________________________ | data next data next data next | | →□ □ → □□ → □ □→ | | ↑p ↑q ↑r | |_______________________________|
现要将q和r所指结点的先后位置交换,同时要保持链表的连续,以下错误的程序段是 ( )
A) r->next=q; q->next=r->next; p->next=r; B) q->next=r->next; p->next=r; r->next=q; C) p->next=r; q->next=r->next; r->next=q; D) q->next=r->next;r->next=q; p->next=r;
23. 有以下程序
第 5 页 共 10 页
第十章 结构与链表
struct s
{ int x,y; }data[2]={10,100,20,200}; main()
{ struct s *p=data;
printf(\"%d\\n\}
程序运行后的输出结果是 ( )
A) 10 B) 11 C) 20 D) 21
24. 若以下定义:
struct link { int data;
struct link *next; }a,b,c,*p,*q;
且变量a和b之间已有如下图所示的链表结构: a b
data next data next
┌──┬──┐ ┌──┬──┐
│ 5 │ -+─→│ 9 │ \\0 │
└──┴──┘ └──┴──┘ ↑p c
data next ┌──┬──┐
│ 7 │ │
└──┴──┘ ↑q
指针p指向变量a,q指向变量c。则能够把c插入到a和b 之间并形成新的链表的语句组是: ( )
A) a.next=c; c.next=b; B) p.next=q; q.next=p.next; C) p->next=&c; q->next=p->next; D) (*p).next=q; (*q).next=&b;
25. 以下程序的输出是( )
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],};
第 6 页 共 10 页
第十章 结构与链表
main() { p=aa;
printf(\"%d\\n\}
A) 10 B) 11 C) 51 D) 60
26. 设有以下说明语句
struct ex
{ int x ; float y; char z ;} example; 则下面的叙述中不正确的是( )
A) struct结构体类型的关键字 B) example是结构体类型名 C) x,y,z都是结构体成员名 D) struct ex是结构体类型 27. 设有以下说明语句
typedef struct { int n; char ch[8]; }PER;
则下面叙述中正确的是( )
A) PER 是结构体变量名 B) PER是结构体类型名 C) typedef struct 是结构体类型 D) struct 是结构体类型名
28. 若有下面的说明和定义:
struct test
{ int ml; char m2; float m3;
union uu {char ul[5]; int u2[2];} ua; } myaa;
则sizeof(struct test )的值是( )
A) 12 B) 16 C) 14 D) 9
29. 以下程序的输出结果是( )
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) 4 B) 5 C) 6 D) 0
30. 以下程序的输出结果是( )
第 7 页 共 10 页
第十章 结构与链表
struct HAR
{ int x, y; struct HAR *p;} h[2]; main()
{ 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\}
A) 1 2 B) 2 3 C) 1 4 D) 3 2
二.填空题
1. 已有定义如下:
struct node { int data;
struct node *next; }*p;
以下语句调用malloc函数,使指针p指向一个具有struct node类型的动态存储空间。请填空。
p = (struct node *)malloc( );
2. 设有以下结构类型说明和变量定义,则变量a在内存所占字节数是 ( )。
Struct stud { char num[6]; int s[4]; double ave; } a,*p;
3. 以下程序段用于构成一个简单的单向链表,请填空。
struct STRU { int x, y ; float rate; ( ) p; } a, b;
a.x=0; a.y=0; a.rate=0; a.p=&b; b.x=0; b.y=0; b.rate=0; b.p=NULL;
4. 写出下面程序运行的结果( )
struct s
{ int x,*y;} *p;
int data[]={10,20,30,40,50}; struct s
array[5]={100,&data[0],200,&data[1],300,&data[2],400,&data[3],
第 8 页 共 10 页
第十章 结构与链表
500,&data[4]}; main() { p=array;
printf(\"%d\\ printf(\"%d\\ printf(\"%d\\ printf(\"%d\\}
5. 以下程序用来输出结构体变量ex所占存储单元的字节数,请填空。
struct st
{ char name[20]; double score; }; main()
{ struct st ex;
printf(\"ex size: %d\\n\ )); }
下面程序的运行结果是:( ) 。 typedef union student { char name[10]; long sno; char sex;
float score[4]; }STU; main()
{ STU a[5];
printf(“%d\\n”,sizeof(a)); }
7. 以下定义的结构体类型拟包含两个成员,其中成员变量info用来存入整形数据;成
员变量link是指向自身结构体的指针.请将定义补充完整。 struct node {int info; ( ) link; }
8. 下面程序的运行结果是:( )
union un { int a; char c;}a; main()
{ a.a=256; a.c=’b’; printf(“%d”,a.a); }
9. #include \"stdio.h\"
#define M 10 struct mode { float data;
6.
第 9 页 共 10 页
第十章 结构与链表
struct mode *next; }
main()
{ struct mode *base,*p; int i,n=0;
float r=0,a[M];
printf(\"Please input 10 numbers:\\n\"); for(i=0;i for(i=0;i {n++;a[n]=a[i];} base=NULL; for(i=n;i>0;i--) {p=(struct mode *)malloc(sizeof(struct mode)); p->data=a[i]; p->next=base; base=p; } printf(\"average=%6.2f\\n\ do{ printf(\"%6.2f\ p=p->next; } while(p!='\\0'); } 执行程序时输入:12.5 23.6 0 9.8 10 88.2 5.1 19.2 6.8 2.8 执行程序时输出:( ) ( ) 第 10 页 共 10 页
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- gamedaodao.com 版权所有 湘ICP备2022005869号-6
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务