1、国家二级( C语言)机试模拟试卷 138及答案与解析 一、选择题 1 在下列数据结构中,支持子程序调用的是 ( )。 ( A)循环队列 ( B)树 ( C)栈 ( D)二叉树 2 关于计算机栈和队列的叙述中正确的是 ( )。 ( A)栈是 “先进先出 ”的线性表 ( B)队列是 “先进后出 ”的线性表 ( C)循环队列是非线性结构 ( D)有序线性表既可以采用顺序存储结构,也可以采用链式存储结构 3 设二叉树中度为 2的节点有 8个,则叶子节点数是 ( )。 ( A) 10 ( B) 8 ( C) 6 ( D) 9 4 下列排序方法中,最坏情况下比较次数最少的是 ( )。 ( A)堆排序 (
2、B)简单选择排序 ( C)直接插入排序 ( D)冒泡排序 5 计算机软件通常分为应用软件、系统软件和支撑软件 (或工具软件 )。下面属于应用软件的是 ( )。 ( A)编译程序 ( B)操作系统 ( C)图书借阅系统 ( D)汇编程序 6 关于软件测试和调试的叙述中错误的是 ( )。 ( A)软件测试的目的是发现错误并改正错误 ( B)对被调试的程序进行 “错误定位 ”是程序调试的必要步骤 ( C)程序调试通常也称为 Debug ( D)软件测试应严格执行测试计划,排除测试的随意性 7 关于耦合性和内聚性的叙述中正确的是 ( )。 ( A)提高耦合性降低内聚性有利于提高模块的独立性 ( B)降
3、低耦合性提高内聚性有利于提高模块的独立性 ( C)耦合性是指一个模块内部各个元素间彼此结合的紧密程度 ( D)内聚性是指模块间互相连接的紧密程度 8 计算机数据库管理系统中的核心问题是 ( )。 ( A)数据库管理 ( B)数据库设计 ( C)数据库维护 ( D)数据库管理员培训 9 有两个关系 R、 S如下: 由关系 R通过运算得到关系 S,则所使用的运算为 ( )。 ( A)并 ( B)投影 ( C)插入 ( D)自然连接 10 软件设计过程中的 E一 R图转换为关系时,其中的实体和联系都可以表示为( )。 ( A)属性 ( B)键 ( C)关系 ( D)域 11 关于程序设计结构的叙述中
4、错误的是 ( )。 ( A)结构化程序设计提倡模块化的设计方法 ( B)结构化程序由顺序、分支、循环三种基本结构组成 ( C) C语言是一种结构化程序设计语言 ( D)使用三种基本结构构成的程序只能解决简单问题 12 以下四个程序中,完全正确的是 ( )。 ( A) #include main(); * programming pfintf(programming! n); ( B) #include main() *programming* pfintf(programming! n); ( C) #include main() * *programming* * pfintf(progra
5、mming! n); ( D) include main() *programming* pfintf(programming! n); 13 设 int x=5,则表达式 x一 =x+x的值为 ( )。 ( A) 0 ( B)一 10 ( C)一 5 ( D) 5 14 C程序中合法的用户标识符的是 ( )。 ( A) _0_ ( B) 1_a ( C) int ( D) unsigned 15 下列规格的数在 C语言源程序中不合法的是 ( )。 ( A)十进制 ( B)八进制 ( C)十六进制 ( D)二进制 16 有以下程序: #include main() intx=10, y=5;
6、printf( d, , y=x+y); printf( d n, x=2*y); 程序运行后的输出结果是 ( )。 ( A) 15, 30 ( B) 10, 30 ( C) 5, 10 ( D) 5, 15 17 有以下程序: #include main() int al, a2; char c1, c2; scanf( d c d c, &a1, &e1, &a2, &c2); printf( d, d, c, c, a1, a2, c1, c2); 若想通过键盘输入,使得输出结果是: 12, 34, a, b。则正确的输入格式是 (以下 代表空格, 代表回车 )( )。 ( A) 12
7、a34 b ( B) 12a34b ( C) 12, a, 34, b ( D) 12 a 34b 18 关于分支语句 if(E)printf( d n, k);中,不可以替代 E的表达式是 ( )。 ( A) a表示不等于,但在 C语言中没有这种表达方式,所以 A的表达式有误,其它选项均可以替代 E,用来进行条件判断。 19 【正确答案】 B 【试题解析】 此题结合 if语句考查逗号表达式。 if语句后面只执行一个语句,即以分号结束的一个语句。或用大括号包围的多条语句,此题中 if后面是一个逗号表达式,若 if条件为真,则执行此逗号语句,本题中 if条件为假,所以此逗号表达式不会执行,所以程
8、序将只执行 c=a;这一句,所以 a和 b的值没有发生变化。 20 【正确答案】 A 【试题解析】 break用于跳出 switch分支语句,若不使用 break语句将继续执行此分支语句后面的分支语句,因此,不使用 break语句不会出现语法错误,也不一定必须使用 break语句, break语句除了在 switch语句中使用外,也可以用于跳出循环语句,所以 A正确, C、 D不正确。 default语句也不是必需的。 21 【正确答案】 D 【试题解析】 无限循环是指循环变量一直为真的情况。选项 A中没有条件判别式,注意前面两个赋值语句中间是逗号,两个分号中间为空,所以会出现无限循环;选项
9、B中的 while条件变量是恒为真 的常量,选项 C看似循环变量 n会在循环体内通过减操作成为负数,但注意到 while(n)后面紧跟的分号,此分号代表一个空语句,因此也是无限循环;只有 D选项中会正常结束循环。 22 【正确答案】 B 【试题解析】 在 switch语句中一般会将 default语句放在最后,作为最后一个分支,所以通常后面不会跟 break语句,但本题中将 default放在了最前面,所以其后要跟 break才不会出现误操作,但本题中没有 break,所以要仔细分析。 for循环只执行 2次,第 1次 i=1,此时执行 switch语句中的 default语句。但因为后面没有
10、 break语句,所以会继续执行 case 2语句,并在碰到其后的 break语句后跳出 switch语句,此时 s=7;当执行第 2次 for循环是。 i=2,此时只执行 s+一句,所以结果是 s=8。 23 【正确答案】 C 【试题解析】 子函数的功能比较简单,此题主要考查主函数的多次调用,fun(1, 2)=4, fun(1, 3)=6,所以最后结果是 fun(4, 6)=2*4*6=48。 24 【正确答案】 A 【试题解析】 double型数据的输入格式是 lf,接收输入的应 该是变量的地址,所以 B、 C、 D有误。 25 【正确答案】 C 【试题解析】 指针变量在定义时便指定了其
11、类型,本题中 double*p的定义,说明 p只能存放 double类型变量的地址。其他选项正确。 26 【正确答案】 B 【试题解析】 定义数组时一维数组可以不指定列数,二维数组可以不指定行数,系统将根据输入的数据来决定,但如果指定了具体的行列数,赋值时就必须按照行列数输入,选项 B定义了 2行但输入却是 3行,所以错误。 27 【正确答案】 C 【试题解析】 子函数的功能是进行数据交换 ,但注意到形参是值传递,所以不会影响实参的值,因此,数组的值不会发生变化。 28 【正确答案】 C 【试题解析】 数组赋初值后各元素的值均为 0, scanf中接收输入的地址是 xi,所以输入的 1, 3,
12、 5分别赋给了 x00, x10, x20,因此输出的结果是 1 3 0。 29 【正确答案】 A 【试题解析】 scanf输入时是严格按照格式接收数据的, 3d只接收 3位整数作为 x的值,所以 y的值是 45,因为后面有个空格将会作为 s的值, s的值是568Tom。 30 【正确 答案】 C 【试题解析】 字符串赋值时只用双引号,不用大括号,所以 A有误, B和 D是定义的字符数组,如果未在定义时赋值,则数组内的元素要进行逐个赋值,所以B和 D有误。 31 【正确答案】 C 【试题解析】 while(*cc+)的结果是将 c移动到字符串的结尾,即当 c= 0时,循环结束。此时 s依然指向
13、的是字符串的首字符,因此,返回值 c一 s是字符串的长度,答案 C正确。 32 【正确答案】 C 【试题解析】 将字符以整数格式打印,输出的是字符所对应的 ASC 值,当*s=a时, *cs 9=7;当 *s=b时, *s 9=8;当 *s=c时, *s 9=0,所以结果是 C。 33 【正确答案】 B 【试题解析】 将 3代入将执行 g(2),将 2代入将执行 g(1),将 1代入将直接返回1,所以总共调用了 3次。 34 【正确答案】 C 【试题解析】 静态变量只在第一次初始化时赋初值,且常驻内存中,第 1次调用函数 g时, x的初值是 1,并将其加上实参的值返回 (n=2),自身也再加
14、1,此时x=2,当第 2次调用 g时, x=2, n=1+2=3,所以主函数中的 s=2+3=5。 35 【正确答案】 A 【试题解析】 结构体赋值时,应该用大括号;选项 B和 C是正常赋值表达式,选项 D中的结构体元素虽然不对应,但合法引用后进行运算时,只会进行赋值,如果数据格式不一致系统会进行格式转换。 36 【正确答案】 C 【试题解析】 子函数的功能是对结构体的第 2个元素数组中的元素进行从小到大的排序,因此结果是 C,注意这里是地址传值,所以主函数中的结构体的值会变化,如果采用值传递,则主函数中的结构体的值不会发生变化。 37 【正确答案】 A 【试题解析】 注意使用 typedef
15、定义结构体时,大括号后 面的标识符将成为该结构体类型的定义关键字,可以用来定义新的结构体变量。使用值传递调用函数时实参的值不会改变,所以调用后结构 c的值没有发生变化,调用函数会返回一个固定的结构体内容,所以答案 A正确。 38 【正确答案】 D 【试题解析】 宏定义通常使用大写,但不是必需的;宏定义一般在函数的大括号外面,但并不一定在所有语句之前;宏调用比函数调用省时间,只有 D正确。 39 【正确答案】 B 【试题解析】 文件打开后写入了 1、 2、 3和一个回车符,再次以只读的方式打开后,指针位于文件头,所以读到的数 据是 123,所赋给 n的值也是 123。 40 【正确答案】 A 【
16、试题解析】 的位操作, 1的二进制码是 00000001,向左移动 2位后是00000100,与 2进行异或操作,结果是 6。 二、程序填空题 41 【正确答案】 1 1 2 10*x 3 n 10 【试题解析】 填空 1:定义变量 t用来存放某数的各个位数值,此处判断 t是否为奇数,即对 2求余结果是否为 1。 填空 2:将 t作为 x的个位数,原来 x的各个位上升 l位,即 x=10*x+1。 填空 3:每循环一次,通过除法运算,去掉数值最后一位。 如果知道某数 n的各个位的数值,可以得到该数值 n,如 n的个位为 a、十位为b、百位为 c,那么 n=c*100+b*10+a。如果知道数值
17、 n,可以采用求余和除法操作来表示其各个位,如 n 10(取个位 )、 n 10(取十位 ),读者可以自己考虑一下,如果是三位数,如何提取各个位 ?四位数呢 ? 三、程序修改题 42 【正确答案】 1 void fun(1ong s, long*t) 2 s1=s1*10; 【试题解析】 1主函数中调用函数的参数为地址,因此函数 fun的形式参数应为指针类型。 2重新组合一个数,从 十位开始,然后百位,依次类推。每增加一位数,原数值需乘 10,即 s1=s1*10;。 四、程序设计题 43 【正确答案】 void fun(char*a) int i=0; char*p=a; while(*p&
18、*p=#) ai=*p; i+: p+; while(*p) if(*p! =#) ai=*p; i+; p+; ai= 0; 【试题解析】 函数 fun的功能:除了字符串前导的 #之外,将串中其他 #全部删除。解答本题 (1)定义一个临 时指针 p,初始指向原串首地址; (2)利用循环语句把字符串前导 #拷贝到原串; (3)继续移动指针,把串中和串尾的非 #字符拷贝到原串; (4)为修改后的字符串赋结束字符 0。 要删除字符串中的指定字符,我们通常采用保留非指定字符的方法。可以将非指定字符保留在原串。即将需要保留的字符从原串的起始位置重新赋值;也可以保留到新串,即新建一个字符串,存放要保留的字符。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1