1、国家二级( C语言)笔试模拟试卷 57及答案与解析 1 数据结构作为计算机的一门学科,主要研究数据的逻辑结构、对各种数据结构进行的运算,以及 ( A)数据的存储结构 ( B)计算方法 ( C)数据映象 ( D)逻辑存储 2 串的长度是 ( A)串中不同字符的个数 ( B)串中不同字母的个数 ( C)串中所含字符的个数且字符个数大于零 ( D)串中所含字符的个数 3 在计算机中,算法是指 ( A)加工方法 ( B)解题方案的准确而完整的描述 ( C)排序方法 ( D)查询方法 4 以下不属于对象的 基本特点的是 ( A)分类性 ( B)多态性 ( C)继承性 ( D)封装性 5 开发软件所需高成
2、本和产品的低质量之间有着尖锐的矛盾,这种现象称做 ( A)软件投机 ( B)软件危机 ( C)软件工程 ( D)软件产生 6 下面不属于软件设计原则的是 ( A)抽象 ( B)模块化 ( C)自底向上 ( D)信息隐蔽 7 开发大型软件时,产生困难的根本原因是 ( A)大系统的复杂性 ( B)人员知识不足 ( C)客观世界千变万化 ( D)时间紧、任务重 8 下列 SQL语句中,用于修改表结构的是 ( A) ALTER ( B) CREATE ( C) UPDATE ( D) INSERT 9 数据库、数据库系统和数据库管理系统之间的关系是 ( A)数据库包括数据库系统和数据库管理系统 ( B
3、)数据库系统包括数据库和数据库管理系统 ( C)数据库管理系统包括数据库和数据库系统 ( D) 3者没有明显的包含关系 10 关系模型允许定义 3类数据约束,下列不属于数据约束的是 ( A)实体完整性约束 ( B)参照完整性约束 ( C)属性完整性约束 ( D)用户自定义的完整性约束 11 以下程序的功能是:给 r输入数据后计算半径为 r的圆面积 s。程序在编译时出错。 main() /*Beginning*/ int r; float s; scanf(“%d“, ,正确的说明语句形式为【 】。 59 下面程序的输出结果是【 】。 #define MAX 3 int aMAX; main()
4、 fun1(); un2(A) ; printf(“n“); funl() int k, t 0; for(k 0; k MAX; k+, t+)ak t+t; fun2(int b) int k; for(k 0; k MAX; k+)printf(“%d“, *(b+k); 60 执行以下程序时,若输入 end回车,则输出结果是【 】。 main() char ch10 “Begin“; gets(&ch1); puts(ch); 61 下面程序是计算 100以内能被 4整除且个位数为 4的所有整数,请填空。 main() int m, n; for(m 0;【 】; m+) n m*10
5、+4; If(【 】 )continue; printf(“%dn“, n); 62 以下函数把 b字符串连接到 a字符串的后面,并返回 a中新字符串的长度。请填空。 strcen(char a, char b) int num 0, n 0; while(*(a+num)!=【 】 )num+; while(bn)*(a+num) bn; num+;【 】; return(num); 63 下面函数用来求两个单精度数之和,并通过形参将结果传回,请填空。 Void sub(float x, noat y,【 】 z) 【 】 x+y; 64 以下程序从终端输入一行字符放在 s数组中,输入以回车
6、符作为结束,函数 fun统计存放在 s数组中每个数字字符的个数。形参 ch指向 s数组,形参 n给出了 s数组中字符的个数。在 acc数组中用下标为 0的元素统计字符 “0”的个数,下标为 1的元素统计字符 “1”的个数, 。请填空。 #include stdio h void fun(int *, char*, int); main() char s80, c; int acc10, i 0; printf(“Enter characters: n“); while(c getchar()! n)s【 】 c; fun(【 】 ); for(i=0; i 10; i+)printf(“%c:
7、%dn“, 0+i, acci); printf(“nn“); void fun(int *a, char *ch, int n) int i, d; for(i=0; i 10; i+)ai=【 】; for(i=0; i n; i+) d【 】; ad+; 国家二级( C语言)笔试模拟试卷 57答案与解析 1 【正确答案】 A 【试题解析】 数据结构是研究数据元素及其之间的相互关系和数据运算的一门学科,它包含 3个方面的内容,即数据的逻辑结构、存储结构和数据的运算。 2 【正确答案】 D 【试题解析】 串的长度 指的是串中的字符的个数,且其字符个数可以为零。 3 【正确答案】 B 【试题解
8、析】 计算机算法是指解题方案的准确而完整的描述,它有以下几个基本特征:可行性、确定性、有穷性和拥有足够的情报。 4 【正确答案】 C 【试题解析】 对象有如下一些基本特点,即标识惟一性、分类性、多态性、封装性和模块独立性。 5 【正确答案】 B 【试题解析】 软件工程概念的出现源自软件危机。所谓软件危机是泛指在计算机软件的开发和维护过程中所遇到的一系列严重问题。总之,可以将软件危机归结为成本、质量、生 产率等问题。 6 【正确答案】 C 【试题解析】 软件设计遵循软件工程的基本目标和原则,建立了适用于在软件设计中应该遵循的基本原理和与软件设计有关的概念,它们是抽象、模块化、信息隐蔽和数据独立性
9、。自底向上是集成测试中增量测试的一种。 7 【正确答案】 A 【试题解析】 软件的显著特点是规模庞大,复杂度超线性增长,在开发大型软件时,要保证高质量,极端复杂困难,不仅涉及技术问题,更重要的是必须要有严格而科学的管理。 8 【正确答案】 A 【试题解析】 SQL语句中凡创建都用 CREATE,删除都用 DROP,改变用ALTER,再跟类型和名字,附加子句。 9 【正确答案】 B 【试题解析】 数据库系统 (Database System,简称 DBS)包括数据库 (Database,简称 DB)和数据库管理系统 (Database Management System,简称 DBMS)。 10
10、 【正确答案】 C 【试题解析】 关系模型允许定义 3类数据约束,它们是实体完整性约束、参照完整性约束及用户自定义完整性约束。其中前两种完整性约束由关系数据库系统支持,对于用户自定义完整性约束,则由 关系数据库系统提供完整性约束语言,用户利用该语言给出约束条件,运行时由系统自动检查。 11 【正确答案】 D 【试题解析】 计算圆面积的赋值语句中使用了非法变量 。所以,答案为选项D)。注意:注释语句可以出现在程序中的任意位置,故选项 A)中的描述错误;圆的半径可以是整型,也可以是实型,定义成哪种类型都不算错,故选项 B)中的描述错误;显而易见,选项 D)中的描述也错误。 12 【正确答案】 D
11、【试题解析】 用户标识符与关键字相同时,程序在编译过程中将给出出错信息。注意:选项 D)应该改为用户 标识符与关键字相同,程序在编译时将给出出错信息。注意:合法的标识符第一个字符必须为字母或下划线。 13 【正确答案】 A 【试题解析】 整型数据一般占 2个字节,其取值范围是: -32768 +32767,而选项 A)超过了整数的取值范围。注意:实型常数的表示方法。 14 【正确答案】 C 【试题解析】 指针变量 m和 z分别指向整型变量 y和 i,所以这两个指针变量中存储的地址是不同的。变量 x接受的是一个关系运算的结果,因为两个地址是不同的,所以 “z=y”的判断结果为 0。注意: C语言
12、中,逻辑值的表示 方法。 15 【正确答案】 B 【试题解析】 本题经过定义语句和赋值后, p表示的是变量 a的地址, *p表示的是变量 a的值。注意:变量地址的表示方法。 16 【正确答案】 B 【试题解析】 break语句可以用在 switch和循环语句中,作用是跳出 switch或循环结构,但并不要求 switch结构和循环结构中必须有 break语句,所以选项 B)的说法是正确的。注意: break、 continue语句在循环语句中的使用。 17 【正确答案】 D 【试题解析】 scanf函数要求格式控 制串中的非格式控制字符,在输入数据时必须按照格式控制的要求来输入。本题中格式控制
13、串中在各个输入数据格式之间没用任何分隔符号,所以从键盘输入数据时,不应该有 “, ”等分隔符,所以选项 D)错误。注意:选项 A)、 B)、 C)都能正确的输入。 18 【正确答案】 C 【试题解析】 本题中,程序先执行语句 x=1.2;,根据赋值运算的类型转换规则,先将 double型的常量 1.2转换为 int型,即取整为 1,然后将 1赋值给变量x。接下来执行语句 y=(x+3.8)/5.0;根据运算符的优先级,先计算小括号内,再计算除法 ,最后执行赋值运算。小括号内的运算过程:先将整型变量 x的值 1转换为 double型 1.0,然后与 3.8进行加法运算,得到中间结果 4.8。接着
14、进行除法运算 4.8/5.0,其结果小于 1.0,这里没有必要计算出精确值,因为接着进行赋值运算,赋值号左边的变量 y的类型为整型,于是对这个小于 1.0的中间结果进行取整,结果为 0,于是变量 y的值为 0, d *y的值也为 0。注意:格式输出语句printf的使用。 19 【正确答案】 D 【试题解析】 字符型数据在计算机内部是以 ASCII码存储的,英文大写字母和小写字 母在 ASCII码表中都是连续的。大写字母 A到 Z是从 65到 90,所以只要变量 c1大于 A并且小于 Z就能保证其为大写字母。注意:逻辑运算符的功能与作用。 20 【正确答案】 D 【试题解析】 本题考查 if语
15、句中的一种表达方式,即: ifelse if 。 该表达式的语句是: if(表达式 1) 语句 1 else if(表达式 2) 语句 2 else if(表达式 3) 语句 3 else 语句 4 本题执行 else y=1.0,并且以 “%f”输出。注意:条件表达式在 if语句中的使用。 21 【正确答案】 A 【试题解析】 在 C程序中,判断逻辑值时,用非 0表示真,用 0表示假。逻辑表达式计算时,逻辑表达式值为真是用 1表示的,若逻辑表达式的值为假,则用 0表示。 22 【正确答案】 B 【试题解析】 条件运算符要求有 3个操作对象,称三目 (元 )运算符,它是 C语言中惟一的一个三目
16、运算符。条件表达式的一般形式为:表达式 17表达式 2:表达式 3其求解顺序是:先求解表达式 1,若为非 O(真 )则求解表达式 2,此时表达式2的值 就作为整个条件表达式的值。若表达式 1的值为 0(假 ),则求解表达式 3,表达式 3的值就是整个条件表达式的值。并且注意 +、 -的用法。 23 【正确答案】 B 【试题解析】 本题中, “!”表示逻辑非运算符, “!=”表示不等于运算符,逻辑非运算符比不等于运算符的优先级高。 24 【正确答案】 A 【试题解析】 本题考查用 strlen函数计算字符串长度的方法。该字符串中包含的字符是: t(跳格符 )、 “(双引号 )、 065(ASCI
17、I值为八进制 065,也即 +进制为51的字符 )、 xff(ASCII值为 +六进制 ff,也即 +进制为 255的字符 )、 n(换行符 )。 25 【正确答案】 B 【试题解析】 在一维数组中要注意的是作为下标表达式的常量表达式的值必须是大于等于 0,选项 B)中定义有 5个元素,但赋初值时有 6个元素,所以是错误的。 26 【正确答案】 D 【试题解析】 char为字符类型而不是字符串类型,所以,选项 A)和 C)错误。函数 fun没有返回值,所以选项 B)也错误。 27 【正确答案】 C 【试题解析】 选项 A)char*a; *a=“China”应改为 a=china;,选项 B)
18、应该是char str6; D)项表述方法有错误。 28 【正确答案】 D 【试题解析】 通常,引用一个数组元素可以用下标法,如 ap-a)形式,或指针法,如, (&ai)的形式。本题中 a9=9, a10显然超出了数组范围,注意,数组的下标是从 0开始的。 29 【正确答案】 B 【试题解析】 本题中, a12是二维数组中的第 6个元素,对应 for循环中 i的值为 5, p5=5+1。 30 【正确答案】 B 【试题解析】 本题考 查二维数组的定义方式。第一维的大小由以下方法判断: 当初值的个数能被第二维的常量表达式的值除尽时,所得商数就是第一维的大小; 2)当初值的个数不能被第二维的常量
19、表达式的值除尽时,则第一维的划、:所得的商数 +1。 31 【正确答案】 A 【试题解析】 在 main函数中,调用 revere函数将 b数组中的前 8个成员进行互置,执行完毕后, b数组中的成员为 8, 7, 6, 5, 4, 3, 2, 1, 9, 10,然后再执行 for循环结构,将 b6, b7b9 的值相加,结果为 22。 32 【正确答案】 A 【试题解析】 数组 a55, 0 =i 5, 0 =j 5,则可以用 5种表达式来引用,aij, *a(ai+ j), *(*(a+i)+j), (*(a+i)j, *(&a00 +5*i+j)。数组的下限为0, %后面为小写的 x,所以
20、输出的结果为小写字母表示的十六进制。 33 【正确答案】 A 【试题解析】 本题题意要求删除所有空格,即除了空格以外的其他所有字符都要留下。由于 C语言中没有直接删除字符的操作,所以我们对于删除字符的操作都是采用 “留下 ”字符的算法,以前的题目亦是 如此。用 stri从串头到串尾逐一走动,每走到一个字符都判断其是否为空格,若不是空格 (注意在 if()的单引号之间有一个空格 ),则将其保存 strj中。注意 j的下标变化、初值及最后加串结束符0。 34 【正确答案】 B 【试题解析】 在 C语言的数组元素的引用方法,我们在前面已经讲过了,比如数组元素 a0,可以用表达式 *(p+0),即 *
21、p来引用,对于数组元素 a 1,可以用表达式 *(p+1)来引用,在这里, p+1的值就是数组元素 a1的地址,对此地址使用“间接访问运算符 ”: *(p+1)就代表存储单元 a1,注意:一对圆括号不可少。同样,对于数组元素 a2,则可以用表达式。 (p+2)来引用 ,对于数组元素 a9,可以用表达式, (p+9)来引用。因此,当指针变量 p指向 a数组的起始地址时,若0i 10,则数组元素 ai可以用 *(p+i)来表示。 35 【正确答案】 B 【试题解析】 该题考查函数的宏定义及三目运算符。其中表达式 10, MIN(i, j)利用宏展开后为: 10 * j?i: j,即 100 15?
22、 10: 15,其值为 15,然后赋值给 k。 36 【正确答案】 B 【试题解析】 本题考查两个位运算符。 按位异或运算符 “”是双目运算符。其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为 1。 左移运算符 “ ”是双目运算符。其功能把 “ ”左边的运算数的各二进位全部左移若干位,由 “ ”右边的数指定移动的位数,高位丢弃,低位补 0。并且 “ ”运算符的优先级高干 “”。 37 【正确答案】 D 【试题解析】 C语言中 +运算符的对象可以是整型、实型和字符型,但不可是常量,本题中 D为常量。 38 【正确答案】 D 【试题解析】 选项 A),共用体的每个成员的起
23、始地址都相同;选项 B),共用体变量所占的内存长度等于最长的成员的长度;选项 C)因为每个成员的起始地址相同,所以整型数 5以浮点型输出时为 5.000000;选项 D)C语言规定,不能把共用体变量作为函数的参数。 39 【正确答案】 C 【试题解析】 a数组存放的是字符串,系统会自动在字符串的最后加上一个 0,所以 a数组的长度为 4,而 b数组的长度为 3,故 a数组长度大于 b数组长度。 40 【正确答案】 B 【试题解析】 本题中, typedef声明新的 类型名 PER来代替已有的类型名, PER代表上面指定的一个结构体类型,此时,也可以用 PER来定义变量。 41 【正确答案】 A
24、 【试题解析】 只能在循环体内和 switch语句体内使用 break语句,当 break出现在循环体中的 switch语句体时,其作用是跳出该 switch语句体。当 break出现在循环体中,但不在 switch语句体中时,则在执行 break后,跳出本层循环体。continue语句的作用是,跳过本次循环体中余下尚未执行的语句,接着再一次进行循环的条件判定。 42 【正确答案】 D 【试题解析】 本题首先通过第一个 while循环计算字符串 a的长度,再通过第二个循环,将字符串 a和 b相连,最后返回连接后的总长度。 43 【正确答案】 C 【试题解析】 对于字符串指针,其保留的是整个串的
25、首地址,即为第一个字符的起始地址,当该指针做算术运算时,就是该指针根据其类型向后移动相应的存储空间。 44 【正确答案】 C 【试题解析】 考查对于第一维大小的决定规则的掌握情况。第一维大小的决定规则:当初值的个数能被第二维的常量表达式的值除尽时,所得商数就是第一维的大小。当初值 的个数不能被第二维的常量表达式的值除尽时,则第一维的大小;所得的商数 +1。数组元素的下标 (行列号 )是从零开始的。 45 【正确答案】 C 【试题解析】 本题中,格式符 0表示的是八进制无符号形式输出整型数 (不带前导 0),字符常量在内存中占一个字节,存放的是 ACSII码代码值。 C语言规定,所有字符常量都作
26、为整型量来处理,在计算机内部,其对应的整数值就是 ACSII字符集中该字符的序号,即 &*s中有几个字符就输出几个 *。 46 【正确答案】 D 【试题解析】 本题中, argc表示参数的个数,应为 3, argv是一个指向字符串的指针数组,指针数组 argv中的元素 argv0指向字符串 “PROG“,元素 argv1指向字符串 “ABCDEFGH”, argv2指向字符串 “IJKL”。在 while循环条件中,先进行自减运算,再执行相应的 printf语句。 47 【正确答案】 C 【试题解析】 成员 next中存放的是下一个结点的地址。 48 【正确答案】 B 【试题解析】 结构体类型
27、的变量在程序运行期间要做为一个整体占用连续的内存单元。 49 【正确答案】 D 【试题解析 】 用 fseek函数可以实现改变文件的位置指针,从而实现对文件的顺序和随机读写。 50 【正确答案】 C 【试题解析】 这是一道考查 fread函数的题。 buf是一个指针,对 fread来说,它是读入数据的存放地址。对 fwrite来说,是要输出数据的地址 (以上指的是起始地址 )。 51 【正确答案】 3 52 【正确答案】 软件危机的出现 53 【正确答案】 降低复杂性 54 【正确答案】 软件工具 55 【正确答案】 参照完整性 56 【正确答案】 x -6|x 6 57 【正确答案】 adf 58 【正确答案】 typedef int ArrInt410; 59 【正确答案】 24 60 【正确答案】 Bend 61 【正确答案】 m 10 n%4! 0 62 【正确答案】 0或 0或 NULL n+或 +n或 n n+1或 n+ 1 63 【正确答案】 float * z 64 【正确答案】 i+ acc, s, i 0 chi-0