第十一章 复杂数据类型《C语言程序设计教程》(清华大学出版社第三版) 章节关过卷

2025-07-08
| 2份
| 18页
| 94人阅读
| 1人下载

内容正文:

<C语言程序设计教程>清华大学出版社(第3版) 第十一章 复杂数据类型 章节过关卷 考试时间:90分钟 满分:100分 姓名 班级 学号 1、 选择题(共10题,每小题2分,共20分) 1、 若有以下定义:能给成员变量正确赋值的是 。 struct t {char s[10];int a;float b;}t1,*p=&t1; A、 B、 p.a=1 C、 *(p).b=3.14 D、 t1.s=”li” E、 t1.a=2 A、 2、 下面打算为float说明一个新类型名F的语句中,正确是的 。 A、 B、 typedef float=F; C、 typedef F float D、 typedef float F; E、 typedef float F 3、 4、 若有以下定义,则下列表达式中值不为5的是 。 struct T{ int x,y;}s[3]={1,3,5,7,9,11},*p=s; A、 B、 ++p->x C、 s[1].y-2 D、 (++p)->x E、 p->y *2-1 5、 6、 在C语言中,关于结构体和联合体以下说法错误的是 。 A、 联合体的所有成员共享一块内存。 B、 结构体可以使用位域,但联合体不能。 C、 结构体的大小内存等于所有成员大小之和。 D、 联合体的成员同一时间只能使用其中一个成员。 7、 以下关于枚举型说法正确的是 。 A、 枚举数据类型的成员可以是字符串 B、 枚举数据类型成员的值可以重复 C、 枚举数据类型成员,在没有给成员赋值的情况下,默认从0开始依次递增 D、 枚举数据类型的成员在定义后可以被修改 8、 若有以下定义语句,则输出结果正确的是 。 enum stat { ID,RUN,STO=6,ERR}; printf("%d,%d ",RUN*2,ERR/2); A、2,3 B、4,3 C、2,1 D、4,2原创精品资源学科网独家享有版权,侵权必究! 9、 若有以下定义语句,则输出结果正确的是 。 typedef int L; typedef char C; L a=2; C b='2'; printf("%d",a+b); A、4 B、52 C、50 D、语法有误 10、 若有以下节点,则能正确将p所指节点插入到q所指节点后面去的语句是 。 A、 q=q->next,q->next=p; B、 h->next=p,q=q->next,p->next=q; C、 p->next=h,h=p,q=q->next; D、 q=q->next,h->next=p,p->next=q; 11、 关于单链表的基本操作,以下说法错误的是 。 A、 在链表中,如果要删除一个节点,必须要知道删除节点的前驱节点。 B、 释放链表空间用free()函数 C、 链表的内存空间是连续,类似于数组。 D、 链表的节点至少要包含一个数据域和一个指向下一个节点的指针域。 12、 若有以下节点,要删除q所指向的节点,则不正确语句是 。 h A、 p=q->next,free(q); B、 p->next=q->next,free(q); C、 q=q->next,p->next=q,free(q); D、 q=q->next,h->next=q,free(q); 原创精品资源学科网独家享有版权,侵权必究! 二、填空题(共6空,每空2分,共12分) 1、若有以下定义: struct sk{int xh; char name[10];}s1,*p; p=&s1;则以下对结构体变量s1中成员xh的引用方式有s1.xh, 、 。 2、 若有以下定义:struct sk{int xh; char name[10];}s1;想为结构体定义别名为STUDENT,则定义语句 。 3、 若有以下定义:struct sk{int xh; char name[10];}s1;要给数组name赋值为”zhang”,则语句为 。 4、 若有定义结构体指针struct s1 *r, 如何为r开辟空间 。 5、 若有以下定义:union t{char str[4];float x,int b[2];}t1,*p=&t1;则sizeof(p)值为 。 三、程序运行题(共6题,每小题3分,共18分) 1、以下程序的运行结果是 。 #include<stdio.h> void main() { struct stu { int xh; char name[20]; int sex; union {long L; double a; }; }stu1; printf("%d ",sizeof(stu1)); } 2、 以下程序的运行结果是 。 #include<stdio.h> void main() { union {long i; char c[4]; 原创精品资源学科网独家享有版权,侵权必究! }s1,*b=&s1; s1.i=8; b->c[1]=2; printf("i=%d,%d,%d ",s1.i,b->c[0],(*b).c[1]); } 3、 以下程序的运行结果是 。 #include<stdio.h> void main() { struct x { char c[4], *p; }s1={"123","456"}; struct y { char *cp; struct x s1; }s2={"abc",{"def","ghi"}}; printf("%c,%s ",s1.c[0],s1.p++); printf("%c,%s ",*s1.p,s1.c); printf("%s,%s ",s2.cp,++s2.s1.p); printf("%s,%s ",++s2.cp,s2.s1.c); } 4、 以下程序的运行结果是 。 #include<stdio.h> #include<string.h> struct stu {char name[20];double cj;}s1,*p=&s1; void f1(struct stu s1) { strcpy(s1.name,"zhao");s1.cj=99.73; } void f2(struct stu *q) { strcpy(q->name,"lin");s1.cj=96.53; } void main() { strcpy(s1.name,"wang"),s1.cj=86.50; f1(s1); printf("%s,%f ",s1.name,s1.cj); f2(p); printf("%s,%f ",p->name,p->cj); }原创精品资源学科网独家享有版权,侵权必究! 5、 以下程序的运行结果是 。 #include<stdio.h> struct s { char x[2]; short int y;}; union { int a; short b[2]; struct s d;}st,*p=&st; void main() { st.a=0xabcd1234; printf("%x,%x ",p->a,p->b[0]); printf("%x,%x ",p->d.x[1],p->d.y);} 6、 以下程序的运行结果是 。 #include<stdio.h> enum weekday {sum=7,mon=1,tue,wed,thu,fri,sat}; void main() { char str[7][10]={"wang","zhang","lin","zhao","shi","yang","liu"},(*p)[10]=str; int i; for(i=tue;i<fri;i++) printf("%s",*(p+i)); } 四、程序填空题(共6空,每空5分,共30分) 1、程序功能:用尾插法创建带头节点的单链表,以输入的姓名为空串结束。请填空。 #include<stdio.h> #include<stdlib.h> #include<string.h> struct stu { long xh; char xm[10]; 原创精品资源学科网独家享有版权,侵权必究! float cj; struct stu *next; }; typedef STU struct stu STU *create( ) { char xm[10]; STU *p,*q,*h; h= ; if((h==NULL) return h; p=h; gets(xm); while(*xm!='\0') { if((q=(STU *)malloc(LEN))==NULL) break; scanf("%d,%f",&q->xh,&q->cj); strcpy(q->xm,xm); ; gets(xm); } p->next=NULL; return h; } int main() { STU *p,*head; ; p=head->next; for(;p!=NULL;p=p->next) printf("%d,%s,%.2f ",p->xh,p->xm,p->cj); return 0; } 2、函数功能:输出并删除成绩不合格的学生信息节点。请填空。 #include<stdio.h> struct stu { long xh; 原创精品资源学科网独家享有版权,侵权必究! char xm[10]; float cj; struct stu *next; }; void prin_del(struct stu **h) { struct stu *p,*q; while(p!=NULL) if(p->cj>60) q=p,p=p->next; else if(p==*h) { printf("%d,%s,%.2f ",p->xh,p->xm,p->cj); *h=(*h->next); free(p);p=*h; } else { printf("%d,%s,%.2f ",p->xh,p->xm,p->cj); ; free(p); p=p->next;} } 五、程序改错题(共20分,一题两处错误) 1、函数功能是插入法排序,将不带头节点的单链表按成绩升序排序。请在找出错误语句,并写出完整的正确语句。(找出错误2分,改正错误3分) L1 struct stu L2 { long xh; L3 char xm[10]; L4 float cj; L5 struct stu *next; }; L6 struct stu ascend(struct stu *h) L7 { struct stu *p,*q,*r; L8 if(h==NULL) return h; L9 p=h->next; L10 h->next=NULL; L11 while(p!=NULL) L12 { for(q=h;p->cj>q->cj&&q!=NULL;q=q->next) r=q; 原创精品资源学科网独家享有版权,侵权必究! L13 if(q==h) L14 { h=p; L15 p=p->next; L16 h->next=q; } L17 else { r->next=p;r=p;p=p->next; L18 q->next=r;} } L19 return h; } 2、程序功能:输入学生姓名,能查询总成绩,能连续进行查询,直到输入0时结束。请找出错误语句,并写出完整的正确语句。(找出错误2分,改正错误3分)原创精品资源学科网独家享有版权,侵权必究! L1 #include<stdio.h> L2 #include<string.h> L3 struct stu L4 {char *name;float cj; L5 }s[]={“wang”,586.0,”zhao”,523.5,”li”,548.5}; L6 void main() L7 { char xm[20]; L8 int i; L9 gtes(xm); L10 while(strcmp(xm,”0”)!=0) L11 { for(i=0;i<3;i++) L12 if(xm==s[i].name) L13 { printf(“%s,%f”,s[i].name,s[i].cj); L14 continue;} L15 if(i>3) printf(“没有找到”); } 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $$ <C语言程序设计教程>清华大学出版社(第3版) 第十一章 复杂数据类型 章节过关卷 考试时间:90分钟 满分:100分 姓名 班级 学号 1、 选择题(共10题,每小题2分,共20分) 1、 若有以下定义:能给成员变量正确赋值的是 。 struct t {char s[10];int a;float b;}t1,*p=&t1; A、 B、 p.a=1 C、 *(p).b=3.14 D、 t1.s=”li” E、 t1.a=2 A、 【答案】D 【解析】结构体变量的引用方法有:结构体变量名.成员名、结构体指针->成员名、 (*结构体指针).成员名。其中C选项,s定义为字符数组,赋值应用赋值函数strcpy来实现,strcpy(t1.s,”li”)。故选D。 2、 下面打算为float说明一个新类型名F的语句中,正确是的 。 A、 B、 typedef float=F; C、 typedef F float D、 typedef float F; E、 typedef float F 【答案】C 【解析】别名定义格式:typedef 类型名 类型名别名;故选C。 3、 若有以下定义,则下列表达式中值不为5的是 。 struct T{ int x,y;}s[3]={1,3,5,7,9,11},*p=s; A、 B、 ++p->x C、 s[1].y-2 D、 (++p)->x E、 p->y *2-1 4、 【答案】A 【解析】A选项优先级++(p->x),p->x值为1,加1后等于2。故选A。 5、 在C语言中,关于结构体和联合体以下说法错误的是 。 A、 联合体的所有成员共享一块内存。 B、 结构体可以使用位域,但联合体不能。 C、 结构体的大小内存等于所有成员大小之和。 D、 联合体的成员同一时间只能使用其中一个成员。 【答案】B原创精品资源学科网独家享有版权,侵权必究! 【解析】联合体也能使用位域。故选B。 6、 以下关于枚举型说法正确的是 。 A、 枚举数据类型的成员可以是字符串 B、 枚举数据类型成员的值可以重复 C、 枚举数据类型成员,在没有给成员赋值的情况下,默认从0开始依次递增 D、 枚举数据类型的成员在定义后可以被修改 【答案】C 【解析】A选项枚举数据类型的成员不可以是字符串,B选项枚举数据类型成员的值不可以重复,D选项枚举数据类型的成员是整数常量,定义后不可以修改。故选C。 7、 若有以下定义语句,则输出结果正确的是 。 enum stat { ID,RUN,STO=6,ERR}; printf("%d,%d ",RUN*2,ERR/2); A、2,3 B、4,3 C、2,1 D、4,2 【答案】A 【解析】C、枚举数据类型成员,在没有给成员赋值的情况下,默认从0开始依次递增,但是在赋值后,后面的成员跟着前面的值依次递增,因此ERR值为7。故选A 8、 若有以下定义语句,则输出结果正确的是 。 typedef int L; typedef char C; L a=2; C b='2'; printf("%d",a+b); A、4 B、52 C、50 D、语法有误 【答案】B 【解析】L是int的别名,C是char的别名,用%d输出值,’2’的ASCII值为50。故选B。 9、 若有以下节点,则能正确将p所指节点插入到q所指节点后面去的语句是 。 原创精品资源学科网独家享有版权,侵权必究! A、 q=q->next,q->next=p; B、 h->next=p,q=q->next,p->next=q; C、 p->next=h,h=p,q=q->next; D、 q=q->next,h->next=p,p->next=q; 【答案】D 【解析】A选项,将P指向的节点插入到最后一个节点后,B选项丢掉一个节点,不符合题意,C选项将P指向的节点插入到最前面。均不符合题意。故选D。 10、 关于单链表的基本操作,以下说法错误的是 。 A、 在链表中,如果要删除一个节点,必须要知道删除节点的前驱节点。 B、 释放链表空间用free()函数 C、 链表的内存空间是连续,类似于数组。 D、 链表的节点至少要包含一个数据域和一个指向下一个节点的指针域。 【答案】C 【解析】链表节点是动态分配的,内存不连续。 11、 若有以下节点,要删除q所指向的节点,则不正确语句是 。 h A、 p=q->next,free(q); B、 p->next=q->next,free(q); C、 q=q->next,p->next=q,free(q); D、 q=q->next,h->next=q,free(q); 【答案】A 【解析】A选项中,q还是在h链表中,如果被释放,则h所指向的节点,指针域找不到后续节点。故选A。 二、填空题(共6空,每空2分,共12分) 1、若有以下定义: struct sk{int xh; char name[10];}s1,*p;原创精品资源学科网独家享有版权,侵权必究! p=&s1;则以下对结构体变量s1中成员xh的引用方式有s1.xh, 、 。 【答案】p->xh (*p).xh 2、 若有以下定义:struct sk{int xh; char name[10];}s1;想为结构体定义别名为STUDENT,则定义语句 。 【答案】typedef STUDENT struct sk 3、 若有以下定义:struct sk{int xh; char name[10];}s1;要给数组name赋值为”zhang”,则语句为 。 【答案】strcpy(s1.name,"zhang"); 4、 若有定义结构体指针struct s1 *r, 如何为r开辟空间 。 【答案】r=(struct s1 *)malloc(sizeof(struct s1)); 5、 若有以下定义:union t{char str[4];float x,int b[2];}t1,*p=&t1;则sizeof(p)值为 。 【答案】4 三、程序运行题(共6题,每小题3分,共18分) 1、以下程序的运行结果是 。 #include<stdio.h> void main() { struct stu { int xh; char name[20]; int sex; union {long L; double a; }; }stu1; printf("%d ",sizeof(stu1)); } 【答案】40 2、 以下程序的运行结果是 。 #include<stdio.h> void main()原创精品资源学科网独家享有版权,侵权必究! { union {long i; char c[4]; }s1,*b=&s1; s1.i=8; b->c[1]=2; printf("i=%d,%d,%d ",s1.i,b->c[0],(*b).c[1]); } 【答案】i=520,8,2 3、 以下程序的运行结果是 。 #include<stdio.h> void main() { struct x { char c[4], *p; }s1={"123","456"}; struct y { char *cp; struct x s1; }s2={"abc",{"def","ghi"}}; printf("%c,%s ",s1.c[0],s1.p++); printf("%c,%s ",*s1.p,s1.c); printf("%s,%s ",s2.cp,++s2.s1.p); printf("%s,%s ",++s2.cp,s2.s1.c); } 【答案】1,456 5,123 abc,hi bc,def 4、 以下程序的运行结果是 。 #include<stdio.h> #include<string.h> struct stu {char name[20];double cj;}s1,*p=&s1; void f1(struct stu s1) { strcpy(s1.name,"zhao");s1.cj=99.73; } void f2(struct stu *q) 原创精品资源学科网独家享有版权,侵权必究! { strcpy(q->name,"lin");s1.cj=96.53; } void main() { strcpy(s1.name,"wang"),s1.cj=86.50; f1(s1); printf("%s,%f ",s1.name,s1.cj); f2(p); printf("%s,%f ",p->name,p->cj); } 【答案】wang,86.500000 lin,96.530000 5、 以下程序的运行结果是 。 #include<stdio.h> struct s { char x[2]; short int y;}; union { int a; short b[2]; struct s d;}st,*p=&st; void main() { st.a=0xabcd1234; printf("%x,%x ",p->a,p->b[0]); printf("%x,%x ",p->d.x[1],p->d.y);} 【答案】abcd1234,1234 12,ffffabcd 6、 以下程序的运行结果是 。 #include<stdio.h> enum weekday {sum=7,mon=1,tue,wed,thu,fri,sat}; void main() { char str[7][10]={"wang","zhang","lin","zhao","shi","yang","liu"},(*p)[10]=str; int i; 原创精品资源学科网独家享有版权,侵权必究! for(i=tue;i<fri;i++) printf("%s",*(p+i)); } 【答案】linzhaoshi 四、程序填空题(共6空,每空5分,共30分) 1、程序功能:用尾插法创建带头节点的单链表,以输入的姓名为空串结束。请填空。 #include<stdio.h> #include<stdlib.h> #include<string.h> struct stu { long xh; char xm[10]; float cj; struct stu *next; }; typedef STU struct stu STU *create( ) { char xm[10]; STU *p,*q,*h; h= ; if((h==NULL) return h; p=h; gets(xm); while(*xm!='\0') { if((q=(STU *)malloc(LEN))==NULL) break; scanf("%d,%f",&q->xh,&q->cj); strcpy(q->xm,xm); ; gets(xm); } p->next=NULL; 原创精品资源学科网独家享有版权,侵权必究! return h; } int main() { STU *p,*head; ; p=head->next; for(;p!=NULL;p=p->next) printf("%d,%s,%.2f ",p->xh,p->xm,p->cj); return 0; } 【答案】(1)#define LEN sizeof(struct stu) (2) (STU *)malloc(LEN) (3)p->next=q,p=q (4)head=create( ); 2、函数功能:输出并删除成绩不合格的学生信息节点。请填空。 #include<stdio.h> struct stu { long xh; char xm[10]; float cj; struct stu *next; }; void prin_del(struct stu **h) { struct stu *p,*q; while(p!=NULL) if(p->cj>60) q=p,p=p->next; else if(p==*h) { printf("%d,%s,%.2f ",p->xh,p->xm,p->cj); *h=(*h->next); free(p);p=*h; } else { printf("%d,%s,%.2f ",p->xh,p->xm,p->cj); ; free(p); p=p->next;} } 【答案】 p=*h; q->next=p->next 原创精品资源学科网独家享有版权,侵权必究! 五、程序改错题(共20分,一题两处错误) 1、函数功能是插入法排序,将不带头节点的单链表按成绩升序排序。请在找出错误语句,并写出完整的正确语句。(找出错误2分,改正错误3分) L1 struct stu L2 { long xh; L3 char xm[10]; L4 float cj; L5 struct stu *next; }; L6 struct stu ascend(struct stu *h) L7 { struct stu *p,*q,*r; L8 if(h==NULL) return h; L9 p=h->next; L10 h->next=NULL; L11 while(p!=NULL) L12 { for(q=h;p->cj>q->cj&&q!=NULL;q=q->next) r=q; L13 if(q==h) L14 { h=p; L15 p=p->next; L16 h->next=q; } L17 else { r->next=p;r=p;p=p->next; L18 q->next=r;} } L19 return h; } 【答案】 L6 struct stu *ascend(struct stu *h) L18 r->next=q;} } 2、程序功能:输入学生姓名,能查询总成绩,能连续进行查询,直到输入0时结束。请找出错误语句,并写出完整的正确语句。(找出错误2分,改正错误3分)原创精品资源学科网独家享有版权,侵权必究! L1 #include<stdio.h> L2 #include<string.h> L3 struct stu L4 {char *name;float cj; 原创精品资源学科网独家享有版权,侵权必究! L5 }s[]={“wang”,586.0,”zhao”,523.5,”li”,548.5}; L6 void main() L7 { char xm[20]; L8 int i; L9 gtes(xm); L10 while(strcmp(xm,”0”)!=0) L11 { for(i=0;i<3;i++) L12 if(xm==s[i].name) L13 { printf(“%s,%f”,s[i].name,s[i].cj); L14 continue;} L15 if(i>3) printf(“没有找到”); } 【答案】 L12 strcmp(xm,s[i].name)==0 L14 break; 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $$

资源预览图

第十一章 复杂数据类型《C语言程序设计教程》(清华大学出版社第三版) 章节关过卷
1
第十一章 复杂数据类型《C语言程序设计教程》(清华大学出版社第三版) 章节关过卷
2
第十一章 复杂数据类型《C语言程序设计教程》(清华大学出版社第三版) 章节关过卷
3
所属专辑
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。