C语言模拟题13-结构体与公用体.doc_第1页
C语言模拟题13-结构体与公用体.doc_第2页
C语言模拟题13-结构体与公用体.doc_第3页
C语言模拟题13-结构体与公用体.doc_第4页
C语言模拟题13-结构体与公用体.doc_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第十四部分:结构体与共用体及用户定义类型 一、选择题: (1)有以下程序段 typedef struct NODE int num; struct NODE *next; OLD; 以下叙述中正确的是 A)以上的说明形式非法 B)NODE是一个结构体类型 C)OLD是一个结构体类型 D)OLD是一个结构体变量 (2)有以下程序 # include struct STU int num; float TotalScore; ; void f(struct STU p) struct STU s2=20044,550,20045,537; p.num = s1.num; p.TotalScore = s1.TotalScore; main() struct STU s2=20041,703,20042,580; f(s0); printf(%d %3.0fn, s0.num, s0.TotalScore); 程序运行后的输出结果是 A)20045 537 B)20044 550 C)20042 580 D)20041 703 (3)有以下程序 # include struct STU char name10; int num; ; void f(char *name, int num) struct STU s2=SunDan,20044,Penghua,20045; num = s0.num; strcpy(name, ); main() struct STU s2=YangSan,20041,LiSiGuo,20042,*p; p=&s1; f(p-name, p-num); printf(%s %dn, p-name, p-num); 程序运行后的输出结果是 A)SunDan 20042 B)SunDan 20044 C)LiSiGuo 20042 D)YangSan 20041 (4)有以下程序 struct STU char name10; int num; float TotalScore; ; void f(struct STU *p) struct STU s2=SunDan,20044,550,Penghua,20045,537, *q=s; +p ; +q; *p=*q; main() struct STU s3=YangSan,20041,703,LiSiGuo,20042,580; f(s); printf(%s %d %3.0fn, , s1.num, s1.TotalScore); 程序运行后的输出结果是 A)SunDan 20044 550 B)Penghua 20045 537 C)LiSiGuo 20042 580 D)SunDan 20041 703 (5)若有以下说明和定义 union dt int a; char b; double c; data; 以下叙述中错误的是 A)data的每个成员起始地址都相同 B)变量data所占内存字节数与成员c所占字节数相等 C)程序段:data.a=5;printf(%fn,data.c);输出结果为5.000000 D)data可以作为函数的实参 (6)设有如下说明 typedef struct ST long a; int b; char c2; NEW; 则下面叙述中正确的是 A)以上的说明形式非法 B)ST是一个结构体类型 C)NEW是一个结构体类型 D)NEW是一个结构体变量 (7)有以下结构体说明和变量定义,如图所示,指针pqr分别指向此链表中三个连续结点。 struct node int data; struct node *next; *p,*q,*r; 现要将q所指结点从链表中删除,同时保持链表的连续,以下不能完成指定操作的语句是 A)p-next=q-next; B)p-next=p-next-next; C)p-next=r; D)p=q-next; (8)以下对结构体类型变量td的定义中,错误的是 A)typedef struct aa int n; float m; AA; AA td; B)struct aa int n; float m; td; struct aa td; C)struct int n; float m; aa; struct aa td; D)struct int n; float m; td; (9) 有以下说明和定义语句 struct student int age; char num8; struct student stu3=20,200401,21,200402,109,200403; struct student *p=stu; 以下选项中引用结构体变量成员的表达式错误的是 A) (p+)-num B) p-num C) (*p).num D) stu3.age 1012.以下程序的功能是:建立一个带有头结点的单向链表,并将存储在数组中的字符依次转储到链表的各个结点中,请从与下划线处号码对应的一组选若中选择出正确的选项。 #include stuct node char data; struct node *next; (10) CreatList(char *s) struct node *h,*p,*q); h=(struct node *) malloc(sizeof(struct node); p=q=h; while(*s!=0) p=(struct node *) malloc(sizeof(struct node); p-data= (11) ; q-next=p; q= (12) ; s+; p-next=0; return h; main() char str=link list; struct node *head; head=CreatList(str); . (10) A) char * B) struct node C) struct node* D) char (11) A) *s B) s C) *s+ D)(*s)+ (12) A) p-next B) p C) s D) s-next (13) 设有以下语句 typedef struct S int g; char h; T; 则下面叙述中正确的是 A) 可用S定义结构体变量 B)可以用T定义结构体变量 C)S是struct类型的变量 D)T是struct S类型的变量 (14) 有以下程序 struc STU char name10; int num; ; void f1(struct STU C) struct STU b=“LiSiGuo”,2042; c=b; void f2(struct STU *C) struct STU b=“SunDan”,2044; *c=b; main( ) struct STU a=“YangSan”,2041,b=“WangYin”,2043; f1(A) ;f2(&B) ; printf(“%d %dn”,a.num,b.num); 执行后的输出结果是 A)2041 2044 B)2041 2043 C)2042 2044 D)2042 2043 (15) 有以下程序 struct STU char name10; int num; int Score; ; main( ) struct STU s5=“YangSan”,20041,703,“LiSiGuo”,20042,580, “wangYin”,20043,680,“SunDan”,20044,550, “Penghua”,20045,537,*p5,*t; int i,j; for(i=0;i5;i+) pi=&si; for(i=0;i4;i+) for(j=i+1;jScorepj-Score) t=pi;pi=pj;pj=t; printf(“5d %dn”,s1.Score,p1-Score); 执行后输出结果是 A) 550 550 B) 680 680 C) 580 550 D) 580 680 (16) 有以下程序 #include struct NODE int num; struct NODE *next; ; main( ) struct NODE *p,*q,*r; int sum=0; p=(struct NODE *)malloc(sizeof(struct NODE); q=(struct NODE *)malloc(sizeof(struct NODE); r=(struct NODE *)malloc(sizeof(struct NODE); p-num=1;q-num=2;r-num=3; p-next=q;q-next=r;r-next=NULL; sum+=q-next-num;sum+=p-num; printf(“%dn”,sum); 执行后的输出结果是 A) 3 B) 4 C) 5 D) 6 (17) 以下选项中不能正确把c1定义成结构体变量的是 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; c l; c l ; (18) 有以下程序 struct s int x,y; data2=10,100,20,200; main () struct s *p=data; printf(%dn,+(p-x); 程序运行后的输出结果是 A) 10 B) 11 C) 20 D)21 (19) 有以下结构体说明和变量定义,如图所示,指针p、q、r分别指向一个链表中的三个连续结点。 struct node int data struct node *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; (20) 设有如下说明 typedef struct int n; char c; double x;STD; 则以下选项中,能正确定义结构体数组并赋初值的语句是 A) STD tt2=1,A,62,2, B,75; B) STD tt2=1,A,62,2, B,75; C) struct tt2=1,A,2, B; D)structtt2=1,A,62.5,2, B,75.0; (21) 有以下程序 main() union unsigned int n; unsigned char c; u1; ul.c=A; printf(%cn,u1.n); 执行后输出结果是 A) 产生语法错 B) 随机值 C) A D) 65 (22)若要说明一个类型名STP,使得定义语句STP s等价于char *s,以下选项中正确的是 A) typedef STP char *s; B) typedef *char STP; C) typedef stp *char; D) typedef char* STP; (23) 设有如下定义 struct ss char name10; int age; char sex; std3,*p=std; 下面各输入语句中错误的是 A) scanf(%d,&(*p).age); B) scanf(%s,&); C) scanf(%c,&std0.sex) D) scanf(%c,&(p-sex); (24) 有以下程序 struct STU char num10; float score3; ; main() struct stu s3=“20021”,90,95,85, “20022”,95,80,75, “20023”,100,95,90,*p=s; int i; float sum=0; for(i=0;iscorei; printf(“%6.2fn”,sum); 程序运行后的输出结果是 A) 260.00 B) 270.00 C) 280.00 D) 285.00 (25) 设有如下定义: 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; (26) 有以下程序 #include 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(“%dn”,p-num+q-next-num); 程序运行后的输出结果是 A) 10 B) 20 C) 30 D) 40 (27) 若有以下说明和定义 typedef int *INTEGER; INTEGER p,*q; 以下叙述正确的是 A) P是int型变量 B) p是基类型为int的指针变量 C) q是基类型为int的指针变量 D) 程序中可用INTEGER代替int类型名 (28) 若有下面的说明和定义: struct test int ml; char m2; float m3; union uu char ul5; int u22; ua; myaa; 则sizeof(struct test )的值是 A) 12 B) 16 C) 14 D) 9 (29) 若以下定义: struct link int data; struck 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; (30) 设有以下说明语句 typedef struct int n; char ch8; PER; 则下面叙述中正确的是 A) PER 是结构体变量名 B) PER是结构体类型名 C) typedef struct 是结构体类型 D) struct 是结构体类型名 (31) 以下各选项企图说明一种新的类型名,其中正确的是 A) typedef v1 int; B) typedef v2=int; C) typedefv1 int v3; D) typedef v4: int; (32) 以下程序的输出结果是 struct HAR int x, y; struct HAR *p; h2; main() h0,x=1;h0;y=2; h1,x=3;h1;y=4; h0,p=&h1,p=h; printf(“%d %d n”,(h0,p)-x,(h1,p)-y); A) 12 B) 23 C) 14 D) 32 (33) 以下程序的输出结果是 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(%dn”,a.u.x); A) 4 B) 5 C) 6 D) 0 (34) 设有以下说明语句 struct ex int x ; float y; char z ; example; 则下面的叙述中不正确的是 A) struct结构体类型的关键字 B) example是结构体类型名 C) x,y,z都是结构体成员名 D) struct ex是结构体类型 (35) 以下程序的输出是 A) 10 B) 11 C) 51 D) 60 struct st int x; int *y; *p; int dt4= 10,20,30,40 ; struct st aa4= 50,&dt0,60,&dt0,60,&dt0,60,&dt0,; main() p=aa; printf(“%dn”,+(p-x); (36) 假定建立了以下链表结构,指针p、q分别指向如图所示的结点,则以下可以将q所指结点从链表中删除并释放该结点的语句组是 A) free(q); p-next=q-next; B) (*p).next=(*q).next; free(q); C) q=(*q).next; (*p).next=q; free(q); D) q=q-next; p-next=q; p=p-next; free(p); (37) 有如下定义 struct personchar name9; int age; strict person class10=“Johu”, 17, “Paul”, 19 “Mary”, 18, “Adam 16,; 根据上述定义,能输出字母M的语句是 A) prinft(“%cn”,class3.mane); B) pfintf(“%cn”,1); C) prinft(“%cn”,1); D) printf(“%cn”,0); (38) 以下对结构体类型变量的定义中,不正确的是 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; (39) 若已建立如下图所示的单向链表结构, P data next 在该链表结构中,指针p、s分别指向图中所示结点,则不能将s所指的结点插入到链表末尾仍构成单向链表的语句组是 A) p =p-next; s-next=p; p-next=s; B) p =p-next; s-next=p-next; p-next=s; C) s-next=NULL; p=p-next; p-next=s; D) p=(*p).next; (*s).next=(*p).next; (*p).next=s; (40) 下列程序的输出结果是 A) 5 B) 6 C) 7 D) 8 struct abc int a, b, c; ; main() struct abc s2=1,2,3,4,5,6; int t; t=s0,a+s1,b; printf(%d n,t); (41) 有以下结构体说明和变量的定义,且如下图所示指针p指向变量a,指针q指向变量b。则不能把结点b连接到结点a之后的语句是 A) a.next=q; B) p.next=&b; C) p-next=&b; D) (*p).next=q; struct node char data; struct node *next; a,b,*p=&a,*q=&b; data next data next (42) 变量a所占内存字节数是 A) 4 B) 5 C) 6 D) 8 union U char st4; int i; long l; ; struct A int c; union U u; a; (43) 以下选项中,能定义s为合法的结构体变量的是 A) typedef struct abc B) struct double a; double a; char b10; char b10; s; s; C) struct ABC D) typedef ABC double a; double a; char b10; char b10; ABC s; ABC s; (44) 以下程序的输出结果是 A) 2 B) 1 C)0 D)不确定 main() union char i2; int k; r; r.i0=2; r.i1=0; printf“%dn”,r.k; (45) 设有以下定义或语句,则输出的结果是(指针变量占两个字节) A) 20 B) 16 C) 14 D)12 struct date long *cat; struct date *next; double dog; too; printf(“%dn”,sizeof(too); (46) 有以下程序 #include struct stu int num; char name10; int age; ; void fun(struct stu *p) printf(%sn,(*p).name); main() struct stu students3= 9801,Zhang,20, 9802,Wang,19, 9803,Zhao,18 ; fun(students+2); 输出结果是 A) Zhang B)Zhao C) Wang D) 18 (47) 设有以下说明和定义: typedef union long i; int k5; char c; DATE; struct date int cat; DATE cow; double dog; too; DATE max; 则下列语句的执行结果是 printf (%d,sizeof (struct date ) +sizeof(max); A) 26 B) 30 C) 18 D) 8 (48) 设有如下定义: 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.a (49) 若程序中有下面的说明和定义 struct abc int x;char y; struct abc s1,s2; 则会发生的情况是 A) 编译进错 B) 程序将顺利编译连接执行 C) 能顺利通过编译连接但不能执行 D) 能顺利通过编译但连接出错 (50) 若有下面的说明和定义,则sizeof(struct aa) 的值是 struct aa int r1;double r2; float r3; union uuchar u15; long u22; ua; mya; A)30 B)29 C)24 D)22 (51) 字符0的ASCII码的十进制数为48,且数组的第0个元素在低位,则以下程序的输出结果是 #include main( ) union int i2; long k; char c4; r,*s=&r; s-i0=0x39; s-i1=0x38; printf(%cn,s-c0) A) 39 B) 9 C) 38 D) 8 (52) 设有以下定义: typedef union long i;int k5;char c;DATE; struct date int cat;DATE cow;double dog;too; DATE max; 则下列语句的执行结果是 printf(%d,sizeof(struct date)+sizeof(max); A) 25 B) 30 C) 18 D) 8 (53) 根据下面的定义,能打印出字母M的语句是 A) printf(%cn,); D) printf(%cn,0); B) printf(%cn,1); C) printf(%cn,1); struct person char name9; int age; struct person class10=John,17, Paul,19, Mary,18, Adam,16; (54) 下面程序的输出是 A) 0 B) 1 C) 3 D) 6 main() struct cmplx int x; int y; cnum2=1,3, 2,7; printf(%dn,cnum0.y /cnum0.x * cnum1.x); (55) 已知字符0的ASCII码为十六进制的30,下面程序的输出是 A) 6 B) 9 C) 0 D) 3 main() union unsigned char c; unsigned int i4; z; z.i0=0x39; z.i1=0x36; printf(%cn,z.c); (56) 下面程序的输出是 A) 32 B) 16 C) 8 D) 24 typedef union long x2; int y4; char z8; MYTYPE; MYTYPE them; main() printf(%dn, sizeof(them); (57) 若已建立下面的链表结构,指针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; (58) 下面程序的输出结果为 struct st int x; int *y; *p; int dt4=10,20,30,40; struct st aa4= 50,&dt0,60,&dt1, 70,&dt2,80,&dt3 ; main() p=aa; printf(%dn, +p-x ); printf(%dn, (+p)-x); printf(%dn, +( *p-y); A) 10 B) 50 C) 51 D) 60 20 60 60 70 20 21 21 31 (59) 有以下程序: #include union pw int i; char ch2; a; main() a.ch0=13; a.ch1=0; printf(%dn,a.i); 程序的输出结果是(注意: ch0在低字节,ch1在高字节。) A) 13 B) 14 C) 208 D) 209 (60) 设有以下语句: struct st int n; struct st *next; static struct st a3=5,&a1,7,&a2,9,0,*p; p=&a0; 则表达式【60】 的值是6。 A)p + + -n B) p-n + + C) (*p).n + + D) + + p-n 二、填空题: (1)以下程序运行后的输出结果是 【1】 。 struct NODE int num; struct NODE *next; ; main() struct NODE s3=1, 0,2, 0,3, 0, *p, *q, *r; int sum=0; s0.next=s+1; s1.next=s+2; s2.next=s; p=s; q=p-next; r=q-next; sum+=q-next-num; sum+=r-next-next-num; printf(%dn, sum); (2)以下程序运行后的输出结果是【2】 。 struct NODE int k; struct NODE *link; ; main() struct NODE m5,*p=m,*q=m+4; int i=0; while(p!=q) p-k=+i; p+; q-k=i+; q-; q-k=i; for(i=0;i5;i+) printf(%d,mi.k); printf(n); (3) 以下程序的运行结果是【3】 # include typedef struct student char name10; long sno; float score; STU; main( ) STU a=“zhangsan”,2001,95,b=“Shangxian”,2002,90,c=“Anhua”,2003,95,d,*p=&d; d=a; if(strcmp(,)0) d=b; if(strcmp(,)0) d=c; printf(“%ld%sn”,d.sno,p-name); (4) 已有定义如下: struct node int data; struct node *next;| *p; 以下语句调用malloc函数,使指针p指向一个具有struct node类型的动态存储空间。 请填空。 p=(struct node *) malloc( 【4】 ); (5) 设有以下定义 struct ss int info;struct ss *link;x,y,z; X Y Z 请写出删除点y的赋值语句【5】 。 (6) 下面程序的运行结果是: 6 。 typedef union student char name10; long sno; char sex; float score4; STU; main() STU a5; printf(“%dn”,sizeof(a); (7) 以下定义的结构体类型拟包含两个成员,其中成员变量info用来存入整形数据;成员变量link是指向自身结构体的指针.请将定义补充完整。 struct node int info; 【7】 link; (8) 以下程序段用于构成一个简单的单向链表,请填空。 struct STRU int x, y ; float rate; 【8】 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; (9) 若有如下结构体说明: struct STRU int a, b ; char c; double d: struct STRU p1,p2; ; 请填空,以完成对t数组的定义,t数组的每个元素为该结构体类型 【9】 t20; (10) 以下程序用来输出结构体变量ex所占存储单元的字节数,请填空。 struct st char name20; double score; ; main() struct st ex; printf(“ex size: %dn”,sizeof( 【10】 ); (11) 设有以下结构类型说明和变量定义,则变量a在内存所占字节数是 11 。 Struct stud char num6; int s4; double ave; a,*p; (12) 有以下定义和语句,则sizeof(a)的值是 【12】 ,而sizeof(a.share)的值是 【13】 struct date int day; int month; int year; unionint share1 float share2; share; a; (13) 若以下定义和语句,则sizeof(a)的值是 【14】 ,而sizeof(b)的值是 【15】 struct int day; char mouth; int year; a, *b; b=&a; (14) 变量root有如图所示有存储结构,其中sp是指向字符串的指针域,next 是指向该结构的指针域,data用以存放整型数. 请填空 , 完成此结构的类型说明和变量root的定义 sp next data root struct list char *sp; 【16】 ; 【17】 ; root; (15) 有以下说明定义和语句,可用a.day引用结构体成员day, 请写出引用结构体成员a.day的其它两种形式 【18】 、【19】 。 structint day;char mouth;int year;a,*b; b=&a; (16) 现有如图所示的存储结构,每个结点含两个域,data是指向字符串的指针域,next是指向结点的指针域。请填空完成此结构的类型定义和说明。 struct link 【20】 ; 【21】; *head; (17) 以下函数creat用来建立一个带头结点的单向链表,新产生的结点总是插在链表的末尾。单向链表的头指针作为函数值返回.请填空: #include struct list char data; struct list * next; ; struct list * creat() struct list * h,* p,* q; char ch; h=【22】 malloc(sizeof(struct list); p=q=h; ch=getchar(); while(ch!=?) p=【23】 malloc(sizeof(struct list); p-data=ch; p-next=p; q=p; ch=getchar(); p-next=0; 【24】 (18) 下面min3函数的功能是:计算单向循环链表first中每3个相邻结点数据域中值的和,返回其中最小的值。请填空。 struct node int data; struct node * link; int min3(struct node * first) struct node *p=first; int m,m3=p-data+p-link-data+p-link-link-data; for(p=p-link; p! =first; p= 【25】 ) int m,m3=p-data+p-link-data+p-link-link-dat

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论