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

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

1、国家二级 C语言机试(函数和数组)模拟试卷 21及答案与解析 一、选择题 1 有以下程序 void fun2(char a, char b) main() printf(“ c c“, a, b); fun1(); char a=A, b=B; printf(“ c c“, a, b); void fun1() fun2(E, F); a=C; b=D; 程序的运行结果是 ( A) A B E F ( B) C D E F ( C) A B C D ( D) C D A B 2 有以下程序 #include main()int k=4, m=1, p; fun(int a, int b)int

2、 static m=0, i=2; p=fun(k, m); i=i+m+1; printf(“ d, “, p); m=i+a+b; p=fun(k, m); return m; printf(“ d n“, p); 程序运行后的输出结果是 ( A) 8, 17 ( B) 7, 16 ( C) 8, 8 ( D) 7, 17 3 有以下程序 #include func(int n) void main() static int num=1; func(3); func(4); printf(“ n“); num=num+n; printf(“ d“, num); 程序运行后的输出是 ( A)

3、 4 5 ( B) 3 5 ( C) 4 8 ( D) 3 4 4 有以下程序 fun(int x, int y) main() static int m=0, i=2; int j=l, 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 5 在 C语言中,只有在使用时才占用内存单元的变量,其存储类型是 ( A) extern和 regist

4、er ( B) auto和 static ( C) static和 register ( D) auto和 register 6 有以下程序 #include main()int i, s=1: int fun()static int x=1; for(i=1; i int f(int n); main()int a=3, s; int f(int n)static int a=1; s=f(a); n+=a+; s=s+16(a); return n; printf(“ d n“, s); 程序运行后的输出结果是 ( A) 9 ( B) 8 ( C) 7 ( D) 10 8 有以下程序 #i

5、nclude int fun()static int x=1; main()int i, s=1; x+=1; for(i=1; i main() int fun() int i, s=1; static int x=1; for(i=1; i void main() int a=2, 3, 5, 4, i; for(i=0; i main() void fun(int a, int b) int c10=1, 2, 3, 4, 5, 6, 7, 8, 9, 0), i; int t; for(i=0; ibj: bi main() int s12=l, 2, 3, 4, 4, 3, 2, 1

6、, 1, 1, 2, 3, C5=0, i; for(i=0; i *fun函数的功能是将 a所指数组元素从大到小排序 * void fun(int*a, int n) main() int t, i, j; int c10=1, 2, 3, 4, 5, 6, 7, 8, 9, 0), j; for(i=0; in-1 j+) fun(c+4, 6); for(j=i+1; jn; j+) for(i=0; i10; i+)printf(“ d, “, ci); if(ailaj)t=ai; ai=aj; aj=t; printf(“ n“); 程序的运行结果是 ( A) 1, 2, 3, 4

7、, 9, 8, 7, 6, 5, 0, ( B) 0, 9, 8, 7, 6, 5, 1, 2, 3, 4, ( C) 0, 9, 8, 7, 6, 5, 4, 3, 2, 1, ( D) 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 国家二级 C语言机试(函数和数组)模拟试卷 21答案与解析 一、选择题 1 【正确答案】 B 【试题解析】 在 fun1()函数之前定义了全局字符变量 a和 b。这两个变量的作用域是从其定义处到整个程序结束。在 fun1()函数之内定义了两个变 量 a和 b,并且分别初始化为字符 C和 D。在 C语言中,若全局变量和某个函数中的局部变量同名,则在该

8、函数中此全局变量被屏蔽,在该函数内访问的是局部变量,与同名的全局变量不发生任何关系。所以在主函数中,执行 fun1()后,变量 a、 b的值分别等于 C、 D,打印输出 CD,接着执行 fun2(E, F)语句,变量 a、 b的值变为E、 F并输出。 【知识模块】 函数和数组 2 【正确答案】 A 【试题解析】 本题考查了静态变量以及局部变量的同名问题。主函数中调用 fun函数两次,第一次调 用 fun(4, 1),形参 a和 b接收以后, i值为 3, m的值为 8,调用结束返回 8存放到 p中并且输出 p的值为 8,除了静态变量 m和 i,变量 a,b撤销。第二次调用 fun(4, 1),

9、接收实参值以后, i为 3+8+1,而 m为 12+4+1,即输出函数值 17。 【知识模块】 函数和数组 3 【正确答案】 C 【试题解析】 在函数 func(int n)中定义了局部静态变量 num,其初始值等于 l,所以在主函数中执行 func(3),输出 4,此时静态变量 num的值等于 4,当退出函数 func(3)时,其值不会丢失,所以当 在执行 func(4)时,输出 8。 【知识模块】 函数和数组 4 【正确答案】 B 【试题解析】 子函数 fun(int x, int y),将变量 m和 i声明为局部静态变量,因此第 1次调用主函数后,局部静态变量 m和 i的值为 5和 3,

10、第 1次函数调用结束时,它们的值不释放保持不变,所以第 2次调用时,局部静态变量 m和 i的初始值分别为 5和 3,即在执行 “i+=m+1”时, i的值为 9,因此最终 m的值为 11。 【知识模块】 函数和数组 5 【正确答案】 D 【试题解析】 在 C语言中,动态变量 (auto)存储在内存中的动态存储区,在程序运行中,只有当调用变量所在的函数时,系统才临时给变量分配内存单元;全局变量 (extern)一经定义,系统为其分配固定的内存单元;静态变量 (static),编译系统为其分配固定的存储空间;寄存器变量 (register)不保存在内存上,而是直接存储在 CPU的寄存器中。 【知识

11、模块】 函数和数组 6 【正确答案】 D 【试题解析】 本题考查了静态局部变量,该局部变量的值在函数调用结束后如果不消失而保留原值。函数 fun的功能返回 2的乘方,主函数 fun函数调用 3次 ,因此第一次 s累乘 2,第二次累乘 4,第三次累乘 8,即为 2*4*8,值为 64。 【知识模块】 函数和数组 7 【正确答案】 A 【试题解析】 在主函数中第一次调用 f(a)时,得到变量 s的值等于 4,在第二次调用 f(a)时,在子函数 f中由于变量 a是一个局部静态变量,所以这次其值等于2,因而在主函数中第二次调用 f(a)后,其返回值等于 5,最后变量 s的值等于 9。 【知识模块】 函

12、数和数组 8 【正确答案】 B 【试题解析】 这道试题主要考查了局部静态变量的应用。在函数 fun()中定义了局部静态变量整型 x,其初值等于 1,在主函数中循环执行 5次,第一次变量 s的值等于 3,变量 x的值等于 2,第二次变量 s的值等于 6,变量 x的值等于 3,第三次变量 s的值等于 10,变量 x的值等于 4,第四次变量 s的值等于 15,变量 x的值等于 5,第五次变量 s的值等于 21,变量 x的值等于 6。 【知识模块】 函数和数组 9 【正确答案】 C 【试题解析】 在函数 int fun(int x, int n)的定义中,变量 sum使用了 static修饰符,这说明

13、了变量 sum为一个静态局部变量。由于在整个程序运行期问, 静态局部变量在内存中的静态存储区中占据着永久的存储单元。即使退出函数之后,下次再进入该函数时,静态局部变量继续使用原来存储单元中原来的值。函数 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。 【知识模块】 函数和数组 10 【正确答案】 B 【试题解析】 由于在函数 f中,变量 n为静态局 部变量,所以在主函数中第一次调

14、用函数 f后,变量 n的值等于 1,当第二调用函数 f时,在函数 f的内部静态局部变量 n的值仍然保留等于 1,所以返回函数值等于 2。 【知识模块】 函数和数组 11 【正确答案】 A 【试题解析】 在子函数 fun()中定义局部静态变量 x,其初值等于 1,然后再把其值扩大 1倍后返回。在主函数中执行 for循环语句 2次,调用函数 fun()两次,所以变量 s的值等于 4。这里要强调的一点是当函数 fun()执行完毕后,局部静态变量 x的值不会丢失,仍然有效。 【知识模块】 函数和数组 12 【正确答案】 A 【试题解析】 程序中定义了全局整型变量 a=4。在 int f(int n)函

15、数中定义了局部静态整型变量并进行了初始化即 static int a=5。在 int f(int n)函数中对 n是否是偶数进行判断,如果 n是奇数,则函数的返回值为 11,局部静态整型变量 a=6;如果 n是偶数,则函数的返回值为 12,局部静态整型变量 a=6。所以在 main()函数中循环首先执行 s+=f(0)语句,而 f(0)返回值 12,所以第一次循环结束 s的值等于4+12=16:第二次开始执行 f(1)时,在 f(1)中执行 “if(n 2)int a=6; t+=a+; ”和“return t+a+; ”这两条语句,这时 t=6, a=6(静态局部变量第一次循环后其值加 1值

16、不释放,执行第二次循环量,其值仍有效 ),所以 f(1)的返回值等于 12。再在主函数中执行 s+=f1)语句,即 16+12=28。 【知识模块】 函数和数组 13 【正确答案】 C 【试题解析】 本题考查字符数组的定义。 char“a=“xyz“, b=x, y, z; ”定义了两个字符数组 a和 b, a数组存放的是一个字符串,字 符串以 “ 0”作为结束标志,数组 a的长度必须加上结束符长度 1,因此数组 a的长度为 4。数组 b中有三个元素,长度为 3。 【知识模块】 函数和数组 14 【正确答案】 A 【试题解析】 本题考查指针数组的定义。本题中 line是一个指针数组,有 5个元

17、素,每个元素都是一个指针变量。 【知识模块】 函数和数组 15 【正确答案】 C 【试题解析】 本题考查数组的使用。 m是一个一维数组,长度为 5,因此下标范围是 0-4。选项 A中 -i是先自减,然后使用 i,因此访问的是元素 m3;选项 B访问的 是元素 m4;选项 C中内部的 m0值是 5,因此实际访问是的 m5,下标超出范围;选项 D中 mi的值是 1,访问元素 m1。 【知识模块】 函数和数组 16 【正确答案】 B 【试题解析】 本题考查数组和指向数组的指针。 x是一个一维 double类型的数组,长度为 5,下标范围是 0-4,指针 p指向数组 x。选项 A中 *p是取数组首元素

18、x0的值:选项 B下标超出范围;选项 C, p+1表示 x1的地址,因此 *(p+1)是取x1元素值;选项 D中,数组名 x本身代表数组的首地址,因此 *x表示取元素 x0的值。 【知识模块】 函数和数组 17 【正确答案】 D 【试题解析】 本题考查一维数组的定义, C语言中一维数组的定义方式为:类型说明符 数组名 常量表达式 ;。 选项 A正确:选项 B初始化了 5个元素,因此数组长度为 5;选项 C常量表达式 2+3的值为 5,正确:选项 D数组长度不是常量表达式,错误。 【知识模块】 函数和数组 18 【正确答案】 B 【试题解析】 本题考查一维数组的定义, C语言中一维数组的定义方式

19、为:类型说明符 数组名 常量表达式 ;。 选项 A定义的数组长度为 5,大括号里面的元素个数为 6,超过数组长度,错误;选项 B正确,编译器会根据初始化元素的个数自动计算数组的长度。选项 C中没有使用 “”,不能定义一维数组:选项 D中数组元素的初始化必须使用大括号。 【知识模块】 函数和数组 19 【正确答案】 B 【试题解析】 函数 fun(int a, int n)的功能是实现整型数组 a元素的逆置操作。在主函数中当执行 fun(k, 5)时,对 k10中的子数组 k5=1, 2, 3, 4, 5的首尾元素进行逆置,此时 k10=5, 4, 3, 2, 1, 6, 7, 8, 9, 10

20、。所在循环语句中输出从第 2 7个数组元素时,其值分别为 321678。 【知识模块】 函数和数组 20 【正确答案】 B 【试题解析】 数组说明的一般形式为:类型说明符数组名 常量表达式 :其中类型说明符可以是任一种基本数据类型或构造数据类型,数组名是定义的数组标识符。常量表达式表示数据元素的个数,也就是数组的长度,必须是整型常量。 【知识模块】 函数和数组 21 【正确答案】 C 【试题解析】 在主函数的 for循环语句中,当循环变量 i的值等于 0, 2时,执行switch中的 case 0语句,分别对数组元素 a0和 a2加 1和减 1,所以 a0的值等于 3, a2等于 4。当循环变

21、量 i的值等于 1, 3时,执行 switch中的 case 1语句,把数组元素 a1和 a3的值赋为 0。所以输出数组 a的元素,其结果为 3040。 【知识模块】 函数和数组 22 【正确答案】 C 【试题解析】 C语言规定,实参变量对形参变量的数据传递是 “值传递 ”,即单向传递,只由实参传给形参,而不能由形参传回来给实参。在调用函数时,给形参分配存储单元,并将实参 对应的值传递给形参,调用结束后,形参单元被释放,实参单元仍保留并维持原值。由此可知,在本题中,函数 fun(int a, int b)的功能是实现形参整形变量 a和 b值的互换。当在主函数中调用 fhn(ci, ci+1)时

22、,把实参变量 ci和 ci+1的值赋给形参变量 a和 b,执行完函数劬 (ci, ci+1)时,形参变量 a和 b的值发生了互换,实参变量 ci和 ci+1的值并没有发生互换,所以输出的值为 1, 2, 3, 4, 5, 6, 7, 8, 9, 0。 【知识模块】 函数和数组 23 【正确答案】 D 【试题解析】 本题在主函数中定义了一维整型数组 t=1, 2, 3, 4, 5, 6, 7,8, 9;然后在 for循环语句中自变量 i从 0开始,每次自加 2,执行 s+=*(t+i)语句,因为 C语言规定数组名代表数组的首地址,也就是第一个元素的地址。因此*(t+i)代表数组的第 i+1个元素

23、。所以程序运行的结果是 1+3+5+7+9_25,即变量 s的值等于 25。 【知识模块】 函数和数组 24 【正确答案】 D 【试题解析】 在定义一维数组时,数组的下标应该是一个确定的整数值。要注意的是在定义二维数 组时,其第一维下标可以省略,但第二维下标不能省略。 【知识模块】 函数和数组 25 【正确答案】 D 【试题解析】 在 C语言中,定义一维数组的语句形式为:类型名数组名 整型常量表达式 。在选项 D中, n是一个整型的变量。 【知识模块】 函数和数组 26 【正确答案】 B 【试题解析】 主函数中进行了两次 f函数的调用。第一次传递给形参数组 b的地址为元素 a2的地址, n接收

24、数据位 5,因此数组 b中元素为 3, 2, 1, 6, 7,此时 nag的值为 0,进行由大到小排序,而数组 b和实参数组 a共 用一段存储空间,第一次调用结束以后,数组 a的值为 5, 4, 7, 6, 3, 2, 1, 8, 9, 10。第二次调用 f函数,形参数组接收实参数组 a的首地址,取 5个元素,由小到大排序,调用结束以后,数组 a的值为 3, 4, 5, 6, 7, 2, 1, 8, 9, 10。 【知识模块】 函数和数组 27 【正确答案】 A 【试题解析】 本题考查 for语句的循环控制,首先定义了两个数组并赋予了初始值,第一个 for循环语句循环 12次遍历 s数组的各个元素,将 s中的原素值作为c数组中的下标,使相应的值自加。例如当 i=0, cs0+为 c1+,其值变为1,当执行 i=1, 211 后, c1、 c2、 c3、 c4分别为 4、 3、 3、 2,故选项 A为正确的运行结果。 【知识模块】 函数和数组 28 【正确答案】 A 【试题解析】 fun()函数的功能是对数组 a的元素从大到小进行排序。所以在主函数执行 fun(c+4, 6)语句时,将从数组 c的第 5个元素开始的后 6个元素进行从大到小排序。排序之后,数组 c的内容变为 1, 2, 3, 4, 9, 8, 7, 6, 5, 0。 【知识模块】 函数和数组

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

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

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