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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

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

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

2、( C) typedef struct REC; int n=0; char c=A; )t1, t2; ( D) structint n; char c; )REC; REC t1, t2; 3 若有定义 typedefint*T; T a10;则 a的定义与下面哪个语句等价 ( A) int*a10; ( B) int(*a)10; ( C) int*a; ( D) int a10; 4 以下结构体说明和变量定义中,正确的是 ( A) typedef struct abcint n; double m; )ABC; ABC x, y; ( B) struct abcint n; doubl

3、e m); struct abc x, y; ( C) struct ABCint n; double m; )struct ABC x, y; ( D) struct abcint n; double m; ); abc x, y; 5 以下叙述中错误的是 ( A) typedef的作用是用一个新的标识符来代表已存在的类型名 ( B) typedef说明的新类型名必须使用大写字母, 否则会出编译错误 ( C)可以用 typedef说明的新类型名来定义变量 ( D)用 typedef可以说明一种新的类型名 6 有以下程序 #include typedef structint b, p; )A;

4、 void f(A c) *注意: c是结构变量名 * intj; c b+=1; c p+=2; main() i; A a=1, 2); f(a); printf(“ d, d n“, a b, a p); ) 程序运行后的输出结果是 ( A) 2, 4 ( B) 1, 2 ( C) 1, 4 ( D) 2, 3 7 设有定义: struct complexint real, unreal; ) datal=1, 8), data2; 则以下赋值语句中错误的是 ( A) data2=(2, 6); ( B) data2=datal; ( C) data2 real=data1 real;

5、( D) data2 real=data1 unreal; 8 有以下程序 #include #include 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; retum a; main() STU c=“Qian“, f, 95, 92), d; d=f(c); printf(“ s, c, d, d,

6、 “, 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 9 有以下结构体说明、变量定义和赋值语句 struct STD char name10; int a

7、ge;char sex; s5, *ps; ps=&s0;则以下 scanf函数调用语句有错误的是 ( A) scanf(“ d“, &s0 age); ( B) scanf(“ c“, &(ps- sex); ( C) scanf(“ s“, s0 name); ( D) scanf(“ d“ps- age); 10 有以下程序 , #include stdio h #include string h StmctA int a; char b10; double c; ; struct A f(struct A t); main() struct A a=1001, “ZhangDa“, 1

8、098 0); a=f(a); printf(“ d, s, 6 1 f n“,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 11 有以下程序 #include struct ord int x, y;

9、) dt2=1, 2, 3, 4); main()struct ord*p=dt; printf(“ d, “, +(p- x); printf(“ d n“, +(p- y); 程序运行后的输出结果是 ( A) 4,1 ( B) 2,3 ( C) 3,4 ( D) 1,2 12 有下列程序: struct Sint n; int a20; ; void flint*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(s a, s n);

10、 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, 13 假定已建立以下链表结构,且指针 p和 q已指向如图所示的节点:则以下选项中可将 q所指节点从链表中删除并释放该节点的语句组是 ( A) p=q- next; free(q); ( B) p

11、=q; free(q); ( C) (*p) next=(*q) next; free(p); ( D) p- next=q- next; free(q); 14 有以下定义和语句: struct workers int num; char name20; char c; struct int day; int month; int year; )s; ); struct workers w, *pw; pw=&w: 能给 w中 year成员赋 1980的语句是 ( A) w year=1980; ( B) pw- year=1980; ( C) w s year=1980; ( D) *pw

12、 year=1980; 15 有以下程序 #include #include“string h“ typedefstructchar name9; char sex; float score2; STU; void f(STU a) STU b=“Zhao“, 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; 程序的运行结果是 ( A) Qian, m, 85, 90 ( B) Zhao, m, 85, 90 ( C) Zhao, f, 95, 92 (

13、 D) Qian, f, 95, 92 16 有以下程序 struct A f int a; char b10; double c; ; void f(structAt); main() struct A a=1001, “ZhangDa“, 1098 0; f(a); printf(“ d, s, 6 1 f n“, a a, a b, a c); void ffstructAt) t a=1002; strcpy(t b, “ChangRong“); t c=1202 0; 程序运行后的输出结果是 ( A) 1002, ChangRong, 1202 0 ( B) 1001, ZhangD

14、a, 1098 0 ( C) 1001, ChangRong, 1098 0 ( D) 1002, ZhangDa, 1202 0 17 若有以下程序 typedef struct stuchar*name, gender; int score; STU; void f(char*p)p=(char*)malloc(10); strcpy(p, “Qian“); main() STU a=NULL, m, 290, b; a name=(char*)malloc(10); strcpy(a name, “Zhao“); b=a; f(b name); b gender=f: b score=3

15、50; printf(“ s, c, (1, “, a name, a gender, a score); printf(“ s, c, d n“, b name, b gender, b score); 则程序的输出结果是 ( A) Zhao, m, 290, Qian, f, 350 ( B) Qian, C350, Qian, f, 350 ( C) Qian, m, 290, Qian, f, 350 ( D) Zhao, m, 290, Zhao, f, 350 18 若有以下程序 typedef struct stuchar name10, gender; int score; S

16、TU; void f(char*P)strcpy(p, “Qian“); main() STU a=“Zhao“, m, 290, b; b=a; f(b name); b gender=f: b score=350; printf(“ s, c, d, “, a name, a gender, a score); printf(“ s, c, d n“, b name, b gender, b score); 则程序的输出结果是 ( A) Zhao, m, 290, Zhao, m, 290 ( B) Qian, f, 3 50, Qian, f, 350 ( C) Zhao, m, 290

17、, Qianf, 350 ( D) Zhao, m, 290, Zhao, f, 350 19 若有以下程序段 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 20 以下叙述中正确的是 ( A)结构体类型中的各个成分均不能是数组或指针 ( B)结构体类型的变量,不能在声明结构体类型组成时一起定义 ( C)使用 typedef定义新类型名后,新类型名与原类型

18、名实际上是等价的 ( D)元素为结构体类型的数组,只能在声明过结构体类型之后,单独进行定义 21 以下叙述中正确的是 ( A)结构体变量的地址不能作为实参传给函数 ( B)结构体数组名不能作为实参传给函数 ( C)即使是同类型的结构体变量,也不能进行整体赋值 ( D)结构体中可以含有指向本结构体的指针成员 22 有以下程序 struct Sint a; int b; ); main() struct S a, *p=&a; a a=99; pfintf(“ d n“, _); )程序要求输出结构体中成员 a的数据,以下不能填入横线处的内容是 ( A) a a ( B) *p a ( C) p-

19、 a ( D) (*p) a 23 有以下程序 #include struct STUchar name9; char sex; int score2; ; void f(struct STU a) struct STU b=“zhao“,m, 85, 90); a1=b; main() struct STU c2=“Qian“, f, 95, 92, “Sun“, m, 98, 99; f(c); printf(“ s, c, d, d, “, c0 name, c0 sex, c0 score0,c0 score1); printf(“ s, c, d, d n“, “, c1 name,

20、 c1 sex, c1 score0,c1 score1); 程序运行后输出结果是 ( A) Qian, f, 95, 92, Sun, m, 98, 99 ( B) Zhao, m, 85, 90, Sun, m, 98, 99 ( C) Qian, f, 95, 92, Zhao, m, 85, 90 ( D) Zhao, m, 85, 90, Qian, f, 95, 92 24 有以下程序 main() unsigned char a=8, c; c=a 3; printf(“ d n“, c); 程序运行后的输出结果是 ( A) 16 ( B) 32 ( C) 1 ( D) 0 25

21、 下面选项中关于位运算的叙述正确的是 ( A)位运算符都需要两个操作数 ( B)左移运算的结果总是原操作数据 2倍 ( C)右移运算时,高位总是补 0 ( D)位运算的对象只能是整型或字符型数据 26 有以下程序 main() int a=1, b=2, c=3, x; x=(ab)&c; printf(“ d n“, x); 程序的运行结果是 ( A) 1 ( B) 2 ( C) 3 ( D) O 27 有以下程序 #include main() char a=4; printf(“ d n“, a=a 1); ( A) 8 ( B) 16 ( C) 40 ( D) 4 28 若变量已正确定

22、义 ,则以下语句的输出结果是 s=32; s=32; printf(“ d“, s); ( A) -1 ( B) 1 ( C) 32 ( D) 0 29 若有以下程序 main() int c: C=13 5: prinff(“ d n“, c); 则程序的输出结果是 ( A) 15 ( B) 18 ( C) 13 ( D) 5 30 有以下程序 main() int i=1; i=ii; printf(“ d n“, i); 程序运行后的输出结果是 ( A) -1 ( B) 0 ( C) 1 ( D) 7 31 以下叙述中正确的是 ( A)打开一个已存在的文件并进行了写操作后,原有文件中的全

23、部数据必定被覆盖 ( B)在一个程序中当对文件进行了写操作后,必须先关闭该文件然后再打开,才能读到第 1个数据 ( C) C语言中的文件是流式文件,因此只能顺序存取数据 ( D)当对文件的读 (写 )操作完成之后,必须将它关闭,否则可能导致数据丢失 32 下面选项中关于 “文件指针 ”概念的叙述正确的是 ( A)文件指针就是文件 位置指针,表示当前读写数据的位置 ( B)文件指针指向文件在计算机中的存储位置 ( C)文件指针是程序中用 FILE定义的指针变量 ( D)把文件指针传给 fscanf函数,就可以向文本文件中写入任意的字符 33 有以下程序 #include main() FILE*

24、f; f=fopen(“filea txt“, “w“); fprintf(f, “abc“); fclose(f); ) 若文本文件 filea txt中原有内容为: hello,则运行以上程序后,文件 filea txt中的内容为 ( A) abclo ( B) abc ( C) helloabc ( D) abchello 34 读取二进制文件的函数调用形式为: fread(buffer,size, count, fp);其中 buffer代表的是 ( A)一个整型变量,代表待读取的数据的字节数 ( B)一个内存块的首地址,代表读入数据存放的地址 ( C)一个文件指针,指向待读取的文件

25、( D)一个内存块的字节数 35 以下叙述中错误的是 ( A) gets函数用于从终端读入字符串 ( B) getchar函数用于从磁盘文件读入字符 ( C) fputs函数用于把字符串输出到文件 ( D) fwrite函数用于以二进制形式输出数据到文件 36 有下列程序: #include main() FILE *fp; int k, n, a6=1, 2, 3, 4, 5, 6; fp=fopen(“d2 dat“, “w“); fprintf(fp, “ d d d n“, a0, a1, a2); fprintf(fp, “ d d d n“, a3, a4, a5); fclose

26、(fp); fp=fopen(“d2 dat“, “r“); fscanf(fp, “ d d“, &k, &n); printf(“ d d n“, k, n); fclose(fp); 程序运行后的输出结果是 ( A) 1 4 ( B) 123 456 ( C) 123 4 ( D) 1 2 37 设 fp为指向某二进制文件的指针,且已读到此文件末尾,则函数 feof(fp)的 返回值为 ( A) 0 ( B) 0 ( C) NULL ( D)非 0值 38 以下程序依次把从终端输入的字符存放到 f文件中,用 #作为结束输入的标志,则在横线处应填入的选项是 #include main()

27、FILE*fp; char ch; fp=fopen(“fname“, “w“); while(ch=getchar()!=#) fputc(_); fclose(fp); ) ( A) fp, ch ( B) ch ( C) ch, “fname“ ( D) ch, fp 39 下面关于 “EOF“的叙述,正确的是 ( A) EOF的值等于 0 ( B)文本文件和二进制文件都可以用 EOF作为文件结束标志 ( C) EOF是在库函数文件中定义的符号常量 ( D)对于文本文件, fgetc函数读入最后一个字符时,返回值是 EOF 国家二级 C语言机试(结构体、共用体、位运算及文件操作)模拟试卷

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

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

30、0个数据元素。 【知识模块】 结构体、共用体、位运算及文件操作 4 【正确答案】 A 【试题解析】 选项 B)中结构体定义中每个成员后面的分号都不能省略, double m后没分号,因此错误。选项 C)结构体类型定义完毕后, 外没加分号。选项 D)中定义变量要加上关键字 struct。 【知识模块】 结构体、共用体、位运算及文件操作 5 【正确答案】 B 【试题解析】 typedef语句的作用仅仅是用 “标识符 ”来代表已存在的 “类型名 ”,并未产生新的数 据类型,原来类型名依然有效。为了便于识别,一般习惯将新的类型名用大写字母表示。 【知识模块】 结构体、共用体、位运算及文件操作 6 【正

31、确答案】 B 【试题解析】 在 C语言中,数据只能从实参单向传递给形参,称为 “按值 ”传递。也就是说,当简单变量作为实参时,用户不可能在函数中改变对应实参的值。所以本题中在 main()函数坟 a)语句中结构体实参 a作为值,传递给函数 f(A c)中的形参 c;这种值传递的方式不会对实参 a产生任何影响,所以结构体实参 a的值不会发生变化。 【知识模块】 结构体、共用 体、位运算及文件操作 7 【正确答案】 A 【试题解析】 本题主要考查结构体变量的定义与初始化。题目中定义了 complex类型的结构体变量 data1和 data2,并对 data1 进行了初始化。可以用一个结构体变量对另

32、一个结构体变量赋值,用一个结构体变量的成员对另一个结构体变量的成员赋值。 【知识模块】 结构体、共用体、位运算及文件操作 8 【正确答案】 C 【试题解析】 在 C语言中,函数实参与形参之间数据的传递是传值,也就是说在用实参调用形参时,是把实参的值拷贝一份给形参,而实参的 值并不变化,仍是原来的值。所以对于本题来说,在主函数中调 f(e)后,实参 e的值并不会变化,仍是原值。在函数 f中把局部变量 b的值依次返回给变量 d。 【知识模块】 结构体、共用体、位运算及文件操作 9 【正确答案】 D 【试题解析】 程序段定义了结构体变量数组 s5和指针变量 ps,然后 ps指向数组 s5中的第一个元

33、素,因而 ps- age引用 s0 age。因为在输入 scanf()函数中,第 2个参数应该表示为地址变量,而选项 A)表示的值,而不是一个地址值。 【知识模块】 结构体、共用体 、位运算及文件操作 10 【正确答案】 B 【试题解析】 在主函数中定义结构体 A的变量 a,并对其赋初值,再调用函数f(a),在函数 f(a)中对结构体变量 a的各个成员重新进行了赋值操作,并把其值返回在屏幕上输出。 【知识模块】 结构体、共用体、位运算及文件操作 11 【正确答案】 B 【试题解析】 在题目中定义了结构体 ord 类型的数组变量 dt,并对其赋初值。在程序中定义了指向结构体 ord 类型的指针变

34、量 p,并且它指向变量数组 dt的第一个元素 dt0,所以此时成员变量 p- x的值等于 1,成员变量 p- y的值等于 2,在输出时分别加 1,所以输出结果为选项 B)。 【知识模块】 结构体、共用体、位运算及文件操作 12 【正确答案】 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 n-1;i+)ai+=i;语句,也就是从

35、 0开始到 8对数组 s a=2,3,1, 6,8,7,5,4,10,9)中的每一个元素加上其下标值。 【知识模块】 结构体、共用体、位运算及文件操作 13 【正确答案】 D 【试题解析】 本题考查了在线性链表删除一个节点的方法,要删除 q 所指向的节点,只需要把 q 所指向的节点的前一个节点中的后继指针指向 q所指向的节点的下一个节点即可,即 p- next=q- next。再释放 q 所指向的节点,即 f-ree(q)。 【知识模块】 结构体、共用体、位运算及文件操作 14 【正确答案】 C 【试 题解析】 本题主要考查的是结构体变量的嵌套定义,也就是说一个结构体变量也可以是一个结构体。在

36、本题中 works 这个结构体中包含了结构体 s。所以对结构体变量 w 中 year成员的引用是 w s year。 【知识模块】 结构体、共用体、位运算及文件操作 15 【正确答案】 B 【试题解析】 本题考查在结构体中函数的实参和形参的传递,调用 f(c)后,实参传向形参,进行 f()函数功能的实现,但程序中没有返回语句,故形参不能将值传回实参,它们值的传递具有不可逆性,所与 printf 输出的还是 c中实参的值。 【知识模块】 结构体、共用体、位运算及文件操作 16 【正确答案】 B 【试题解析】 在主函数中定义结构体 A的变量 a,并对其赋初值,再调用函数f(a),形参 t接收实参的

37、数据,在函数 f(t)中对结构体变量 t的各个成员进行了赋值操作,需要注意的,形参和实参之间是数据传递,因此对形参的操作对实参不产生影响,因此在主函数输出仍然输出变量 a的数据 【知识模块】 结构体、共用体、位运算及文件操作 17 【正确答案】 D 【试题解析】 函数 f(char*p)的主要功能申请字符串的存储空间,然 后存入字符串 “Qian“,但当程序调用结束以后,形参指针变量 p 撤销,存储的字符串地址丢失,而不能更改实参指针的值。主函数中结构体变量定义同时赋初值,初始情况其 name指针成员存储空,而后语句为其分配存储空间,存入字符串 “Zhao“。执行 b=a;语句后, b的数据和

38、 a的数据相同,调用函数 f 以后, b 的 name成员的值没变。 【知识模块】 结构体、共用体、位运算及文件操作 18 【正确答案】 C 【试题解析】 主函数中结构体变量定义同时赋初值。执行 b=a;语句后, b 的数据和 a的数据相同,调用函数 f(b name),形参指针 p 接收实参 b name的地址,此时 p和 b name指向同一个存储空间,流程转到 f执行, p指向的存储空间存放字符串 “Qiao“,流程结束返回主函数。主函数中变量 b 的其他成员存放数据。因此 a的数据 “Zhao“, m, 290, b的数据为 “Qian“, f, 350)。注意本题结构体 STU类型变

39、量 a和 b 中的 name成员为数组,不是指针,它具有自己的存储空间。 【知识模块】 结构体、共用体、位运算及文件操作 19 【正确答案】 A 【试题解析】 选项 A)中表达式 +(p- n)为前缀自加表达式, p- n 和 a0 n 等价,其值为 5,前缀自加后值为 6。选项 B)中表达式 (*p) n和选项 D)的表达式 p- n 含义相同,表示取结构指针 p所指向的成员,因此值为 5。选项 C)中表达式p- n+为后缀自加表达式,相当于 (p- )+,表达式值为 5。 【知识模块】 结构体、共用体、位运算及文件操作 20 【正确答案】 C 【试题解析】 C语言允许用 typedef 说

40、明一种新类型名, typedef语句的作用仅仅是用 “标识符 ”来代表己存在的 “类型名 ”,并未产生新的数据类型, 原有类型名依然有效。结构体变量定义有下面三种形式: (1)先定义结构,再说明结构变量。 (2)在定义结构类型的同时说明结构变量。 (3)直接说明结构变量。 【知识模块】 结构体、共用体、位运算及文件操作 21 【正确答案】 D 【试题解析】 一个结构体变量包含若干成员,这些成员可以是数值类型、字符类型、数组类型,也可以是指针类型,甚至可以是正在定义的结构体类型指针。用结构体变量作实参时,采取的是 “值传递 ”的方式,将结构体变量所占的内存单元的内容全部顺序传递给形参。形参也必须

41、是同类型的结构体变量。结 构体数组作为参数时,采取了 “地址传递 ”的方式,形参须为同类型的结构指针或者形参结构数组。 【知识模块】 结构体、共用体、位运算及文件操作 22 【正确答案】 B 【试题解析】 如果 p指向结构体,那么下面三种形式都可以访问结构体的成员:结构体变量成员名、 (*p)成员名、 p-成员名。 【知识模块】 结构体、共用体、位运算及文件操作 23 【正确答案】 C 【试题解析】 在主函数中,定义了结构体 STU数组 c2,并对其赋初始值。执行 f(c)时,在函数 f()中,把结构体变量 b的值赋给了 c1。 【知识模块】 结构体、共用体、位运算及文件操作 24 【正确答案

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

43、构体、共用体、位运算及文件操作 26 【正确答案】 C 【试题解析】 1、 2、 3的二进制形式分别为 00000001、 00000010、 00000011。首先计算 1与 2的或运算,即 1 2=(00000001) (00000010)=00000011,再将其与 3进行 “与 ”运算,结果为 (00000011)&(00000011)=00000011,即十进制数 3。 【知识模块】 结构体、共用体、位运算及文件操作 27 【正确答案】 A 【试题解析】 本题主要考查按位右移运算。 a=4的二进制为 00000100, a 1后为 00001000,其值为十进制数值 8。 【知识模块

44、】 结构体、共用体、位运算及文件操作 28 【正确答案】 D 【试题解析】 “按位异或 ”运算的规则是:参与运算的两个运算数中相对应的二制位上,若数相同,则该位的结果为 0;若数不同,则该位的结果为 1。因为语句s=32; s=32;相当于 s与自身做按位异或运算,所以其结果等于 0。 【知识模块】 结构体、共用体、位运算及文件操作 29 【正确答案】 C 【试题解析】 按位或 ( )的运算规则是:参加运算的两个运算数中,只要两个相应的二进制位中一个为 l,则该位的运算结果即为 1;只有当两个相应位的数都为0时,该位的运算结果才为 0。 13的二进制位 1101, 5的二进制位 0101,或运

45、算的结果为 1101,因此值为 13。 【知识模块】 结构体、共用体、位运算及文件操作 30 【正确答案】 B 【试题解析】 按位异或 ( )的运 算规则是:参与运算的两个运算数中相对应的二进制位上,若数相同,则该位的结果为 0;若数不同,该位的结果为 1。本题中表达式 ii的值必为 0,因为 i的各个位置的二进制值相同。 【知识模块】 结构体、共用体、位运算及文件操作 31 【正确答案】 D 【试题解析】 在 C语言中,有两种对文件的存取方式;顺序存取和直接存取;如果以 “a”的方式对一个已打开的文件进行写操作后,则原有文件中内容将保存,新的数据写在原有内容之后。如果以 “a+”的方式为读和

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

47、要和文件位置指针混淆,在文件内部有一个位置指针,用以指示文件内部的当前读写位置。使用 fetc函数,每读写一次,该指针均向后移动,它不需在程序中定义说明,而是由系统自动设置的。而文件指针是指向整个文件的,须在程序中定义说明,只要不重新赋值,文件指针的值是不变的。 fscanf函数可以向文本文件和二进制文件输入数据。 【知识模块】 结构体、共用体、位运算及文件操作 33 【正确答案】 B 【试题解析】 本题考查文件打开方式。 格式:文件指针名 fopen(文件名,使用文件方式 ) 需要注意的是:用 “w”打开的文件只能向该文件写入。若打开的文件不存在,则以指定的文件名建立该文件,若打开的文件已经存在,则将该文件删去,重建一个新文件。 【知识模块】 结构体、共用体、位运算及文件操作 34 【正确答案】 B 【试题解析】 buffer是数据块的指针,对 fread 来说,它是内存块的首地址,输入的数据存入此内存块中; 【知识模块】 结构体、共用体、位运算及文件操作 35 【正确答案】 B 【试题解析】 本题考查的是输入输出函数 的使用, gets和 getchar 函数用于从标准输入设备终端读入字符串和字符,并非从磁盘文件读入, fputs用于把字符串输出到文件, fwrite用于以二进制形式输出数据到文件。 【知识模块】 结构体、共用体、位运算及文件操作 36 【正

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