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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

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

1、国家二级 C语言(结构体、共用体、位运算及文件操作)机试模拟试卷 5及答案与解析 一、选择题 1 以下关于 typedef的叙述错误的是 ( A) typedef只是将已存在的类型用一个新的名字来代表 ( B)用 typedef可以为各种类型说明一个新名,但不能用来为变量说明一个新名 ( C)用 typedef可以增加新类型 ( D)用 typedef为类型说明一个新名,通常可以增加程序的可读性 2 若有定义 typedef int*T; T a10;则 a的定义与下面哪个语句等价 ( A) int*a10; ( B) int(*a)10; ( C) int*a; ( D) int a10;

2、3 以下叙述中正确的是 ( A)使用 typedef说明新类型名时,其格式是: typedef新类型名原类型名: ( B)使用 typedef说明新类型名时,后面不能加分号 ( C)在程序中,允许用 typedef来说明一种新的类型名 ( D)在使用 typedef改变原类型的名称后,只能使用新的类型名 4 下面结构体的定义语句中,错误的是 ( A) struct ordint x; int y; int z; ; struct orda; ( B) struct ordint x; int y; int z; struct ord a; ( C) struct ordint x; int y

3、; int z; a; ( D) structint x; int y; int z; )a; 5 设有定义: struct complexint rea1, unrea1; data1=1, 8, data2; 则以下赋值语句中错误的是 ( A) data2=(2, 6); ( B) data2=data1; ( C) data2 rea1=data1 rea1; ( D) data2 rea1=data1 unrea1; 6 程序中已构成如下图所示的不带头结点的单向链表结构,指针变量 s、 p、 q均己正确定义,并用于指向链表结点,指针变量 s总是作为头指针指向链表的第一个结点。 若有以下

4、程序段:q=s; s=s- next; p=s; while(p- next)p=p- next; P- next=q; q- next=NULL;该程序段实现的功能是 ( A)尾结点成为首结点 ( B)首结点成为尾结点 ( C)删除首结点 ( D)删除尾结点 7 有以下程序 #include stdio h #include string h Struct A int a; char b10; double c; ; struct A f(struct A t); main() struct A a=1001, “ZhangDa“, 1098 0; a=f(a); printf(“ d, s

5、, 6 1f n“, a a, a b, a c); struct A f(Struct A t) t a=1002; strcpy(t b, “ChangRong“); t c ( A) 1002, ZhangDa, 1202 0 ( B) 1002, ChangRong, 1202 0 ( C) 1001, ChangRong, 1098 0 ( D) 1001, ZhangDa, 1098 0 8 有以下程序段 struct stint x; int*y; *pt; int a=1, 2, b=3, 4; struct st c2=10, a, 20, b; pt=c; 以下选项中表达式

6、的值为 11的是 ( A) pt- x ( B) *pt- y ( C) +pt- x ( D) (pt+)- x 9 假定已 建立以下链表结构,且指针 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); 10 有以下程序 #include stdio h struct tt int x; struct tt*y; )*p; struc

7、t tt a41=20, a+1, 15, a+2, 30, a+3, 17a; main() int i; p=a; for(i=1; i =2; i+)printf(“ d, “, p- x); p=p- y; 程序的运行结果是 ( A) 20, 15, ( B) 30, 17 ( C) 15, 30, ( D) 20, 30, 11 有以下程序 struct Aint a; char b10; double c; ; void f(struct A t); main()struct A a=1001, “ZhangDa“, 1098 0; f(a); printf(“ d, s, 6 1

8、tha“, 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, ZhangDa, 1098 0 ( C) 1001, ChangRong, 1098 0 ( D) 1002, ZhangDa, 1202 0 12 若有以下程序 typedef struct stuchar name10, gender; int score; STU; void f(STU a, STU b) b=

9、a; printf(“ s, c, d, “, b name, b gender, b score); main()STU a=“Zhao“, m, 290, b=“Qian“, f, 350; f(a, b); printf(“ s, c, d n“, b name, b gender, b score); 则程序的输出结果是 ( A) Zhao, m, 290, Zhao, m, 290 ( B) Zhao, m, 290, Qian, f, 350 ( C) Qian, f, 350, Qian, f, 350 ( D) Zhao, m, 290, Zhao, f, 350 13 若有以

10、下程序段 struct stint n; struct st*next; ; struct st a3=5, &a1, 7, &a2, 9, 0, *p; p=&a0; 则以下选项中值为 6的表达式是 ( A) +(p- n) ( B) (*p) n ( C) p- n+ ( D) p- n 14 以下叙述中正确的是 ( A)函数的返回值不能是结构体类型 ( B)函数 的返回值不能是结构体指针类型 ( C)在调用函数时,可以将结构体变量作为实参传给函数 ( D)结构体数组不能作为参数传给函数 15 有以下程序 struct Sint a; int b; ; main()struct Sa, *

11、p=&a; a a=99; printf(“ d n“, _); 程序要求输出结构体中成员 a的数据,以下不能填入横线处的内容是 ( A) a a ( B) *p a ( C) p- a ( D) (*p) a 16 以下叙述中错误的是 ( A)函数的返回值类型不能是结构体 类型,只能是简单类型 ( B)只要类型相同,结构体变量之间可以整体赋值 ( C)可以通过指针变量来访问结构体变量的任何成员 ( D)函数可以返回指向结构体变量的指针 17 下面选项中关于位运算的叙述正确的是 ( A)位运算符都需要两个操作数 ( B)左移运算的结果总是原操作数据 2倍 ( C)右移运算时,高位总是补 0 (

12、 D)位运算的对象只能是整型或字符型数据 18 有以下程序 main()int a=1, b=2, c=3, x; x=(ab)&c; printf(“ d nT“, x); 程序的运行 结果是 ( A) 1 ( B) 2 ( C) 3 ( D) 0 19 有以下程序 #include stdio h main() int a=5, b=1, t; t=(a 2)|b; printf(“ d n“, t); ( A) 11 ( B) 6 ( C) 21 ( D) 1 20 若有以下程序 main()int c; C=13|5; printf(“ d n“, c); 则程序的输出结果是 ( A)

13、 15 ( B) 18 ( C) 13 ( D) 5 21 下面关于位运算符的叙述,正确的是 ( A)群表 示 “按位异或 ”的运算 ( B) |表示 “按位或 ”的运算 ( C)表示 “按位异或 ”的运算 ( D) &表示 “按位与 ”的运算 22 下面选项中关于 “文件指针 ”概念的叙述正确的是 ( A)文件指针就是文件位置指针,表示当前读写数据的位置 ( B)文件指针指向文件在计算机中的存储位置 ( C)文件指针是程序中用 FILE定义的指针变量 ( D)把文件指针传给 fscanf函数,就可以向文本文件中写入任意的字符 23 设文件指针 fp己定义,执行语句 fp=fopen(“fil

14、e“, “w“);后,以下针对文本文件 file操作叙述的选项中正确的是 ( A)写操作结束后可以从头开始读 ( B)可以在原有内容后追加写 ( C)可以随意读和写 ( D)只能写不能读 24 执行以下程序后, test txt文件的内容是 (若文件能正常打开 ) #include stdio h main() FILE*fb; char*s1=“Fortran“, *s2=“Basic“; if(fb=fopen(“test txt“, “wb“)=NULL) printf(“Cant open test txt file n“); exit(1); fwrite(s1, 7, 1, f1)

15、; *把从地址 s1开始的 7个字符写到 fb所指文件中 * fseek(fb, 0L, SEEK_SET); ( A) Basican ( B) BasicFortran ( C) Basic ( D) FortranBasic 25 以下叙述中错误的是 ( A) gets函数用于从终端读入字符串 ( B) getchar函数用于从磁盘文件读入字符 ( C) fputs函数用于把字符串输出到文件 ( D) fwrite函数用于以二进制形式输出数据到文件 26 有下列程序: #include stdio h main() FILE*fp; int a10=1, 2, 3, 0, 0, i; f

16、p=fopen(“d2 dat“, “wb“); fwtite(a, sizeof(int), 5, fp); fwrite(a, sizeof(int), 5, fp); fclose(fp); fp=fopen(“d2 dat“, “rb“); fread(a, sizeof(int), 10, fp); fclose(fp); for(i=0; i 10; i+)printf(“ dt“, a ( A) 1, 2, 3, 1, 2, 3, 0, 0, 0, 0, ( B) 1, 2, 3, 0, 0, 1, 2, 3, 0, 0, ( C) 123, 0, 0, 0, 0, 123, 0

17、, 0, 0, 0, ( D) 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 27 以下程序依次把从终端输入的字符存放到 f文件中,用 #作为结束输入的标志,则在横线处应填入的选项是 #include stdio h main()FILE*fp; char ch; fp=fopen(“fname“, “w“): while(ch=getchar0)!=#) fputc(_): fclose(f1); ( A) fp, ch ( B) ch ( C) ch, “fname“ ( D) ch, fp 28 若 fp已定义为指向某文件的指针,且没有读到该文件的末尾,则 C语苦函数feo

18、f(fp)的函数返回值是 ( A) 0 ( B)非 0 ( C) -1 ( D) EOF 国家二级 C语言(结构体、共用体、位运算及文件操作)机试模拟试卷 5答案与解析 一、选择题 1 【正确答案】 C 【试题解析】 C语言允许用 typedef说明一种新的类型名,其一般形式为:typedef类型名标识符;在此 “类型名 ”必须是在此语句之前已有定义的类型标识符。 “标识符 ”是一个用户定义标识符,用作新的类型名。 Typedef语句的作用仅仅是用 “标识符 ”来代表己存在的 “类型名 ”,并未产生新的数据类型,原来的类型名依然有效。这样可以增加程序的可读性。 【知识模块】 结构体、共用体、位

19、运算及文件操作 2 【正确答案】 A 【试题解析】 typedef的主要功能是为存在的类型命名,后面的代码中可以利用该新定义的类型名定义变量,题目中定义了整型指针类型 T,而后利用 T定义了整型指针数组 a,含有 10个元素,选项 A)中定义了整型指针数组 a,选项 B)定义了个指向一维数组的指针 a,选项 C)定义指针变量,而选项 D)为定义整型数组最常用的形式,数组 a中可以存放 10个数据元素。 【知识模块】 结构体、共用体、位运算及文件操作 3 【正确答案】 C 【试题解析】 C语言允许用 typedef说明一种新类型名。定义形式如下: typedef类型名标识符; 其中 “类型名 ”

20、必须是在此语句之前己定义的类型标识符; “标识符 ”是一个用户定义标识符,用作新的类型名; typedef语句的作用仅仅是用 “标识符 ”来代表已存在的 “类型名 ”,并未产生新的数据类型,原有类型名依然有效。 【知识模块】 结构体、共用体、位运算及文件操作 4 【正确答案】 B 【试题解析】 在选项 B)中,由于在定义完结构体后缺少分号 “; ”,所以这是一条不完整的语句,因而是错误的。 【知识模块】 结构体、共用体、位运算及文件操作 5 【正确答案】 A 【试题解析】 本题主要考查结构体变量的定义与初始化。题目中定义了 complex类型的结构体变量 data1和 data2,并对 dat

21、a1进行了初始化。可以用一个结构体变量对另一个结构体变量赋值,用一个结构体变量的成员对另一个结构体变量的成员赋值。 【知识模块】 结构体、共用体、位运算及文件操作 6 【正确答案】 B 【试题解析】 分析程序可知,程序段首先让 q指向链表的首结点, s指向链表的第二结点, p此时指向链表的第二个结点;然后在 while循环中,当 p的后继结点非空时,让 p指向链表的最后一个结点,退出循环。然后让尾结点指向首结点,并使首结点的后继结点为 NULL。所以最终 实现链表的首结点成为尾结点。 【知识模块】 结构体、共用体、位运算及文件操作 7 【正确答案】 B 【试题解析】 在主函数中定义结构体 A的

22、变量 a,并对其赋初值,再调用函数f(a),在函数 f(a)中对结构体变量 a的各个成员重新进行了赋值操作,并把其值返回在屏幕上输出。 【知识模块】 结构体、共用体、位运算及文件操作 8 【正确答案】 C 【试题解析】 由题目的已知条件可知, pt指向结构体数组 c2的第一元素 c0,所以 pt- x=10,执行自加运算后为 11。 【知识模 块】 结构体、共用体、位运算及文件操作 9 【正确答案】 D 【试题解析】 本题考查了在线性链表删除一个节点的方法,要删除 q所指向的节点,只需要把 q所指向的节点的前一个节点中的后继指针指向 q所指向的节点的下一个节点即可,即 p- next=q- n

23、ext。再释放 q所指向的节点,即 free(q)。 【知识模块】 结构体、共用体、位运算及文件操作 10 【正确答案】 A 【试题解析】 程序定义了结构体类型 tt,其成员包括一个整型数据 x和指向其自身结构的指针变量 y。程序在定义结构体数组 a的 同时对其进行了初始化。其元素a0的成员 y被赋值为元素 a1的地址, a1 y被赋值为 a2的地址, a2 y被赋予 a3的地址, a3 y被赋予 a0的地址。这就形成了一个单向的循环链表,每个元素的指针成员都指向下一个元素的地址。在主函数中,通过一个 for循环语句,输出该链表前 2个节点数值成员的值,即 a0 x和 a1 x。 【知识模块】

24、 结构体、共用体、位运算及文件操作 11 【正确答案】 B 【试题解析】 在主函数中定义结构体 A的变量 a,并对其赋初值,再调用函数f(a),形参 t接收实参的数据,在函数 f(t)中对结构体变量 t的各个成员进行了赋值操作,需要注意的,形参和实参之间是数据传递,因此对形参的操作对实参不产生影响,因此在主函数输出仍然输出变量 a的数据 【知识模块】 结构体、共用体、位运算及文件操作 12 【正确答案】 B 【试题解析】 函数 f(STU a, STU b)的主要功能是为把结构体变量 a的值存放到b中,然后输出 b中各个成员的值。主函数中调用函数 f(a, b),输出赋值以后 b的数据,实际为

25、 a“Zhao“, m, 290的数据,函数调用结束, 形参 a和 b撤销,流程到主函数输出 b“Qian“, r, 50的数据。 【知识模块】 结构体、共用体、位运算及文件操作 13 【正确答案】 A 【试题解析】 选项 A)中表达式 +(p- n)为前缀自加表达式, p- n和 a0 n等价,其值为 5,前缀自加后值为 6。选项 B)中表达式 (*p) n和选项 D)的表达式 p- n含义相同,表示取结构指针 p所指向的成员,因此值为 5。选项 C)中表达式p- n+为后缀自加表达式,相当于 (p- n)+,表达式值为 5。 【知识模块】 结构体、共用体、位 运算及文件操作 14 【正确答

26、案】 C 【试题解析】 和普通变量相似,结构体变量也可以作为函数实参或者形参,函数的返回值也可以是结构体类型。 【知识模块】 结构体、共用体、位运算及文件操作 15 【正确答案】 B 【试题解析】 如果 p指向结构体,那么下面三种形式都可以访问结构体的成员:结构体变量成员名、 (*p)成员名、 p-成员名。 【知识模块】 结构体、共用体、位运算及文件操作 16 【正确答案】 A 【试题解析】 函数的返回值类型可以是结构体类型。结构体变量 之间可以相互复制。 【知识模块】 结构体、共用体、位运算及文件操作 17 【正确答案】 D 【试题解析】 位运算则是以位 (bit)一级进行的运算,位运算符中

27、除 “ ”以外,均为二元运算符,即要求两侧各有一个运算量,运算量只能是整型或字符型的数据,不能为实型数据。其中右移时,右端 (低位 )移出的二进制数舍弃,左端 (高位 )移入的二进制数分两种情况:对于无符号整数和正整数,高位补 0:对于负整数,高位补 1。而左移运算在没有溢出的前提下每移动一位,相当于原数据的 2倍。 【知识模块】 结构体、共用体、 位运算及文件操作 18 【正确答案】 C 【试题解析】 1、 2、 3的二进制形式分别为 00000001、 00000010、 00000011。首先计算 1与 2的或运算,即 12=(00000001)(00000010)=00000011,再

28、将其与 3进行 “与 ”运算。结果为 (00000011)&(00000011)=4)0000011,即十进制数 3。 【知识模块】 结构体、共用体、位运算及文件操作 19 【正确答案】 C 【试题解析】 本题考查位操作运算符。 “ ”是左移运算符,左移一位相 当于乘2, “”是按位或运算符。 5左移两位相当于乘 4,得到 20, 20的二进制数是00010100,和 00000001进行按位或操作得到 00010101,即十进制的 21。 【知识模块】 结构体、共用体、位运算及文件操作 20 【正确答案】 C 【试题解析】 按位或 (|)的运算规则是:参加运算的两个运算数中,只要两个相应的二

29、进制位中一个为 1,则该位的运算结果即为 1;只有当两个相应位的数都为 0时,该位的运算结果才为 0。 13的二进制位 1101, 5的二进制位 0101,或运算的结果为 1101,因此值为 13。 【知识模块】 结构体、共用体、位运算及文件操作 21 【正确答案】 D 【试题解析】 C语言提供了 6种位运算符,各种位运算符的含义见下表:【知识模块】 结构体、共用体、位运算及文件操作 22 【正确答案】 C 【试题解析】 文件指针实际上是指向一个结构体类型的指针,这个结构体中包含如缓冲区的地址、在缓冲区中当前存取的字符的位置、对文件是 “读 ”或 “写 ”、是否出错、是否己经遇到文件结束标志等

30、信息。一般称文件指针结构体类型名为FILE,可以用此类型名来定义文件指针。 格式 FILE*指针变量名 说明 FILE是一个存储文件信息的结构体类型的变量。 注意不要和文件位置指针混淆,在文件内部有一个位置指针,用以指示文件内部的当前读写位置。使用 fgetc函数,每读写一次,该指针均向后移动,它不需在程序中定义说明,而是由系统自动设置的。而文件指针是指向整个文件的,须在程序中定义说明,只要不重新赋值,文件指针的值是不变的。 fscanf函数可以向文本文件和二进制文件输入数据。 【知识模块】 结构体、共用体、位运算及文件操作 23 【正确答案】 D 【试题解析】 在题目中函 数 fopen以

31、“只写 ”方式打开文件 file。 【知识模块】 结构体、共用体、位运算及文件操作 24 【正确答案】 A 【试题解析】 本题主要考查文件的基本操作。在 main函数中,首先打开text txt文件,然后通过 fwrite函数把 s1字符串写到文件中,接下来通过 fseek函数把文件指针移动到文件开始,再调用 fwrite函数把 s2字符窜写到文件中, s2的长度小于 s1的长度,因此第二次写的时候会覆盖第一次写的部分内容,程序运行后 test text中内容为 Basican。 【知识模块】 结构体、共用体、位运算及文件操作 25 【正确答案】 B 【试题解析】 本题考查的是输入输出函数的使

32、用, gets和 getchar函数用于从标准输入设备终端读入字符串和字符,并非从磁盘文件读入, fputs用于把字符串输出到文件, fwrite用于以二进制形式输出数据到文件。 【知识模块】 结构体、共用体、位运算及文件操作 26 【正确答案】 B 【试题解析】 首先用函数 fopen()以 “wb”的方式开打文件 “d2 dat”,然后调用两次 fwrite函数将数组 a的 5个元素,依次输出到文件 fp中,共 10个字节,关闭文件。再次打开文件,使用文件指针指向文件的开头调用 fread函数从文件 fp中读取这 10个字节的数据到数组 a中,此时数组 a的内容就变为 1, 2, 3, 0

33、, 0,1, 2, 3, 0, 0,最后的输出结果为 “1, 2, 3, 0, 0, 1, 2, 3, 0, 0”。 【知识模块】 结构体、共用体、位运算及文件操作 27 【正确答案】 D 【试题解析】 fputc()是以字符 (字节 )为单位的读写函数。每次可从文件读出或向文件写入一个字符。使用格式为 “fputc(ch, fp); ”。其中 c11是待输 出的某个字符,它可以是一个字符常量,也可以是一个字符变量; fp是文件指针。 fputc(ch,fp)的功能是将字符 cb写到文件指针 fp所指的文件中。如果输出成功, fputc函数返回所输出的字符;如果输出失败,则返回一个 EOF值。 EOF是在 stdio h库函数文件中定义的符号常量,其值等于 -1。 【知识模块】 结构体、共用体、位运算及文件操作 28 【正确答案】 A 【试题解析】 feof用来判断文件是否结束。如果遇到文件结束,函数 feof(fb)的值为 1,否则为 0。标准预测试卷 (1) 【 知识模块】 结构体、共用体、位运算及文件操作

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