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

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

1、国家二级 C语言(结构体、共用体、位运算及文件操作)机试模拟试卷 6及答案与解析 一、选择题 1 以下结构体类型说明和变量定义中正确的是 ( A) typedef structint 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) structint n; char c; )REC; REC t1, t2; 2 若 有定义 typedef char T10; T*a;上述定义中 a的

2、类型与下面选项中完全相同的是 ( A) char(*a)10; ( B) char*a; ( C) char a10; ( D) char*a10; 3 以下叙述中错误的是 ( A) typedef的作用是用一个新的标识符来代表已存在的类型名 ( B) typedef说明的新类型名必须使用大写字母,否则会出编译错误 ( C)可以用 typedef说明的新类型名来定义变量 ( D)用 typedef可以说明一种新的类型名 4 有以下程序 #include stdio h typedef structint b, p; A; void f(A c) *注意: c是结构变量名 * int j; c

3、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 5 有以下程序 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

4、s=10, 2, 3, 1, 6, 8, 7, 5, 4, 10, 9; f(&s); for(i=0; i s n; i+)printf(“ ( 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) 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 6 有以下结构体说明、变量定义和赋值语句 struct STDchar name10; int age;char sex; s5, *ps; ps=&s0;则以下 sc

5、anf函数调用语句有错误的是 ( A) scanf(“d“, &s0 age); ( B) scanf(“ c“, &(ps- sex); ( C) scanf(“ s“, s0 name); ( D) scanf(“ d“, ps- age); 7 设有以下语句 typedefstruct TTchar c; int a4; )CIN;则下面叙述中正确的是 ( A) TT是 struct类型的变量 ( B)可以用 TT定义结构体变量 ( C) CIN是 struct TT类型的变量 ( D)可以用 CIN定义结构体变量 8 有下列程序: struct Sint n; int a20; ; v

6、oid 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); 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

7、, 3, 6, 8, 7, 5, 4, 10,9, 9 有以下程序 #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“, 1098 0; f(a); printf(“ d, s, 6 1f n“, a a, a b, a c); void f(struct A t) t a=1002; strcpy(t b, “ChangRong“); t c=1202 0; ( A) 1002, ChangR

8、ong, 1202 0 ( B) 1001, ChangRong, 1098 0 ( C) 1001, ZhangDa, 1098 0 ( D) 1002, ZhangDa, 1202 0 10 有以下程序 #include stdio h #include“string h“ typedef structchar 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

9、 scorei=b scorei; 程序的运行结果是 ( A) Qian, m, 85, 90 ( B) Zhao, m, 85, 90 ( C) Zhao, f, 95, 92 ( D) Qian, f, 95, 92 11 若有以下程序 struct stuchar*name, gender; int score; ; main()struct stu a=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“

10、); printf(“ s, c, d, “, a name, a gender, a score); printf(“ s, c, d n“, b ( A) Zhao, m, 290, Qian, f, 350 ( B) Qian, f, 350, Qian, f, 350 ( C) Zhao, m, 290, Zhao, e350 ( D) Qian, m, 290, Qian, f, 350 12 若有以下程序 typedef struct stuchar name10, gender; int score; STU; void f(char*p)sgcpy(p, “Qian“); ma

11、in()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 sc ( A) Zhao, m, 290, Zhao, m, 290 ( B) Qian, f, 350, Qian, f, 350 ( C) Zhao, m, 290, Qian, f, 350 ( D) Zhao, m, 290, Zhao, f, 350 13 以下叙述中正

12、确的是 ( A)结构体类型中的成分只能是 C语言中预先定义的基本数据类型 ( B)在定义结构体类型时,编译程序就为它分配了内存空间 ( C)结构体类型中各个成分的类型必须是一致的 ( D)一个结构体类型可以由彩个称为成员 (或域 )的成分组成 14 以下叙述中正确的是 ( A)结构体变量的地址不能作为实参传给函数 ( B)结构体数组名不能作为实参传给函数 ( C)即使是同类型的结构体变量,也不能进行整体赋值 ( D)结构体中可以含有指向本结构体的指针成员 15 若已建立以下链表结构,指针 p、 S分别指向如图所示结点则不能将 S所指节点插入剑链表末尾的语句组是 ( A) s- next= 0;

13、 p=p- next; p- next=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; 16 有以下程序 main()unsigned char a=8, c; C=a 3; printf(“ d n“, c); 程序运行后的输出结果是 ( A) 16 ( B) 32 ( C) 1 ( D) 0 17 变量 a中的数据用二进制表示的形式是 01011101,变量 b中的数

14、据用二进制表示的形式是 11110000若要求将 a的高 4位取反,低 4位不变,所要执行的运算是 ( A) ab ( B) a|b ( C) a&b ( D) a 4 18 有以下程序 #include stdio h main() int a=2, b; b=a 2; printf(“ d n“, b); ( A) 4 ( B) 6 ( C) 8 ( D) 2 19 若变量已正确定义,则以下语句的输出结果是 s=32; s=32: printf(“ d“, s); ( A) -1 ( B) 1 ( C) 32 ( D) 0 20 有以下程序 main()int i=0; i= i: pri

15、ntf(“ d n“, i); 程序运行后的输出结果是 ( A) 0 ( B) 1 ( C) 8 ( D) -1 21 以下叙述中正确的 是 ( A)打开一个己存在的文件并进行了写操作后,原有文件中的全部数据必定被覆盖 ( B)在一个程序中当对文件进行了写操作后,必须先关闭该文件然后再打开,才能读到第 1个数据 ( C) C语言中的文件是流式文件,因此只能顺序存取数据 ( D)当对文件的读 (写 )操作完成之后,必须将它关闭,否则可能导致数据丢失 22 设 fp已定义,执行语句 fp=fopen(“file”, “w”);后,以下针对文本文件 file操作叙述的选项中正确的是 ( A)写操作结

16、束后可以从头开始读 ( B)只能写不能读 ( C)可以在原有内 容后追加写 ( D)可以随意读和写 23 有以下程序 #include stdio h main()FILE*f; f=fopen(“filea txt“, “w“); fprintf(“abc“); fclose(f); 若文本文件 filea txt中原有内容为: hello,则运行以上程序后,文件 filea txt中的内容为 ( A) abclo ( B) abc ( C) helloabc ( D) abchello 24 读取二进制文件的函数调用形式为: fread(buffer, size, count, fp);其

17、中 buffer代表的是 ( A)一个整型变量,代表待读取的数据的字节数 ( B)一个内存块的首地址,代表读入数据存放的地址 ( C)一个文件指针,指向待读取的文件 ( D)一个内存块的字节数 25 有以下程序 #include stdio h main() FILE*pf; char*s1=“China“, *s2=“Beijing“; pf=fopen(“abc dat“, “wb+“); fwrite(s2, 7, 1, pf); rewind(pf); *文件位置指针回到文件开头 * fwrite(s1, 5, 1, pf); fclose(pf); 以上程序执行后 abc dat文件

18、的内容是 ( A) Chinang ( B) China ( C) ChinaBeijing ( D) BeijingChina 26 设 fp为指向某二进制文件的指针,且己读到此文件末尾,则函数 feof(fp)的返回值为 ( A) 0 ( B) 0 ( C) NULL ( D)非 0值 27 以下程序用来统计文件中字符的个数 (函数 feof用以检查文件是否结束,结束时返回非零 ) #include stdio h main()FILE*fp; long Bum=0; fp=fopen(“fname dat“, “r“); while(_) fgetc(fp); num+; printf(

19、“num= d n“, num); fclose(fp); 下面选项中,填入横线处不能得到正确结果的是 ( A) feof(fp) ( B) feofffp)=NULL ( C) !feofffp) ( D) feofffp)=0 国家二级 C语言(结构体、共用体、位运算及文件操作)机试模拟试卷 6答案与解析 一、选择题 1 【正确答案】 A 【试题解析】 定义结构体类型的一般形式为: struct结构体名 成员列表 : struct结构体名后不能加 “; ”号,所以选项 B)、 C)错误,选项 D)中定义无名称的结构体类型同时定义结构体变量形式应为 “stract t1, t2; ”。选项

20、A)为用户自定义类型,其为正确的定义形式。 【知识模块】 结构体、共用体、位运算及文件操作 2 【正确答案】 D 【试题解析】 题目中利用 typedef定义了字符数组类型 T,而后定义了该类型的指针 a,因此 a为指针数组。 【知识模块】 结构体、共用体、位运算及文件操作 3 【正确答案】 B 【试题解析】 typedef语句的作用仅仅是用 “标识符 ”来代表已存在的 “类型名 ”,并未产生新的数据类型,原来类型名依然有效。为了便于识别,一般习惯将新的类型名用大写字母表示。 【知识模块】 结构体、共用体、位运算及文件操作 4 【正确答案】 B 【试题解析】 在 C语言中,数据只能从实参单向传

21、递给形参,称为 “按值 ”传递。也就是说,当简 单变量作为实参时,用户不可能在函数中改变对应实参的值。所以本题中在 main()函数 f(a)语句中结构体实参 a作为值,传递给函数 f(A c)中的形参 c:这种值传递的方式不会对实参 a产生任何影响,所以结构体实参 a的值不会发生变化。 【知识模块】 结构体、共用体、位运算及文件操作 5 【正确答案】 D 【试题解析】 void f(struct S*p)函数的功能使用了结构体指针变量实现对一维数组的元素从小到大排序。用关系表达式 p- ai p- ai实现一维数组中相邻元素两两比较,大的元素向 后移,小的元素向前移。在主函数中语句 f(&s

22、);的功能实现对结构体变量 s中一维数组的元素从小到大的排序,所以循环语句的输出结果为 1, 2, 3, 4, 5, 6, 7, 8, 9, 10。 【知识模块】 结构体、共用体、位运算及文件操作 6 【正确答案】 D 【试题解析】 程序段定义了结构体变量数组 s5和指针变量 ps,然后 ps指向数组 s5中的第一个元素,因而 ps- age用 s0 age。因为在输入 scanf()函数中,第 2个参数应该表示为地址变量,而选项 A)表示的值,而不是一个地址值。 【知 识模块】 结构体、共用体、位运算及文件操作 7 【正确答案】 D 【试题解析】 C语言允许用 typedef说明一种新的类型

23、名,说明新类型名的语句为一般形式为: typedef类型名标识符在此, “类型名 ”必须是此语句之前已有定义的类型标识符。 “标识符 ”是一个用户定义标识符,用作新的类型名。 typedef语句的作用仅仅是用 “标识符 ”来代表已存在的 “类型名 ”,并未产生新的数据类型,原有类型名依然有效。在本题中用 typedef定义 CIN为 TT的一种新的类型名,因而可以用它定义一个结构体变量。 【知识模 块】 结构体、共用体、位运算及文件操作 8 【正确答案】 C 【试题解析】 void(int*a int n)函数的功能是对数组 a的每一个元素加上其下标的值。所以在 main()函数中 f(s,

24、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;语句,也就是从 0开始到 8对数组 S a=2, 3,1, 6, 8, 7, 5, 4, 10, 9中的每一个元素加上其下标值 。 【知识模块】 结构体、共用体、位运算及文件操作 9 【正确答案】 C 【试题解析】 本题主要考查是的函数调用时参数之间的传递问题。在 C语言中参数之间的传递是传值,也就是把实参的值复制一份传递给形参,而实参的值不发生变化。所以对于本题来说,在

25、主函数中执行 f(a),把结构体变量 a的值复制一份传递给形参变量 t,而实参变量 a的值保持不变。 【知识模块】 结构体、共用体、位运算及文件操作 10 【正确答案】 B 【试题解析】 本题考查在结构体中函数的实参和形参的传递,调用 f(c)后 ,实参传向形参,进行 f()函数功能的实现,但程序中没有返回语句,故形参不能将值传回实参,它们值的传递具有不可逆性,所与 printf输出的还是 c中实参的值。 【知识模块】 结构体、共用体、位运算及文件操作 11 【正确答案】 D 【试题解析】 主函数中定义结构体类型 struct stu,有三个成员,第一个成员为字符指针变量。主函数中为 stu类

26、型变量 a赋值,首先为 a name成员分配存储空间,存入数据。 b=a;语句执行完毕以后, a和 b的各个成员值相同,需要注意的是 b name和 a name成员都 保存了同一段内存的地址,因此当为变量 b赋值的时候,同样更改了 a的 name成员,而其他成员由于有单独的存储空间而不会发生改变。 【知识模块】 结构体、共用体、位运算及文件操作 12 【正确答案】 C 【试题解析】 主函数中结构体变量定义同时赋初值。执行 b=a;语句后, b的数据和 a的数据相同,调用函数 f(b name),形参指针 p接收实参 b name的地址,此时 p和 b name指向同一个存储空间,流程转到 f

27、执行, p指向的存储空间存放字符串 “Qian“,流程结束返回主函数。主函数中变量 b的其他成员 存放数据。因此 a的数据 “Zhao“, m, 290, b的数据为 “Qian“, f, 350。注意本题结构体 STU类型变量 a和 b中的 name成员为数组,不是指针,它具有自己的存储空间。 【知识模块】 结构体、共用体、位运算及文件操作 13 【正确答案】 D 【试题解析】 结构体类型,它是由若干 “成员 ”组成,每一个成员可以是一个基本数据类型或者是一个构造类型。在说明和使用之前必须先定义它,也就是构造它。 定义一个结构的一般形式为: struct结构名 成员列表 : 成员列表由若干个

28、成员 组成,对每个成员也必须作类型说明,其形式为: 类型说明符成员名; 可以说明类型不同的各个成员。 【知识模块】 结构体、共用体、位运算及文件操作 14 【正确答案】 D 【试题解析】 一个结构体变量包含若干成员,这些成员可以是数值类型、字符类型、数组类型,也可以是指针类型,甚至可以是正在定义的结构体类型指针。用结构体变量作实参时,采取的是 “值传递 ”的方式,将结构体变量所占的内存单元的内容全部顺序传递给形参。形参也必须是同类型的结构体变量。结构体数组作为参数时,采取了 “地址传递 ”的方式,形参须为 同类型的结构指针或者形参结构数组。 【知识模块】 结构体、共用体、位运算及文件操作 15

29、 【正确答案】 B 【试题解析】 选项 A)中首先 p后移, s的后继指针指向 p, p的后继指向 s,在 s和最后结点之间形成了圆圈。无法完成题中的操作。 【知识模块】 结构体、共用体、位运算及文件操作 16 【正确答案】 C 【试题解析】 在程序中对无符号字符变量 a的值执行右移 3位运算后,相当于 a 8,其值等于 1,再赋给变量 c。 【知识模块】 结构体、共用体、位运算及文件操作 17 【正确 答案】 A 【试题解析】 本题考查位运算功能。题目要求将 a的高 4位取反,低 4位不变,即操作完成之后 a的值应为 10101101。选项 A)使用异或运行,相同为 0,相异为1,计算结果为

30、 10101101;选项 B)使用位或运算,计算结果为 11111101;选项 C)使用位与运算,计算结果为 01010000;选项 D)是把 a左移 4位,计算结果为11010000。 【知识模块】 结构体、共用体、位运算及文件操作 18 【正确答案】 C 【试题解析】 表达式 a 2,把 a向左移动 2位,相当于扩大 4倍。 【知识模块】 结构体、共用体、位运算及文件操作 19 【正确答案】 D 【试题解析】 “按位异或 ”运算的规则是:参与运算的两个运算数中相对应的二制位上,若数相同,则该位的结果为 0;若数不同,则该位的结果为 1。因为语句“s=32; s=32; ”相当于 s与自身做

31、按位异或运算,所以其结果等于 0。 【知识模块】 结构体、共用体、位运算及文件操作 20 【正确答案】 D 【试题解析】 运算符 ( )是位运算符中难一的一个单目运算符,运算对象应置于运算符的右边,其运算功能是把运算对象的内容按 位取反 (使每一位上的 0变 1, 1变 0), i的初值为 0,二进制位 00000000,因此取反后结果为 11111111,最高位为符号位,为 -1的补码形式,因此输出结果为 -1。 【知识模块】 结构体、共用体、位运算及文件操作 21 【正确答案】 D 【试题解析】 在 C语言中,有两种对文件的存取方式:顺序存取和直接存取;如果以 “a”的方式对一个已打开的文

32、件进行写操作后,则原有文件中内容将保存,新的数据写在原有内容之后。如果以 “a+”的方式为读和写而打开一个文件,则既可以对文件进行读,也可以对文件进行写, 而且在读和写操作之间不必关闭文件,可以从头开始读。当对文件的读 (写 )操作完成之后,必须将它关闭。 【知识模块】 结构体、共用体、位运算及文件操作 22 【正确答案】 B 【试题解析】 本题考查文件操作。 fopen的 mode参数有多种类型: r以只读方式打开文件、 r+以可读写方式打开文件、 rb+以读写方式打开一个二进制文件、 w以只写方式打开文件、 w+以读写方式打开文件、 wb+以读写方式打开二进制文件。 【知识模块】 结构体、

33、共用体、位运算及文件操作 23 【正确答案】 B 【试题解析 】 本题考查文件打开方式。需要注意的是:用 “w”打开的文件只能向该文件写入。若打开的文件不存在,则以指定的文件名建立该文件,若打开的文件已经存在,则将该文件删去,重建一个新文件。 【知识模块】 结构体、共用体、位运算及文件操作 24 【正确答案】 B 【试题解析】 buffer是数据块的指针,对 fread来说,它是内存块的首地址,输入的数据存入此内存块中。 【知识模块】 结构体、共用体、位运算及文件操作 25 【正确答案】 A 【试题解析】 本题主考查函数 fwrite的使用 。函数 fwrite的调用形式为: int fwri

34、te(char*pt, unsigned size, unsignedn, FILE*fp):其功能是把 pt所指向的n*size个字节输出到 fp所指文件中。在本题中 “fwrite(s2, 7, 1, pt); ”的功能是把字符串 “Beijing”输入到文件 abe dat中,然后调用 rewind(pf),把文件位置指针回到文件开头,再调用 “fwrite(s1, 5, 1, pf)”把字符串 “China”写入到文件abc dat中,所以此时文件 abc dat的内容为 Chinang。 【知识模块】 结构体、共用体、位运算及文件操作 26 【正确答案】 D 【试题解析】 ANSIC提供的: feof函数的功能是判断 fp所指的文件的位置是否已达到文件尾,如果达到文件尾,则 feof函数的值为 1,否则为 0,表示文件尚未结束。 【知识模块】 结构体、共用体、位运算及文件操作 27 【正确答案】 C 【试题解析】 feof函数用来判断文件是否结束。如果遇到文件结束,函数 fcof(fb)的值为 1,否则为 0。题目横线用于判断文件不结束读出字符。文件不结束 fcof值为 0, 若执行循环则应用表达式 !feof(fp)。 【知识模块】 结构体、共用体、位运算及文件操作

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试资料 > 职业资格

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