admin 管理员组

文章数量: 887021


2023年12月16日发(作者:placeholder使用方法)

全国计算机等级考试2019年二级C语言程序设计模拟试题3

(总分100, 做题时间120分钟)

选择题

(每题 1 分, 共 40 分)

1.

下列叙述中正确的是( )。

SSS_SINGLE_SEL

A

栈与队列都只能顺序存储

B

循环队列是队列的顺序存储结构

C

循环链表是循环队列的链式存储结构

D

栈是顺序存储结构而队列是链式存储结构

分值: 1

答案:B

栈是所有的插入与删除都限定在表的同一端进行的线性表; 队列是指允许在一端进行插入, 而在另一端进行删除的线性表, 二者均即可以顺序存储也可以链式存储。 为了充分地利用数组的存储空间, 把数组的前端和后端连接起来, 形成一个环形的表, 称为循环队列, 因此循环队列是队列的一种顺序存储结构。

2.

算法空间复杂度的度量方法是( )。

SSS_SINGLE_SEL

A

算法程序的长度

B

算法所处理的数据量

C

执行算法所需要的工作单元

D

执行算法所需要的存储空间

分值: 1

答案:D

算法的空间复杂度是指执行这个算法所需要的存储空间, 包括: ①输入数据所占的存储空间; ②程序本身所占的存储空间; ③算法执行过程中所需要的额外空间。

3.

设有栈 S 和队列 Q, 初始状态均为空。 首先依次将 A, B, C, D, E, F

入栈, 然后从栈中退出三个元素依次入队, 再将 X, Y, Z 入栈后, 将栈中所有元素退出并依次入队, 最后将队列中所有元素退出, 则退队元素的顺序为( )。

SSS_SINGLE_SEL

A

DEFXYZABC

B

FEDZYXCBA

C

FEDXYZCBA

D

DEFZYXABC

分值: 1

答案:B

栈是一种特殊的线性表, 它所有的插入与删除都限定在表的同一端进行。 队列是指允许在一端进行插入, 而在另一端进行删除的线性表。 将 A, B,

C, D, E, F 入栈后, 栈中元素为 ABCDEF, 退出三个元素入队, 队列元素为 FED, 将 X, Y, Z 入栈后栈中元素为 ABCXYZ, 全部入队后, 队列元素为 FEDZYXCBA。

4.

某二叉树的前序序列为 ABCDEFG, 中序序列为 DCBAEFG, 则该二叉树的后序序列为( )。

SSS_SINGLE_SELA

EFGDCBA

B

DCBEFGA

C

BCDGFEA

D

DCBGFEA

分值: 1

答案:D

二叉树遍历可以分为 3 种: ①前序遍历, 访问根节点在访问左子树和访问右子树之前; ②中序遍历,访问根节点在访问左子树和访问右子树两者之间;

③后序遍历, 访问根节点在访问左子树和访问右子树之后。 二叉树的前序序列为 ABCDEFG, A 为根节点。 中序序列为 DCBAEFG, 可知 DCB 为左子树节点, EFG 为右子树节点。 同理 B 为 C 父节点, C 为 D 父节点, 且 CD 均为 B 的同侧子树节点。 同理 E 为 F 根节点, F 为 G 根节点,且 FG 为 E

同侧子树节点。 二叉树的后序序列为 DCBGFEA。

5.

软件生命周期是指( )。

SSS_SINGLE_SEL

A

软件产品从提出、 实现、 使用、 维护到停止使用、 退役的过程

B

软件的需求分析、 设计与实现

C

软件的开发与管理

D

软件的实现和维护

分值: 1

答案:A

通常把软件产品从提出、 实现、 使用、 维护到停止使用、 退役的过程称为软件生命周期。

6.

通常软件测试实施的步骤是( )。

SSS_SINGLE_SEL

A

集成测试、 单元测试、 确认测试

B

单元测试、 集成测试、 确认测试

C

确认测试、 集成测试、 单元测试

D

单元测试、 确认测试、 集成测试

分值: 1

答案:B

软件测试的实施过程主要有 4 个步骤: 单元测试、 集成测试、 确认测试(验收测试) 和系统测试。

7.

下面不属于对象主要特征的是( )。

SSS_SINGLE_SEL

A

唯一性

B

多态性

C

可复用性

D

封装性

分值: 1

答案:C

对象的基本特点主要有: ①标识唯一性, 一个对象通常可由对象名、 属性和操作三部分组成; ②分类性, 指可以将具有相同属性和操作的对象抽象成类; ③多态性, 指同一个操作可以是不同对象的行为, 不同对象执行同一操作产生不同的结果; ④封装性, 从外面看只能看到对象的外部特性, 对象的内部对外是不可见的;⑤模块独立性好, 由于完成对象功能所需的元素都被封装在对象内部, 所以模块独立性好。

8.

在数据库设计中, 描述数据间内在语义联系得到 E—R 图的过程属于( )。

SSS_SINGLE_SEL

A

逻辑设计阶段

B

需求分析阶段

C

概念设计阶段

D

物理设计阶段

分值: 1

答案:C

数据库设计主要有需求分析、 概念设计、 逻辑设计和物理设计四个阶段。 概念设计最常用的方法是E—R 方法, 它采用 E—R 模型, 将现实世界的信息结构统一由实体、 属性以及实体之间的联系来描述。

9.

在数据库系统中, 用于对客观世界中复杂事物的结构及它们之间的联系进行描述的是( )。

SSS_SINGLE_SEL

A

概念数据模型

B

逻辑数据模型

C

物理数据模型

D

关系数据模型

分值: 1

答案:C

数据模型按照不同的应用层次分为: ①概念数据模型, 着重于对客观世界复杂事物的描述及对它们内在联系的刻画; ②逻辑数据模型, 是面向数据库系统的模型, 着重于在数据库系统一级的实现; ③物理数据模型, 是面向计算机物理实现的模型, 此模型给出了数据模型在计算机上物理结构的表示。

10.

有三个关系 R、 S 和 T 如下:

则由关系 R 和 S 得到关系 T 的操作是( )。

SSS_SINGLE_SEL

A

B

投影

C

D

选择

分值: 1

答案:A

用于查询的 3 个操作无法用传统的集合运算表示, 引入的运算为投影运算、

选择运算、 笛卡尔积。常用的扩充运算有交、 除、 连接及自然连接等。 A

项, 并: R∪ S 是将 S 中的记录追加到 R 后面, 与题目中结果相符。

11.

结构化程序由顺序、 选择、 循环三种基本结构组成, 以下相关叙述错误的是( )。

SSS_SINGLE_SEL

A

三种基本结构不可以嵌套使用

B

顺序结构是按语句在程序中的先后顺序逐条执行, 没有分支, 没有转移

C

选择结构是根据不同的条件执行不同分支中的语句

D

循环结构是根据条件决定是否重复、 重复执行多少次循环体语句

分值: 1

答案:A

三种结构可以嵌套使用, A 项错误。 结构化程序主要由 3 种基本控制结构组成, 顺序结构是最基本的算法结构, 当执行由这些语句构成的程序时, 将按这些语句在程序中的先后顺序逐条执行, 没有分支, 没有转移, 没有步骤之间的相互约束, 没有对某一步骤的多次使用, 完全按照步骤的原有次序依次执行, B 项正确; 选择结构根据不同的条件去执行不同分支中的语句, C 项正确; 循环结构就是根据各自的条件, 使同一组语句重复执行多次, D 项正确。

12.

在 C 语言中, 以下选项中不能正确表示 10×1000 之值的是( )。

SSS_SINGLE_SELA

1. 0E4. 0

B

1. E4

C

10E3

D

1. 0e4

分值: 1

答案:A

实型常量用带小数点的数字表示, 其值有两种表达形式, 分别为十进制小数形式和指数形式。 指数形式由十进制数加阶码标志“e” 或“E” 以及阶码(只能为整数, 可以带符号) 组成。 指数形式中阶码必须是整型常量, 而

A 项中 4. 0 是浮点数, 所以 A 项不能正确表示 10×1000 之值, BCD 三项都表示正确并且值为 10000。

13.

以下选项中, 合法的 C 语言常量是( )。

SSS_SINGLE_SEL

A

21. 84

B

‘CPP’

C

” \ 1. 0

D

2MB

分值: 1

答案:A

21. 84 是典型的浮点型数据, 故 A 选项正确; 字符常量是单引号括起来的一个字符, 字符串常量是双引号括起来的字符序列, BC 两项错误; C 语言常量不能直接用未加引号的字母、 数字组合, 故 D 项错误。

14.

有以下程序:

程序运行后的输出结果是( )。

SSS_SINGLE_SELA

10, 9

B

11, 10

C

010, 9

D

9, 10

分值: 1

答案:D

整型常量有 3 种表示方法, 分别是十进制数表示法、 八进制数表示法和十六进制数表示法, 八进制整常量以 O 作为前缀。 自增和自减运算符的两种用法: 前置运算, 运算符放在变量之前, 规则是先使变量的值增(或减) 1,

然后以变化后表达式的值参与其他运算; 后置运算, 运算符放在变量之后,

规则是变量先参与其他运算, 然后再使变量的值增(或减) 1。 x=010=8,

y=10, ++x 先自加后取值, 输出 9, y--先取值输出 10, 再自减 y=9。

15.

若有定义: int a; float b; double c; , 程序运行时输入: a=1,

b=2, c=3<回车>, 能把值 1 输入给变量a、 值 2 输入给变量 b、 值 3 输入给变量 C 的输入语句是( )。

SSS_SINGLE_SEL

A

scanf("a=%d,b=%f,c=%lf",&a,&b,&c);

B

scanf("%d%f%lf",&a,&b,&c);

C

scanf("a=% d,b=% lf,c=%lf",&a,&b,&c);

D

scanf("a=%d,b=% f,c=%f",&a,&b,&c);

分值: 1

答案:A

格式字符 d, 输入十进制整数; 格式字符 f, 输入浮点数; 格式字符 if,

输入双精度浮点数。 除了格式说明字符和附加格式字符外, 如果还有其他字符, 则在输入数据时要求按一一对应的位置原样输入这些字符。程序运行时输入: a=1, b=2, c=3, 则 scanf函数格式控制串对应的应该是“a=%d,

b: %f, c: %if” 。

16.

有如下程序:

程序运行后的输出结果是( )。

SSS_SINGLE_SELA

Ta=1, b=2

B

Fa=0, b=2

C

Fa=1, b=1

D

Ta=0, b=1

分值: 1

答案:C

题目中判断 if条件是否成立, a++先取值为 0, 则(a++&&b++) 为 0,

且不计算 b++, 而后 a 自增得 a=1, if条件不成立执行 else 函数体, 输出 F。 最后执行语句printf("a=%d, b=%d\ n", a, b); 按照格式输出 a=1, b=1。

17.

以下不是合法 C 语言转义字符的是( )。

SSS_SINGLE_SEL

A

' \ c'

B

' \ a'

C

' \ b'

D

' \ r'

分值: 1

答案:A

C 语言中, ‘a’ 表示响铃, ‘b’ 表示退格, ‘r’ 表示回车不换行。

18.

有以下程序:

程序运行后的输出结果是( )。

SSS_SINGLE_SEL

A

123

B

ABC

C

abc

D

012

分值: 1

答案:A

当满足 ch<' E' , 输出 ch-' A' , 即字符在 ASCII 码相减进行输出, %d

表示输出十进制整数。 循环开始 ch=' B' , print(“%d” , ch-' A' )

=1。

19.

以下能够实现计算 5! 的程序段是( )。

SSS_SINGLE_SEL

A

int fac=l,k=1;

d{k++;fac*=k;} while(k <5);

B

int fac=0,k=1;

do(fac*=k;k++;)while(k<5);

C

int fac=1,k=1;

do(k++;fac*=k;} while(k <=5);

D

int fac=1,k=0;

do(fac*=k;k++;} while(k < 5);

分值: 1

答案:A

do…while 循环语句一般形式为: do{循环体} while(表达式), 执行过程为: 首先执行循环体, 之后判断表达式, 成立(非 0) 则再一次执行循环体, 不成立(0) 则退出循环。 A 项, k=1, fac=1*1, 判断 k<5,条件成立进行下一次循环, 直到 k=5, fac=1*2*3*4*5, k<5 不成立退出循环, 实现计算 5!, 正确。 B 项, fae 从0 开始, 做乘法一直都是 0, 无法实现 5!, 错误。 C 项, k=2, fac=1*2, 循环条件成立, 直到 k=6,fac=1*2*3*4*5*6才因循环条件不成立退出循环, 实现 6!, 错误。 D 项:

k=0, fae=1*0=0, 之后做乘法一直为 0, 无法实现 5!, 错误。

20.

有以下程序:

程序运行后的输出结果是( )。

SSS_SINGLE_SELA

True

B

TrueFalse

C

False

D

TrueFalseTrue

分值: 1

答案:B

if(x=0x12) 此处是赋值语句“=” , 注意赋值操作符“=” 与相等操作符“= =” 的区别。

21.

有以下程序段: char c1, c2, c3; scanf("%c%c%c", &c1, &c2,

&c3); 若要给 c1、 c2、 c3 分别输入字母 A、 B、 C, 则以下对输入形式的描述正确的是( )。

SSS_SINGLE_SEL

A

字母 A、 B、 C 之问可以用空格分隔

B

字母 A、 B、 C 之间不能有分隔符

C

字母 A、 B、 C 之间可以用回车符分隔

D

字母 A、 B、 C 之间可以用 Tab 键分隔

分值: 1

答案:B

在使用 scanf 函数时要注意, 在用“%c” 格式输入字符时, 分隔符(空格符、 制表符(Tab 键)、回车符) 和转义字符都将作为有效字符进行输入。

题目中要求以字符形式输入三个数据, 空格、 回车符、 Tab 键均会被视为有效字符赋给对应变量, 所以字母 A、 B、 C 之间不能有分隔符。

22.

有以下程序:

程序运行后的输出结果是( )。

SSS_SINGLE_SEL

A

0

B

变量无定义, 输出不确定

C

-1

D

1

分值: 1

答案:A

A 项, 定义了一个临时指针, 实现两个指针地址的交换, 而传入了参数是二个指针的副本, 即 a、b 地址的副本, 故交换了副本地址, 对 a、 b 无影响。 B 项调用函数传入的是 i 与 j 地址, 函数体内交换是地址内元素, 临时变量为整型变量, 能实现 i 与 j 值交换; C 项调用函数传入的是 i 与 j

地址, 函数体内交换是地址内元素, 临时变量为整型指针, 且已正确开辟内存, 能实现 i 与 j 值交换; D 项与 B 项相同, 能实现 i 与 j 值交换。

23.

以下关于函数的叙述中正确的是( )。

SSS_SINGLE_SEL

A

函数调用必须传递实参

B

函数必须要有形参

C

函数必须要有返回值

D

函数形参的类型与返回值的类型无关

分值: 1

答案:D

函数参数有两种: 形式参数和实际参数, 前者函数定义时函数名后括号内是形参列表, 每个形参由类型和名称两部分组成; 后者函数调用时函数名后括号内是实参列表, 实参可以是常量、 变量或表达式。 函数如果没有形参也就

不必传递实参, A 项错误; 函数可以没有形参, B 项错误; 函数可以没有返回值, C 项错误; 函数形参的类型与返回值的类型无关, D 项正确。

24.

有以下程序:

程序运行后的输出结果是( )。

SSS_SINGLE_SEL

A

1, 12, 13, 4, 15,

B

10, 9, 8, 7, 6,

C

1, 7, 13, 9, 15,

D

10, 12, 8, 4, 6,

分值: 1

答案:A

fun() 函数功能是: 对数组中, 下标对 3 求余为 0 的元素减去 5, 下标对 3 求余不为 0 的元素累加5, 所以执行完 fun() 函数后, 数组 c 中元素值为 1, 12, 13, 4, 15。

25.

以下程序中给数组所有元素输入数据, 请从选项中选择正确的答案填入下划线处。( )

SSS_SINGLE_SEL

A

a+(i++)

B

&a[i+1]

C

a+i

D

&a(i++)

分值: 1

答案:A

A 项正确, a 为数组首地址, i++先取 i 值再加 1, scanf读入的数据依次存放在数组中; B 项错误,进入死循环, i-直为 0, 一直对 a[i+1]读入数据; C 项错误, 控制变量 i 没有依次加 1, 无法结束循环, 也无法对整个数组赋值, 输入的数全是 a[0]; D 项错误, 数组元素引用错误, 数组元素引用为[], 不是()。

26.

有以下程序:

程序的运行结果是( )。

SSS_SINGLE_SEL

A

5, 5, 5, 5, 5

B

3, 5, 5, 5, 5

C

5, 3, 3, 3, 5

D

3, 5, 3, 5, 5

分值: 1

答案:A

程序执行过程为: p 指向 i, q 指向 j, 调用函数 f, 将 i 与 j 地址传递给 s 与 t, 判断 i 是否小于 j,成立则将 j=5 赋值给 i, 则 i=5, 返回指向 i 的指针并赋给 r, 则 r 指向 i, 最后输出 5, 5, 5, 5, 5。

27.

有如下程序:

程序运行后的输出结果是( )。

SSS_SINGLE_SELA

8

B

9

C

7

D

10

分值: 1

答案:A

strlen 是求字符串长度的函数, “0tnA0111” 是一个长度为 8 的字符串, 其中t、 n、 1 均为转义字符常量, 但是长度也是 1, 因此输出结果是 8。

28.

若有定义: char*ps[] ={“aa” , “bb” , “cc” , “dd” } ; ,

则以下叙述正确的是( )。

SSS_SINGLE_SEL

A

*ps[0]是字符‘a’

B

*ps[0]是字符串“aa”

C

ps[0]是字符‘a’

D

ps 是字符串” aa”

分值: 1

答案:A

指针数组 ps[ ]定义后, ps[0]代表数组首个元素的地址, 即“aa” 的地址, 同时也是“aa” 第一个字符 a 的地址, 所以* ps[0]代表字符 a。

29.

以下涉及字符串数组、 字符指针的程序段, 不会产生编译错误的是( )。

SSS_SINGLE_SEL

A

char*str, name[10]; str="Hello World";

B

char*str, name[10]; name="Hello World";

C

char str1[10]="prog. c", str2[10]; str2=str1;

D

char head_line[] ; head_line="== == == == == == =";

分值: 1

答案:A

将字符指针变量初始化为一个字符串有两种方式, 一种通过赋值运算使一个字符指针指向一个字符串常量: char*str; str="Hello World", A 项正确。

另一种是定义一个字符指针变量, 并且初始化为一个字符串的首地址:

char*str="Hello World"。 字符指针变量与字符数组都可以用来实现字符串的存储和运算, 但二者是有区别的: ①数组名是一个地址常量, 而字符指针变量是一个变量, 所以不能给一个数组名赋值, 如 name="Hello world"错误,

B 项错误; ②字符型的指针变量的值是可以改变的; ③字符指针变量和字符数组在内存中的存储情形不同, 数组指的是按照数组长度分配的若干存储空间, 而指针只是一个存储字符串首地址的存储空间, 所以相同类型指针可以相互赋值, 而数组不能直接用“=” 赋值, C 项错误。 数组不可以直接赋值字符串. Head_line="==== == == == ="不合法, 只有在数组初始化时可以直接赋值, 如 char head_line[] ="==== == == == == =” 合法,并且定义数组时必须指定数组长度, char head_line[]不合法, D 项错误。

30.

有如下程序:

程序运行时, 输入 ABCD<回车>, 则输出结果是( )。

SSS_SINGLE_SEL

A

DCDC

B

DCBA

C

BABA

D

ABCD

分值: 1

答案:B

本题考查了函数的递归调用, 进入 get_put 函数后, 字符变量 ch 每次保存读进来的字符, 如果不是换行符, 则继续读取下一个字符常量, 当 ch 保存完‘D’ 后, 下一次读取不满足 if 条件, 函数进行输出, 依次输出‘D’ , ‘C’ , ‘B’ , ‘A’ 。

31.

若有以下程序段:

则以下错误引用字符串的选项是(其中 0≤k<4)( )。

SSS_SINGLE_SEL

A

*strp

B

str[k]

C

strp[k]

D

strp

分值: 1

答案:A

字符串常量是用一对双引号括起来的零个或多个字符的序列。 在存储字符串常量时, 由系统在字符串的末尾自动加一个“\ 0” 作为字符串的结束标志。

strcpy 函数将“China” 复制给字符数组 s, 其在数组位置内存存储情况为“China\ 0g\ O” 。 strlen 函数统计字符串长度时, 遇到“\ 0” 结束, s 数组长度为 5。

32.

有以下程序:

则以下叙述正确的是( )。

SSS_SINGLE_SEL

A

在 main 函数中声明了 findmax 函数

B

在 main 函数中定义了 findmax 函数

C

在 main 函数中两次调用了 findmax 函数

D

在 main 函数内、 外重复定义了 findmax 函数

分值: 1

答案:A

题目中函数 findmax 定义放在了函数之后, 所以主函数中声明了 findma 函数。 Int findmax(int, int,int); 为函数声明, m=findmax(a, b,

c); 为函数调用, int findmax(int x, int y, int z) {} 为函数定义, 因此A 项正确。

33.

有如下程序:

程序运行后的输出结果是( )。

SSS_SINGLE_SEL

A

15

B

10

C

8

D

1

分值: 1

答案:A

程序执行过程为: 定义字符数组 array, 调用函数 sum 将数组首地址与 4

传入函数 len=4; len>0 递归调用 sum(array+1, 3) 传入地址为数组第二个元素地址; len>0 递归调用 sum(array+1, 2) 传入地址为数组第三个元素地址; len>0 递归调用 sum(array+1, 1)传入地址为数组第四个元素地址; len>0 递归调用 sum(array+1,0) 传入地址为数组第五个元素地址,

此时 len=0, 返回 5; 执行 sum(array+1, 1) 余下语句, 返回 9; 执行 sum(array+1, 2) 余下语句, 返回 12; 执行sum(array+1, 3) 余下语句, 返回 14; 执行 sum(array+1, 4) 余下语句, 返回 15, 并输出。

34.

若有定义: type defint$T: T a[20] ;

则以下与上述定义中 a 类型完全相同的是( )。

SSS_SINGLE_SEL

A

int*a[20];

B

int(*a) [20] ;

C

int a[20];

D

int**a[20];

分值: 1

答案:A

“typedef类型名新类型名” 表示为一个已定义的类型标识符重新定义一个新类型名, 题中 A 项代表的意思是数组指针, 即指向数组的指针, B 项是指针数组, 即数组存放的元素是整型指针, 首先为整型指针类型命名为 T, 再通过 T 定义了一个整型指针数组*a[20], 等价于 int*a[20] 。

35.

有以下程序:

程序的运行结果是( )。

SSS_SINGLE_SEL

A

aa

B

ma

C

am

D

mm

分值: 1

答案:A

malloc 函数的原型为: malloc(size); , 函数的作用是在内存的动态存储区分配一个长度为 size 的连续空间。 程序执行过程为: 定义两个字符类型指针 p1 和 p2, 动态开辟 10 个字符类型的内存单元, 并且使指针 p1 与

p2 均指向这 10 个内存单元的第一个单元。 调用 strcpy 函数, 将字符串“malloc” 赋值给这 10 个内存单元的前 7 个单元, 存储情况为: malloc\ 0, 此时 p1 指向 10 个内存单元的第一个单元。 再次调用 strcpy 函数,这 10 个内存单元的第 2 个单元到第 7 个单元元素重新赋值给 p2 指向的内存单元以及以后的 5 个单元, 存储情况为: alloc\ 0\ 0, 此时 p1

和 p2 均指向 10 个内存单元的第一个单元。 输出两个指针指向单元的数据值, 结果为:aa。

36.

有如下定义:

以下对内嵌结构体成员的引用形式错误的是( )。

SSS_SINGLE_SEL

A

ps->birth. y

B

s. birth. y

C

ps. birth. y

D

(+ps). birth-y

分值: 1

答案:C

使用结构体指针对结构体成员进行访问时, 形式为结构指针名->结构成员名,

或者(*结构指针名). 结构成员名, 题目中 ps 为结构体指针, 因此判断

A 项引用形式错误, 答案为 C。

37.

有以下程序:

程序运行后的输出结果是( )。

SSS_SINGLE_SELA

8

B

9

C

5

D

6

分值: 1

答案:A

带参数的宏的调用格式: 宏名(实参表), 替换过程是, 用宏调用提供的实参字符串, 直接置换宏定义命令行中相应形参字符串, 非形参字符保持不变。 MUN 被置换成(2+1+1) ×2+1/ 2; 程序的运行结果是 6。

38.

有如下程序:

程序运行后的输出结果是( )。

SSS_SINGLE_SEL

A

min=1, max=9

B

min=0, max=9

C

min=1, max=4

D

min=0, max=4

分值: 1

答案:B

在对数组进行初始化时, 如果在说明数组时给出了长度, 但没有给所有的元素赋予初始值, 而只依次给前面的几个数组元素赋予初值, 那么 c 语言将自动对余下的元素赋初值 0, 则 array[5]={9, 1, 3, 4, 0} 。程序的执行过程为: 调用函数 get_min_max(array, 5), 将数组 array 首地址传入函数, 定义结构体变量 res, 并为其成员赋值。 for 循环查找数组 array

数组的最小值 0, 将其赋值给 res 的成员 first, 查找数组最大值 9, 赋值给res 的成员 second。 最后返回结构体变量 res, 则min_max=res。 输出 min_max. first=0, min_max. second=9, 故B 选项正确。

39.

有以下程序:

程序的运行结果是( )。

SSS_SINGLE_SEL

A

5, 1

B

1, 1

C

18, 1

D

13, 1

分值: 1

答案:A

“&” 按位与运算, 13=11018, 5=1018, 执行语句 c=13&5; 结果为

101B=5, 即 c=5。 “&&” 逻辑与运算, 10 与 5 均为真, 结果为真, 即

d=1。

40.

有以下程序段:

若文件 test. txt 已存在, 则以下叙述正确的是( )。

SSS_SINGLE_SEL

A

程序运行后, 文件 test. txt 中的原有内容将全部消失

B

程序运行时, 会因文件存在而出错

C

对文件 test. txt 进行写操作后, 可以随机进行读取

D

对文件 test. txt 写入的内容总是被添加到文件尾部

分值: 1

答案:A

fopen 函数以一定方式打开指定文件, 返回一个指向文件的文件指针, 如果不能实现打开指定文件的操作, 则返回一个空指针 NULL。 如果指定文件不存在, 则创建一个文件名为指定文件名的新文件, 然后打开它。 在指定文件有错误或者指定文件不存在却不能创建新文件的情况下, 打开文件操作错误,

返回空指针。 本题程序中, 文件 test. txt 已存在, 程序运行后, 文件

test. txt 中的原有内容将全部消失, A 项正确。

程序填空题

41.

给定程序中, 函数 fun 的功能是: 调用随机函数产生 20 个互不相同的整数放在形参 a 所指数组中(此数组在主函数中已置 0)。

请在程序的下画线处填入正确的内容并把下画线删除, 使程序得出正确的结果。

注意: 部分源程序在文件 BLANK1. C 中。 不得增行或删行, 也不得更改程序的结构!

试题程序:

SSS_TEXT_QUSTI 分值: 18

答案:

【1】 N 或 20

【2】 break

【3】 n

第一空:变量 n 用于存储数组的下标, 要通过 while 语句对数组进行赋值,

数组的容量为 20, 因此循环条件应为 n<20 或 n

第二空:通过一个 for 循环判断 x 是否与数组中已存的元素重复, 若重复则跳出 for 循环结束。

第三空:若 for 循环是由 break 语句结束的, 则 x 与数组中的元素重复,

此时 i 必然小于 n; 若 for 循环是因为循环变量 i 递增到某值, 而不再满足循环条件结束的, 说明 x 的值与数组中的元素不重复, 则此时 i 的值等于n。

程序修改题

42.

下列给定程序中, 函数 fun 的功能是: 实现两个整数的交换。 例如, 给 a

和 b 分别输入 60 和 65, 输出为:a=65 b=60。

请改正程序中的错误, 使它能得出正确的结果。

注意: 不要改动 main 函数, 不得增行或删行, 也不得更改程序的结构。

试题程序:

SSS_TEXT_QUSTI

分值: 18

答案:

(1) void//fun(int*a, int*b)

(2) t=*b; *b=*a; *a=t;

第一问:采用一般变量作参数, 不能改变实参的值; 采用指针变量作为参数, 则能够改变实参的值。 主函数中 fun 的调用方式说明 fun 函数的参数应当为指针类型。

第二问:a 和 b 都是指针变量, 进行变量交换时不能直接引用, 应加上“*” 号。

程序设计题

43.

编写函数 fun, 它的功能是: 求小于形参 n 同时能被 3 与 7 整除的所有自然数之和的平方根, 并作为函数值返回。 例如, 若 n 为 1000 时, 程序输出应为: s=153. 909064。注意: 部分源程序在文件 PROG1. C 中。

请勿改动主函数 main 和其他函数中的任何内容, 仅在函数 fun 的花括号中

填入你编写的若干语句。

试题程序:

SSS_TEXT_QUSTI 分值: 24

答案:

1


本文标签: 数组 函数 字符 指针 元素