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

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

1、国家二级 C语言机试(结构体、共用体与文件)模拟试卷 3及答案与解析 一、选择题 1 有以下程序段 int *p; p= _ malloc( sizeof( int ); 若要求使 p指向一个 int 型的动态存储单元,在横线处应填入的是( )。 ( A) (int *) ( B) int ( C) int * ( D) ( *int ) 2 若有以下程序段 struct st int n; struct st *next; ; struct st a3= 5, p= 则以下选项中值为 6的表达式是( )。 ( A) +(p-n) ( B) (*p).n ( C) p-n+ ( D) p-n

2、3 有以下程序 #include main() int i=1; i = ii; printf(“%dn“, i ); 程序运行后的输出结果是( )。 ( A) 0 ( B) -1 ( C) 1 ( D) 7 4 以下程序用来统计文件中字符的个数(函数 feof用以检查文件是否结束,结束时返回非零 ) #include main() FILE *fp; long num=0; fp=fopen(“fname.dat“,“r“); while( _ ) fgetc(fp); num+; printf(“num=%dn“,num); fclose( fp ); 下面选项中,填入横线处不能得到正确结

3、果的是( )。 ( A) feof(fp) ( B) !feof(fp) ( C) feof(fp)=NULL ( D) feof(fp)=0 5 以下叙述中正确 的是( )。 ( A)在程序中,允许用 typedef来说明一种新的类型名 ( B)使用 typedef说明新类型名时,其格式是: typedef 新类型名 原类型名 ; ( C)使用 typedef 说明新类型名时,后面不能加分号 ( D)在使用 typedef改变原类型的名称后,只能使用新的类型名 6 以下叙述中正确的是( )。 ( A)一个结构体类型可以由多个称为成员(或域 ) 的成分组成 ( B)结构体类型中的成分只能是 C

4、语言中预先定义的基本数据类型 ( C)在定义结构体类型时,编译程序就为它分配了内存空间 ( D)结构体类型中各个成分的类型必须是一致的 7 以下叙述中正确的是( )。 ( A)使用 typedef定义新类型名后,新类型名与原类型名实际上是等价的 ( B)结构体类型中的各个成分均不能是数组或指针 ( C)结构体类型的变量,不能在声明结构体类型组成时一起定义 ( D)元素为结构体类型的数组,只能在声明过结构体类型之后,单独进行定义 8 下面选项中关于位运算的叙述正确的是( )。 ( A)位运算的对象只能是整型或字符型数据 ( B)位运算符都需要两个操作数 ( C)左移运算的结果总是原操作数 据 2

5、倍 ( D)右移运算时,高位总是补 0 9 下面选项中关于 “文件指针 “概念的叙述正确的是( )。 ( A)文件指针是程序中用 FILE定义的指针变量 ( B)文件指针就是文件位置指针,表示当前读写数据的位置 ( C)文件指针指向文件在计算机中的存储位置 ( D)把文件指针传给 fscanf函数,就可以向文本文件中写入任意的字符 10 以下叙述中正确的是( )。 ( A)在调用函数时,可以将结构体变量作为实参传给函数 ( B)函数的返回值不能是结构体类型 ( C)函数的返回值不能是结构体指针类型 ( D)结构体数组不能作为参数传给函数 11 以下叙述中正确的是( )。 ( A)结构体中可以含

6、有指向本结构体的指针成员 ( B)结构体变量的地址不能作为实参传给函数 ( C)结构体数组名不能作为实参传给函数 ( D)即使是同类型的结构体变量,也不能进行整体赋值 12 设有如下的说明和定义 struct int a; char *s; x, *p = x.a = 4; x.s = “hello“; 则以下叙述中正确的是( )。 ( A)语句 +p-a; 的效果是使成员 a增 1 ( B)语句 +p-a; 的效果是使 p增 1 ( C) (p+)-a与 p+-a都是合语法的表达式,但二者不等价 ( D)语句 *p-s+; 等价于 (*p)-s+; 13 下面关于位运算符的叙述,正确的是(

7、)。 ( A) z=( y1 ); printf( “%dn“,z ); 程序的输出结果是( )。 ( A) 0 ( B) 1 ( C) 4 ( D) 8 16 有以下程序 #include struct S int a;int b; ; main() struct S a, *p= a.a=99; printf( “%dn“ , _ ); 程序要求输出结构体中成员 a的数据,以下不能填入横线处的内容是( )。 ( A) *p. ( B) B ( C) A ( D) p- 17 若 fp已定义为指向某文件的指针,且没有读到该文件的末尾,则 C语言函数feof(fp)的函数返回值是( )。 (

8、A) 0 ( B)非 0 ( C) -1 ( D) EOF 18 有以下程序 #include struct STU char 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( “

9、%s,%c,%d,%dn“, c1.name, c1.sex, c1.score0, c1.score1 ); 程序运行后输出结果是( )。 ( A) Qian,f,95,92,Zhao,m,85,90 ( B) Qian,f,95,92,Sun,m,98,99 ( C) Zhao,m,85,90,Sun,m,98,99 ( D) Zhao,m,85,90,Qian,f,95,92 19 以下叙述中错误的是( )。 ( A) typedef说明的新类型名必须使用大写字母,否则会出编译错误 ( B) typedef的作用是用一个新的标识符来代表已存在的类型名 ( C)可以用 typedef说明的

10、新类型名来定义变量 ( D)用 typedef可以说明一种新的类型名 20 以下叙述中错误的是( )。 ( A)函数的返回值类型不能是结构体类型,只能是简单类型 ( B)只要类型相同,结构体变量之间可以整体赋值 ( C)可以通过指针变量来访问结构体变量的任何成员 ( D)函数可以返回指向结构体变量的指针 21 若有定义语句 int b = 2; 则表达式 ( b main() FILE *fp; int i, a6 = 1,2,3,4,5,6; fp = fopen( “d2.dat“, “w+“ ); for (i=0; i typedef struct stu char name10; c

11、har gender; int score; STU; void f(STU *a, STU *b) b = a; printf(“%s,%c,%d,“, b-name, b-gender, b-score); main() STU a=“Zhao“, m, 290, b=“Qian“, f, 350; f( printf(“%s,%c,%dn“, b.name, b.gender, b.score); 程序的运行结果是( )。 ( A) Zhao,m,290,Qian,f,350 ( B) Qian,f,350,Zhao,m,290 ( C) Qian,f,350,Qian,f,350 (

12、D) Zhao,m,290,Zhao,m,290 24 有以下程序 #include #include typedef struct stu char name10; char gender; int score; STU; void f(STU c) strcpy(c.name, “Qian“); c.gender = f; c.score = 350; main() STU a=“Zhao“, m, 290, b; b=a; f(b); printf(“%s,%c,%d,“, a.name, a.gender, a.score); printf(“%s,%c,%dn“, b.name, b

13、.gender, b.score); 程序的运行结果是( )。 ( A) Zhao,m,290,Zhao,m,290 ( B) Zhao,m,290,Qian,m,290 ( C) Zhao,m,290,Qian,m,350 ( D) Zhao,m,290,Qian,f,350 25 若有定义 typedef int T10; T a20; 则与上述定义完全等价的说明语句是( )。 ( A) int a2010; ( B) int a20; ( C) int a10; ( D) int a1020; 26 有以下程序 #include main() int c,d; c = 10 | 5; d

14、 = 10 + 5; printf(“%d,%dn“, c, d); 程序的运行结果是( )。 ( A) 15,15 ( B) 10,15 ( C) 5,15 ( D) 105,15 27 有以下程序 #include main() FILE *fp; int i, a6=1,2,3,4,5,6,k; fp = fopen(“data.dat“, “w+“); fprintf(fp, “%dn“, a0); for (i=1; i typedef struct stu char name10; char gender; int score; STU; void f(STU *a, STU *b

15、) *b = *a; printf(“%s,%c,%d,“, b-name, b-gender, b-score); main() STU a=“Zhao“, m, 290, b=“Qian“, f, 350; f( printf(“%s,%c,%dn“, b.name, b.gender, b.score); 程序的运行结果是( )。 ( A) Zhao,m,290,Zhao,m,290 ( B) Zhao,m,290,Qian,f,350 ( C) Qian,f,350,Qian,f,350 ( D) Qian,f,350,Zhao,m,290 29 有以下程序 #include #inc

16、lude typedef struct stu char name10; char gender; int score; STU; void f(char *name, char gender, int score) strcpy(name, “Qian“); gender = f; score = 350; main() STU a=“Zhao“, m, 290, b; b=a; f(b.name,b.gender,b.score); printf(“%s,%c,%d,“, a.name, a.gender, a.score); printf(“%s,%c,%dn“, b.name, b.g

17、ender, b.score); 程序的运行结果是( ) 。 ( A) Zhao,m,290,Qian,m,290 ( B) Zhao,m,290,Zhao,m,290 ( C) Zhao,m,290,Qian,m,350 ( D) Zhao,m,290,Qian,f,350 30 若有定义 typedef int T10; T *a20; 则与上述定义完全等价的说明语句是( )。 ( A) int *a2010; ( B) int *a20; ( C) int *a10; ( D) int *a1020; 31 有以下程序 #include main() int c,d; c= 13 d=1

18、0 printf(“%d,%dn“, c, d); 程序的运行结果是( )。 ( A) 5,1 ( B) 1,1 ( C) 18,1 ( D) 13,1 国家二级 C语言机试(结构体、共用体与文件)模拟试卷 3答案与解析 一、选择题 1 【正确答案】 A 【试题解析】 语句 “malloc( sizeof( int )“为动态分配了一块内存,因为 p为 int型指针,所以需要使用强制转换将该内存地址转换成 int*类型后再指给 p,填入的内容为 (int *),答案选 A。 【知识模块】 结构体、共用体与文件 2 【正确答案】 A 【试题解析】 语句 “p=“表示将指针 p指向了结构体数组 a

19、的首地址,所以+(p-n)值为 6, (*p).n相当于 a0.n,值为 5, p-n+值为 5, p-n值为 5,答案选 A。 【知识模块】 结构体、共用体与文件 3 【正确答案】 A 【试题解析】 任何一个数值跟自身的异或运算结果均为 0,答案选 A。 【知识模块】 结构体、共用体与文件 4 【正确答案】 A 【试题解析】 while循环的作用是统计文件中字符的个数,循环条件需为 “当前没有到达文件结束 “, feof()函数检查文件是否结束,若结束返回非零,所以要填入的内容应该为 feof(fp)=0或者 !feof(fp),若直接填 feof(fp)则 while循环会在文件没结束时跳

20、出循环,答案选 A。 【知识模块】 结构体、共用体与文件 5 【正确答案】 A 【试题解析】 typedef为类型定义符,使用的一般形式为 “typedef 原类型名 新类型名 ;“,它用于给已知类型取 别名,作用是用 “新类型名 “代替 “原类型名 “,并没有产生新的数据类型,而且原有类型名依然有效, “新类型名 “与 “原类型名 “允许同时使用,所以答案选 A。 【知识模块】 结构体、共用体与文件 6 【正确答案】 A 【试题解析】 结构体中的成员可以是 C语言中任意的数据类型,不仅仅是基本数据类型,选项 B)、 D)错误;定义结构体类型时,只是对这种结构体类型进行了说明,定义结构体变量时

21、编译程序才为该变量分配内存空间,选项 C)错误;答案选 A)。 【知识模块】 结构体、共用体与文件 7 【正确答案】 A 【试题解析】 结构体中的成员可以是 C语言中任意的数据类型,数组类型和指针类型属于 C语言的数据类型,选项 B)错误;可以在声明结构体类型组成时同时定义该结构体类型的变量或数组,选项 C)、 D)错误;答案选 A)。 【知识模块】 结构体、共用体与文件 8 【正确答案】 A 【试题解析】 取反运算符 “为单目运算符,选项 B)错误;左移运算的结果总是原操作数据 2n倍, n为 “a与 x.a等价, +p-a表示将 a自增 1, (p+)-a与 p+-a等价,值均为 4, *

22、p-s+与 *x.s+等价,语句 “(*p)-s+“不合法,所以答案选A)。 【知识模块】 结构体 、共用体与文件 12 【正确答案】 A 【试题解析】 语句 “*p = “将结构体指针 p指向了结构体变量 x的地址,所以*p与 x等价, p-a与 x.a等价, +p-a表示将 a自增 1, (p+)-a与 p+-a等价,值均为 4, *p-s+与 *x.s+等价,语句 “(*p)-s+“不合法,所以答案选 A。 【知识模块】 结构体、共用体与文件 13 【正确答案】 A 【试题解析】 以 #开头的语句为编译预处理命令行, |为逻辑或运算符, 表示按位取反运算符,答案选 A。 【知识模块】 结

23、构体、共用体与文件 14 【正确答案】 A 【试题解析】 EOF为一符号常量,值为 -1,在 C语言中常被作为文本文件的结束标志。 fgetc函数读入最后一个字符,返回值仍然是该字符,继续读入时,才返回 EOF。答案选 A。 【知识模块】 结构体、共用体与文件 15 【正确答案】 A 【试题解析】 x、 y的 ASCII码为 2,对应二进制为 0010, y1的结果为 0001,而 0100“则将结构体变量 b中的数据赋值给数组 a的第二个元素,所以输出结果为选项 A)。 【知识模块】 结构体、共用体与文件 19 【正确答案】 A 【试题解析】 typedef为类型定义符,作用是给已知类型取别

24、名,用 “新类型名 “代替 “原类型名 “,新类型名可以使用任意合法的用户自定义标识符,不一定必须用大写字母,选项 A)错误,答案选 A)。 【知识模块】 结构体、共用体与文件 20 【正确答案】 A 【试题解析】 函数的返回值类型可以为 C语言中任意合法的数据结构,不仅可以为简单的数据类型,也可以为复杂的构造类型和指针类型,选项 A)描述错误,答案选 A)。 【知识模块】 结构体、共用体与文件 21 【正确答案】 A 【试题解析】 变量 b对应的 ASCII码为 0010, b2的结果为 1000,对应十进制为 8, 3|b的结果为 1, 8/1=8,输出结果为选项 A)。 【知识模块】 结

25、构体、共用体与文件 22 【正确答案】 A 【试题解析】 文件 d2.dat以读写的方式 “w+“打开,第一个 for循环将数组 a中的数据写入该文件中,然后将文件指针置于文件首,顺序读出文件中的数据并逆序存放在数组 a中,所以输出结果为选项 A)。 【知识模块】 结构体、共用体与文件 23 【正确答案】 A 【试题解析】 函数 f()虽然为地址传参,但是形参只是实参的一个副本,若形参和实参为地址,则形参指针指向的变化不能影响到实参指针的指向,所以该函数不能改变 “将当前b的指针指向 a指向的结构体变量内存空间,所 以输出结果为 “Zhao,m,290,“,但是主函数中 b的值没有改变,输出结

26、果为 “Qian,f,350“,答案选 A。 【知识模块】 结构体、共用体与文件 24 【正确答案】 A 【试题解析】 结构体变量作为函数参数为值传递,形参变量的变化不能影响实参变量的变化,所以函数 f(b)调用结束后, b的值没有改变,和 a一致,所以输出结果为选项 A)。 【知识模块】 结构体、共用体与文件 25 【正确答案】 A 【试题解析】 typedef为类型定义符,作用是用 “新类型名 “代替 “原类型名 “, 即为现有类型定义容易记忆的类型名。 typedef能够隐藏复合类型,比如指针和数组,定义语句 “ typedef int T10; “表明类型 T就代表了具有 10个元素的

27、整型数组,所以语句 “T a20;“则表示定义了具有 20个元素并且每个元素都为一个有 10个元素的一维数组,所以答案选 A。 【知识模块】 结构体、共用体与文件 26 【正确答案】 A 【试题解析】 10的二进制数为 1010, 5的二进制数为 0101, 1010|0101=1111,对应十进制数为 15,所以答案选 A。 【知识模 块】 结构体、共用体与文件 27 【正确答案】 A 【试题解析】 该段代码以读写的方式打开文件 data.dat,然后把数组 a的第一个元素写入文件,接下来的 for循环是不断读取当前文件中的数据,将该数据和数组a的下一个元素累加后又写入到文件当中(语句 “f

28、seek(fp, 0L, 0);“和 “rewind(fp)“的作用是将文件指针移动至文件首),所以最终文件内记录的是数组 a中所有元素之和,答案选 A。 【知识模块】 结构体、共用体与文件 28 【正确答案】 A 【试题解析】 结构体变量 地址作为函数参数为地址传参,形参和实参指向的为同一块内存地址,所以对数组元素的改变能够影响到实参。语句 “*b=*a;“则将 a指向的结构体变量中的数据赋值给 b指向的结构体变量,实参 b的值也发生改变,输出结果为选项 A)。 【知识模块】 结构体、共用体与文件 29 【正确答案】 A 【试题解析】 结构体成员变量作为函数参数,第一个参数为地址传参,第二个

29、和第三个参数为值传参,地址传参中形参指针指向内容的改变能够改变实参指针指向内容的改变,而值传递过程中,形参的改变不能够影响到实参,所以调用函数语句 “f(b.name,b.gender,b.score);“之后, b中的数据为 “Qian“,?m?,290。 【知识模块】 结构体、共用体与文件 30 【正确答案】 A 【试题解析】 typedef为类型定义符,作用是用 “新类型名 “代替 “原类型名 “,即为现有类型定义容易记忆的类型名。 typedef能够隐藏复合类型,比如指针和数组,定义语句 “ typedef int T10; “表明类型 T就代表了具有 10个元素的整型数组,所以语句 “T *a20;“则表示定义了具有 20个元素并且每个元素 都为一个有 10个元素的指针数组,所以答案选 A。 【知识模块】 结构体、共用体与文件 31 【正确答案】 A 【试题解析】 按位与 “&“运算符的运算规则是:只要对应的二进制位有一个为 0时,结果就为 0。而逻辑与 “&“的运算规则是两个运算对象均为真(非零)时,该逻辑表达式的值才为真( 1), 13的二进制数为 1101, 5的二进制数为 0101,1101&0101=0101,对应十进制数值为 5。 10&5结果为真,用值表示是 1,所以输出结果为选项 A)。 【知识模块】 结构体、共用体与文件

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

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

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