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

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

1、国家二级 C语言(函数和数组)机试模拟试卷 5及答案与解析 一、选择题 1 有以下程序 (strcpy为字符串复制函数, strcat为字符串连接函数 ) #include stdio h #include string h main() char a10=“abc“, b10=“012“, c10=“xyz“; strcpy(a+1, b+2); puts(strcat(a, c+1); 程序运行后的输出结果是 ( A) bc2yz ( B) a2yz ( C) a12xyz ( D) 12yz 2 若有定义语句: char, *s1=“OK“, *s2=“ok“;以下选项中,能够输出 “O

2、K“的语句是 ( A) if(strcmp(s1, s2)!=0)puts(s1); ( B) if(strcmp(s1, s2)!=0)puts(s2); ( C) if(strcmp(s1, s2)=1)puts(s1); ( D) if(strcmp(s1, s2)=0)puts(s1); 3 若有以下说明和定义 union dt int a; char b; double c; data; 以下叙述中错误的是 ( A) data的每个成员起始地址都相同 ( B)变量 data所占内存字节数与成员 c所占字节数相等 ( C)程序段: data a=5; printf(“ f n“,dat

3、a c);输出结果为 5 000000 ( D) data可以作为函数的实参 4 以下叙述中正确的是 ( A)函数名代表该函数的入口地址 ( B)所有函数均不能接受函数名作为实参传入 ( C)函数体中的语句不能出现对自己的调用 ( D)如果函数带有参数,就不能调用自己 5 以下叙述中错误的是 ( A)函数调用可以作为一个独立的语句存在 ( B)函数形参 的值也可以传回给对应的实参 ( C)若函数有返回值,必须通过 return语句返回 ( D) C程序必须由一个或一个以上的函数组成 6 有以下程序 int add(int a, int b) main() return(a+b); int k,

4、 (*f)(), a=5, b=10; f=add; 则以下函数调用语句错误的是 ( A) k=add(a, b); ( B) k=(*f)(a, b); ( C) k=*f(a, b); ( D) k=f(a, b); 7 有以下程序 #include stdio h int fun(int x, int y) main() if(x=y)return(x); int a=4, b=5, c=6; else return(x+y) 2); printf(“ d n“, fun(2*a, fun(b, c); 程序运行后的输出结果是 ( A) 3 ( B) 6 ( C) 8 ( D) 12 8

5、 有以下程序 #include stdio h int f(int x); main() int f(int x) int a, b=0; return x*x+1; for(a=0; a 3; a+) b=b+f(a); putchar(A+b); ( A) BCD ( B) BDI ( C) ABE ( D) BCF 9 有以下程序,其中 k的初值为八进制数 #include stdio h main() int k=011; printf(“ d n“, k+); 程序运行后的输出结果是 ( A) 12 ( B) 11 ( C) 10 ( D) 9 10 设有如下函数定义 int fun

6、(int k) if(k 1)return0; else if(k=1)return1; else return fun(k-1)+1; 若执行调用语句: n=fun(3);,则函数 fun总共被调用的次数是 ( A) 2 ( B) 4 ( C) 3 ( D) 5 11 若有以下程序 int flint a, int n) main() if(n 1) int a=8, 2, 9, 1, 3, 6, 4, 7, 5; intt; t=f(a, n-1); printf(“ d n“, fla, 9); return t an-1?t: an-1; else return a0; 则程序的输出结

7、果是 ( A) 9 ( B) 1 ( C) 8 ( D) 5 12 有以下程序 #include stdio h int a=1, b=2; void funl(int a, int b) main() printf(“ d d“, a, b); funl(5, 6); fun2(); void fun2() printf(“ d d n“, a, b); a=3; b=4; 程序运行后的输出结果是 ( A) 3 4 5 6 ( B) 1 2 5 6 ( C) 5 6 1 2 ( D) 5 6 3 4 13 有以下程序 fun(int x, int y) main() static int m

8、=0, i=2; int j=1, m=1, k; i+=m+1; m=i+x+y; return m; k=fun(j, m); printf(“ d, “, k); k=fun(j, m); printf(“ d n“, k); 执行后的输出结果是 ( A) 5, 5 ( B) 5, 11 ( C) 11, 11 ( D) 11, 5 14 有以下程序 int fun(int x, int n) main() static int sum=0, i; int a=1, 2, 3, 4, 5, b=6, 7, 8, 9, s=0; for(i=0; i n; i+)sum+=xi; s=fu

9、n(a, 5)+fun(b, 4): printf(“ d n“, s); return sum; ( A) 50 ( B) 45 ( C) 60 ( D) 55 15 若有语句: char*line5;,以下叙述中正确的是 ( A)定义 line是一个数组,每个数组元素是一个基类型为 char的指针变量 ( B)定义 line是一个指针变量,该变量可以指向一个长度为 5的字符型数组 ( C)定义 line是一个指针数组,语句中的 *号称为间址运算符 ( D)定义 line是一个指向字符型函数的指针 16 有以下程序 void fun(int a, int n)int i, t; for(i=

10、0; i n 2; i+) t=ai; ai=an-1-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) 876543 ( B) 321678 ( C) 1098765 ( D) 345678 17 下列选项中,能正确定义数组的语句是 ( A) int num; ( B) int N=2008; int numN; ( C) int num0 2008; ( D) #defi

11、ne N 2008 int numN; 18 有以下程序 #include stdio_h main() int c6=10, 20, 30, 40, 50, 60, *p, *s; p=c; s=&c5; printf(“ d n“, s-p); 程序运行后的输出结果是 ( A) 50 ( B) 6 ( C) 5 ( D) 60 19 若有以下程序 main()int i, j=0; char a=“How are you!“; for(i=0; ai; i+) if(ai!=)aj+=ai; aj= 0; printf(“ s n“, a); 则程序的输出结果是 ( A) Howareyo

12、u ( B) Hay! ( C) Howareyou! ( D) How are you! 20 若有定义语句: int k23, *pk3;,则以下语句中正确的是 ( A) pk=k; ( B) pk0=k12; ( C) pk=k0; ( D) pk1=k; 21 有以下程序 #include stdio h #define N 4 void fun(int aN, int b) int i; for(i=0; i N; i+)bi=aii-aiN-1-i; void main() int xNN=1, 2, 3, 4), 5, 6, 7, 8), 9, 10, 11, 12), 13,

13、14, 15,16, yN, i; fun(x, y); for(i=0; i N; i+)printf(“ d, “, yi); printf(“ n“) ( A) -12, -3, 0, 0, ( B) -3, -1, 1, 3, ( C) 0, 1, 2, 3, ( D) -3, -3, -3, -3, 22 有下列程序: main() int a44=1, 4, 3, 2, 8, 6, 5, 7), 3, 7, 2, 5), 4, 8, 6, 1), i,j, k, t; for(i=0; i 4; i+) for(j=0; j 3; j+) for(k=j+1; k 4; k+) i

14、f(aji aki)t=aji; aji=aki; aki=t; *按列排序 * for(i=0; i 4; i+)printf(“ d“, aii); 程序运行后的输出结果是 ( A) 8, 7, 3, 1, ( B) 1, 6, 5, 7, ( C) 4, 7, 5, 2, ( D) 1, 6, 2, 1, 23 以下叙述中 正确的是 ( A)语句 int a43=1, 2, 4, 5;是错误的初始化形式 ( B)语句 int a3=1, 2, 4, 5;是错误的初始化形式 ( C)在逻辑上,可以把二维数组看成是一个具有行和列的表格或矩阵 ( D)语句 int a43=1, 2, 4, 5

15、;是错误的初始化形式 24 以下选项中有语法错误的是 ( A) char str310; str1=“guest“; ( B) char str10=“guest“; ( C) char*str3; str1=“guest“; ( D) char*str=“guest”; 25 以下叙述中正确的是 ( A)下面的语句用赋初值方式来定义字符串,其中, “ 0”是必须的 char str1=s, t, r, 1, 0; ( B)有定义语句: char str1=“str1“;,数组 str1将包含 4个元素 ( C)字符串常量 “str1”的类型是:字符串数据类型 ( D)字符数组的每个元素可存放

16、一个字符,并且最后一个元素必须是 “ 0”字符 26 设有定义 char str=“Hello“;则语句 printf(“ d d“, sizeof(str), strlen(str);的输出结果是 ( A) 6 6 ( B) 6 5 ( C) 5 5 ( D) 5 6 27 设有定义: char p=1, 2, 3, *q=p;以下不能计算出一个 char型数据所占字节数的表达式是 ( A) sizeof(p) ( B) sizeof(char) ( C) sizeof(*q) ( D) sizeof(p0) 28 有以下程序 main() char ch=“uvwxyz“, *pc; pc

17、=ch, printf(“ c n“, *(pc+5); 程序运行后的输出结果是 ( A) 0 ( B)元素 ch5的地址 ( C) z ( D)字符 y的地址 29 有以下程序,执行后的结果是 #include stdio h main()char s=“abcde“; s+=2; printf(“ dn“, s0); ( A)输出字符 C的 ASCII码 ( B)输出字符 C ( C)输出字符 a的 ASCII码 ( D)程序出错 国家二级 C语言(函数和数组)机试模拟试卷 5答案与解析 一、选择题 1 【正确答案】 B 【试题解析】 程序执行 “sfrcpy(a+1, b+2)”后,字符

18、数组 a的值为 “a2”,再进行字符串的连接 “strcat(a, c+1)”,此时字符数组 a的值为 “a2vz”。 【知识模块】 函数和数组 2 【正确答案】 A 【试题解析】 字符串比较函数 strcmp的功能是对 s1和 s2所指字符串进行比较。如果 s1 s2,返回负数,如果 s1=s2,返回 0,如果 s1 s2,返回正数,所以对于本题来 说,能够输出 “OK”的语句是选项 A)所指的语句。 【知识模块】 函数和数组 3 【正确答案】 C 【试题解析】 本题主要考查联合的定义和使用。选项 A)联合中每个成员起始地址都是一样的,正确:选项 B)联合的长度等于长度最长成员的长度,在 d

19、ata中,成员 c是 double类型,长度为 8个字节最长,因此 data所占用字节数和成员 c长度一致。选项 C)整型和 double类型的存储格式不一致,整数 5在内存中的存储格式和浮点数 5存储格式不一样,因此 data c输出不会是 5 000000;选项 D)联合和结构体 都可以作为函数实参。 【知识模块】 函数和数组 4 【正确答案】 A 【试题解析】 函数形、实参传递的时候,要求对应位置类型一致即可,如果实参为函数名,可以定义相应的形参为指向函数的指针变量来获得该函数的入口地址,因此选项 B)错误的,在 C语言中允许进行递归调用,即自己调用自己,选项C)和选项 D)是错误的。

20、【知识模块】 函数和数组 5 【正确答案】 B 【试题解析】 一个 C程序中可以包含任意多个不同名的函数,但只能有一个主函数。一个 C程序总是从主函数开始执行。函数的值通过 return语句返回,return语句中的表达式的值就是所求的函数值。在 C语言中,数据只能从实参单向传递给形参,称为 “按值 ”传递。也即是说当简单变量作为实参时,用户不可能在函数中改变对应实参的值。 【知识模块】 函数和数组 6 【正确答案】 C 【试题解析】 在语句 “k=*f(a, b)”中,由于 “()”的优先级高于 “*”,所以 “f(a,b); ”表示其返回类型为指针的带有两个整型参数的函数,而不是整型数值,

21、因此选项 C)为错误的调用形式。 【知识模块】 函数和数组 7 【正确答案】 B 【试题解析】 fun(b, c)即 fun(5, 6), 5!=6,所以返回 (5+6) 2=5: fun(2*a, 5)即 fun(8, 5), 8!=5,所以返回 (8+5) 2=6。 【知识模块】 函数和数组 8 【正确答案】 B 【试题解析】 在函数 main()中,第一次执行 for循环时, b的值等于 1,此时输出字母 B;第二次执行 for循环时, b的值等于 3,此时输出字母 D;第三次执行for循环时, b的值等于 8,此时输出字母 I。 【知识模块】 函数和数组 9 【正确答案】 D 【试题解

22、析 】 本题主要考查基本数据类型和格式化输出函数 printf。变量 k的初值为 011,表示 8进制的 11,十进制值为 9, printf输出 k+的值, +在 k的后面表示先使用后自增,因此输出的值为 9。 【知识模块】 函数和数组 10 【正确答案】 C 【试题解析】 这道题目考查了函数的递归调用,当执行调用语句 n=fun(3)时,返回 n=fun(2)+1,再执行 fun(2),返回 n=fun(1)+1+1,而 fun(1)等于 1,所以最后 n的值等于 3。而函数 fun总共被调用了 3次。即 fun(3), fun(2), fun(1)。 【知识模块】 函数和数组 11 【正

23、确答案】 A 【试题解析】 主函数中调用 f(a, 9),递归函数的调用过程如下: f(a, 9)f(a ,8)f(a , 7)f(a , 6)f(a , 5)f(a , 4)f(a , 3)f(a , 2)f(a , 1), f(a, 1)得到返回值为 a0,值为 8,递归过程开始回归,回归过程描述如下: 8 a1,返回 88 a2不成立,返回 a2的值为 9 因此函数 f的主要功能为计算数组中的最大值。主函数中输出最大值为 9。 【知识模块】 函 数和数组 12 【正确答案】 D 【试题解析】 函数 fun1()的作用是输出局部变量 a和 b的值,在主函数中执行fun1(5, 6)的结果是

24、输出 5, 6;函数 fun2()的作用是给变量 a和 b分别赋值 3,4;执行 fun2()的作用是输出 3, 4。 【知识模块】 函数和数组 13 【正确答案】 B 【试题解析】 子函数 fun(int x, int y),将变量 m和 i声明为局部静态变量因此第 1次调用主函数后,局部静态变量 m和 i的值为 5和 3,第 1次函数调用结束时,它们的值不释放保持不变,所以第 2次 调用时,局部静态变量 m和 i的初始值分别为 5和 3,即在执行 “i-=m+1”时, i的值为 9,因此最终 m的值为 11。 【知识模块】 函数和数组 14 【正确答案】 C 【试题解析】 在函数 int

25、fun(int x, int n)的定义中,变量 sum使用了 static修饰符,这说明了变量 sum为一个静态局部变量。由于在整个程序运行期闻,静态局部变量在内存中的静态存储区中占据着永久的存储单元。即使退出函数之后,下次再进入该函数时,静态局部变量继续使用原来存储单元中原来的值。函数intfun(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。 【知识模块】 函数和数组 15 【正确答案】

26、 A 【试题解析】 本题考查指针数组的定义。本题中 line是一个指针数组,有 5个元素,每个元素都是一个指针变量。 【知识模块】 函数和数组 16 【正确答案】 B 【试题解析】 函数 fun(int a, int n)的功能是实现整型数组 a元素的逆置操作。在主函数中当执行 fhn(k, 5)时,对 k10中的子数组 k5=1, 2, 3, 4, 5的首尾元素进行逆置,此时 k10=5, 4, 3, 2, 1, 6, 7, 8, 9, 10。所在循环语句中输出从第 2 7个数组元素时,其值分别为 321678。 【知识模块】 函数和数组 17 【正确答案】 D 【试题解析】 在定义一维数组

27、时,数组的下标应该是一个确定的整数值。要注意的是在定义二维数组时,其第一维下标可以省略,但第二维下标不能省略。 【知识模块】 函数和数组 18 【正确答案】 C 【试题解析】 主函数中指针变量 D指向数组 c, s保存了数组最后一个元素韵地址,那么 s-p为两个地址之间的元素差 5。 【知识模块】 函数和数组 19 【正确答案】 C 【试题解析】 主函数中利用 for循环访问字符串的每一个字符,判断当前字符是否为空格,如果是空格则删除。因此删除字符串 “How are you!“中空格以后,字符串为 Hawarevou!。 【知识模块】 函数和数组 20 【正确答案】 B 【试题解析】 本题考

28、查多维数组和数组指针。 k是一个二维数组, pk是一个指针数组,该数组有 3个元素,每个元素都是一个指向整型对象的指针。选项 A)错误,等号的左边是一个数组地址,不是变量;选颈 B)是把元素 k12赋值给pk0:选项 C)中等号左边不是变量;选项 D)类型不匹配, pk1是指向一个整型对象,而 k是一个二维数组首地址。 【知识模块】 函数和数组 21 【正确答案】 B 【试题解析】 fun函数的功能足求出二维数组 a中第 i行第 i个元素与第 N-1-i元素的差,赋给 bi。在主函数中,把实参二 维数组 x和一维数组 y传递给形参 a和b,最后输出一维数组 y中元素的值。 【知识模块】 函数和

29、数组 22 【正确答案】 B 【试题解析】 最外层的 for语句的自变量 i是列下标,而内部的两个 for语句的自变量 j和 k是行下标。所以由程序段可知,这是利用三重循环对二维数组 a44的元素按列从小到大进行排序,所以最后排完序的结果为 a44=f1, 4, 2, 1,3, 6, 3, 2, 4, 7, 5, 5), 8, 8, 6, 7,最后一个 for语句的功能是输出数组 a44主对角线上的元素,因而 输出为 1, 6, 5, 7。 【知识模块】 函数和数组 23 【正确答案】 C 【试题解析】 在理解二维数组的时候,可以把一个二维数组看成是一个一维数组,每个数组元素又是包含有若干个元

30、素的一维数组,也就是具有行列的结构,二维数组初始化也是在类型说明时给各下标变量赋以初值。二维数组可按行分段赋值,也可按行连续赋值。 【知识模块】 函数和数组 24 【正确答案】 A 【试题解析】 本题考查字符数组的定义和使用。选项 A)定义了一个二维字符数组,第二句是直接给字符数组赋值错误, C语言中不能 直接给字符数组赋值;选项 B)、 C)和 D)都是正确的。 【知识模块】 函数和数组 25 【正确答案】 B 【试题解析】 选项 B)中除了字符串中实际字符之外,还要存储字符串结束标志,应为 5个元素。在 C语言中没有字符串数据类型,因此选项 C)不正确,选项 D)字符数组不一定必须存放字符

31、串,因此没有规定最后一个元素为字符串结束标志。 【知识模块】 函数和数组 26 【正确答案】 B 【试题解析】 sizeof主要用于测试变量所占的实际内存,而 str1en函数主要测试字符串中实际字符的个数 ,字符串 “Hello“占有内存 6个字节,而字符串中共有 5个字符。 【知识模块】 函数和数组 27 【正确答案】 A 【试题解析】 选项 A)计算的是 p字符数组首地址所占的内存字节数,返回值数组中所有元素占有的空间。 *q和 p0分别表示数组 p中下标为 0的字符元素,选项 B)和 D)都可以计算 char型数据占有的字节数。 【知识模块】 函数和数组 28 【正确答案】 C 【试题解析】 在程序中语句 pc=ch;的功能是字符指针 pc指向字符串数组 ch的地址,而 *(ps+5)表示字符串 数组 ch中第 6个字符 z。 【知识模块】 函数和数组 29 【正确答案】 D 【试题解析】 因为字符数组 s中的数组名 s表示的是一个地址常量。所以语句“s+=2; ”不能将指针在当前位置的基础上再向后移动两位。因而程序编译时出错。 【知识模块】 函数和数组

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

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

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