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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

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

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

2、edefstructREC; intn=0; charc=A; tl, t2; ( D) structintn; charc; REC; RECtl, t2; 3 若有定义 typedefint*T; Ta10;则 a的定义与下面哪个语句等价 ( A) int*a10; ( B) int(*a)10; ( C) int*a; ( D) inta10; 4 下结构体说明和变量定义中,正确的是 ( A) typedefstructabcintn; doublem; abc; abcx, y; ( B) structabcintn; doublem); structabcx, y; ( C) str

3、uctabcintn; doublem; structabcx, y; ( D) structabcintn; doublem; ; abcx, y; 5 以下叙述中错误的是 ( A) typedef的作用是用一个新的标识符来代表已存在的类型名 ( B) typedef说明的新类型名必须使用大写字 *,否则会出编译错误 ( C)可以用 typedef说明的新类型名来定义变量 ( D)用 typedef可以说明一种新的类型名 6 下面结构体的定义语句中,错误的是 ( A) structordintx; inty; intz; ); structorda; ( B) structordintx;

4、inty; intz; structorda; ( C) structordintx; inty; intz; )a; ( D) structintx; inty; intz; a; 7 有以下程序 structSinta, b; data2=10, 100, 20, 200; main( ) structSp=data1; printf(” dkn”, +(p a); 程序运行后的输出结果是 ( A) 11 ( B) 20 ( C) 21 ( D) 10 8 有以下程序 structSintn; inta20; ); voidf(structS*p) inti,j, t; for(i=0;

5、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( ) inti; structSs=10, 2,3, l, 6, 8, 7, 5, 4, 10, 9); f( s); for(i=0; i s-n; i+)printf( d, , s ai); ( A) 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, ( B) 2,3, 1, 6, 8, 7, 5, 4, 10, 9, ( C) 10, 9, 8, 7, 6, 1, 2, 3, 4, 5, ( D) l,

6、2, 3, 4, 5, 6, 7, 8, 9, 10 9 程序中已构成如下图所示的不带头结点的单向链表结构,指针变量 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)删除尾结点 10 若有以下语句 typedefstructSintg; charh; T;以下叙述中正确的是 ( A)可用

7、S定义结构体变量 ( B) S是 struct类型的变量 ( C) T是 structS类型的变量 ( D)可用 T定义结构体变量 11 设有以下语句 typedefstructTTcharc; inta4; CIN;则下面叙述中正确的是 ( A) TT是 struct类型的变量 ( B)可以用 TT定义结构体变量 ( C) CIN是 structTT类型的变量 ( D)可以用 CIN定义结构体变量 12 有以下程序段 structstintx; int*y; )*pt; inta=1, 2), b=3, 4); structstc2=10, a, 20, b); pt=c; 以下选项中表达式

8、的值为 11的 是 ( A) pt- x ( B) *pt- y ( C) +pt- x ( D) (pt+)- x 13 有下列程序: #include stdio h #include string h typedefstructcharname9; charsex; floatscore2; STU; STUf(STUa) STUb=Zhao, m, 85 0, 90 0); inti; strcpy(a name, b name); a sex=b sex; for(i=0; i 2; i+)a scorei=b scorei; returna; main( ) STUc=“Qian,

9、f, 95 0, 92 0, d; d=f(c); printf(” s, c, 2 0f, 2 0fW,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 14 有以下程序 #include stdio h #include string_h structA inta; charb10; doublec; ); voidf(structAt); main( ) structAa=1001,Zha

10、ngDa”, 1098 0; f(a); printf(” d, s, 6 1fn”, a a, a b, a c); voidf(structAt) 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 15 有以下程序 #include stdio h structtt intx; structtt*y;

11、 )*p; structtta4=20, a+l, 15, a+2, 30, a+3, 17, a; main( ) inti; p a; for(i=l; i =2; i+)printf( d, ”, p- x); p=p y; ) 程序的 运行结果是 ( A) 20, 15, ( B) 30, 17 ( C) 15, 30, ( D) 20, 30 16 设有定义: structcharmark12; intnuml; doublenum2; tl, t2;若变量均已正确赋初值 ,则以下语句中错误的是 ( A) t2 numl=t1 numl: ( B) t2 mark=t1 mark;

12、( C) tl=t2; ( D) t2 num2=t1 num2; 17 若有以下程序 structstuchar*name, gender; intscore; ); main( ) structstua=NULL, m, 290, b; a name=(char*)malloc(10); strcpy(a name, Zhao); b a; b gender=f; b score=350; strcpy(b name, “Qian”); printf(” s, c, d, ”, a name, a gender,a score); printf(” s, c, dn”, b name, b

13、 gender, b score); ) 则程序的输出结果是 ( A) Zhao, m, 290, Qian, f,350 ( B) Qian, f,350, Qian, f,350 ( C) Zhao, m, 290, Zhao, f,350 ( D) Qian, m, 290, Qian, f,350 18 若有以下程序 typedefstructstucharname10, gender; intscore; )STU; voidf(STUa, STUb) b=a: printf(” s, c, d, ”, b name, b gender,b score); main( ) STUa=

14、Zhao, m, 290, b=Qian, f, 350; f(a, b); printf(” s, c, dha”, 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 19 为了建立如图所示的存储结构 (即每个结点含两个域, data是数据域, next是指向结点的指针域 ),则在 【】 处应填入的选项是 Structlin

15、kchardata; 【】 node; ( A) structlink*next; ( B) linknext; ( C) link*next; ( D) structlinknext; 20 以下叙述中正确的是 ( A)结构体类型中的成分只能是 C语言中预先定义的基本数据类型 ( B)在定义结构体类型时,编译程序就为它分配了内存空间 ( C)结构体类型中各个成分的类型必须是一致的 ( D)一个结构体类型可以由多个称为成员 (或域 )的成分组成 21 以下叙述中正 确的是 ( A)函数的返回值不能是结构体类型 ( B)函数的返回值不能是结构体指针类型 ( C)在调用函数时,可以将结构体变量作为

16、实参传给函数 ( D)结构体数组不能作为参数传给函数 22 设有如下的说明和定义 structinta; char*s; )x, *p= x; x a=4;x S=hello;则以下叙述中正确的是 ( A)语句 +p- a;的效果是使 P增 1 ( B) (p+)- a与 p+- a都是合语法的表达式,但二者不等价 ( C)语句 *p- s+;等价于 (*p)- s+; ( D) 语句 +p- a;的效果是使成员 a增 1 23 若已建立以下链表结构,指针 P、 S分别指向如图所示结点则不能将 S所指节点插入到链表末尾的语句组是 ( A) S- next=0; p: P- next; P- n

17、ext=s; ( B) p=p- next; S- next=p; p- next=s; ( C) p P- next; S- next=p- next; P- next=s; ( D) p: (*p) next; (*S) next=(*p) next; (*p) next s; 24 以下叙述中错误的是 ( A)函 数的返回值类型不能是结构体类型,只能是简单类型 ( B)只要类型相同,结构体变量之间可以整体赋值 ( C)可以通过指针变量来访问结构体变量的任何成员 ( D)函数可以返回指向结构体变量的指针 25 有以下程序 main( ) unsignedchara=8, c; C=a 3:

18、 printf(” dkn”, c); 程序运行后的输出结果是 ( A) 16 ( B) 32 ( C) 1 ( D) 0 26 下面选项中关于位运算的叙述正确的是 ( A)位运算符都需要两个操作数 ( B)左移运算的结果总是 原操作数据 2倍 ( C)右移运算时,高位总是补 0 ( D)位运算的对象只能是整型或字符型数据 27 若有以下程序段 intr=8; printf( dn, r 1); 输出结果是 ( A) 8 ( B) 4 ( C) 16 ( D) 2 28 有以下程序 #include stdio h main( ) inta=2, b; b=a 2; printf(” dn”,

19、 b); ( A) 4 ( B) 6 ( C) 8 ( D) 2 29 有以下程序 #include stdio h main( ) inta=5, b=1, t; t (a 2)Ib; printf( dn, t); ( A) 11 ( B) 6 ( C) 21 ( D) 1 30 若有以下程序 main( ) intc; c=105; printf( dkn, c); ) 则程序的输出结果是 ( A) 15 ( B) 10000 ( C) 5 ( D) 105 31 有以下程序 main( ) inti=0; i=-i; printf( dn, i); ) 程序运行后的输出结果是 ( A)

20、 0 ( B) 1 ( C) 8 ( D) 0.1 32 下面关于位运算符的叙述,正确的是 ( A) #表示 按位异或 的运算 ( B) Il表示 按位或 的运算 ( C)表示 按位异或 的运算 ( D)表示 按位与 的运算 33 以下叙述中正确的是 ( A)打开一个已存在的文件并进行了写操作后,原有文件中的全部数据必定被覆盖 ( B)在一个程序中当对文件进行了写操作后,必须先关闭该文件然后再打开,才能读到第 1个数据 ( C) C语言中的文件是流式文件,因此只能顺序存取数据 ( D)当对文件 的读 (写 )操作完成之后,必须将它关闭,否则可能导致数据丢失 34 下面选项中关于 文件指针 概念

21、的叙述正确的是 ( A)文件指针就是文件位置指针,表示当前读写数据的位置 ( B)文件指针指向文件在计算机中的存储位置 ( C)文件指针是程序中用 FILE定义的指针变量 ( D)把文件指针传给 fscanf函数,就可以向文本文件中写入任意的字符 35 设文件指针 fp已定义,执行语句 fp=fopen(file, w);后,以下针对文本文件file操作叙述的选项中正确的是 ( A)写操作结束后 可以从头开始读 ( B)可以在原有内容后追加写 ( C)可以随意读和写 ( D)只能写不能读 36 有以下程序 #include stdio h main( ) FILE*fp; inti, a6=1

22、, 2, 3, 4, 5, 6; fp=fopen(d2 dat, w+); for(i=0; i 6; i+)fprintf(fp, dn”, ai); rewind(fp); for(i=0; i 6; i+)fscanf(fp, d”, a5-i); fclose(fp); for(i=0; i 6; i+)printf(” d”, ai); ( A) 1,2, 3, 4, 5, 6 ( B) 6, 5, 4, 3, 2, 1, ( C) 4, 5, 6, 1, 2, 3, ( D) 1,2, 3, 3, 2, 1 37 读取二进制文件的函数调用形式为: fread(buffer,siz

23、e, count, fp);其中 buffer代表的是 ( A)一个整型变量,代表待读取的数据的字节数 ( B)一个内存块的首地址,代表读入数据存放的地址 ( C)一个文件指针,指向待读取的文件 ( D)一个内存块的字节数 38 以下叙述中错误的是 ( A) gets函数用于从终端读入字符串 ( B) getchar函数用于从磁盘文件读入字符 ( C) fputs函数用于把字符串输出到文件 ( D) fwrite函数用于以二进制形式输出数据到文件 39 有下列程序: #include stdio h main( ) FILE*fp; intk, n, a6=1,2, 3, 4, 5, 6);

24、rp=fopen(d2 dat, w); fprintf(fp, d d dn, a0, a1, a2); fprintf(fp, d d dn, a3, a4, a5); fclose(fp); fp=fopen(d2 dat, r); fscanf(fp, d d, k, n); printf( d dn,k, n); fclose(fp); 程序运行后的输出结果是 ( A) 14 ( B) 123456 ( C) 1234 ( D) 12 40 设 fp为指向某二进制文件的指针,且已读到此文件末尾,则函数 feof(fp)的返回值为 ( A) 0t ( B) 0 ( C) NULL (

25、D)非 0值 41 以下程序依次把从终端输入的字符存放到 fSc件中,用 #作为结束输入的标志,则在横线处 应填入的选项是 #include stdio h main( ) FILE*fp; charch; fp=fopen(fname, w); while(ch=getchar0)! #) fputc(_); fclose(fp); ( A) fp ch ( B) ch ( C) ch, fname ( D) ch, fp 42 下面关于 EOF的叙述,正确的是 ( A) EOF的值等于 0 ( B)文本文件和二进制文件都可以用 EOF作为文件结束标志 ( C) EOF是在库函数文件中定义的

26、符号常量 ( D)对于文本文件, fgetc函数读入最后一个字符时,返回值是 EOF 国家二级 C语言机试(结构体、共用体、位运算及文件操作)模拟试卷 4答案与解析 一、选择题 1 【正确答案】 B 【试题解析】 C语言允许用 typedef说明一种新类型名,说明新类型名的语句一般形式为: typedef类型名标识符;在此, “类型名 ”必须 是在此语句之前己有定义的类型标识符。 “标误符 ”是一个用户定义标识符,用作新的类型名。 typedef语句的作用仅仅是用 “标识符 ”来代表已存在的 “类型名 ”,并未产生新的数据类型,原有类型名依然有效。 【知识模块】 结构体、共用体、位运算及文件操

27、作 2 【正确答案】 A 【试题解析】 定义结构体类型的一般形式为: struct结构体名 成员列表 ; struct结构体名后不能加 “: ”号,所以选项 B、 C错误,选项 D中定义无名称的结构体类型同时定义结构体变量形式应为 structt1, t2:选项 A为用户自 定义类型,其为正确的定义形式。 【知识模块】 结构体、共用体、位运算及文件操作 3 【正确答案】 A 【试题解析】 typedef的主要功能是为存在的类型命名,后面的代码中可以利用该新定义的类型名定义变量,题目中定义了整型指针类型 T,而后利用 T定义了整型指针数组 a,含有 10个元素,选项 A中定义了整型指针数组 a,

28、选项 B定义了一个指向一维数组的指针 a,选项 C定义指针变量,而选项 D为定义整型数组最常用的形式,数组 a中可以存放 10个数据元素。 【知识模块】 结构体、共用体、位运算及文件操作 4 【正确答案】 A 【试题解析】 选项 B中结构体定义中每个成员后面的分号都不能省略, doublem后没分号,因此错误。选项 C结构体类型定义完毕后, 外没加分号。选项 D中定义变量要加上关键字 struct。 【知识模块】 结构体、共用体、位运算及文件操作 5 【正确答案】 B 【试题解析】 typedef语句的作用仅仅是用 “标识符 ”来代表已存在的 “类型名 ”,并未产生新的数据类型,原来类型名依然

29、有效。为了便于识别,一般习惯将新的类型名用人写字 *表示。 【知识模块】 结构体、共用体、 位运算及文件操作 6 【正确答案】 B 【试题解析】 在选项 B中,由于在定义完结构体后缺少分号 “; ”,所以这是一条不完整的语句,因而是错误的。 【知识模块】 结构体、共用体、位运算及文件操作 7 【正确答案】 C 【试题解析】 在题目中定义了结构体 s类型的数组变量 data,并对其赋初值。在程序中定义了指向结构体 s类型的变量 p,并把数组 data的第二个元素 data1的值赋给它,所以此时成员变量 p a的值等于 20,在输出时分别加 1,所以输入结果为选项 A。 【知识模块】 结构体 、共

30、用体、位运算及文件操作 8 【正确答案】 D 【试题解析】 voidf(structS*p)函数的功能使用了结构体指针变量实现对一维数组的元素从小到火排序。用关系表达式 p- ai p- aj实现一维数组中相邻元素两两比较,大的元素向后移,小的元素向前移。在主函数中语句 f( s);的功能实现对结构体变量 s中一维数组的元素从小到大的排序,所以循环语句的输出结果为1, 2,3,4, 5,6, 7,8,9, 10。 【知识模块】 结构体、共用体、位运算及文件操作 9 【正确答案】 B 【试题解析】 分析程序可知,程序段首先让 q指向链表的首结点, s指向链表的第二结点, p此时指向链表的第二个结

31、点。然后在 while循环中,当 p的后继结点非空时,让 p指向链表的最后一个结点,退出循环。然后让尾结点指向首结点,并使首结点的后继结点为 NULL。所以最终实现链表的首结点成为尾结点。 【知识模块】 结构体、共用体、位运算及文件操作 10 【正确答案】 D 【试题解析】 本题考查 typedef, T是 structS的新名称,因此可用 T定义结构体变量,但是 T并不是变量,只是 scructS的新名称 。 【知识模块】 结构体、共用体、位运算及文件操作 11 【正确答案】 D 【试题解析】 C语言允许用 typedef说明一种新的类型名,说明新类型名的语句为一般形式为: typedef类

32、型名标识符在此, “类型名 ”必须是此语句之前已有定义的类型标识符。 “标识符 ”是一个用户定义标识符,用作新的类型名。 typedef语句的作用仪仪是用 “标识符 ”来代表已存在的 “类型名 ”,并朱产生新的数据类型,原有类型名依然有效。存本题中用 typedef定义 CIN为 TT的一种新的类型名,因而可以用它定义一个结构体变量。 【知识模块】 结构体、共用体、位运算及文件操作 12 【正确答案】 C 【试题解析】 由题目的已知条件可知, pt指向结构体数组 c2的第一元素 c0,所以 pt- x=10,执行白加运算后为 11。 【知识模块】 结构体、共用体、位运算及文件操作 13 【正确

33、答案】 D 【试题解析】 f( )函数的功能是对形参 a的各个成员用结构体变量 b的各个成员进行赋值后,然后返回变量 a。在主函数中调用 f(C函数时,将 sTu类型的结构体变量 c的值传递给形参 a,函数 f( )在对 a的各个成员进行重新赋值后,再将返回变量 a的值传给 d,最后输出结构变量 d的各个成员的值。 【知识模块】 结构体、共用体、位运算及文件操作 14 【正确答案】 C 【试题解析】 本题主要考查是的函数调用时参数之间的传递问题。在 C语言中参数之间的传递是传值,也就是把实参的值复制一份传递给形参,而实参的值不发生变化。所以对于本题来说,在主函数中执行 f(a),把结构体变量

34、a的值复制一份传递给形参变量 t,而实参变量 a的值保持不变。 【知识模块】 结构体、共用体、位运算及文件操作 15 【正确答 案】 A 【试题解析】 程序定义了结构体类型 tt,其成员包括一个整型数据 x和指向其自身结构的指针变量 v。程序在定义结构体数组 a的同时对其进行了初始化。其元素a0的成员 y被赋值为元素 a1的地址, a1 y被赋值为 a2的地址, a2 y被赋予 a3的地址, a3 y被赋予 a0的地址。这就形成了一个单向的循环链表,每个元素的指针成员都指向下一个元素的地址。在主函数 L11,通过一个 for循环语句,输出该链表前 2个节点数值成员的值,即 a0 x和 a1 x

35、。 【知识模块】 结构 体、共用体、位运算及文件操作 16 【正确答案】 B 【试题解析】 这个题目主要涉及到结构体的定义与赋值操作。根据题意结构体变量 t1, t2的成员变量 mark是字符数组,对于字符数组之间的赋值操作应该使用循环语句对每个字符进行赋值,而选项 A是用数组名实现字符数组之间的赋值操作,是错误的。 【知识模块】 结构体、共用体、位运算及文件操作 17 【正确答案】 D 【试题解析】 主函数中定义结构体类型 stmctstu,有三个成员,第一个成员为字符指针变量。主函数中为 stu类型变量 a赋值,首 先为 a_name成员分配存储空间,存入数据。 b=a;语句执行完毕以后,

36、 a和 b的各个成员值相同,需要注意的是 b name和 a name成员都保存了同一段内存的地址,因此当为变量 b赋值的时候,同样更改了 a的 name成员,而其他成员由于有单独的存储空间而不会发生改变。 【知识模块】 结构体、共用体、位运算及文件操作 18 【正确答案】 B 【试题解析】 函数 f(STua, sTub)的主要功能是为把结构体变量 a的值存放到 b中,然后输出 b中各个成员的值。主函数中调用函数 f(a, b),输出赋值以后 b的数 据,实际为 a zhao, m, 290的数据,函数调用结束,形参 a和 b撤销,流程到主函数输出 bQian, f, 350的数据。 【知识

37、模块】 结构体、共用体、位运算及文件操作 19 【正确答案】 A 【试题解析】 单链表为动态分配的存储空间,在分配时,每个结点之间可以是不连续的 (结点内是连续的 )。结点之间的联系用指针实现,即在结点结构叶 1定义一个成员项目来存放下。结点的首地址,这个用于存放地址的成员,常把它称为指针域,该指针为了保持链表中结点的地址,因此其基类型和结点的类 型相同,选项为 A。 【知识模块】 结构体、共用体、位运算及文件操作 20 【正确答案】 D 【试题解析】 结构体类型,它是由若干 ”成员 ”组成,每一个成员可以是一个基本数据类型或者是一个构造类型。在说明和使用之前必须先定义它,也就是构造它。定义一

38、个结构的一般形式为: straact结构名 成员列表 ;成员列表由若 T个成员组成,对每个成员也必须作类型说明,其形式为:类犁说明符成员名:可以说明类型不同的各个成员。 【知识模块】 结构体、共用体、位运算及文件操作 21 【正确答案】 C 【试题解析】 和普通变量相似,结构体变量也可以作为函数实参或者形参,函数的返同值也可以是结构体类型。 【知识模块】 结构体、共用体、位运算及文件操作 22 【正确答案】 D 【试题解析】 p- a得到 p指向的结构体变量中的成员 a的值。 p- a+得到 p指向的结构体变量中的成员 a的值,用完该值后使 p a加 1。 +p- a得到 p指向的结构体变量中

39、的成员 a的值使之加 1(先加 )。由此可见指向运算符 -优先级高于+,因此 *p- s+相当于 *(p- s)+,结合性自右至左,因此 p+- a。和 (p+)- a等价。 【知识模块】 结构体、共用体、位运算及文件操作 23 【正确答案】 B 【试题解析】 选项 A中首先 p后移, s的后继指针指向 p, p的后继指向 s,在 s和最后结点之间形成了圆圈,无法完成题中的操作。 【知识模块】 结构体、共用体、位运算及文件操作 24 【正确答案】 A 【试题解析】 函数的返回值类型可以是结构体类型。结构体变量之间可以相互复制。 【知识模块】 结构体、共用体、位运算及文件操作 25 【正确答案】

40、 C 【试题解析】 在程序中对无 符号字符变量 a的值执行右移 3位运算后,相当于a/8,其值等于 1,再赋绐变量 c。 【知识模块】 结构体、共用体、位运算及文件操作 26 【正确答案】 D 【试题解析】 位运算则是以位 (bit)一级进行的运算,位运算符中除 ” ”以外,均为二元运算符,即要求两侧各有一个运算量,运算量只能是整型或字符型的数据,不能为实型数据。其中右移时,右端 (低位 )移出的二进制数舍弃,左端 (高位 )移入的二进制数分两种情况:对于无符号整数和正整数,高位补 0;对于负整数,高位补 1。而左移运算在没有溢出的前提下每移动位 ,相当于原数据的 2倍。 【知识模块】 结构体

41、、共用体、位运算及文件操作 27 【正确答案】 B 【试题解析】 定义了整型变量 r,其值等于 8,在输出语句中,把变量 r的值向右移动一位,在 C语言中把变量向右移动一位,相当于其值除以 2,所以在题中把变量 r的值 8除 2,得到其值等于 4。 【知识模块】 结构体、共用体、位运算及文件操作 28 【正确答案】 C 【试题解析】 表达式 a 2,把 a向左移动 2位,相当于扩大 4倍。 【知识模块】 结构体、共用体、位运算及文件操作 29 【 正确答案】 C 【试题解析】 本题考查位操作运算符。 是左移运算符,左移一位相当于乘2, |是按位或运算符。 5左移两位相当于乘 4,得到 20,

42、20的二进制数是00010100,和 00000001进行按位或操作得到 00010101,即十进制的 21。 【知识模块】 结构体、共用体、位运算及文件操作 30 【正确答案】 A 【试题解析】 按位异或 ( )的运算规则是:参与运算的两个运算数中相对应的二进制位上,若数相同,则该位的结果为 0;若数不同,该位的结果为 1。整数 10和 5的二进制编码分 别为 1010和 0101,异或结果为 1111,其十进制数据位 15。 【知识模块】 结构体、共用体、位运算及文件操作 31 【正确答案】 D 【试题解析】 运算符 ( )是位运算符中唯一的一个单目运算符,运算对象应置于运算符的右边,其运

43、算功能是把运算对象的内容按位取反 (使每一位上的 0变 1, 1变 0)。 i的初值为 0,二进制位 00000000,因此取反后结果为 11111111,最高位为符号位,为 -1的补码形式,因此输出结果为 -1。 【知识模块】 结构体、共用体、位运算及文件操作 32 【正确答 案】 D 【试题解析】 C语言提供了 6种位运算符,各种位运算符的含义见下表:各种位运算符及其含义 【知识模块】 结构体、共用体、位运算及文件操作 33 【正确答案】 D 【试题解析】 在 C语言中,有两种对文件的存取方式:顺序存取和直接存取;如果以 ”a”的方式对一个已打开的文件进行写操作后,则原有文件中内容将保存,

44、新的数据写在原有内容之后。如果以 ”a+”的方式为读和写而打开一个文件,则既可以对文件进行读,也可以对文件进行写,而且,在读和写操作之间不必关闭文件,可以从头开始读。当对文件的读 (写 )操作完成之后,必须将它关闭。 【知识模块】 结构体、共用体、位运算及文件操作 34 【正确答案】 C 【试题解析】 文件指针实际上是指向一个结构体类型的指针,这个结构体中包含如缓冲区的地址、在缓冲区中当前存取的字符的位置、对文件是 ”读 ”或 ”写 ”、是否出错、是否已经遇到文件结束标志等信息。一般称文件指针结构体类型名为FILE,可以用此类型名来定义文件指针。【格式】 FILE*指针变量名【说明】FILE是

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

46、在程序中定义了一个整型数组 a6,并对它赋初值,并以写入的方式打开了文件 d2 dat=然后利用一个 for循环把数组 a中的元素数据写入文件d2 dat中,调用函数 rewind把将文件内部的位置指针。重新指向一个文件的开头,再利用 for循环语句把文件中的数据依次写入到倒序排列的数组 a中,最后输出数组 a中的数组元素。 【知识模块】 结构体、共用体、位运算及文件操作 37 【正确答案】 B 【试题解析】 buffer是数据块的指针,对 fread来说,它是内存块的首地址,输入的数据存 入此内存块中; 【知识模块】 结构体、共用体、位运算及文件操作 38 【正确答案】 B 【试题解析】 本

47、题考查的是输入输出函数的使用, gets和 getchar函数用于从标准输入设备终端读入字符串和字符,并非从磁盘文件读入, fputs用于把字符串输出到文件, fwrite用于以二进制形式输出数据到文件。 【知识模块】 结构体、共用体、位运算及文件操作 39 【正确答案】 B 【试题解析】 用文件函数 fopen打开 d2 dat文件并把数组 a6中的元素分两行写入到 d2 dat文件 中,关闭文件。然后再次打开文件 d2 dat,用。 fscanff)函数读取文件 d2 dat中的数据,因为每行没有分隔符,所以每一行会被认为是一个完整的数,并存入到变量 k和 n中,输出变量 k和 n的值为 123456。 【知识模块】 结构体、共用体、位运算及文件操作 40 【正确答案】 D 【试题解析】 ANSIC提供的 feof。函数的功能是判断 fp所指的文件的位置是否已达到文件尾,如果达到文件尾,则 feof函数的值为 1,否则为 0,表示文件尚未结束。 【知识模块】 结构体、共用体、位运算及文件操 作 41 【正确答案】 D 【试题解析】 fputc(。 )是以

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