【计算机类职业资格】国家二级C语言机试(函数和数组)模拟试卷21及答案解析.doc
《【计算机类职业资格】国家二级C语言机试(函数和数组)模拟试卷21及答案解析.doc》由会员分享,可在线阅读,更多相关《【计算机类职业资格】国家二级C语言机试(函数和数组)模拟试卷21及答案解析.doc(10页珍藏版)》请在麦多课文档分享上搜索。
1、国家二级 C语言机试(函数和数组)模拟试卷 21及答案解析(总分:56.00,做题时间:90 分钟)一、选择题(总题数:28,分数:56.00)1.有以下程序 void fun2(char a,char b) main() printf(“cc“,a,b); fun1(); char a=A,b=B; printf(“cc“,a,b); void fun1() fun2(E,F); a=C;b=D; 程序的运行结果是(分数:2.00)A.A B E FB.C D E FC.A B C DD.C D A B2.有以下程序 #include main()int k=4,m=1,p; fun(int
2、 a,int b)int 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(“dn“,p); 程序运行后的输出结果是(分数:2.00)A.8,17B.7,16C.8,8D.7,173.有以下程序 #include func(int n) void main() static int num=1; func(3);func(4);printf(“n“); num=num+n;printf(“d“,num); 程序运行后的输出是(分数:2.00)A.4 5B.3 5C
3、.4 8D.3 44.有以下程序 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(“dn“,k); 执行后的输出结果是(分数:2.00)A.5,5B.5,11C.11,11D.11,55.在 C语言中,只有在使用时才占用内存单元的变量,其存储类型是(分数:2.00)A.extern和 registerB.auto和 staticC.static和 registerD.auto和 reg
4、ister6.有以下程序 #include main()int i,s=1: int fun()static int x=1; for(i=1;i=3;i+) x*=2; s*=fun(); return x; printf(“dn“,s); 程序运行后的输出结果是(分数:2.00)A.0B.10C.30D.647.有以下程序 #include 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(“dn“,s); 程序运行后的输出结果是(分数:2
5、.00)A.9B.8C.7D.108.有以下程序 #include int fun()static int x=1; main()int i,s=1; x+=1; for(i=1;i=5;i+)s+=fun(); return x;) printf(“dn“,s); 程序运行后的输出结果是(分数:2.00)A.11B.21C.6D.1209.有以下程序 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;iA.50B.45C.60D.5510.有以下程序 int f(i
6、nt m) main()int n=0; static int n=0; printf(“d,“,f(+n); n+=m;return n; printf(“dn“,f(n+); 程序运行后的输出结果是(分数:2.00)A.1,1B.1,2C.2,3D.3,311.有以下程序 #include main() int fun() int i,s=1; static int x=1; for(i=1;i=2;i+)s=fun(); x*=2; return x; printf(“dn“,s): 程序运行后的输出结果是(分数:2.00)A.4B.1C.OD.812.有下列程序: int a:4: i
7、nt f(int n) main() int t=0: static int a=5; int s=a,i=0; if(n2)int a=6;t+=a+; for(;iA.28B.24C.32D.3613.已有定义:char a=“xyz“,b=x,y,z;,以下叙述中正确的是(分数:2.00)A.数组 a和 b长度相同B.a数组长度小于 b数组长度C.a数组长度大于 b数组长度D.上述说法都不对14.若有语句:char*line5;,以下叙述中正确的是(分数:2.00)A.定义 line是一个数组,每个数组元素是一个基类型为 char的指针变量B.定义 line是一个指针变量,该变量可以指向
8、一个长度为 5的字符型数组C.定义 line是一个指针数组,语句中的*号称为间址运算符D.定义 line是一个指向字符型函数的指针15.若有定义语句:int m=5,4,3,2,1,i=4;,则下面对 m数组元素的引用中错误的是(分数:2.00)A.m-iB.m2*2C.mm0/D.mmi/16.若有定义谙句:double x5=10,20,30,40,50,*p=x;则错误引用 x数组元素的是(分数:2.00)A.*pB.x5C.*(p+1)D.*x17.若要定义一个具有 5个元素的整型数组,以下错误的定义语句是(分数:2.00)A.int a5=0;B.int b=0,0,0,0,0;C.
9、int c2+3D.int i=5,di;18.以下能正确定义一维数组的选项是(分数:2.00)A.int a5=0,1,2,3,4,5;B.char a=0,1,2,3,4,5;C.char a=A,B,C;D.int a5=“0123“;19.有以下程序 void fun(int a,int n)int i,t;for(i=0;in2;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;i8;i+)printf(“d“,ki); printf(“n“); 程序的运行结
10、果是(分数:2.00)A.876543B.321678C.1098765D.34567820.下列定义数组的语句中,正确的是(分数:2.00)A.int N=10;int xN;B.#define N 10 int xN;C.im x010;D.int x;21.有以下程序 #include void main() int a=2,3,5,4,i; for(i=0;iA.2 0 5 0B.3 3 4 4C.3 0 4 0D.0 3 0 422.有以下程序 #include main() void fun(int a,int b) int c10=1,2,3,4,5,6,7,8,9,0),i;
11、int t; for(i=0;iA.2,1,4,3,6,5,8,7,0,9,B.0,9,8,7,6,5,4,3,2,1,C.1,2,3,4,5,6,7,8,9,0,D.O,l,2,3,4,5,6,7,8,9,23.有下列程序: main() int i,s=0,t=1,2,3,4,5,6,7,8,9; for(i=0;iA.20B.45C.36D.2524.下列选项中,能正确定义数组的语句是(分数:2.00)A.int num;B.int N=2008;int numN;C.int num02008;D.#define N 2008 int humN;25.若要求定义具有 10个 int型元素
12、的一维数组 a,则以下定义语句中错误的是(分数:2.00)A.#define n 5 int a2*n;B.int a5+5;C.#define N 10 int aN;D.int n=10,an;26.下列程序中函数 f的功能是:当 flag为 1时,进行由小到大排序;当 flag为 0时,进行由大到小排序 void flint b,int n,int flag) main() int i,j,t; int a10=5,4,3,2,1,6,7,8,9,10,i; for(i=0;ibj:biA.1,2,3,4,5,6,7,8,9,10,B.3,4,5,6,7,2,1,8,9,10,C.5,4
13、,3,2,l,6,7,8,9,10,D.10,9,8,7,6,5,4,3,2,1,27.有以下程序 #include main() int s12=l,2,3,4,4,3,2,1,1,1,2,3,C5=0,i; for(i=0;iA.4 3 3 2B.2 3 4 4C.1 2 3 4D.1 1 2 328.有下列程序: #includestdioh *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-1j+) fun(c+4,
14、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“); 程序的运行结果是(分数:2.00)A.1,2,3,4,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答案解析(总分:56.00,做题时间:90 分钟)一、选择题(总题数:28,分数:56.00)1.有以下程序 void fun2(char a,char b)
15、 main() printf(“cc“,a,b); fun1(); char a=A,b=B; printf(“cc“,a,b); void fun1() fun2(E,F); a=C;b=D; 程序的运行结果是(分数:2.00)A.A B E FB.C D E F C.A B C DD.C D A B解析:解析:在 fun1()函数之前定义了全局字符变量 a和 b。这两个变量的作用域是从其定义处到整个程序结束。在 fun1()函数之内定义了两个变量 a和 b,并且分别初始化为字符C和D。在 C语言中,若全局变量和某个函数中的局部变量同名,则在该函数中此全局变量被屏蔽,在该函数内访问的是局部变
16、量,与同名的全局变量不发生任何关系。所以在主函数中,执行 fun1()后,变量 a、b 的值分别等于C、D,打印输出 CD,接着执行 fun2(E,F)语句,变量 a、b 的值变为E、F并输出。2.有以下程序 #include main()int k=4,m=1,p; fun(int a,int b)int 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(“dn“,p); 程序运行后的输出结果是(分数:2.00)A.8,17 B.7,16C.8,8D.7,17解
17、析:解析:本题考查了静态变量以及局部变量的同名问题。主函数中调用 fun函数两次,第一次调用fun(4,1),形参 a和 b接收以后,i 值为 3,m 的值为 8,调用结束返回 8存放到 p中并且输出 p的值为8,除了静态变量 m和 i,变量 a,b 撤销。第二次调用 fun(4,1),接收实参值以后,i 为 3+8+1,而 m为 12+4+1,即输出函数值 17。3.有以下程序 #include func(int n) void main() static int num=1; func(3);func(4);printf(“n“); num=num+n;printf(“d“,num); 程
18、序运行后的输出是(分数:2.00)A.4 5B.3 5C.4 8 D.3 4解析:解析:在函数 func(int n)中定义了局部静态变量 num,其初始值等于 l,所以在主函数中执行func(3),输出 4,此时静态变量 num的值等于 4,当退出函数 func(3)时,其值不会丢失,所以当在执行func(4)时,输出 8。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); print
19、f(“dn“,k); 执行后的输出结果是(分数:2.00)A.5,5B.5,11 C.11,11D.11,5解析:解析:子函数 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。5.在 C语言中,只有在使用时才占用内存单元的变量,其存储类型是(分数:2.00)A.extern和 registerB.auto和 staticC.
20、static和 registerD.auto和 register 解析:解析:在 C语言中,动态变量(auto)存储在内存中的动态存储区,在程序运行中,只有当调用变量所在的函数时,系统才临时给变量分配内存单元;全局变量(extern)一经定义,系统为其分配固定的内存单元;静态变量(static),编译系统为其分配固定的存储空间;寄存器变量(register)不保存在内存上,而是直接存储在 CPU的寄存器中。6.有以下程序 #include main()int i,s=1: int fun()static int x=1; for(i=1;i=3;i+) x*=2; s*=fun(); retu
21、rn x; printf(“dn“,s); 程序运行后的输出结果是(分数:2.00)A.0B.10C.30D.64 解析:解析:本题考查了静态局部变量,该局部变量的值在函数调用结束后如果不消失而保留原值。函数fun的功能返回 2的乘方,主函数 fun函数调用 3次,因此第一次 s累乘 2,第二次累乘 4,第三次累乘8,即为 2*4*8,值为 64。7.有以下程序 #include 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(“dn“,s)
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
5000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 职业资格 国家 二级 语言 函数 数组 模拟 试卷 21 答案 解析 DOC
