[计算机类试卷]国家二级C语言机试(C语言程序设计)模拟试卷21及答案与解析.doc

上传人:花仙子 文档编号:497949 上传时间:2018-11-30 格式:DOC 页数:21 大小:81KB
下载 相关 举报
[计算机类试卷]国家二级C语言机试(C语言程序设计)模拟试卷21及答案与解析.doc_第1页
第1页 / 共21页
[计算机类试卷]国家二级C语言机试(C语言程序设计)模拟试卷21及答案与解析.doc_第2页
第2页 / 共21页
[计算机类试卷]国家二级C语言机试(C语言程序设计)模拟试卷21及答案与解析.doc_第3页
第3页 / 共21页
[计算机类试卷]国家二级C语言机试(C语言程序设计)模拟试卷21及答案与解析.doc_第4页
第4页 / 共21页
[计算机类试卷]国家二级C语言机试(C语言程序设计)模拟试卷21及答案与解析.doc_第5页
第5页 / 共21页
点击查看更多>>
资源描述

1、国家二级 C语言机试( C语言程序设计)模拟试卷 21及答案与解析 一、选择题 1 以下叙述中错误的是 ( A)可以用 typedef将已存在的类型用一个新的名字来代表 ( B)可以通过 typedef增加新的类型 ( C)用 typedef定义新的类型名后,原有类型名仍有效 ( D)用 typedef可以为各种类型起别名,但不能为变量起别名 2 以下关于 typedef的叙述错误的是 ( A) typedef只是将已存在的类型用一个新的名字来代表 ( B)用 typedef可以为各种类型说明一个新名,但不能用来为变 量说明一个新名 ( C)用 typedef可以增加新类型 ( D)用 typ

2、edef为类型说明一个新名,通常可以增加程序的可读性 3 以下结构体类型说明和变量定义中正确的是 ( A) typedef struct.int 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; 4 以下叙述中错误的是 ( A)可以用 typedef将已存在的类型用一个新的名字来代表 ( B)可以通过 t

3、ypedef增加新的类型 ( C)用 typedef定义新的类型名后,原有类型名仍有效 ( D)用 typedef可以为各种类型起别名,但不能为变量起别名 5 若有定义 typedefint*T; Ta10;则 a的定义与下面哪个语句等价 ( A) int*a10; ( B) int(*a)10; ( C) int*a: ( D) int a10; 6 若有定义 typedefchar T10; T*a;上述定义中 a的类型与下面选项中完全相同的是 ( A) char(*a)10; ( B) char*a; ( C) char a10; ( D) char *a10; 7 以下结构体说明和变量

4、定义中,正确的是 ( A) typedef struct abcint n; double m; )ABC; ABC x, y; ( B) struct abcint n; double m; struct abe x, y; ( C) struct ABCint n; double m; struct ABC x, y; ( D) struct abeint n; double m; ; abe x, y; 8 以下叙述中正确的是 ( A)使用 typedef说明新类型名时,其格式是: typedef新类型名原类型名; ( B)使用 typedef说明新类型名时,后面不能加分号 ( C)在程

5、序中,允许用 typedef来说明一种新的类型名 ( D)在使用 typedef改变原类型的名称后,只能使用新的类型名 9 以下叙述中错误的是 ( A) typedef的作用是用一个新的标识符来代表已存在的类型名 ( B) typedef说明的新类型名必须使用大写字母,否则会出编译错误 ( C)可以用 typedef说明的新类型名来定义变量 ( D)用 typedef可以说明一种新的类型名 10 有以下程序段 Typedef struct NODE int num; struct NODE*next; OLD; 以下叙述中正确的是 ( A)以上的说明形式非法 ( B) NODE是一个结构体类型

6、 ( C) OLD是一个结构型类型 ( D) OLD是一个结构变量 11 下面结构体的定义语句中,错误的是 ( A) struct ordint x; int y; int z; ); struct ord a; ( B) struct ordint x; int y; int z; )struct ord a; ( C) struct ordint x; int y; int z; a; ( D) stmctint x; int y; int z; )a; 12 有以下程序 #include typedef structint b, p; A; void f(AC) *,注意: c是结构变量

7、名 * intj; c.b 1; c.p 2; main() i; Aa 1, 2; f(a); printf(“ d, d n“, a.b, a.p); 程序运行后的输出结果是 ( A) 2, 4 ( B) 1, 2 ( C) 1, 4 ( D) 2, 3 13 有以下程序 struct Sint a, b; )data2 10, 100, 20, 200; main() struct Sp data1; printf(“ d n“, (p.a); ) 程序运行后的输出结果是 ( A) 11 ( B) 20 ( C) 21 ( D) 10 14 设有定义: struct complexint

8、 real, unreal; datal 1, 8, data2; 则以下赋值语句中错误的是 ( A) data2 (2, 6); ( B) data2 data1; ( C) data2.real data1.real; ( D) data2.real=data1.unreal; 15 有以下程序 struct Sint n; int a20; ; voidf(struct *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

9、 i; struct S 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) 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, 16 有以下程序 #include #include typedef structchar name9; char

10、 sex; int score2; )STU; STU f(STUa) STU b “Zhao“, m, 85, 90; int i; strcpy(a.name, b.name); a.sex b.sex; for(i 0; i 2; i )a.scorei b.scorei; return a; main() STU c “Qian“,f, 95, 92, d; d f(c); printf(“ s, c, d, d, “, d name, d sex, d score0, d score1); printf(“ s, c, d, d, “, c name, c sex, c score0

11、, c score1); ( A) Zhao, m, 85, 90, Zhao, m, 85, 90 ( B) Qian, f, 95, 92, Qian, f, 95, 92 ( C) Zhao, m, 85, 90, Qian, f,95, 92 ( D) Qian, f, 95, 92, Zhao, m, 85, 90 17 程序中己构成如下图所示的不带头结点的单向链表结构,指针变量 s、 P、 q均已正确定义,并用于指向链表结点,指针变量 s总是作为头指针指向链表的第一个结点。 若有以下程序段: q s; s s next; p s; while(p next)p p next; p

12、nextq; q next NULL;该程序段实现的功能是 ( A)尾结点成为首结点 ( B)首结点成为尾结点 ( C)删除首结点 ( D)删除尾结点 18 有以下结构体说明、变量定义和赋值语句 struct STDchar name10; int age;char sex; s5, *ps; ps &s0;则以下 scanf函数调用语句有错误的是 ( A) scanf(“ d“, &s0.age); ( B) scanf(“ c“, &(ps sex); ( C) scanf(“ s“, s0.name); ( D) scanf(“ d“, ps age); 19 若有以下语句 typede

13、fstruct Sint g; char h; T;以下叙述中正确的是 ( A)可用 S定义结构体变量 ( B) S是 struct类型的变量 ( C) T是 struct S类型的变量 ( D)可用 T定义结构体变量 20 有以下程序 include include Struct A int a; charb10; double c; ; struct A f(struct A t); main() structA a 1001,“ZhangDa“,1098 O; a f(a); printf(“ d, s, 6 1 f n“, a a, a b, a c); structA f(Struc

14、tAt) t a 1002; strcpy(t.b, “ChangRong“); t c=1202 0; return t; 程序运行后的输出结果是 ( A) 1002, ZhangDa, 1202 0 ( B) 1002, ChangRong, 1202 0 ( C) 1001, ChangRong, 1098 0 ( D) 1001, ZhangDa, 1098 0 21 设有以下语句 typedefstruct TTchar c; int a4; CIN;则下面叙述中正确的是 ( A) TT是 struct类型的变量 ( B)可以用 TT定义结构体变量 ( C) CIN是 struct

15、TT类型的变量 ( D)可以用 CIN定义结构体变量 22 有以下程序 include struct ord int x, y; dt2 1, 2, 3, 4; main() struct ord *p dt; pfintf(“ d, ”, (p x); printf(“ d n“, (p y); 程序运行后的输出结果是 ( A) 4, 1 ( B) 2, 3 ( C) 3, 4 ( D) 1, 2 23 有以下程序段 struct stint x; int*y; *pt; int a 1, 2, b 3, 4; struct st c2 10, a, 20, b; pt c; 以下选项中表达

16、式的值为 11的是 ( A) pt x ( B) *pt y ( C) pt x ( D) (pt ) x 24 有下列程序: struct Sint n; int a20; ; void f(int *a, int n) int i; for(i 0; i n 1; i )a i 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,

17、 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) l, 2, 3, 6, 8, 7, 5, 4, 10, 9, 25 有下列程序: #include #include typedef structchar name9; char sex; float score2; )STU; STU f(STUa) STU b “Zhao“, m, 85 0, 90 0); int i; strcpy(a name, b name); a sex b sex; for(i 0;

18、i 2; i )a scorei b scorei; return a: main() STU c “Qian“,f, 95 0, 92 0, d; d f(c); printf(“ s, c, 2 of, 2 of n“,d neme, d sex, d score0,d score1); 程序的运行结果是 ( A) Qian, m, 85, 90 ( B) Zhao, f, 95, 92 ( C) Zhao, m, 85, 90 ( D) Qian, f, 95, 92 26 假定已建立以下链表结构,且指针 P和 q已指向如 图所示的节点:则以下选项中可将 q所指节点从链表中删除并释放该节

19、点的语句组是 ( A) p q next; free(q); ( B) p q; free(q); ( C) (*p) next (*q) next; free(p); ( D) p next q next; free(q); 27 有以下程序 #include #include struct A int a; char b10; double c; ; void f(structAt); main() structA a 1001,“ZhangDa“,1098 0; f(a); printf(“ d, s, 6 1f n“,a a, a b, a c); void f(structAt) t

20、 a 1002; strcpy(t b, “ChangRong“); t c 1202 0; 程序运行后的输出结果是 ( A) 1002, ChangRong, 1202 0 ( B) 1001, ChangRong, 1098 0 ( C) 1001, ZhangDa, 1098 0 ( D) 1002, ZhangDa, 1202 0 28 有以下定义和语句: struct workers int num; char name20; char c; struct int day; int month; int year; s; ; struct workers w, *pw; pw &w;

21、 能给 w中 year成员赋 1980的语句是 ( A) w year 1980; ( B) pw year 1980; ( C) W S year 1980; ( D) *pw year 1980; 29 有以下程序 #include struct 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 (

22、 C) 15, 30, ( D) 20, 30, 30 有以下程序 #include #include“string.h“ typedef structchar name9; char sex; float seore2; STU; void f(STUa) 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,

23、f, 95, 92 ( D) Qian, f, 95, 92 国家二级 C语言机试( C语言程序设计)模拟试卷 21答案与解析 一、选择题 1 【正确答案】 B 【试题解析】 C语言允许用 typedef说明一种新类型名,说明新类型名的语句一般形式为: typedef类型名 标识符;在此, “类型名 ”必须是在此语句之前已有定义的类型标识符。 “标误符 ”是一个用户定义标识符,用作新的类型名。 typedef语句的作用仅仅是用 “标识符 ”来代表已存在的 “类型名 ”,并未产生新的数据类型,原有类型名依然有效。 【知识模块】 C语言程序设计 2 【正确答案】 C 【试题解析】 C语言允许用 t

24、ypedef说明一种新的类型名,其一般形式为:typedef类型名标识符;在此 “类型名 ”必须是在此语句之前已有定义的类型标识符。 “标识符 ”是一个用户定义标识符,用作新的类型名。 Typedef语句的作用仅仅是用 “标识符 ”来代表已存在的 “类型名 ”,并未产生新的数据类型,原来的类型名依然有效,这样可以增加程序的可读性。 【知识模块】 C语言程序设计 3 【正确答案 】 A 【试题解析】 定义结构体类型的一般形式为: struct结构体名 成员列表 : struct结构体名后不能加 “; ”号,所以选项 B、 C错误,选项 D中定义无名称的结构体类型同时定义结构体变量形式应为 str

25、uct t1, t2;选项 A为用户自定义类型,其为正确的定义形式。 【知识模块】 C语言程序设计 4 【正确答案】 B 【试题解析】 C语言允许用 typedef说明一种新类型名。 typedef类型名 标识符: 其中 “类型名 ”必须是在此语句之前已定义的类型标识符; “标识符 ”是一个用户定义 标识符,用作新的类型名; typedef语句的作用仅仅是用 “标识符 ”来代表已存在的 “类型名 ”,并未产生新的数据类型,原有类型名依然有效。 【知识模块】 C语言程序设计 5 【正确答案】 A 【试题解析】 typedef的主要功能是为存在的类型命名,后面的代码中可以利用该新定义的类型名定义变

26、量,题目中定义了整型指针类型 T,而后利用 T定义了整型指针数组 a,含有 10个元素,选项 A中定义了整型指针数组 a,选项 B定义了一个指向一维数组的指针 a,选项 C定义指针变量,而选项 D为定义整型数组最常用的形式,数 组 a中可以存放 10个数据元素。 【知识模块】 C语言程序设计 6 【正确答案】 D 【试题解析】 题目中利用 typedef定义了字符数组类型 T,而后定义了该类型的指针 a,因此 a为指针数组。 【知识模块】 C语言程序设计 7 【正确答案】 A 【试题解析】 选项 B中结构体定义中每个成员后面的分号都不能省略, double m后没分号,因此错误。选项 C结构体

27、类型定义完毕后, 外没加分号。选项 D中定义变量要加上关键字 struct。 【知识模块】 C语言程序设计 8 【正确答 案】 C 【试题解析】 C语言允许用 typedef说明一种新类型名。定义形式如下: typedef类型名 标识符;其中 “类型名 ”必须是在此语句之前已定义的类型标识符; “标识符 ”是一个用户定义标识符,用作新的类型名: typedef语句的作用仅仅是用 “标识符 ”来代表已存在的 “类型名 ”,并未产生新的数据类型,原有类型名依然有效。 【知识模块】 C语言程序设计 9 【正确答案】 B 【试题解析】 typedef语句的作用仅仅是用 “标识符 ”来代表已存在的 “类

28、型名 ”,并未产生新的数据类型,原来 类型名依然有效。为了便于识别,一般习惯将新的类型名用大写字母表示。 【知识模块】 C语言程序设计 10 【正确答案】 C 【试题解析】 本题考查结构体和 typedf类型定义。本题的声明代码相当于两部分,首先定义 structNODE,然后是一 typedef定义 OLD类型,因此 OLD是结构体类型。选项 C正确,其他选项错误。 【知识模块】 C语言程序设计 11 【正确答案】 B 【试题解析】 在选项 B中,由于在定义完结构体后缺少分号 “; ”,所以这是一条不完整的语句,因而是错误的。 【知识模块】 C语言程序设计 12 【正确答案】 B 【试题解析

29、】 在 C语言中,数据只能从实参单向传递给形参,称为 “按值 ”传递。也就是说,当简单变量作为实参时,用户不可能在函数中改变对应实参的值。所以本题中在 main()函数 f(A)语句中结构体实参 a作为值,传递给函数f(AC)中的形参 c;这种值传递的方式不会对实参 a产生任何影响,所以结构体实参 a的值不会发生变化。 【知识模块】 C语言程序设计 13 【正确答案】 C 【试题解析】 在题目中定义了结构体 S类型的数组变量 data,并对其赋初值。在程序中定义了指向结构体 S类型的变量 p,并把数组 data的第二个元素 data1的值赋给它,所以此时成员变量 p a的值等于 20,在输出时

30、分别加 1,所以输入结果为选项 A。 【知识模块】 C语言程序设计 14 【正确答案】 A 【试题解析】 本题主要考查结构体变量的定义与初始化。题目中定义了 cornplex类型的结构体变量 data1和 data2,并对 data1进行了初始化。可以用一个结构体变量对另一个结构体变量赋值,用一个结构体变量的成员对另一个结构体变量的成员赋值。 【 知识模块】 C语言程序设计 15 【正确答案】 D 【试题解析】 void f(struct S *p)函数的功能使用了结构体指针变量实现对一维数组的元素从小到大排序。用关系表达式 p ai p aj实现一维数组中相邻元素两两比较,大的元素向后移,小

31、的元素向前移。在主函数中语句 f(&s);的功能实现对结构体变量 s中一维数组的元素从小到大的排序,所以循环语句的输出结果为 1, 2, 3, 4, 5, 6, 7, 8, 9, 10。 【知识模块】 C语言程序设计 16 【正确答案】 C 【试题解 析】 在 C语言中,函数实参与形参之间数据的传递是传值,也就是说在用实参调用形参时,是把实参的值拷贝一份给形参,而实参的值并不变化,仍是原来的值。所以对于本题来说,在主函数中调 f(e)后,实参 e的值并不会变化,仍是原值。在函数 f中把局部变量 b的值依次返回给变量 d。 【知识模块】 C语言程序设计 17 【正确答案】 B 【试题解析】 分析

32、程序可知,程序段首先让 q指向链表的首结点, s指向链表的第二结点, p此时指向链表的第二个结点。然后在 while循环中,当 p的后继结点非空时,让 p指向链表的最后一个 结点,退出循环。然后让尾结点指向首结点,并使首结点的后继结点为 NULL。所以最终实现链表的首结点成为尾结点。 【知识模块】 C语言程序设计 18 【正确答案】 D 【试题解析】 程序段定义了结构体变量数组 s5和指针变量 ps,然后 ps指向数组 s5中的第一个元素,因而 ps age引用 s0.age。因为在输入 scanf()函数中,第 2个参数应该表示为地址变量,而选项 A表示的值,而不是一个地址值。 【知识模块】

33、 C语言程序设计 19 【正确答案】 D 【试题解析】 本题 考查 typedef, T是 struct S的新名称,因此可用 T定义结构体变量,但是 T并不是变量,只是 stmct S的新名称。 【知识模块】 C语言程序设计 20 【正确答案】 B 【试题解析】 在主函数中定义结构体 A的变量 a,并对其赋初值,再调用函数f(a),在函数 f(a)中对结构体变量 a的各个成员重新进行了赋值操作,并把其值返回在屏幕上输出。 【知识模块】 C语言程序设计 21 【正确答案】 D 【试题解析】 C语言允许用 typedef说明一种新的类型名,说明新类型名的语句为 一般形式为: typedef类型名

34、 标识符在此, “类型名 ”必须是此语句之前已有定义的类型标识符。 “标识符 ”是一个用户定义标识符,用作新的类型名。 typedef语句的作用仅仅是用 “标识符 ”来代表已存在的 “类型名 ”,并未产生新的数据类型,原有类型名依然有效。在本题中用 typedef定义 CIN为 TT的一种新的类型名,因而可以用它定义一个结构体变量。 【知识模块】 C语言程序设计 22 【正确答案】 B 【试题解析】 在题目中定义了结构体 ord类型的数组变量 dt,并对其赋初值。在程序中定义了指向结构 体 ord类型的指针变量 p,并且它指向变量数组 dt的第一个元素 dt0,所以此时成员变量 p x的值等于

35、 1,成员变量 p y的值等于2,在输出时分别加 1,所以输出结果为选项 B。 【知识模块】 C语言程序设计 23 【正确答案】 C 【试题解析】 由题目的已知条件可知, pt指向结构体数组 c2的第一元素 c0,所以 pt x 10,执行自加运算后为 11。 【知识模块】 C语言程序设计 24 【正确答案】 C 【试题解析】 void f(int*a,int n)函数的功能是对 数组 a的每一个元素加上其下标的值。所以在 main()函数中 f(s a,s n)语句会调用 f(int*a,int n)函数,此时指针 a指向数组 s a 2, 3, 1, 6, 8, 7, 5, 4, 10,

36、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中的每一个元素加上其下标值。 【知识模块】 C语言程序设计 25 【正确答案】 D 【试题解析】 f()函数的功能是对形参 a的各个成员用结构体变量 b的各个成员进行赋值后,然后返回变量 a。在主函数中调用 f(c)函数时,将 STU类型的结构体变量 c的值传递给形参 a,函数 f()在对 a的各个成员进行重新赋值后,再将返回变量a的值传给 d,最后输出结构变量 d的各个成员的值。 【知识模块】 C语言程序设计 26 【正

37、确答案】 D 【试题解析】 本题考查了在线性链表删除一个节点的方法,要删除 q所指向的节点,只需要把 q所指向的节点的前一个节点中的后继指针指向 q所指向的节点的下一个节点即可,即 p next q next。再释放 q所指向的节点,即free(q)。 【知识模块】 C语言程序设计 27 【正确答案】 C 【试题解析】 本题主要考查是的函数调用时参数之间的传递问题。在 C语言中参数之间的传递是传值,也就是把实参的值复制一份传递给形参,而实参的值不发生变化。所以对于本题来说,在主函数中执行 f(a),把结构体变量 a的值复制一份传递给形参变量 t,而实参变量 a的值保持不变。 【知识模块】 C语

38、言程序设计 28 【正确答案】 C 【试题解析】 本题主要考查的是结构体变量的嵌套定义,也就是说一个结构体变量也可以是一个结构体。在本 题中 works这个结构体中包含了结构体 s。所以对结构体变量 w中 year成员的引用是 w s year。 【知识模块】 C语言程序设计 29 【正确答案】 A 【试题解析】 程序定义了结构体类型 tt,其成员包括一个整型数据 x和指向其自身结构的指针变量 y。程序在定义结构体数组 a的同时对其进行了初始化。其元素a0的成员 y被赋值为元素 a1的地址, a1 y被赋值为 a2的地址, a2 y被赋予 a3的地址, a3 y被赋予 a0的地址。这就形成了一个单向的循环链表,每个元素的指针成 员都指向下一个元素的地址。在主函数中,通过一个 for。循环语句,输出该链表前 2个节点数值成员的值,即 a0 x和 a1 x。 【知识模块】 C语言程序设计 30 【正确答案】 B 【试题解析】 本题考查在结构体中函数的实参和形参的传递,调用 f(c)后,实参传向形参,进行 f()函数功能的实现,但程序中没有返回语句,故形参不能将值传回实参,它们值的传递具有不可逆性,所与 printf输出的还是 c中实参的值。 【知识模块】 C语言程序设计

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

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

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