1、国家二级 C语言机试(结构体、共同体、位运算及文件操作)模拟试卷 13及答案与解析 一、选择题 1 下列说法正确的是 ()。 ( A)使用 typedef可以定义新的数据类型 ( B)使用 struct可以定义新的数据类型 ( C)使用 typedef可以对现有类型起别名,但不能定义数据类型 ( D)使用 new关键字可以定义新的数据类型 2 以下说法正确的是 ( )。 ( A) typedef和 struct可以联合使用来定义新数据类型 ( B) typedef只能单独使用 ( C) struct只能单独使用 ( D)以上说法都不正确 3 若 typedef char T3; T*a;上述定
2、义中 a的类型与下面选项中完全相同的是 ( )。 ( A) char(*A)3; ( B) char*a; ( C) char a3; ( D) char*a3; 4 关于 typedef的叙述中正确的是 ( )。 ( A)在使用 typedef改变原类型的名称后,只能使用新的类型名 ( B)使用 typedef说明新类型名时,后面不能加分号 ( C)在程序中,允许用 typedef来说明一种新的类型名 ( D)使用 typedef说明新类型名时,其格式是: typedef新类型名原类型名 5 对以下程序段的叙述中正确的是 ( )。 typedef struct NODE int num; s
3、truct NODE*next; mynode; ( A)以上的说明形式非法 ( B) NODE是一个结构体类型 ( C) mynode是一个结构体类型 ( D) mynode是一个结构体变量 6 以下程序的输出结果是 ( )。 struct STRint a, b; data2=10, 100, 20, 200; main() struct STR p=data1; printf( d n, +(p a); ( A) 11 ( B) 20 ( C) 21 ( D) 10 7 以下程序的输出结果是 ( )。 struct STRint n; int a20; ; void f(struct S
4、TR*p) int i, j, t; for(i=0; i一 1; i+) for(j=i+1; jn; j+) if(p一 ai p一 aj)t=p一 ai; p一 ai=p一 aj; p一 aj=t; l main() int i; struct STR s=10, 2, 3, 1, 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) 10, 9, 8, 7, 6, 1, 2, 3, 4, 5, ( C) 2, 3, 1, 6
5、, 8, 7, 5, 4, 10, 9, ( D) 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 8 设 struct STRchar name10; int age; char sex; s5, *ps; ps=&s0;则以下scanf函数调用语句有错误的是 ( )。 ( A) scanf( c, &(ps一 sex); ( B) scan( d, &s0 age); ( C) scanf( s, s0 name); ( D) scanf( d, ps一 age); 9 以下程序的输出结果是 ( )。 #include #include struet A int a; cha
6、r b10; double c; ; struet A f(struet A t); main() struct A a=1001, Bob, 1098 0; a=f(a); printf( d, s, 6 1f n, aa , ab , ac) ; struct A f(struct A t) t a=1002; strcpy(t b, Mike); t c=1202 0; return t; ( A) 1002, Bob, 1202 0 ( B) 1002, Mike, 1202 0 ( C) 1001, Mike, 1098 0 ( D) 1001, Bob, 1098 0 10 以下程
7、序的输出结果是 ( )。 #includestruct STRint x, y; dt2=1, 2, 3, 4; main()struct STR*p=dt; printf( d, , +(p一 x); printf( d n, +(p一 y); ( A) 1, 2 ( B) 2, 3 ( C) 3, 4 ( D) 4, 1 11 有下列程序的输出结果是 ( )。 struct Sint n; int a20; ; void f(int*a, int n) int i; for(i=0; i n一 1; i+)ai+=i; main() int i; struet S s=10, 1, 2,
8、3, 4, 5, 6, 7, 8, 9, 10; f(s a, s n); for(i=0; i s 13; i+)printf( d, , s ai); ( A) 2, 4, 6, 8, 10, 12, 14, 16, 18, 10 ( B) 2, 3, 1, 6, 8, 7, 5, 4, 10, 9, ( C) 1, 3, 5, 7, 9, 1 l, 13, 15, 17, 10, ( D) 1, 2, 3, 6, 8, 7, 5, 4, 10, 9, 12 关于结构体类型的叙述中正确的是 ( )。 ( A)结构体类型中的成员不能是数组或指针 ( B)结构体类型的变量,不能在声明结构体类型
9、组成时一起定义 ( C)使用 typedef定义新类型名后,新类型名与原类型名实际上是等价的 ( D)元素为结构体类型的数组,只能在声明过结构体类型之后,单独进行定义 13 关于结构体函数的叙述中正确的是 ( )。 ( A)即使是同类型的结构体变量。也不能进行整体赋值 ( B)结构体数组名不能作为实参传给函数 ( C)结构体变量 的地址不能作为实参传给函数 ( D)结构体中可以含有指向本结构体的指针成员 14 以下程序的输出结果是 ( )。 main()unsigned char a=2, b=4, c=5, d; d=a b; d&=c; printf( d n, d); ( A) 0 (
10、B) 2 ( C) 4 ( D) 8 15 变量 a=01011101,变量 b=11110000,若要求将 a的高 4位取反,低 4位不变,所要执行的运算是 ( )。 ( A) a b ( B) a&b ( C) a 2 ( D) a 4 16 以下程序 的输出结果是 ( )。 main()int a=l, b=2, c=3, x; x=(a b)&c; printf( d n, x); ( A) 0 ( B) 1 ( C) 3 ( D) 2 17 以下程序的输出结果是 ( )。 #include main() char a=4; printf( d, a=a 1); ( A) 8 ( B)
11、 16 ( C) 64 ( D) 4 18 以下程序段的输出结果是 ( )。 s=32; s =32: printf( d, s); ( A) 32 ( B)一 1 ( C) 1 ( D) 0 19 以下程序的输出结果是 ( )。 main()int c; c=1315; printf( d n, c); ( A) 18 ( B) 5 ( C) 13 ( D) 8 20 关于文件操作的叙述中正确的是 ( )。 ( A)在一个程序中当对文件进行了写操作后,必须先关闭该文件然后再打开,才能读到第 1个数据 ( B) C语言中的文件是流式文件,因此只能顺序存取数据 ( C)打开一个已存在的文件并进行
12、写操作后,原有文件中的全部数据必定被覆盖 ( D)当对文件的读 (写 )操作完成之后,必须将它关闭,否则可能导致数据丢失 21 关于 C语言文件指针的叙述正确的是 ( )。 ( A)文件指针就是文件位置指针,表示当前读写数据的位置 ( B)文件指针指向文件在计算机中的存储位置 ( C)文件指针是程序中用 FILE定义的指针变量 ( D)文件指针就是 scanf函数返回的值 22 不能用于向文件中写人数据的 C语言函数是 ( )。 ( A) fprintf ( B) fputc ( C) ftell ( D) fwrite 23 C语言中的 dread(buffer, size, count,
13、fp);函数是用来读取二进制文件的,关于 buffer的叙述正确的是 ( )。 ( A)一个自定义变量 ( B)一个内存块的首地址,代表读人数据存放的地址 ( C)一个文件指针,指向待读取的文件 ( D)一个内存块的字节数 24 关于文件操作中的标高符 “EOF”的叙述中正确的是 ( )。 ( A) EOF即 NULL ( B)文本文件和二进制文件都可以用 EOF作为文件结束标志 ( C) EOF是在库函数文件中定义的符号常量 ( D)对于文本文件, fgetc函数读入最后一个字符时,返回 值是 EOF 25 以下程序依次把从终端输入的字符存放到 file文件中,用 #作为结束输入的标志,则在
14、横线处应填入的选项是 ( )。 #include main()FILE*cpoint; char ch; cpoint=fopen(file, w); while(ch=getchar()! =#) fputc(_); fclose(cpoint); ( A) fpoint, ch ( B) ch ( C) ch, cpoint ( D) ch, file 国家二级 C语言机试(结构体、共同体、位运算及文件操作)模拟试卷 13答案与解析 一、选择题 1 【正确答案】 C 【试题解析】 C语言中只能通过 struct关键字定义新的结构体,使用 typedef对现有类型起别名,但不能定义新的数据类
15、型,所以答案 C正确。 【知识模块】 结构体及文件操作 2 【正确答案】 D 【试题解析】 typedef和 struct可以联合使用来定义新的结构体,但不能定义新的数据类型。所以 A, B, C选项的说法均不正确。答案选 D项。 【知识模块】 结构体及文 件操作 3 【正确答案】 D 【试题解析】 C语言允许用 typed说明一种新类型名。题目中利用 typedef定义了字符数组类型 T,而后定义了该类型的指针 a,因此 a为指针数组。 【知识模块】 结构体及文件操作 4 【正确答案】 C 【试题解析】 C语言允许用 typedef说明一种新类型名。 typedef语句的作用仅仅是用 “标识
16、符 ”来代表已存在的 “类型名 ”,并未产生新的数据类型,原有类型名依然有效。 【知识模块】 结构体及文件操作 5 【正确答案】 C 【试题解析】 本 题考查结构体和 typedef类型定义。本题的声明代码相当于两部分,首先定义 street NODE,然后是以 typedef定义 mynode类型,因此 mynode是结构体类型 NODE的别名或标识度。选项 C正确,其他选项错误。 【知识模块】 结构体及文件操作 6 【正确答案】 C 【试题解析】 在题目中定义了结构体 STR类型的数组变量 data,并对其赋初值。在程序中定义了指向结构体 STR类型的变量 p,并把数组 data的第二个元
17、素data1的值赋给它,所以此时成员变量 p a的值等于 20,在输出时 分别加 1,所以输入结果为选项 C。 【知识模块】 结构体及文件操作 7 【正确答案】 D 【试题解析】 题目中函数的功能使用了结构体指针变量实现对一维数组的元素从小到大排序。用关系表达式 p一 aip一 aj实现一维数组中相邻元素两两比较,大的元素向后移,小的元素向前移。在主函数中语句 f(&s);的功能实现对结构体变量 s中一维数组的元素从小到大的排序,所以循环语句的输出结果为 1,2, 3, 4, 5, 6, 7, 8, 9, 10。 【知识模块】 结构体及文件操作 8 【正确答案】 D 【试题解析】 题目中程序段
18、定义了结构体变量数组 s5和指针变量 ps,然后 ps指向数组 s5中的第一个元素,因而 ps一 age引用 s0 age。因为在输入scanf()函数中,第 2个参数应该表示为地址变量,而选项 D表示的值,而不是一个地址值。 【知识模块】 结构体及文件操作 9 【正确答案】 B 【试题解析】 在主函数中定义结构体 A的变量 a,并对其赋初值,再调用函数f(a),在函数 f(a)中对结构体变量 a的各个成员重新进行了赋值操作,并把其值输出。 【知识模块】 结构体及文件操 作 10 【正确答案】 B 【试题解析】 在题目中首先定义了结构体 ORD,并定义了 ORD类型的数组变量 dt,并对其赋初
19、值。在程序中定义了指向结构体时类型的指针变量 P,并且它指向变量数组 dt的第一个元素 dt0,所以此时成员变量 P x的值等于 1,成员变量! 7的值等于 2,在输出时分别加 1,输出结果为选项 B。 【知识模块】 结构体及文件操作 11 【正确答案】 C 【试题解析】 题目中子函数的功能是对数组 a的每一个元素加上其下标的值。所以主函数中 f(s a, s n)语句会调 用 f(int*a, int n)函数,此时指针 a指向数组s a=1, 2, 3, 4, 5, 6, 7, 8, 9, 10, n=10;也就是说从 0开始到 8对数组中的每一个元素加上其下标值。 【知识模块】 结构体及
20、文件操作 12 【正确答案】 C 【试题解析】 c语言允许用 typedef说明一种新类型名,形式是 typedef类型名标识符, typedef语句的作用仅仅是用 “标识符 ”来代表已存在的 “类型名 ”,并未产生新韵数据类型,原有类型名依然有效。结构体变量定义有下面三种形式: (1)先定义结构,再说明结构变量。 (2)在定义结构类型的同时说明结构变量。 (3)直接说明结构变量。 【知识模块】 结构体及文件操作 13 【正确答案】 D 【试题解析】 C语言中的结构体变量包含若干成员,这些成员可以是所有变量类型,甚至可以是正在定义的结构体类型指针。用结构体变量作实参时,取的是 “值传递 ”的方
21、式,将结构体变量所占的内存单元的内容全部顺序传递给形参。形参也必须是同类型的结构体变量。结构体数组作为参数时,采取了 “地址传递 ”的方式,形参须为同类型的结构指针或者形参结构数组。 【知识模块】 结构体及文件操作 14 【正确答案】 C 【试题解析】 本题考查位运算, C语言中的为按位或运算, &为按位与运算,按位与 (&)运算符的作用是:把参加运算的两个运算数按对应的二进制位分别进行“与 ”运算,当两个相应的位都为 1时,该位的结果为 1;否则为 0。按位或 ( )的运算规则是:参加运算的两个运算数中,只要两个相应的二进制位中一个为 1,则该位的运算结果即为 1;只有当两个相应位的数都为
22、0时,该位的运算结果才为0。首先 d=2 4值为 6, d=6&5值为 4。 【知识模块】 结构体及文件操作 15 【正确答案】 A 【试题解析】 题目要求将 a的高 4位取反,低 4位不变,即操作完成之后 a的值应为 10101101。选项 A使用异或运行,相同为 0,相异为 1,计算结果为10101101;选项 D使用位或运算,计算结果为 11111101;选项 B使用位与运算,计算结果为 01010000;选项 C是把 a左移 4位,计算结果为 11010000。 【知识模块】 结构体及文件操作 16 【正确答案】 C 【试题解析】 1、 2、 3的二进制形式分别为 00000001、
23、00000010、 00000011。首先计算 1与 2的或运算,再将其与 3进行 “与 ”运算,结果为(00000011)&(00000011)=00000011,即十进制数 3。 【知识模块】 结构体及文件操作 17 【正确答案】 A 【试题解析】 本题主要考查按位左移运算。左移一位等于乘以 2, a=4的二进制为 00000100, a 1后为 00001000,其值为十进制数值 8。 【知识模块】 结构体及文件操作 18 【正确答案】 D 【试题解析】 C语言中的 “按位异或 ”运算的规则是:参与运算的两个运算数中相对应的二进制位上,若数相同,则该位的结果为 0;若数 不同,则该位的结
24、果为1。因为语句 “s=32; S =32; ”相当于 s与自身做按位异或运算,所以其结果等于0。 【知识模块】 结构体及文件操作 19 【正确答案】 C 【试题解析】 按位或 (1)的运算规则是参加运算的两个运算数中,只要两个相应的二进制位中一个为 1,则该位的运算结果即为 1;只有当两个相应位的数都为 0时,该位的运算结果才为 0。 13的二进制位 1101, 5的二进制位 0101,或运算的结果为 1101,因此值为 13。 【知识模块】 结构体及文件操作 20 【正确答案】 D 【 试题解析】 在 C语言中,有两种对文件的存取方式:顺序存取和直接存取。如果以 “a”的方式对一个已打开的
25、文件进行写操作后,则原有文件中内容将保存,新的数据写在原有内容之后。如果以 “a+”的方式为读和写而打开一个文件,则既可以对文件进行读,也可以对文件进行写,而且在读和写操作之间不必关闭文件,可以从头开始读。当对文件的读 (写 )操作完成之后,必须将它关闭。 【知识模块】 结构体及文件操作 21 【正确答案】 C 【试题解析】 文件指针实际上是指向一个结构体类型的指针,这个结构体中包含如缓冲区的地址、 在缓冲区中当前存取的字符的位置、对文件是 “读 ”或 “写 ”、是否出错、是否已经遇到文件结束标志等信息。一般称文件指针结构体类型名为FILE,可以用此类型名来定义文件指针。 【格式】 FILE*
26、指针变量名。 【说明】 FILE是一个存储文件信息的结构体类型的变量。 注意不要和文件位置指针混淆,在文件内部有一个位置指针,用以指示文件内部的当前读写位置。使用 fgete函数,每读写一次,该指针均向后移动,它不需在程序中定义说明,而是由系统自动设置的。而文件指针是指向整个文件的,须在程序中定义说明,只要不重新赋值,文件指针的 值是不变的。 fscanf函数可以向文本文件和二进制文件输入数据。 【知识模块】 结构体及文件操作 22 【正确答案】 C 【试题解析】 本题考查文件操作。 ftell函数返回文件指针的当前位置,其他的都写文件函数。 【知识模块】 结构体及文件操作 23 【正确答案】
27、 B 【试题解析】 buffer是数据块的指针,对 fread来说,它是内存块的首地址,输入的数据存放此内存块中。 【知识模块】 结构体及文件操作 24 【正确答案】 C 【试题解析】 EOF是在 stdio h库函数文件中定义的符号常量,其值等于一 1。EOF用作文件结束标志,在二进制或者文本文件内部有一个位置指针,用以指示文件内部的当前读写位置。使用 fgetc函数,每读写一次,该指针均向后移动。 【知识模块】 结构体及文件操作 25 【正确答案】 C 【试题解析】 fputc()的使用格式为 fputc(ch, fpoint),其中 ch为字符, fpoint为文件指针。 【知识模块】 结构体及文件操作