[计算机类试卷]国家二级C语言机试(函数和数组)模拟试卷18及答案与解析.doc

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

1、国家二级 C语言机试(函数和数组)模拟试卷 18及答案与解析 一、选择题 1 关于子函数返回值的程序段中错误的是 ( )。 ( A) main()x=fun(2 , 10); float fun(int a , int b) ( B) float fun(int a, intb)main()x=fun(i , i); ( C) float fun(int, int); main()x=fun(2 , 10); float fun(int a , int b) ( D) main()float fun(int i, int j); x=fun(i , j); float fun(int a ,

2、int b) 2 关于子函数 return语句的叙述中正确的是 ( )。 ( A)一个自定义函数中必须至少有一条 return语句 ( B)一个自定义函数中可以根据不同情况设置多条 return语句 ( C)定义成 void类型的函数中可以有带返回值的 return语句 ( D)没有 return语句的自定义函数执行结束时不能返回到调用处 3 关于 return语句的叙述中错误的是 ( )。 ( A)用户定义的函数中可以没有 return语句 ( B)用户定义的函数中若没有 return语句,则应当定义函数为 void类型 ( C)用户定义的函数中可以有多个 return语句,以便可以调用一次

3、返回多个函数值 ( D)函数的 return语句中可以没有表达式 4 若函数 f调用了函数 g,函数 g又调用了函数 f,则以下说法中正确的是 ( )。 ( A)称为函数的调用 ( B)称为函数的间接递归调用 ( C)称为函数的循环调用 ( D) C语言中不允许这样的递归调用 5 若 int fun(double x10, int *n),则下面针对此函数的函数声明语句中正确的是( )。 ( A) int fun(float, int); ( B) int fun(float *x, int n); ( C) int fun(double *, int *); ( D) int fun(dou

4、ble x, int *n): 6 以下程序的输出结果是 ( )。 int f(int x); main()int n=1, m; m=f(f(f(n); printf( d n, m); int f(int x) return x*2; ( A) 0 ( B) 1 ( C) 2 ( D) 8 7 以下程序的输出结果是 ( )。 #include inff(inx, inty) return(y一 x)*x); main() int a=0, b=4, c=5, d; d=f(f(a, b), f(a, c); printf( d n, d); ( A) 7 ( B) 8 ( C) 9 ( D

5、) 10 8 若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的是( )。 ( A)形参只是形式上的存在,不 占用具体存储单元 ( B)函数的形参和实参分别占用不同的存储单元 ( C)同名的实参和形参占同一存储单元 ( D)函数的实参和其对应的形参共占同一存储单元 9 以下程序的输出结果是 ( )。 #include int f(int x) main() int y; int z; if(x=0x=1)return(3); z=f(3); printf( d n, z); y=x*x一 f(x一 2); return y; ( A) 4 ( B) 5 ( C) 6 ( D) 0

6、 10 执行程序时,给变量 x输入 10,则以下程序的输出结果是 ( )。 int fun(int n) main() if(n=1)return 1; int x; else scanf( dt, &x); x=fun(x); return(n+fun(n1); prinff( d n, x); ( A) 45 ( B) 50 ( C) 60 ( D) 55 11 以下程序的输出结果是 ( )。 int f(int a, int n) main() if(n1) int a: 8, 2, 9, 1, 3, 6, 4, 7, 5; int t; t=f(a, n 1); printf( d n

7、, f(a, 9); return t an1? t: an一 1; else return a0; ( A) 9 ( B) 8 ( C) 7 ( D) 5 12 关于变量使用域的叙述中正确的是 ( )。 ( A)局部变量不能被说明为 static ( B)只要是用户定义的标识符,都有一个有效的作用域 ( C)只有在函数内部定义的变量才是局部变量 ( D)只有全局变量才有自己的作用域,函数中的局部变量没有作用域 13 以下程序的输出结果是 ( )。 int fun(int x, int n) main() static int sum=0, i; int a=1, 2, 3, 4, 5, b=

8、6, 7, 8, 9, s=0; for(i=0; i n; i+)sum+=xi; s=fun(a, 5)+fun(b, 4); printf( d n”, S); return sum; ( A) 50 ( B) 55 ( C) 60 ( D) 65 14 以下程序的输出结果是 () #include main() int fun() int i, s=1; static int x=1; for(i=1; i =2; i+)s=fun(); x*=2; returnx; printf( d n, s); ( A) 4 ( B) 3 ( C) 2 ( D) 1 15 设 char a=xy

9、z, b=x, y, z;,则关于数组长度的叙述中正确的是( )。 ( A)数组 a和 b长度相同 ( B) a数组长度小于 b数组长度 ( C) a数组长度大于 b数组长度 ( D)上述说法都不对 16 若 int m=5, 4, 3, 2, l, i=4;,则下面对 m数组元素的引用中错误的是( )。 ( A) m一一 i ( B) m2*2 ( C) mm0 ( D) mmi 17 若要定义一个具有 5个元素的整型数组,以下错误的定义语句是 ( )。 ( A) int a5=1; ( B) int b=1, 2, 3, 4, 5; ( C) int C2+3 ( D) int i=5,

10、di 18 以下程序的输出结果是 ( )。 void fun(int a, int n) int i, t; for(i=0; i n 2; i+) t=ai; ai=an一 l一 i; an一 1一 i=t; main() int k10=1, 2, 3, 4, 5, 6, 7, 8, 9, 10, i; fun(k, 5); for(i=2; i 8; i+)printf( d, ki); printf( n); ( A) 345678 ( B) 321678 ( C) 1098765 ( D) 876543 19 关于数组的叙述中正确的是 ( )。 ( A)语句 int a43=1, 2

11、, 4, 5;是错误的初始化形式 ( B)语句 int a3: 1, 2, 4, 5;是错误的初始化形式 ( C)在逻辑上,可以把二维数组看成是一个具有行和列的表格或矩阵 ( D)语句 int a43=1, 2, 4, 5;是错误的初始化形式 20 以下程序的输出结果是 ( )。 #include #define N 3 void fun(int aN, int b) main() int i, j; int xNN=1, 2, 3, 4, 5, 6, 7, 8, 9, yN, i; for(i=0; i N; i+) fun(x, y); bi=ai0, for(i=0; i N; i+)p

12、rintf( d, , yi) for(j=1; j N; j+) prinff( n); if(bi aij) bi=aij ( A) 1, 3, 5, ( B) 3, 5, 7, ( C) 2, 4, 8, ( D) 3, 6, 9, 21 关于字符数组的描述中有错误的是 ( )。 ( A)字符数组中的内容不一定是字符串 ( B)可以用输入语句把字符串整体输入给字符数组 ( C)不可以用赋值语句给字符数组名赋字符串 ( D)字符数组只能存放字符串 22 关于字符串的叙述中正确的是 ( )。 ( A)两个连续的单引号 ()是合法的字符常量 ( B)可以对字符串进行关系运算 ( C)两个连续的

13、双引号 ()是合法的字符串常量 ( D)空字符串不占用内存,其内存空间大小是 0 23 以下程序的输出结果是 ( )。 #include int fun(char s)char*p=s; while(*p! =0)p+; return(p一 s); main()printf( d n, fun(0ABCDEF); ( A) 6 ( B) 7 ( C) 1 ( D) 0 24 关于字符串的叙述中正确的是 ( )。 ( A)下面的语句用赋初值方式来定义字符串,其中, 0是必需的, char strl=s, t, r, 0 ( B)有定义语句: char str1=str1;,数组 str1将包含

14、4个元素 ( C)字符串常量 “str1”的类型是:字符串数据类型 ( D)字符数组的每个元素可存放一个字符,并且最后一个元素必须是 0字符 25 关于字符串的叙述中正确的是 ( )。 ( A)函数调用 “strlen(s); ”会返回字符串 s实际占用内存的大小 (以字节为单位 ) ( B)两个字符串可以用关系运算符进行大小比较 ( C)当拼接两个字符串时,结果字符串占用的内存空间是两个原串占用空间的和 ( D) C语言本身没有提供对字符串进行整体操作的运算符 国家二级 C语言机试(函数和数组)模拟试卷 18答案与解析 一、选择题 1 【正确答案】 A 【试题解析】 C语言规定,函数必须先定

15、义,后调用 (函数的返回值类型为 int或char时除外 )或先说明,再调用最后定义。在选项 A中,调用的子函数在调用后面定义,所以不正确。在选项 B、 C中,被调用函数在主函数之前定义,再在主函数中调用,所以是正确的;在选项 D中,在主函数中先对子函数 float fun(int i, int j)进行了声明。然后进行调用。 【知识模块】 函数和数组 2 【正确答案】 B 【试题解析】 return语句主要用于返回函数的返回值。在一个自定义函数中,可以根据不同的情况设置多条 return语句返回函数的值返回后面的语句不执行。 【知识模块】 函数和数组 3 【正确答案】 C 【试题解析】 C语

16、言 return语句返回, return语句的形式如下: return表达式;当程序执行到 return语句时,程序的流程就返回到调用该函数的地方, 并带回函数值。在同一函数内,可以根据需要,在多处出现 return语句,在函数体的不同部位退出函数。无论函数体中有多少个 return语句, return语句只可能执行一次,返回一个函数值。 return语句中也可以不含有表达式,这时必须定义函数为。 void类型,它的作用只是使流程返回到调用函数。并没有确定的函数值。函数体内可以没有 return语句,这时也必须定义函数为 void类型,程序的流程就一直执行到函数末尾的 “”,然后返回调用函数,

17、也没有确定的函数值带回。 【知识模块】 函数和数组 4 【正确答案 】 B 【试题解析】 本题考查递归的概念, C语言中函数可以直接或间接调用自身,称为递归调用。本题中 f调用 g,然后 g又调用 f,即 f间接调用了自身是递归调用。 【知识模块】 函数和数组 5 【正确答案】 C 【试题解析】 C语言函数说明的一般形式为:类型名函数名 (参数类型 1,参数类型 2) 。因为函数 int fun(double x10, int*n)的第 1个形式参数是一个双精度型的一维数组。第 2个参数是一个整型指针,并返回一个整型值。一维数组的名字表示的是一维数组的地址。 【知 识模块】 函数和数组 6 【

18、正确答案】 D 【试题解析】 程序考查了函数的多层调用。对于 m=f(f(f(n);首先计算最内层的函数调用,执行 f函数。得到返回值 2,然后计算 f(2),得到返回值为 4,最后计算 f(4),得到计算结果为 8。 【知识模块】 函数和数组 7 【正确答案】 C 【试题解析】 本题考查函数的嵌套调用。首先计算 f(a, b)与 f(a, c), f(a,b)=(ba)*a=3, f(a, c)=(ca)*a=6,再计算 f(3, 6)=(63)*3=9。 【知识模块 】 函数和数组 8 【正确答案】 B 【试题解析】 在 C语言中,函数的实参单元与形参单元在内存中分配不同的存储单元。在调用

19、函数时,如果是值传递给形参分配临时存储单元,并将实参对应的值传递给形参,在被调用函数中对形参存储单元中的值进行运算,最后通过retum语句把函数值返回调用函数。当调用结束后,形参单元被释放,实参单元仍保留并维持原值。 【知识模块】 函数和数组 9 【正确答案】 C 【试题解析】 主函数调用 f()函数,将实参 3传递给 x,进行 if条件语句的判断不成立,接着执行 y=3*3一 f(1),再执行 f(1),而 f(1)满足 if条件语句,所以 f(1)的值为 3,代入 y=3*3 f(1)=93=6。 【知识模块】 函数和数组 10 【正确答案】 D 【试题解析】 本题在函数 int fun(

20、int n)的定义中又出现了对函数 fun的调用,所以函数 fun是递归函数。因而在主函数中调用 x=fun(x)时,当输入 10赋给变量 x时,递归调用的过程为fun(10)=10+fun(9)=10+9+fun(8)=10+9+8+fun(7)=10+9+8+7+6+5+4+3+2+ 1=55。 【知识模块】 函数和数组 11 【正确答案】 A 【试题解析】 本题考查递归调用。主函数中调用 f(a, 9),递归函数的调用过程如下: f(a, 9)f(a , 8)f(a , 7)(a , 6)(a , 5)(a , 4)f(a , 3)+f(a, 2)+f(a,1), f(a, 1)得到返回

21、值为 a0,值为 8,递归过程开始回归,回归过程描述如下:由于 8 a1,返回 8+8 a2不成立,返回 a2的值为 9。 【知识模块】 函数和数组 12 【正确答案】 B 【试题解析】 C语 言自定义函数中,在函数内定义的变量是局部变量,而在函数之外定义的变量称外部变量,也是全局变量。全局变量可以为源文件中其他函数所共用,其作用域为从定义变量的位置开始到源文件结束。 【知识模块】 函数和数组 13 【正确答案】 C 【试题解析】 在本题函数定义中,变量 sum使用了 static修饰符,这说明了变量sum为一个静态局部变量。由于在整个程序运行期间,静态局部变量在内存中的静态存储区中占据着永久

22、的存储单元。即使退出函数之后,下次再进入该函数时,静态局部变量继续使用原来存储单元中原来的值。 函数 int fun(int x, int n)的功能是求出数组 x各个元素的和。所以在主函数中,调用函数 fun(a, 5)后,变量 sum=1+2+3+4+5=15,当再次调用 fun(b, 4)后,变量 sum=15+6+7+8+9=45,所以 s=15+45=60。 【知识模块】 函数和数组 14 【正确答案】 A 【试题解析】 x是局部静态变量,其初值等于 1,然后再把其值扩大 1倍后返回。在主函数中执行 for循环语句 2次,调用函数 fun两次,所以变量 s的值等于4。这里要强调的一点

23、是当函数 fun()执行完毕后,局部静态变量 x的值不会丢失,仍然有效。 【知识模块】 函数和数组 15 【正确答案】 C 【试题解析】 本题考查字符数组的定义。 “char a=xyz, b=x, y,z; ”定义了两个字符数组 a和 b, a数组存放的是一个字符串,字符串末尾会由系统加上一个结束符 “ 0”,数组 a的长度必须加上结束符长度 1,因此数组 a的长度为 4。数组 b中有三个元素,长度为 3。 【知识模块】 函数和数组 16 【正确答案】 C 【试题解析】 本题考查数组的使用 。 M5的长度为 5,因此下标范围是 0 4。选项 A中一一 i是先自减,然后使用 i,因此访问的是元

24、素 m3;选项 B访问的是元素 m4;选项 C中内部的 m0值是 5,因此实际访问的是 m5,下标超出范围;选项 D中 mi的值是 1,访问元素 m1。 【知识模块】 函数和数组 17 【正确答案】 D 【试题解析】 本题考查一维数组的定义, C语言中一维数组的长度表达式必须是常量;选项 A正确:选项 B初始化了 5个元素,因此数组长度为 5;选项 C常量表达式 2+3的值为 5,正确;选项 D数组长度不是常量表达 式,错误。 【知识模块】 函数和数组 18 【正确答案】 B 【试题解析】 题目中函数 fun()的功能是实现整型数组 a元素的逆置操作。在主函数中当执行 fun(k, 5)时,对

25、 k10中的子数组 k5=1, 2, 3, 4, 5的首尾元素进行逆置,此时 k10=5, 4, 3, 2, 1, 6, 7, 8, 9, 10。所在循环语句中输出从第 2 7个数组元素时,其值分别为 321678。 【知识模块】 函数和数组 19 【正确答案】 C 【试题解析】 C语言中可以把一个二维数组看成是一个一 维数组,每个数组元素又是包含有若干个元素的一维数组,也就是具有行列的结构,二维数组初始化也是在类型说明时给各下标变量赋以初值。二维数组可按行分段赋值,也可按行连续赋值。 【知识模块】 函数和数组 20 【正确答案】 D 【试题解析】 题目程序段中函数 fun的作用是求出二维数组

26、 aN中每一行中的最大元素,所以在 main()函数中执行完 fun(x, y)后,数组 y中的元素为二维数组xNN每一行的最大元素。 【知识模块】 函数和数组 21 【正确答案】 D 【试题解析】 本题考查字符数组。选项 A、 B和 C都是正确的,字符数组也能存放字符以外的其他数据。 【知识模块】 函数和数组 22 【正确答案】 C 【试题解析】 两个连续的双引号 ,是一个字符串常量,称为 “空串 ”,但末尾会有 0结束符。 【知识模块】 函数和数组 23 【正确答案】 B 【试题解析】 函数 fun的主要功能是计算字符串中实际字符的个数,因此主函数中调用 fun得到结果为 7。 【知识模块

27、】 函数和数组 24 【正确答案】 A 【试题解析】 选项 B中除了字 符串中实际字符之外,还要存储字符串结束标志,应为 5个元素。在 C语言中没有字符串数据类型,因此选项 C不正确,选项D字符数组不一定必须存放字符串,因此没有规定最后一个元素为字符串结束标志,也就是说字符数组的末尾可以没有 0,只有字符串才有。 【知识模块】 函数和数组 25 【正确答案】 D 【试题解析】 C语言中没有专用的运算符可以处理字符串,要调用 “string”库中的函数来处理字符串,其中 strlen,函数主要测试字符串中实际字符的个数,比实际占用的内存至少要少一个。 strcat(s1, s2)函数用于连接两个字符串,是把字符串 s2连接到 s1的后面。 【知识模块】 函数和数组

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

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

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