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

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

1、国家二级 C语言机试(结构体、共用体、位运算及文件操作)模拟试卷 1及答案与解析 一、选择题 1 若定义: int array9, *p=array;并在以后的语句中未改变 p的值,不能表示array1地址的是 ( )。 ( A) p+1 ( B) array+ ( C) array+1 ( D) +p 2 在说明语句 “int*f(); ”中,标识符 f代表的是 ( )。 ( A)一个用于指向函数的指针变量 ( B)一个返回值为指针类型的函数名 ( C)一个用于指向一维数组的行指针 ( D)一个用于 指向整型数据的指针变量 3 不合法的 main(、 )函数命令行参数表示形式是 ( )。 (

2、 A) main(int a, char*c) ( B) main(int argv, char*argc) ( C) main(int arc, char*arv) ( D) main(int argc,char*argv) 4 有函数如下: char fun(char*p) return p; 该函数的返回值是 ( )。 ( A)无确切的值 ( B)形参 p自身的地址值 ( C)形参 p中存放的地址值 ( D)一个临时存储单元的地址 5 下列程序的输出结果是 ( )。 struct U int x, y, z; ; main() struct U s2=1, 2, 3, 4, 5, 6);

3、 int t; t=s0 x+s1 y; printf(“ d n“, t); ( A) 5 ( B) 6 ( C) 7 ( D) 8 6 变量 m所占内存字节数是 ( )。 Union U char s4; int i; long 1; ; struct M int c; union U u; m; ( A) 4 ( B) 5 ( C) 6 ( D) 8 7 根据下面的定义,能打印出字母 P的语句是 ( )。 struct student char name10; int age; ; stmct student stu10= “John“, 11, “Paul“, 12, “Mary“,

4、11, “adam“, 12 ; ( A) printf(“ c“, stu3 name); ( B) printf(“ c“, stu3 name1); ( C) printf(“ c“, stu2 name1); ( D) printf(“ c“, stu1 name0); 8 若有如下说明和定义: typedef a int x; char y; float z; union Uchar ul5l; int u22; u; mya; 则 sizeof(struct a)的值是 ( )。 ( A) 12 ( B) 16 ( C) 14 ( D) 9 9 以下程序: #include std

5、io h struct student int num; charname10; int age; ; void fun(stmct student*p) printf(“ s n“, (*p) name); main() struct student students3=9801, “Zhang“, 20, 9802, “Wang“, 19,9803, “Zhao“,18; fun(students+2); 输出结果是 ( )。 ( A) Zhang ( B) Zhao ( C) Wang ( D) 18 10 设有以下定义和语句,输出的结果是 (用 small模式编译,指针变量占 2个字节

6、 )( )。 struct U long*cat; stmct U*next; double dog; u; printf(“ d“, sizeof(u); ( A) 20 ( B) 16 ( C) 14 ( D) 12 11 下面的程序的输出为 ( )。 struct A int m; int*n: *p; int data4=10, 20, 30, 40); struct A aa4=50, &data0, 60, &data1, 70, &data2, 80, data3; main() p=aa; printf(“ d n“, +p- m); printf(“ d n“, (+p)-

7、m); printf(“ d n“, +(*p- n); ( A) 10 20 20 ( B) 50 60 21 ( C) 51 61 20 ( D) 60 70 31 12 若已建立如下图所示的单链表结构:且该链表结构中,指针 p和q分别指向图中所示节点,则不能将 q所指的节点插入到链表末尾来构成单向链表的语句是 ( )。 ( A) p=p- next; q- next=p; p- next=q; ( B) p=p- next; q- next=p- next; p- next=q; ( C) q- next=NULL; p=p- next; p- next=q; ( D) p=(*p) n

8、ext; (*q) next=(*p) next; (*p) next=q; 13 若有以下定义: struct List int data; struct List*next; a,b, c, *p, *q; 且变量 a和 b之间已有如下图所示的链表结构:指针 P指向变量 a, q指向变量 c,则能够 c插入 a和 b之间形成新的链表的语句组是 ( )。 ( A) a next=c; c next=b ( B) p next=q; q next=p next; ( C) p- next=&c; q- next=p- next; ( D) (*p) next=q; (*q) next=&b;

9、14 有以下定义: union A char st4; int i; long 1; ; struct B int c; union A b; b; 变量 b所占内存字节数 是 ( )。 ( A) 4 ( B) 5 ( C) 6 ( D) 8 15 以下枚举类型名的定义中正确的是 ( )。 ( A) enum e=a, b, c); ( B) enum ea=9, b=-1, c); ( C) enum e=“a“, “b“, “c“); ( D) enum e“a“, “b“, “c“); 16 若要说明一个类型名 Type,使得定义 Type p;等价于 char*p;以下选项中正确的是

10、( )。 ( A) typedef Type char *P ( B) typedef *char Type; ( C) typedef Type *char; ( D) typedef char *Type; 17 设有以下语句: typedefstruct S int g, char h; )ST; 则下面叙述中正确的是 ( )。 ( A)可用 S定义结构变量 ( B)可用 ST定义结构变量 ( C) S是 struct类型的变量 ( D) ST是 struct类型的变量 18 若 x=2, y=3,则 x&y的结果是 ( )。 ( A) 0 ( B) 2 ( C) 3 ( D) 5 19

11、 设 x和 y为 int型变量,且 x的值为 15, xy的值为 240,则表达式 (x&y)&yy的结果为 ( ) ( A) 0 ( B) FALSE ( C) TRUE ( D) 1 20 在位运算中,操作数每右移两位,其结果相当于 ( )。 ( A)操作数乘以 2 ( B)操作数除以 2 ( C)操作数除以 4 ( D)操作数乘以 4 21 设 x=061, y=016,则 z=x y的值是 ( )。 ( A) 00001111 ( B) 11111111 ( C) 00111111 ( D) 11000000 22 下 述程序的输出结果是 ( )。 #include stdio h v

12、oid main() char a=1, b=2; char c=ab 2; printf(“ n d“, c); ) ( A) 9 ( B) 10 ( C) 12 ( D) 2 23 要找一个已存在的非空文本文件 “file“用于修改,正确的语句是 ( )。 ( A) fp=fopen(“file“, “r“); ( B) fp=fopen(“file“, “rb+“); ( C) fp=fopen(“file“, “w“); ( D) fp=fopen(“file“, “r+“); 24 在 C语言中,可以把整数以二进制形式存放到文件中的函数是 ( )。 ( A) fprintf()函数

13、( B) fread()函数 ( C) fwrite()函数 ( D) fputc()函数 25 有如下程序: #include stdio h main() FILE*fp1; fp1=fopen(“f1 txt“, “w“); fprintf(fp1, “abc“); fclose(fp1); 若文本文件 f1 txt中原有内容为 good,则运行以上程序后,文件 f1 txt中的内容为 ( )。 ( A) goodabc ( B) abcd ( C) abe ( D) abcgood 26 使用 fgets(str,n, p)函数从文件中读入一个字符串,以下叙述错误的是 ( )。 ( A

14、)字符串读入后会自动加入 0 ( B) fp是指向该文件的文件型指针 ( C) fgets函数将从文件中最多读入 n-1个字符 ( D) fgets函数将从文 件中最多读入 n个字符 27 函数 fseek(fp, -10L, SEEK_END)的含义是 ( )。 ( A)将文件位置指针从当前位置向后移动 lO个字节 ( B)将文件位置指针移到距离文件头 10个字节处 ( C)将文件位置指针从文件末尾处向后退 10个字节 ( D)将文件位置指针移到离当前位置 10个字节处 28 函数 rewind(fp)的作用是 ( )。 ( A)使 fp指定的文件的位置指针重新定位到文件的开始位置 ( B)

15、将 fp指定的文件的位置指针指向文件中所要求的特定位置 ( C)使 fp指定的文 件的位置指针向文件的末尾 ( D)使 fp指定的文件的位置指针自动移至下一个字符位置 29 已知函数的调用形式为 fread(buffer,size, count, fp);,其中 buffer代表的是( )。 ( A)一个整型变量,代表要读入的数据项总数 ( B)一个文件指针,指向要读的文件 ( C)一个指针,是指向的输入数据放在内存中的起始位置 ( D)一个存储区,存放要读的数据项 30 函数 ftell(fp)的作用是 ( )。 ( A)得到 fp所指向文件的当前读写位置 ( B)初始化文件的位置指针 (

16、C)移动文件的位置指针 ( D)以上答案均正确 国家二级 C语言机试(结构体、共用体、位运算及文件操作)模拟试卷 1答案与解析 一、选择题 1 【正确答案】 B 【试题解析】 本题选项 C)中 array+是先取 array的值,后自增,所以是错误的。 【知识模块】 编译预处理和指针 2 【正确答案】 B 【试题解析】 本题主要考查指针函数和函数指针,本题申是指针函数,即 f指向一个返回值为指针的函数。 【知识模块】 编译预处理和指针 3 【正确 答案】 C 【试题解析】 C语言中规定:在 main()函数中使用命令行参数时,第二个参数应该为字符型指针数组或字符型二级指针。 【知识模块】 编译

17、预处理和指针 4 【正确答案】 C 【试题解析】 本题中 p是一个字符型的指针, p是一个地址,因此返回的是形参p中地址值。 【知识模块】 编译预处理和指针 5 【正确答案】 B 【试题解析】 本题中的 ”struct U”结构含有 3个数值域,并定义了一个结构数组S,计算 s0的 x域与 s1的 y域之和,故 s0 x+s1 y=1+5=6,答案为 B)。 【知识模块】 结构体、共用体、位运算及文件操作 6 【正确答案】 C 【试题解析】 a的类型是 struct M,它包括一个 int型,占 2字节,一个 union U类型,占 4字节。故变量 m所占字节数 =2+4=6。答案为 C)。

18、【知识模块】 结构体、共用体、位运算及文件操作 7 【正确答案】 D 【试题解析】 本题 stu数组下标为 1的元素的 name域中含有 P字符。 P在 name域的第 0位置。 【知识模块】 结构体、共用体、位运算及文件操作 8 【正确答案】 A 【试题解析】 “struct a”所占字节数为: x为 2, y为 1, z为 4, u为 5。故 “struct a”所占字节数 =2+1+4+5=12,答案为 A)。 【知识模块】 结构体、共用体、位运算及文件操作 9 【正确答案】 B 【试题解析】 被调用函数 fun()中的形式参数 p是一个 student型的结构指针。程序执行时,它接收

19、main()函数传递过来的地址 students+2,该地址是数组元素students2的首地址,因此程序输出是 “Zhao“。 【知识模块】 结 构体、共用体、位运算及文件操作 10 【正确答案】 D 【试题解析】 当结构成员是指针时,它将占用 2字节的存储单元 (在 small编译模式下 ),而与它所指向的数据类型无关。本题中,指针 cat的长度为 2字节; next是指向结构 struct U的指针,但它本身也只是一个指针,其长度也是 2字节;double型变量 dog的长度为 8字节。因此,结构变量 u的总长度为 12字节。 【知识模块】 结构体、共用体、位运算及文件操作 11 【正确

20、答案】 C 【试题解析】 运算符 -的优先级高于 +和木。在 第一条 printf()语句中,先将aa0中成员 m的值增 1,再取其值,输出 51;在第二条 printf()语句中,先将 p指针指向 aa1,然后取其成员 m的值,输出 60;在第三条 printf()语句中,先取aa1的成员 n(这时, n是一个指向数组元素 data1的指针 ),然后将该指针所指存储单元的值 20增 1,输出 21。 【知识模块】 结构体、共用体、位运算及文件操作 12 【正确答案】 A 【试题解析】 解决本题的关键是如何将一个节点插入到链表的末尾。应先将节点q的地址赋给原尾节点的 next域,然后将 q节点

21、的 next域赋 NULL。选项 B)先将指针 p指向 data域为 F的节点,然后将 data域为 F节点的 next域值 0赋给 q节点的 next域,即将其置为 0,再将 p所指的节点 next域放入指针 q的值,从而把 data域为 q节点连接在末尾;选项 C)先将 q的 next域置成 NULL(NULL与 0等价 ),然后将指针 p指向 data域为 F的节点,最后将 p所指节点的 next域置成q的值,同样可把 data域为 G的节点连接在末尾;选项 D)与选项 B)完全等价。因此,选项 B), C), D)都能达到题目的要求。而 选项 A)则先将指针 p指向 data域为 F的

22、节点,然后将 q的 next域置成 p的值,最后再将 data域为 F的节点又连接在 data域为 F的节点之后,从而使这两个节点的 next域都是 0,实际上已将data域为 F的节点排除在链表之外。 【知识模块】 结构体、共用体、位运算及文件操作 13 【正确答案】 D 【试题解析】 选项 A)将结构变量名赋给结构变量的指针成员,数据类型不匹配;选项 B)用指针引用结构成员时使用了 “ ”运算符;选项 C)使 a链接了 c,而c又链接了 c;选项 D)使 a链接了 c,使 c链接了 b,是正确的。 【知识模块】 结构体、共用体、位运算及文件操作 14 【正确答案】 C 【试题解析】 结构变

23、量所占的内存字节数等于其中各个成员所占的字节数的总和,而联合变量所占的内存字节数是其中最长的成员所需要的字节数。本题中结构变量 b有两个成员,一个是整型变量 c,它占 2字节内存,另一个是联合变量a,它自己也含有三个成员,其中占用内存空间最长的成员的变量 1,占 4字节内存,因此,联合变量 a所占内存字节数为 4,结构变量 b所占总的内存字节数为变量 c与变量 a所占字节数之和,即 2+4=6。 【知识 模块】 结构体、共用体、位运算及文件操作 15 【正确答案】 B 【试题解析】 枚举类型的定义形式与结构和联合类似,类型名后面直接跟花括号,花括号中放置枚举元素名,各枚举元素可以单独设置初值。

24、因此选项 B)是正确的定义方式。选项 A)中,类型名 e后多了一个 “=“;选项 C)中,枚举类型名 e后多了一个 “=“,枚举元素名多了双引号。选项 D)中,枚举元素名多了双引号。 【知识模块】 结构体、共用体、位运算及文件操作 16 【正确答案】 D 【试题解析】 用 typedef定义类型 char*时,按 下列步骤进行: 先用常规定义的方式写出定义: char*p; 再将上面定义的变量名 p用新类型标识符 Type替换: char*Type; 替换的结果就是新类型标识符,最后将 typedef放在替换式子的前面,就得到正确的类型定义形式: typedefchar*Type;。因此,本题

25、的正确选项是 D)。 【知识模块】 结构体、共用体、位运算及文件操作 17 【正确答案】 B 【试题解析】 本题中, struct是结构类型关键字, struct S是结构类型名, ST是结构类型名 structS的替换类型名,因此, 选项 B)是正确的。 【知识模块】 结构体、共用体、位运算及文件操作 18 【正确答案】 B 【试题解析】 将 x和 y化为二进制数分别得: x=0000 0010, y=0000 0011,则x&y=00000010&0000 0011=0000 0010,即 2,故本题的答案为 B)。 【知识模块】 结构体、共用体、位运算及文件操作 19 【正确答案】 D

26、【试题解析】 &运算比 运算优先级略高,最后执行逻辑或运算,不管位运算结果多少,因为 y不等于 0,最后进行或运算,逻辑位为 “真 ”,即 结果为 1。 【知识模块】 结构体、共用体、位运算及文件操作 20 【正确答案】 C 【试题解析】 在位运算中,操作数右移时,右端移出的部分舍弃,左端的移入分两种情况:对于无符号整数和正整数,高位补 0;对于负整数,高位补 1,因此对于操作数,每右移两位,其结果相当于进行了除以 4操作。 【知识模块】 结构体、共用体、位运算及文件操作 21 【正确答案】 C 【试题解析】 将八进制的 x和 y化为二进制数,分别得: x=0011 0001, y=0000

27、1110,则 z=x y=00110001 0000 1110=0011 1111,故本题的答案为 C)。 【知识模块】 结构体、共用体、位运算及文件操作 22 【正确答案】 A 【试题解析】 本题主要考查位运算符的优先级。由于左移运算符 ” ”的优先级较逻辑异或运算符 “ ”的优先级高,所以 c=a b 2=a (b 2)。由于 a=1,b=2,其二进制形式分别为 0000 0001和 0000 0010。代入 c=a b 2中得c=0000 0001 (oooo 0010 2)=0000 0001 0000 1000=0000 1001,即为 9。答案为 A)。 【知识模块】 结构体、共用

28、体、位运算及文件操作 23 【正确答案】 D 【试题解析】 本题考查文件打开方式。其中 “r“表示为输入打开一个文件, “w“表示为输出打开一个文本文件, “rb+“表示为读写打开一个二进制文件, “r+“表示以读写方式打开一个文本文件。 【知识模块】 结构体、共用体、位运算及文件操作 24 【正确答案】 C 【试题解析】 fprintf()函数可将各种类型的数据以格式化的形式写入文件, fread()函数以二进制数据块的形式从 二进制文件中读取数据, fwrite()函数以二进制数据块的形式将数据写入二进制文件, fputc()函数将一个字符写入文本文件。 【知识模块】 结构体、共用体、位运

29、算及文件操作 25 【正确答案】 C 【试题解析】 当用 “w“方式打开一个已有内容的文件时,文件中的已有内容将全部丢失,新写入的内容就是文件的内容。 【知识模块】 结构体、共用体、位运算及文件操作 26 【正确答案】 D 【试题解析】 字符串输入函数 fgets的调用形式为: fgets(s; n; fp);, fgets函数 的功能是:从 fp所指向的文件中读取长度不超过 n-1个字符的字符串,并将该字符串放到字符数组 s中,在读入字符串后会自动在字符串末尾加上 0结束符,表示字符串结束。 【知识模块】 结构体、共用体、位运算及文件操作 27 【正确答案】 C 【试题解析】 本题只要考查

30、fseek函数的使用。 fseek函数用来定位,是指向 fp文件的位置指针放在指定的位置上。 fseek(fp, offset, omg)的功能是将指针指到以omg为初始位置且偏移量为 offset个字节的地方。其中, offset是一个长整数, 表示指针移动的字节数。为负时,表示向文件头的方向移动;为正时,向文件尾的方向移动;为 0时不移动。 Omg用来指定指针的初始位置。本题中 fseek(fp, -10L, SEEK_END)含义是将指针 fp指到距离文件末尾向左偏移 10字节的地方。 【知识模块】 结构体、共用体、位运算及文件操作 28 【正确答案】 A 【试题解析】 位置指针重返文件

31、头指针 rewind的调用形式为: rewind(fp):,rewind(fp)的功能是:使 fp指定的文件的位置指针重返定位到文件的开始位置。 【知识模块】 结构体、共用体、位运算及文件操作 29 【正确答案】 C 【试题解析】 fread函数的调用形式为: ffead(buffer, size, count, fp);。其中, “buffer”是一个指针,对 fread来说,它是读入数据的存放地址,对 fwrite来说,是输出数据的地址; “size”是要读写的字节数; “cccount”是要进行读写多少个size字节的数据项; “fp”是指文件类型指针。 【知识模块】 结构体、共用体、位运算及文件操作 30 【正确答案】 A 【试题解析】 flell函数的调用形式为: long t=ftell(fp);。其中 fp是文件指针, t是所获得的文件当前位置指针的位置。 ftell(fp);的功能是给出当前位置指针相对于文件开头的字节数。本题答案为 A)。 【知识模块】 结构体、共用体、位运算及文件操作

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

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

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