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

上传人:孙刚 文档编号:498780 上传时间:2018-11-30 格式:DOC 页数:28 大小:113.50KB
下载 相关 举报
[计算机类试卷]国家二级C语言机试(结构体、共用体、位运算及文件操作)模拟试卷2及答案与解析.doc_第1页
第1页 / 共28页
[计算机类试卷]国家二级C语言机试(结构体、共用体、位运算及文件操作)模拟试卷2及答案与解析.doc_第2页
第2页 / 共28页
[计算机类试卷]国家二级C语言机试(结构体、共用体、位运算及文件操作)模拟试卷2及答案与解析.doc_第3页
第3页 / 共28页
[计算机类试卷]国家二级C语言机试(结构体、共用体、位运算及文件操作)模拟试卷2及答案与解析.doc_第4页
第4页 / 共28页
[计算机类试卷]国家二级C语言机试(结构体、共用体、位运算及文件操作)模拟试卷2及答案与解析.doc_第5页
第5页 / 共28页
点击查看更多>>
资源描述

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