ImageVerifierCode 换一换
格式:DOC , 页数:18 ,大小:57KB ,
资源ID:499023      下载积分:2000 积分
快捷下载
登录下载
邮箱/手机:
温馨提示:
如需开发票,请勿充值!快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝扫码支付 微信扫码支付   
注意:如需开发票,请勿充值!
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【http://www.mydoc123.com/d-499023.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文([计算机类试卷]国家二级C语言(结构体、共用体、位运算及文件操作)机试模拟试卷10及答案与解析.doc)为本站会员(bonesoil321)主动上传,麦多课文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知麦多课文库(发送邮件至master@mydoc123.com或直接QQ联系客服),我们立即给予删除!

[计算机类试卷]国家二级C语言(结构体、共用体、位运算及文件操作)机试模拟试卷10及答案与解析.doc

1、国家二级 C语言(结构体、共用体、位运算及文件操作)机试模拟试卷 10及答案与解析 一、选择题 1 以下叙述中错误的是 ( A)可以用 typedef将已存在的类型用一个新的名字来代表 ( B)可以通过 typedef增加新的类型 ( C)用 typedef定义新的类型名后,原有类型名仍有效 ( D)用 typedef可以为各种类型起别名,但不能为变量起别名 2 以下关于 typedef的叙述错误的是 ( A) typedef只是将已存在的类型用一个新的名字来代表 ( B)用 typedef可以为各种类型说明一个新 名,但不能用来为变量说明一个新名 ( C)用 typedef可以增加新类型 (

2、 D)用 typedef为类型说明一个新名,通常可以增加程序的可读性 3 以下结构体类型说明和变量定义中正确的是 ( A) typedef struct int n; char c; REC; REC t1,t2; ( B) struct REC ; int n; char c; ; REC t1,t2; ( C) typedef struct REC; int n=0; char c=A; t1,t2; ( D) struct int n; char c; REC; REC t1,t2; 4 以下叙述中错误的是 ( A)可以用 typedef将已存在的类型用一个新的名字来代表 ( B)可以通

3、过 typedef增加新的类型 ( C)用 typedef定义新的类型名后,原有类型名仍有效 ( D)用 typedef可以为各种类型起别名,但不能为变量起别名 5 若有定义 typedef int* T; T a10; 则 a的定义与下面哪个语句等价 ( A) int *a10; ( B) int (*a)10; ( C) int *a; ( D) int a10; 6 若有定义 typedef char T10; T *a; 上述定义中 a的类型与下面选项中完全相同的是 ( A) char (*a)10; ( B) char *a; ( C) char a10; ( D) char *a1

4、0; 7 以下结构体说明和变量定义中 ,正确的是 ( A) typedef struct abc int n;double m; ABC; ABC x,y; ( B) struct abc int n;double m ; struct abc x, y; ( C) struct ABC int n;double m; struct ABC x, y; ( D) struct abc int n;double m; ; abc x, y; 8 以下叙述中正确的是 ( A)使用 typedef说明新类型名时,其格式是: typedef 新类型名 原类型名 ; ( B)使用 typedef 说明新

5、类型名时,后面不能加分号 ( C)在程序中,允许用 typedef来说明一种新的类型名 ( D)在使用 typedef改变 原类型的名称后,只能使用新的类型名 9 以下叙述中错误的是 ( A) typedef的作用是用一个新的标识符来代表已存在的类型名 ( B) typedef说明的新类型名必须使用大写字母,否则会出编译错误 ( C)可以用 typedef说明的新类型名来定义变量 ( D)用 typedef可以说明一种新的类型名 10 下面结构体的定义语句中,错误的是 ( A) struct ord int x;int y;int z; struct ord a; ( B) struct or

6、d int x;int y;int z; struct ord a; ( C) struct ord int x;int y;int z; a; ( D) struct int x;int y;int z; a; 11 有以下程序 #include stdio.h typedef struct int b, p; A; void f(A c) /* 注意: c是结构变量名 */ int j; c.b += 1; c.p+=2; main() i; A a=1,2; f(a); printf(“%d,%dn“, a.b, a.p); 程序运行后的输出结果是 ( A) 2,4 ( B) 1,2 (

7、 C) 1,4 ( D) 2,3 12 有以下程序 struct S int a, b; data2=10,100,20,200; main() struct S p=data1; printf(“%dn“, +(p.a) ); 程序运行后的输出结果是 ( A) 11 ( B) 20 ( C) 21 ( D) 10 13 设有定义: struct complex int real,unreal; data1=1,8,data2; 则以下赋值语句中错误的是 ( A) data2=(2,6); ( B) data2=data1; ( C) data2.real=data1.real; ( D) d

8、ata2.real=data1.unreal; 14 有以下程序 struct Sint n;int a20; voidf (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- ai p- aj)t=p- ai;p- ai=p- aj;p- aj=t; main( ) int i; struct S s=10,2,3,l,6,8,7,5,4,10,9; f( for(i=0;i s.n;i+ +) printf(“%d,“,s.ai); ( A) 10,9,8,7,6,5,4,3,2,1, (

9、 B) 2,3,1,6,8,7,5,4,10,9, ( C) 10,9,8,7,6,1,2,3,4,5, ( D) 1,2,3,4,5,6,7,8,9,10, 15 有以下程序 #include stdio.h #include string.h typedef structchar name9; char sex; int score2; STU; STU f(STU a) STU b=“Zhao“,m,85,90; int i; strcpy(a.name,b.name); a.sex=b.sex; for(i=0;i 2;i+) a.scorei=b.scorei; return a;

10、main() STU c=“Qian“,f,95,92,d; d=f(c); printf(“%s,%c,%d,%d,“,d.name,d.sex,d.score0,d.score1); printf(“%s,%c,%d,%d,“,c.name,c.sex,c.score0,c.score1); ( A) Zhao,m,85,90, Zhao,m,85,90 ( B) Qian,f,95,92, Qian,f,95,92 ( C) Zhao,m,85,90, Qian,f,95,92 ( D) Qian,f,95,92, Zhao,m,85,90 16 程序中已构成如下图所示的不带头结点的单向

11、链表结构,指针变量 s、 p、 q均已正确定义,并用于指向链表结点,指针变量 s总是作为头指针指向链表的第一个结点。 若有以下程序段: q=s; s=s- next; p=s; while(p- next) p=p- next; p-next=q; q- next=NULL;该程序段实现的功能是 ( A)尾结点成为首结点 ( B)首结点成为尾结点 ( C)删除首结点 ( D)删除尾结点 17 有以下结构体说明、变量定义和赋值语句 struct STD char name10; int age; char sex; s5,*ps; ps= 则以下 scanf函数调用语句有错误的是 ( A) sc

12、anf(“%d“, ( B) scanf(“%c“, ( C) scanf(“%s“,s0.name); ( D) scanf(“%d“,ps- age); 18 若有以下语句 typedef struct S int g; char h; T; 以下叙述中正确的是 ( A)可用 S定义结构体变量 ( B) S是 struct 类型的变量 ( C) T是 struct S类型的变量 ( D)可用 T定义结构体变量 19 有以下程序 # include stdio.h # include string.h Struct A int a; char b10; double c; struct A

13、f(struct A t); main() struct A a=1001,“ZhangDa“,1098.0; a=f(a); printf(“%d,%s,%6.1fn“,a.a,a.b,a.c); struct A f(Struct A t) t.a=1002; strcpy(t.b,“ChangRong“);t.c=1202.0;return t; 程序运行后的输出结果是 ( A) 1002,ZhangDa,1202.0 ( B) 1002,ChangRong,1202.0 ( C) 1001,ChangRong,1098.0 ( D) 1001,ZhangDa,1098.0 20 设有以

14、下语句 typedef struct TT char c; int a4; CIN; 则下面叙述中正确的是 ( A) TT是 struct类型的变量 ( B)可以用 TT定义结构体变量 ( C) CIN是 struct TT类型的变量 ( D)可以用 CIN定义结构体变量 21 有以下程序 #include struct ord int x,y; dt2=1,2,3,4; main() struct ord *p=dt; printf(“%d,“,+(p- x); printf(“%dn“,+(p- y); 程序运行后的输出结果是 ( A) 4,1 ( B) 2,3 ( C) 3,4 ( D)

15、 1,2 22 有以下程序段 struct st int x; int *y; *pt; int a=1,2, b=3,4; struct st c2=10,a,20,b; pt=c; 以下选项中表达式的值为 11的是 ( A) pt- x ( B) *pt- y ( C) +pt- x ( D) (pt+)- x 23 有下列程序: struct Sint n;int a20; void f(int *a,int n) int i; for(i=0;i n-1;i+ +) ai+ =i; main( ) int i; struct S s=10,2,3,1,6,8,7,5,4,10,9; f

16、(s.a,s.n); for(i=0;i s.n;i+ +) printf(“%d,“,s.ai); 程序运行后的输出结果是 ( A) 3,4,2,7,9,8,6,5,11,10, ( B) 2,3,1,6,8,7,5,4,10,9, ( C) 2,4,3,9,12,12,11,11,18,9, ( D) 1,2,3,6,8,7,5,4,10,9, 24 有下列程序: #include stdio.h #include string.h typedef struct char name9;char sex;float score2; STU; STU f(STU a) STU b=“Zhao“

17、,m,85.0,90.0;int i; strcpy(a.name,b.name); a.sex=b.sex; for(i=0;i 2;i+ +) a.scorei=b.scorei; return a; main( ) STU c=“Qian“,f,95.0,92.0,d; d=f(c); printf(“%s,%c,%2.0f,%2.0fn“,d.neme,d.sex,d.score0,d.score1); 程序的运行结果是 ( A) Qian,m,85,90 ( B) Zhao,f,95,92 ( C) Zhao,m,85,90 ( D) Qian,f,95,92 25 假定已建立以下链

18、表结构,且指针 p和 q已指向如图所示的节点: 则以下选项中可将 q 所指节点从链表中删除并释放该节点的语句组是 ( A) p=q- next; free(q); ( B) p=q; free(q); ( C) (*p).next=(*q).next; free(p); ( D) p- next=q- next; free(q); 26 有以下程序 #include stdio.h #include string.h struct A int a;char b10;double c; void f(struct A t); main() struct A a=1001,“ZhangDa“,10

19、98.0; f(a);printf(“%d,%s,%6.1fn“,a.a,a.b,a.c); void f(struct A t) t.a=1002; strcpy(t.b,“ChangRong“); t.c=1202.0; 程序运行后的输出结果是 ( A) 1002,ChangRong,1202.0 ( B) 1001, ChangRong,1098.0 ( C) 1001,ZhangDa,1098.0 ( D) 1002, ZhangDa,1202.0 国家二级 C语言(结构体、共用体、位运算及文件操作)机试模拟试卷 10答案与解析 一、选择题 1 【正确答案】 A 【试题解析】 C语言允

20、许用 typedef说明一种新类型名,说明新类型名的语句一般形式为: typedef 类型名 标识符;在此, “类型名 ”必须是在此语句之前已有定义的类型标识符。 “标误符 ”是一个用户定义标识符,用作新的类型名。 typedef语句 的作用仅仅是用 “标识符 ”来代表已存在的 “类型名 ”,并未产生新的数据类型,原有类型名依然有效。 【知识模块】 结构体、共用体、位运算及文件操作 2 【正确答案】 C 【试题解析】 C语言允许用 typedef说明一种新的类型名,其一般形式为:typedef 类型名 标识符;在此 “类型名 ”必须是在此语句之前已有定义的类型标识符。 “标识符 ”是一个用户定

21、义标识符,用作新的类型名。 Typedef语句的作用仅仅是用 “标识符 ”来代表已存在的 “类型名 ”,并未产生新的数据类型,原来的类型名依然有效,这样可以增加 程序的可读性。 【知识模块】 结构体、共用体、位运算及文件操作 3 【正确答案】 A 【试题解析】 定义结构体类型的一般形式为: struct 结构体名 成员列表 ;struct 结构体名后不能加 “; ”号,所以选项 B、 C错误,选项 D中定义无名称的结构体类型同时定义结构体变量形式应为 struct t1, t2;选项 A为用户自定义类型,其为正确的定义形式。 【知识模块】 结构体、共用体、位运算及文件操作 4 【正确答案】 B

22、 【试题解析】 C语言允许用 typedef说明一种新类型名 。 typedef 类型名 标识符 ; 其中 “类型名 ”必须是在此语句之前已定义的类型标识符; “标识符 ”是一个用户定义标识符,用作新的类型名; typedef语句的作用仅仅是用 “标识符 ”来代表已存在的 “类型名 ”,并未产生新的数据类型,原有类型名依然有效。 【知识模块】 结构体、共用体、位运算及文件操作 5 【正确答案】 A 【试题解析】 typedef的主要功能是为存在的类型命名,后面的代码中可以利用该新定义的类型名定义变量,题目中定义了整型指针类型 T,而后利用 T定义了整型指针数组 a,含有 10个元素,选项 A中

23、定义了整型指针数组 a,选项 B定义了一个指向一维数组的指针 a,选项 C定义指针变量 ,,而选项 D为定义整型数组最常用的形式,数组 a中可以存放 10个数据元素。 【知识模块】 结构体、共用体、位运算及文件操作 6 【正确答案】 D 【试题解析】 题目中利用 typedef定义了字符数组类型 T,而后定义了该类型的指针 a,因此 a为指针数组。 【知识模块】 结构体、共用体、位运算及文件操作 7 【正确答案】 A 【试题解析】 选项 B中结构体定义中每个成员后面的分号都不能省略, double m后没分号,因此错误。选项 C结构体类型定义完毕后, 外没加分号。选项 D中定义变量要加上关键字

24、 struct。 【知识模块】 结构体、共用体、位运算及文件操作 8 【正确答案】 C 【试题解析】 C语言允许用 typedef说明一种新类型名。定义形式如下: typedef 类型名 标识符 ; 其中 “类型名 ”必须是在此语句之前已定义的类型标识符; “标识符 ”是一个用户定义标识符,用作新的类型名; typedef语句的作用仅仅是用 “标识符 ”来代表已存在的 “类型名 ”,并未产生新的数据类型,原有 类型名依然有效。 【知识模块】 结构体、共用体、位运算及文件操作 9 【正确答案】 B 【试题解析】 typedef语句的作用仅仅是用 “标识符 ”来代表已存在的 “类型名 ”,并未产生

25、新的数据类型,原来类型名依然有效。为了便于识别,一般习惯将新的类型名用大写字母表示。 【知识模块】 结构体、共用体、位运算及文件操作 10 【正确答案】 B 【试题解析】 在选项 B中,由于在定义完结构体后缺少分号 “;”,所以这是一条不完整的语句,因而是错误的。 【知识模块】 结构体、共用体、位运 算及文件操作 11 【正确答案】 B 【试题解析】 在 C语言中,数据只能从实参单向传递给形参,称为 “按值 ”传递。也就是说,当简单变量作为实参时,用户不可能在函数中改变对应实参的值。所以本题中在 main()函数 f(a)语句中结构体实参 a作为值,传递给函数 f(A c)中的形参 c;这种值

26、传递的方式不会对实参 a产生任何影响,所以结构体实参 a的值不会发生变化。 【知识模块】 结构体、共用体、位运算及文件操作 12 【正确答案】 C 【试题解析】 在题目中定义了结构体 S类型的数组变量 data, 并对其赋初值。在程序中定义了指向结构体 S类型的变量 p,并把数组 data的第二个元素 data1的值赋给它,所以此时成员变量 p.a的值等于 20,在输出时分别加 1,所以输入结果为选项 A。 【知识模块】 结构体、共用体、位运算及文件操作 13 【正确答案】 A 【试题解析】 本题主要考查结构体变量的定义与初始化。题目中定义了 complex类型的结构体变量 data1和 da

27、ta2,并对 data1进行了初始化。可以用一个结构体变量对另一个结构体变量赋值,用一个结构体变量的成员对另一个结构体变量的成员赋 值。 【知识模块】 结构体、共用体、位运算及文件操作 14 【正确答案】 D 【试题解析】 void f(struct S *p )函数的功能使用了结构体指针变量实现对一维数组的元素从小到大排序。用关系表达式 p- ai p- aj实现一维数组中相邻元素两两比较,大的元素向后移,小的元素向前移。在主函数中语句 f(的功能实现对结构体变量 s中一维数组的元素从小到大的排序,所以循环语句的输出结果为1,2,3,4,5,6,7,8,9,10。 【知识模块】 结构体、共用

28、体、位运算及 文件操作 15 【正确答案】 C 【试题解析】 在 C语言中,函数实参与形参之间数据的传递是传值,也就是说在用实参调用形参时,是把实参的值拷贝一份给形参,而实参的值并不变化,仍是原来的值。所以对于本题来说,在主函数中调 f(e)后,实参 e的值并不会变化,仍是原值。在函数 f中把局部变量 b的值依次返回给变量 d。 【知识模块】 结构体、共用体、位运算及文件操作 16 【正确答案】 B 【试题解析】 分析程序可知,程序段首先让 q指向链表的首结点, s指向链表的第二结点, p此时指向链表的第二个结点 。然后在 while循环中,当 p的后继结点非空时,让 p指向链表的最后一个结点

29、,退出循环。然后让尾结点指向首结点,并使首结点的后继结点为 NULL。所以最终实现链表的首结点成为尾结点。 【知识模块】 结构体、共用体、位运算及文件操作 17 【正确答案】 D 【试题解析】 程序段定义了结构体变量数组 s5和指针变量 ps,然后 ps指向数组 s5中的第一个元素,因而 ps- age引用 s0.age。因为在输入 scanf()函数中,第 2个参数应该表示为地址变量,而选项 A表示的值,而不是一个地址值。 【知识模块】 结构体、共用体、位运算及文件操作 18 【正确答案】 D 【试题解析】 本题考查 typedef, T是 struct S的新名称,因此可用 T定义结构体变

30、量,但是 T并不是变量,只是 struct S的新名称。 【知识模块】 结构体、共用体、位运算及文件操作 19 【正确答案】 B 【试题解析】 在主函数中定义结构体 A的变量 a,并对其赋初值,再调用函数f(a),在函数 f(a)中对结构体变量 a的各个成员重新进行了赋值操作,并把其值返回在屏幕上输出。 【知识模块】 结构 体、共用体、位运算及文件操作 20 【正确答案】 D 【试题解析】 C语言允许用 typedef说明一种新的类型名,说明新类型名的语句为一般形式为: typedef 类型名 标识符 在此, “类型名 ”必须是此语句之前已有定义的类型标识符。 “标识符 ”是一个用户定义标识符

31、,用作新的类型名。 typedef语句的作用仅仅是用 “标识符 ”来代表已存在的 “类型名 ”,并未产生新的数据类型,原有类型名依然有效。在本题中用 typedef定义 CIN为 TT的一种新的类型名,因而可以用它定义一个结构体变量。 【知识 模块】 结构体、共用体、位运算及文件操作 21 【正确答案】 B 【试题解析】 在题目中定义了结构体 ord类型的数组变量 dt,并对其赋初值。在程序中定义了指向结构体 ord类型的指针变量 p,并且它指向变量数组 dt的第一个元素 dt0,所以此时成员变量 p- x的值等于 1,成员变量 p- y的值等于 2,在输出时分别加 1,所以输出结果为选项 B

32、。 【知识模块】 结构体、共用体、位运算及文件操作 22 【正确答案】 C 【试题解析】 由题目的已知条件可知 , pt 指向结构体数组 c2的第一元 素 c0,所以 pt- x=10,执行自加运算后为 11。 【知识模块】 结构体、共用体、位运算及文件操作 23 【正确答案】 C 【试题解析】 void f(int *a,int n)函数的功能是对数组 a 的每一个元素加上其下标的值。所以在 main()函数中 f(s.a,s.n)语句会调用 f(int *a,int n)函数,此时指针 a指向数组 s.a= 2,3,1,6,8,7,5,4,10,9, n=10;然后执行 for(i=0;i

33、 n-1;i+) ai+=i;语句,也就是从 0开始到 8对数组 s.a= 2,3,1,6,8,7,5,4,10,9中的每一个元素加上其下标值。 【知识模块】 结构体、共用体、位运算及文件操作 24 【正确答案】 D 【试题解析】 f( )函数的功能是对形参 a的各个成员用结构体变量 b的各个成员进行赋值后,然后返回变量 a。在主函数中调用 f(c )函数时,将 STU类型的结构体变量 c的值传递给形参 a,函数 f( )在对 a的各个成员进行重新赋值后,再将返回变量 a的值传给 d,最后输出结构变量 d的各个成员的值。 【知识模块】 结构体、共用体、位运算及文 件操作 25 【正确答案】 D

34、 【试题解析】 本题考查了在线性链表删除一个节点的方法,要删除 q所指向的节点,只需要把 q所指向的节点的前一个节点中的后继指针指向 q所指向的节点的下一个节点即可,即 p- next=q- next。再释放 q所指向的节点 ,即 free(q)。 【知识模块】 结构体、共用体、位运算及文件操作 26 【正确答案】 C 【试题解析】 本题主要考查是的函数调用时参数之间的传递问题。在 C语言中参数之间的传递是传值,也就是把实参的值复制一份传递给形参,而实参的值不发生变化 。所以对于本题来说,在主函数中执行 f(a),把结构体变量 a的值复制一份传递给形参变量 t,而实参变量 a的值保持不变。 【知识模块】 结构体、共用体、位运算及文件操作

copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1