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

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

1、国家二级 C语言(结构体、共用体、位运算及文件操作)机试模拟试卷 11 及答案与解析 一、选择题 1 有以下定义和语句: struct workers int num;char name20;char c; struct int day; int month; int year; s; ; struct workers w,*pw; pw= 能给 w中 year成员赋 1980的语句是 ( A) w.year=1980; ( B) pw- year=1980; ( C) w.s.year=1980; ( D) *pw.year=1980; 2 有以下程序 #include stdio.h st

2、ruct tt int x;struct tt *y;*p; struct tt a4=20,a+1,15,a+2,30,a+3,17,a; main( ) int i; p=a; for(i=1;i =2;i+ +) printf(“%d,“,p- x);p=p- y; 程序的运行结果是 ( A) 20,15, ( B) 30,17 ( C) 15,30, ( D) 20,30, 3 有以下程序 #include stdio.h #include “string.h“ typedef structchar name9; char sex;float score2;STU; void f(ST

3、U 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 ( D) Qian,f,95,92 4 设有定义: struct char mark12; int num1; double num2; t1,t2; 若变量均已正确赋初值,则以下语句中错误的是 ( A) t2.num1=t1.num1; ( B) t2.

4、mark=t1.mark; ( C) t1=t2; ( D) t2.num2=t1.num2; 5 有以下程序 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.1fn“, a.a,a.b,a.c); void f(struct A t) t.a=1002; strcpy(t.b,“ChangRong“); t.c=1202.0; 程序运行后的输出结果是 ( A) 1002,ChangRong,1202.0

5、 ( B) 1001,ZhangDa,1098.0 ( C) 1001,ChangRong,1098.0 ( D) 1002,ZhangDa,1202.0 6 若有以下程序 struct stu char *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“); printf( “%s,%c,%d,“,

6、a.name, a.gender, a.score ); printf( “%s,%c,%dn“, b.name, b.gender, b.score ); 则程序的输出结果是 ( A) Zhao,m,290,Qian,f,350 ( B) Qian,f,350,Qian,f,350 ( C) Zhao,m,290,Zhao,f,350 ( D) Qian,m,290,Qian,f,350 7 若有以下程序 typedef struct stu char *name, gender; int score; STU; void f(char *p) p=(char *)malloc(10); s

7、trcpy(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 = 350; printf(“%s,%c,%d,“, a.name, a.gender, a.score); printf(“%s,%c,%dn“, b.name, b.gender, b.score); 则程序的输出结果是 ( A) Zhao,m,290,Qian,f,350 ( B) Qian,f,350,Qia

8、n,f,350 ( C) Qian,m,290,Qian,f,350 ( D) Zhao,m,290,Zhao,f,350 8 若有以下程序 typedef struct stu char name10, 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(a,b); printf(“%s,%c,%dn“, b.name, b.gender, b.

9、score); 则程序的输出结果是 ( A) Zhao,m,290, Zhao,m,290 ( B) Zhao,m,290,Qian,f,350 ( C) Qian,f,350,Qian,f,350 ( D) Zhao,m,290,Zhao,f,350 9 若有以下程序 typedef struct stu char name10, gender; int score; STU; void f( char *p ) strcpy( p, “Qian“ ); main() STU a=“Zhao“, m, 290, b; b=a; f(b.name); b.gender = f; b.score

10、 = 350; printf(“%s,%c,%d,“, a.name, a.gender, a.score); printf(“%s,%c,%dn“, b.name, b.gender, b.score); 则程序的输出结果是 ( 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 10 为了建立如图所示的存储结构(即每个结点含两个域, data是数据域, next是指向结点的指针域),则在 【 】 处应填入的选项是 Struct l

11、inkchar data; 【 】 node; ( A) struct link *next; ( B) link next; ( C) link *next; ( D) struct link next; 11 若有以下程序段 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 12 以下叙述中正确的是 ( A)结构体类型中的成分只能是 C语言中预先定义的基本数据类型 ( B)在定义结构体类型时,编译程序就为它

12、分配了内存空间 ( C)结构体类型中各个成分的类型必须是一致的 ( D)一个结构体类型可以由多个称为成员(或域 ) 的成分组成 13 以下叙述中正确的是 ( A)结构体类型中的各个 成分均不能是数组或指针 ( B)结构体类型的变量,不能在声明结构体类型组成时一起定义 ( C)使用 typedef定义新类型名后,新类型名与原类型名实际上是等价的 ( D)元素为结构体类型的数组,只能在声明过结构体类型之后,单独进行定义 14 以下叙述中正确的是 ( A)函数的返回值不能是结构体类型 ( B)函数的返回值不能是结构体指针类型 ( C)在调用函数时,可以将结构体变量作为实参传给函数 ( D)结构体数组

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

14、 a; 的效果是使成员 a增 1 17 有以下程序 struct S int a;int b; ; main() struct S a, *p= a.a=99; printf( “%dn“ , _ ); 程序要求输出结构体中成员 a的数据,以下不能填入横线处的内容是 ( A) a.a ( B) *p.a ( C) p- a ( D) (*p).a 18 若已建立以下链表结构,指针 p、 s分别指向如图所示结点 则不能将 s所指节点插入到链表末尾的语句组是 ( A) s - next=0; p=p- next; p- next=s; ( B) p=p- next; s - next=p; p-

15、next=s; ( C) p=p- next; s - next=p- next; p- next=s; ( D) p=(*p).next; (*s ).next=(*p).next; (*p).next=s; 19 有以下程序 #include stdio.h 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

16、,%d,%d,“,c0.name,c0.sex,c0.score0,c0.score1); printf(“%s,%c,%d,%dn,“,c1.name,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 20 以下叙述中错误的是 ( A)函数的返回值类型不能是结构体类型,只能是简单类型 ( B)只要类型相同,结构体变量之间可

17、以整体赋值 ( C)可以通过指针变量来访问结构体变量的任何成员 ( D)函数可以返回指向结构体变量的指针 21 有以下程序 main() unsigned char a=8, c; c = a 3; printf(“%dn“, c); 程序运行后的输出结果是 ( A) 16 ( B) 32 ( C) 1 ( D) 0 22 有以下程序 main() unsigned char a=2, b=4, c=5, d; d = a | b; d printf(“%dn“, d); 程序运行后的输出结果是 ( A) 3 ( B) 5 ( C) 4 ( D) 6 23 下面选项中关于位运算的叙述正确的是

18、( A)位运算符都需要两个操作数 ( B)左移运算的结果总是原操作数据 2倍 ( C)右移运算时,高位总是补 0 ( D)位运算的对象只能是整型或字符型数据 24 若有以下程序段 int r=8; printf(“%dn“,r 1 ); 输出结果是 ( A) 8 ( B) 4 ( C) 16 ( D) 2 25 有以下程序 main() int a=1, b=2, c=3, x; x = (ab) printf(“%dn“,x); 程序的运行结果是 ( A) 1 ( B) 2 ( C) 3 ( D) 0 26 有以下程序 #include stdio.h main() int a=2,b; b

19、=a 2; printf(“%dn“,b); ( A) 4 ( B) 6 ( C) 8 ( D) 2 国家二级 C语言(结构体、共用体、位运算及文件操作)机试模拟试卷 11 答案与解析 一、选择题 1 【正确答案】 C 【试题解析】 本题主要考查的是结构体变量的嵌套定义,也就是说一个结构体变量也可以是一个结构体。在本题中 works 这个结构体中包含了结构体 s。所以对结构体变量 w 中 year成员的引用是 w.s.year。 【知识模块】 结构体、共用体、位运算及文件操作 2 【正确答案】 A 【试题解析】 程序定义了结构体类型 tt,其成员包括一个整型数据 x和指向其自身结构的指针变量

20、y。程序在定义结构体数组 a的同时对其进行了初始化。其元素a0的成员 y被赋值为元素 a1的地址, a1.y被赋值为 a2的地址, a2.y被赋予a3的地址, a3.y被赋予 a0的地址。这就形成了一个单向的循环链表,每个元素的指针成员都指向下一个元素的地址。在主函数中,通过一个 for循 环语句,输出该链表前 2个节点数值成员的值,即 a0.x和 a1.x。 【知识模块】 结构体、共用体、位运算及文件操作 3 【正确答案】 B 【试题解析】 本题考查在结构体中函数的实参和形参的传递,调用 f(c)后,实参传向形参,进行 f()函数功能的实现,但程序中没有返回语句,故形参不能将值传回实参,它们

21、值的传递具有不可逆性,所与 printf 输出的还是 c中实参的值。 【知识模块】 结构体、共用体、位运算及文件操作 4 【正确答案】 B 【试题解析】 这个题目主要涉及到结构体的 定义与赋值操作。根据题意结构体变量 t1, t2 的成员变量 mark 是字符数组,对于字符数组之间的赋值操作应该使用循环语句对每个字符进行赋值,而选项 A是用数组名实现字符数组之间的赋值操作,是错误的。 【知识模块】 结构体、共用体、位运算及文件操作 5 【正确答案】 B 【试题解析】 在主函数中定义结构体 A的变量 a,并对其赋初值,再调用函数f(a),形参 t接收实参的数据,在函数 f(t)中对结构体变量 t

22、的各个成员进行了赋值操作,需要注意的,形参和实参之间是数据传递,因此对形参的操作对实参不产生影响,因 此在主函数输出仍然输出变量 a的数据。 【知识模块】 结构体、共用体、位运算及文件操作 6 【正确答案】 D 【试题解析】 主函数中定义结构体类型 struct stu,有三个成员,第一个成员为字符指针变量。主函数中为 stu类型变量 a赋值,首先为 a.name成员分配存储空间,存入数据。 b=a;语句执行完毕以后, a和 b 的各个成员值相同,需要注意的是 b.name和 a.name成员都保存了同一段内存的地址,因此当为变量 b 赋值的时候,同样更改了 a的 name成员,而其他成员由于

23、有单独的存储空间而不会发生改变。 【知识模块】 结构体、共用体、位运算及文件操作 7 【正确答案】 D 【试题解析】 函数 f( char*p)的主要功能申请字符串的存储空间,然后存入字符串 “Qian“,但当程序调用结束以后,形参指针变量 p撤销,存储的字符串地址丢失,而不能更改实参指针的值。主函数中结构体变量定义同时赋初值,初始情况其 name指针成员存储空,而后语句为其分配存储空间,存入字符串 “Zhao“。执行 b = a;语句后, b的数据和 a的数据相同,调用函数 f以后, b的 name成员的值没变。 【知识模块】 结构体 、共用体、位运算及文件操作 8 【正确答案】 B 【试题

24、解析】 函数 f( STU a, STU b)的主要功能是为把结构体变量 a的值存放到 b 中,然后输出 b中各个成员的值。主函数中调用函数 f( a, b),输出赋值以后 b 的数据,实际为 a“Zhao“, m, 290的数据,函数调用结束,形参 a和 b 撤销,流程到主函数输出 b“Qian“, f, 350的数据。 【知识模块】 结构体、共用体、位运算及文件操作 9 【正确答案】 C 【试题解析】 主函数中结构体变量定义同时赋初值。执行 b = a;语句后, b 的数据和 a的数据相同,调用函数 f( b.name),形参指针 p接收实参 b.name的地址,此时 p和 b.name

25、指向同一个存储空间,流程转到 f 执行, p 指向的存储空间存放字符串 “Qian“,流程结束返回主函数。主函数中变量 b 的其他成员存放数据。因此 a的数据 “Zhao“, m, 290, b 的数据为 “Qian“,f,350。注意本题结构体 STU类型变量 a和 b 中的 name成员为数组,不是指针,它具有自己的存储空间。 【知识模块】 结构体、共用体、位运算及文件操作 10 【正确答案】 A 【试题解析】 单链表为动态分配的存储空间,在分配时,每个结点之间可以是不连续的(结点内是连续的)。结点之间的联系用指针实现, 即在结点结构中定义一个成员项用来存放下一结点的首地址,这个用于存放地

26、址的成员,常把它称为指针域,该指针为了保持链表中结点的地址,因此其基类型和结点的类型相同,选项为 A。 【知识模块】 结构体、共用体、位运算及文件操作 11 【正确答案】 A 【试题解析】 选项 A中表达式 +(p- n)为前缀自加表达式, p- n 和 a0.n 等价,其值为 5,前缀 自加后值为 6。选项 B中表达式 (*p).n和选项 D的表达式 p-n 含义相同,表示取结构指针 p 所指向的成员,因此值为 5。选项 C中表达式 p- n+为后缀自加表达式,相当于( p- n) +,表达式值为 5。 【知识模块】 结构体、共用体、位运算及文件操作 12 【正确答案】 D 【试题解析】 结

27、构体类型,它是由若干 “成员 ”组成,每一个成员可以是一个基本数据类型或者是一个构造类型。在说明和使用之前必须先定义它,也就是构造它。 定义一个结构的一般形式为: struct 结构名 成员列表 ; 成员列 表由若干个成员组成,对每个成员也必须作类型说明,其形式为: 类型说明符 成员名 ; 可以说明类型不同的各个成员。 【知识模块】 结构体、共用体、位运算及文件操作 13 【正确答案】 C 【试题解析】 C语言允许用 typedef 说明一种新类型名, typedef语句的作用仅仅是用 “标识符 ”来代表已存在的 “类型名 ”,并未产生新的数据类型,原有类型名依然有效。结构体变量定义有下面三种

28、形式:( 1)先定义结构,再说明结构变量。( 2)在定义结构类型的同时说明结构变量。( 3)直接说明结构变量。 【知识模 块】 结构体、共用体、位运算及文件操作 14 【正确答案】 C 【试题解析】 和普通变量相似,结构体变量也可以作为函数实参或者形参,函数的返回值也可以是结构体类型。 【知识模块】 结构体、共用体、位运算及文件操作 15 【正确答案】 D 【试题解析】 一个结构体变量包含若干成员,这些成员可以是数值类型、字符类型、数组类型,也可以是指针类型,甚至可以是正在定义的结构体类型指针。用结构体变量作实参时,采取的是 “值传递 ”的方式,将结构体变量所占的内存单元的内容全部顺序传递给形

29、参。形参也必 须是同类型的结构体变量。结构体数组作为参数时,采取了 “地址传递 ”的方式,形参须为同类型的结构指针或者形参结构数组。 【知识模块】 结构体、共用体、位运算及文件操作 16 【正确答案】 D 【试题解析】 p- a得到 p指向的结构体变量中的成员 a的值。 p- a+ 得到 p指向的结构体变量中的成员 a的值,用完该值后使 p- a加 1。 +p- a 得到 p指向的结构体变量中的成员 a的值使之加 1(先加 )。由此可见指向运算符 -优先级高于 +,因此 *p- s+相当于 *( p- s) +,结合性自右至左,因此 p+- a和(p+)- a等价。 【知识模块】 结构体、共用

30、体、位运算及文件操作 17 【正确答案】 B 【试题解析】 如果 p指向结构体,那么下面三种形式都可以访问结构体的成员:结构体变量成员名、 (*p)成员名、 p-成员名。 【知识模块】 结构体、共用体、位运算及文件操作 18 【正确答案】 B 【试题解析】 选项 A中首先 p 后移, s 的后继指针指向 p, p的后继指向 s,在 s和最后结点之间形成了圆圈,无法完成题中的操作。 【知识模块】 结构体、共用体、位运算及文件操 作 19 【正确答案】 C 【试题解析】 在主函数中,定义了结构体 STU数组 c2,并对其赋初始值。执行 f(c)时,在函数 f()中,把结构体变量 b的值赋给了 c1

31、。 【知识模块】 结构体、共用体、位运算及文件操作 20 【正确答案】 A 【试题解析】 函数的返回值类型可以是结构体类型。结构体变量之间可以相互复制。 【知识模块】 结构体、共用体、位运算及文件操作 21 【正确答案】 A 【试题解析】 在程序中对无符号字符变量 a的值执行右移 3位运算后,相当于a/8,其值等于 1,再赋给变量 c。 【知识模块】 结构体、共用体、位运算及文件操作 22 【正确答案】 C 【试题解析】 本题考查位运算, |为按位或运算, &为按位与运算,按位与( &)运算符的作用是:把参加运算的两个运算数按对应的二进制位分别进行 “与 ”运算,当两个相应的位都为 1时,该位

32、的结果为 1;否则为 0。按位或( |)的运算规则是:参加运算的两个运算数中,只要两个相应的二进制位中一个为 1,则该位的运算结果即为 1;只有当两个相应位的数都为 0时,该位的运算结果才为 0。首先d=2|4值为 6, d=6&5值为 4。 【知识模块】 结构体、共用体、位运算及文件操作 23 【正确答案】 D 【试题解析】 位运算则是以位( bit)一级进行的运算,位运算符中除 “”以外,均为二元运算符,即要求两侧各有一个运算量,运算量只能是整型或字符型的数据,不能为实型数据。其中右移时,右端(低位)移出的二进制数舍弃,左端(高位)移入的二进制数分两种情况:对于无符号整数和正整数,高位补

33、0;对于负整数,高位补 1。而左移运算在没有溢出的前提下每移动一位,相当于原数据的2倍。 【知识模块】 结构体、共用体、位运算及文件操作 24 【正确答案】 D 【试题解析】 定义了整型变量 r,其值等于 8,在输出语句中,把变量 r的值向右移动一位,在 C语言中把变量向右移动一位,相当于其值除以 2,所以在题中把变量 r的值 8除 2,得到其值等于 4。 【知识模块】 结构体、共用体、位运算及文件操作 25 【正确答案】 C 【试题解析】 1、 2、 3 的二进制形式分别为 00000001、 00000010、 00000011。首先计算 1与 2的或运算,即 12=( 00000001) (00000010)=00000011,再将其与 3进行 “与 ”运算,结果为( 00000011) &( 00000011) =00000011,即十进制数 3。 【知识模块】 结构体、共用体、位运算及文件操作 26 【正确答案】 C 【试题解析】 表达式 a 2,把 a向左移动 2位,相当于扩大 4倍。 【知识模块】 结构体、共用体、位运算及文件操作

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

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

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