1、国家二级 C 语言(函数)机试模拟试卷 4 及答案解析(总分:46.00,做题时间:90 分钟)一、选择题(总题数:23,分数:46.00)1.若有代数式 (分数:2.00)A.sqrt(fabs(pow(n,x)+exp(X)B.sqrt(fabs(pow(n,x)+pow(x,e)C.sqrt(abs(nx+ex)D.sqrt(fabs(pow(x,n)+exp(x)2.下列叙述中错误的是( )。(分数:2.00)A.可以给指针变量赋一个整数作为地址值B.函数可以返回地址值C.改变函数形参的值,不会改变对应实参的值D.当在程序的开头包含头文件 stdioh 时,可以给指针变量赋 NULL
2、值3.若函数调用时的实参为变量,下列关于函数形参和实参的叙述中正确的是( )。(分数:2.00)A.函数的形参和实参分别占用不同的存储单元B.形参只是形式上的存在,不占用具体存储单元C.同名的实参和形参占同一存储单元D.函数的实参和其对应的形参共占同一存储单元4.下列叙述中错误的是( )。(分数:2.00)A.C 程序必须由一个或一个以上的函数组成B.函数调用可以作为一个独立的语句存在C.若函数有返回值,必须通过 return 语句返回D.函数形参的值也可以传回给对应的实参5.下列关于 return 语句的叙述中正确的是( )。(分数:2.00)A.一个自定义函数中必须有一条 return 语
3、句B.一个自定义函数中可以根据不同情况设置多条 return 语句C.定义成 void 类型的函数中可以有带返回值的 return 语句D.没有 return 语句的自定义函数在执行结束时不能返回到调用处6.已定义以下函数 int fun(int*p)return*p;fun 函数的返回值是( )。(分数:2.00)A.一个整数B.不确定的值C.形参 p 中存放的值D.形参 P 的地址值7.下列叙述中错误的是( )。(分数:2.00)A.用户定义的函数中可以没有 return 语句B.用户定义的函数中可以有多个 return 语句,以便可以调用一次返回多个函数值C.用户定义的函数中若没有 re
4、turn 语句,则应当定义函数为 void 类型D.函数的 return 语句中可以没有表达式8.若各选项中所用变量已正确定义,函数 fun 中通过 return 语句返回一个函数值,下列选项中错误的程序是( )。(分数:2.00)A.main() x=fun(2,10); float fun(int a,int B)B.float fun(int a,int B) main() x=fun(i,j);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
5、=fun(i,j); float fun(int a,int B)9.有以下程序:#includestdiohvoid fun(int a,int b)int t;t=a:a=b;b=t;main()int c10=1,2,3,4,5,6,7,8,9,0,i;for(i=0;i10;i+=2)fun(ci,ci+1);for(i=0;i10;i+)printf(“d,“,ci);printf(“n“);程序的运行结果是( )。(分数:2.00)A.0,2,3,4,5,6,7,8,9,0,B.2,1,4,3,6,5,8,7,0,9,C.0,9,8,7,6,5,4,3,2,1,D.0,1,2,3,
6、4,5,6,7,8,9,10.有以下程序:#includestdiohdouble f(double x);main()doublea =0;int i;for(i=0;i30;i+=10)a+=f(double)i);printf(“30fn“,a);double f(double x)return x*x+1:程序的运行结果是( )。(分数:2.00)A.500B.401C.503D.140411.有以下程序:#includestdiohmain()int m=1,n=2,*p=&m,*q=&n,*r;r=p:p=q:q=r;printf(“d,d,d,dn“,m,n,*p,*q);程序的
7、运行结果是( )。(分数:2.00)A.2,1,1,2B.1,2,1,2C.2,1,2,1D.1,2,2,112.若有函数首部 int fun(double x10,int,*n),则下列针对此函数的函数声明语句中正确的是( )。(分数:2.00)A.int fun(double,int);B.int fun(double*,int*);C.int fun(double*x,int n);D.int fun(double x,int*n);13.有以下程序:#includestdiohint f(int x);main()int n=1,m;m=f(f(f(n);pfinff(“dn“,m);
8、int f(int x)return x*2;程序的运行结果是( )。(分数:2.00)A.8B.2C.4D.114.有以下程序:#includestdiohint fun(int x,int y)if(x!=y)return(x+y)2);else return(x);main()int a=4,b=5,c=6;pfinff(“dn“,fun(2*a,fun(b,c);程序的运行结果是( )。(分数:2.00)A.6B.3C.8D.1215.有以下程序:#includestdiohint f(int x,int y)return(y-x)*x);main()int a=3,b=4,c=5,d
9、;d=f(f(a,b),f(a,c);pfinff(“dn“,d);程序的运行结果是( )。(分数:2.00)A.7B.10C.8D.916.设有如下函数定义:#includestdiohint fun(int k)if(k1)return0;else if(k=1)return1;else return fun(k-1)+1;若执行调用语句 n=fun(3);,则函数 fun 总共被调用的次数是( )。(分数:2.00)A.2B.3C.4D.517.有以下程序:#includestdiohint fun(int x)int p;if(x=0|x=1)return(3);p=x-fun(x-2
10、);return p;main()printf(“dn“,fun(7);程序的运行结果是( )。(分数:2.00)A.2B.3C.7D.018.有以下程序:#includestdiohvoid f(int b)int i;for(i=2;i6;i+)bi*=2;main()int a10=1,2,3,4,5,6,7,8,9,10,i;f(a);for(i=0;i10;i+)pfinff(“d,“,ai);程序的运行结果是( )。(分数:2.00)A.1,2,3,4,5,6,7,8,9,10,B.1,2,6,8,10,12,7,8,9,10,C.1,2,3,4,10,12,14,16,9,10,
11、D.1,2,6,8,10,12,14,16,9,10,19.在一个 C 源程序文件中所定义的全局变量,其作用域为( )。(分数:2.00)A.由具体定义位置和 extern 说明来决定范围B.所在程序的全部范围C.所在函数的全部范围D.所在文件的全部范围20.在 C 语言中,只有在使用时才占用内存单元的变量,其存储类型是( )。(分数:2.00)A.auto 和 staticB.exterrl 和 registerC.auto 和 registerD.static 和 register21.有以下程序:#includestdiohint fun()static int x=1;x*=2:ret
12、urn x;main()int i,s=1;for(i=1;i=3;i+)s*=fun();printf(“dn“,s);程序的运行结果是( )。(分数:2.00)A.10B.30C.0D.6422.有以下程序:#includestdiohint fun(int x,int n)static int sum=0,i;for(i=0;in;i+)sum+=xi;return summain()int a=1,2,3,4,5,b=6,7,8,9,s=0;s=fun(a,5)+fun(b,4);printf(“dn“,s);程序的运行结果是( )。(分数:2.00)A.55B.50C.45D.602
13、3.下列叙述中错误的是( )。(分数:2.00)A.C 程序函数中定义的自动变量,系统不自动赋确定的初值B.在 C 程序的同一函数中,各复合语句内可以定义变量,其作用域仅限本复合语句内C.C 程序函数中定义的赋有初值的静态变量,每调用一次函数赋一次初值D.C 程序函数的形参不可以说明为 static 型变量国家二级 C 语言(函数)机试模拟试卷 4 答案解析(总分:46.00,做题时间:90 分钟)一、选择题(总题数:23,分数:46.00)1.若有代数式 (分数:2.00)A.sqrt(fabs(pow(n,x)+exp(X) B.sqrt(fabs(pow(n,x)+pow(x,e)C.s
14、qrt(abs(nx+ex)D.sqrt(fabs(pow(x,n)+exp(x)解析:解析:B 选项中函数 pow(x,e)错误,应该直接使用 exp(x)函数。C 选项中函数 abs(nx+ex)错误,应该使用 fabs()返回浮点数的绝对值。D 选项中 pow(x,n)参数顺序错误。2.下列叙述中错误的是( )。(分数:2.00)A.可以给指针变量赋一个整数作为地址值 B.函数可以返回地址值C.改变函数形参的值,不会改变对应实参的值D.当在程序的开头包含头文件 stdioh 时,可以给指针变量赋 NULL 值解析:解析:不能将一个整数直接赋给指针变量作为地址,所以 A 选项是错误的。函数
15、的返回值可以是地址,即指针。函数调用中形参值的变化不会传递给实参。3.若函数调用时的实参为变量,下列关于函数形参和实参的叙述中正确的是( )。(分数:2.00)A.函数的形参和实参分别占用不同的存储单元 B.形参只是形式上的存在,不占用具体存储单元C.同名的实参和形参占同一存储单元D.函数的实参和其对应的形参共占同一存储单元解析:解析:本题重点考查的是函数的形参和实参。在定义函数时,函数名后面括弧中的变量名称为“形式参数”(简称形参),在主调函数中调用一个函数时,函数名后面括弧中的参数(可以是一个表达式)称为“实际参数”(简称实参)。C 语言规定,实参变量对形参变量的数据传递是“值传递”,即单
16、向传递,只由实参传给形参,而不能由形参传回来给实参。在内存中,实参单元与形参单元是不同的单元,因此 A 选项正确。4.下列叙述中错误的是( )。(分数:2.00)A.C 程序必须由一个或一个以上的函数组成B.函数调用可以作为一个独立的语句存在C.若函数有返回值,必须通过 return 语句返回D.函数形参的值也可以传回给对应的实参 解析:解析:形参是函数定义时由用户定义的形式上的变量。实参是函数调用时,主调函数为被调函数提供的原始数据。在 C 语言中,实参向形参传送数据的方式是“值传递”,因此 D 选项正确。5.下列关于 return 语句的叙述中正确的是( )。(分数:2.00)A.一个自定
17、义函数中必须有一条 return 语句B.一个自定义函数中可以根据不同情况设置多条 return 语句 C.定义成 void 类型的函数中可以有带返回值的 return 语句D.没有 return 语句的自定义函数在执行结束时不能返回到调用处解析:解析:在函数中允许有多个 return 语句,但每次调用只能有一个 return 语句被执行,因此只能返回一个函数值,A 选项描述错误。定义成 void 类型的函数,不允许从该函数取得返回值,也不允许使用return 语句,C 选项描述错误。没有 return 语句的函数在执行到函数的最后一条语句后会自动返回到调用处,D 选项描述错误。因此 B 选项
18、正确。6.已定义以下函数 int fun(int*p)return*p;fun 函数的返回值是( )。(分数:2.00)A.一个整数 B.不确定的值C.形参 p 中存放的值D.形参 P 的地址值解析:解析:返回值为指针变量指向的数据,该数据已被定义为整型,因此 A 选项正确。7.下列叙述中错误的是( )。(分数:2.00)A.用户定义的函数中可以没有 return 语句B.用户定义的函数中可以有多个 return 语句,以便可以调用一次返回多个函数值 C.用户定义的函数中若没有 return 语句,则应当定义函数为 void 类型D.函数的 return 语句中可以没有表达式解析:解析:本题重
19、点考查函数返回值的相关知识。函数的值只能通过 return 语句返回主调函数,在函数中允许有多个 return 语句,但每次调用只能有一个 return 语句被执行,因此只能返回一个函数值。不返回函数值的函数,可以明确定义为“空类型”,类型说明符为 void。因此选择 B 选项。8.若各选项中所用变量已正确定义,函数 fun 中通过 return 语句返回一个函数值,下列选项中错误的程序是( )。(分数:2.00)A.main() x=fun(2,10); float fun(int a,int B) B.float fun(int a,int B) main() x=fun(i,j);C.f
20、loat 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,int B)解析:解析:在调用子函数时,应对其进行说明。A 选项中,调用时没有对子函数进行说明。B、C 选项中,被调用函数在主调函数之前定义,不用说明;D 选项中,在主函数中对被调用函数的返回值类型进行了说明。因此选择 A 选项。9.有以下程序:#includestdiohvoid fun(int a,int b)int t;t=a:a=b;b=t;mai
21、n()int c10=1,2,3,4,5,6,7,8,9,0,i;for(i=0;i10;i+=2)fun(ci,ci+1);for(i=0;i10;i+)printf(“d,“,ci);printf(“n“);程序的运行结果是( )。(分数:2.00)A.0,2,3,4,5,6,7,8,9,0, B.2,1,4,3,6,5,8,7,0,9,C.0,9,8,7,6,5,4,3,2,1,D.0,1,2,3,4,5,6,7,8,9,解析:解析:函数调用中发生的数据传送是单向的,即只能把实参的值传送给形参,而不能把形参的值反向地传送给实参。因此在函数调用过程中,形参的值发生改变,而实参的值不会变化,
22、所以数组 c 中的元素值并没有变化,选择 A 选项。10.有以下程序:#includestdiohdouble f(double x);main()doublea =0;int i;for(i=0;i30;i+=10)a+=f(double)i);printf(“30fn“,a);double f(double x)return x*x+1:程序的运行结果是( )。(分数:2.00)A.500B.401C.503 D.1404解析:解析:本题重点考查函数的定义和调用。第一次循环,a=0,i=0,返回值 a=0*0+1=1;第二次循环,a=1,i=10,返回值 a=10*10+1+1=102;第
23、三次循环,a=102,i=20,返回值 a=20*20+1+102=503;第四次循环,a=503,i=30,不符合 i30,跳出循环,最后结果输出 a=503。11.有以下程序:#includestdiohmain()int m=1,n=2,*p=&m,*q=&n,*r;r=p:p=q:q=r;printf(“d,d,d,dn“,m,n,*p,*q);程序的运行结果是( )。(分数:2.00)A.2,1,1,2B.1,2,1,2C.2,1,2,1D.1,2,2,1 解析:解析:int m=1,n=2,*p=&m,*q=&n,*r;即指针变量 p 指向 m,指针变量 q 指向n,r=p;p=q
24、;q=r;即通过指针变量 r,将指针 P 和指针 q 的指向交换,因此最后输出 1,2,2,1。12.若有函数首部 int fun(double x10,int,*n),则下列针对此函数的函数声明语句中正确的是( )。(分数:2.00)A.int fun(double,int);B.int fun(double*,int*); C.int fun(double*x,int n);D.int fun(double x,int*n);解析:解析:函数声明的一般形式为:类型说明符被调函数名(类型形参,类型形参);或为类型说明符被调函数名(类型,类型)。由于函数首部为 int fun(double x
25、10j,int*n),因此 B 选项正确。13.有以下程序:#includestdiohint f(int x);main()int n=1,m;m=f(f(f(n);pfinff(“dn“,m);int f(int x)return x*2;程序的运行结果是( )。(分数:2.00)A.8 B.2C.4D.1解析:解析:第一次调用 m=f(f(f(1),第二次为 m=f(f(2),第三次为 m=f(4),即返回值为 8。14.有以下程序:#includestdiohint fun(int x,int y)if(x!=y)return(x+y)2);else return(x);main()i
26、nt a=4,b=5,c=6;pfinff(“dn“,fun(2*a,fun(b,c);程序的运行结果是( )。(分数:2.00)A.6 B.3C.8D.12解析:解析:本题中第一次调用为 fun(8,fun(5,6),因为 fun(5,6)的返回值为 5,所以第二次调用为 fun(8,5)=6,所以选择 A 选项。15.有以下程序:#includestdiohint f(int x,int y)return(y-x)*x);main()int a=3,b=4,c=5,d;d=f(f(a,b),f(a,c);pfinff(“dn“,d);程序的运行结果是( )。(分数:2.00)A.7B.10
27、C.8D.9 解析:解析:调用 f(a,b)函数返回 3,调用 f(a,c)函数返回 6,所以外层调用 f(f(a,b),f(a,c):即调用 f(3,6)函数返回 9。16.设有如下函数定义:#includestdiohint fun(int k)if(k1)return0;else if(k=1)return1;else return fun(k-1)+1;若执行调用语句 n=fun(3);,则函数 fun 总共被调用的次数是( )。(分数:2.00)A.2B.3 C.4D.5解析:解析:首先 n=fun(3),3 被当作参数传递进去,这就进行了一次调用,3 被当作参数传进去后,程序会执行
28、这句 else return fun(k-1)+1;这就调用了第二次,而参数是 3-1 也就是 2。2 被当作参数传进去后,程序会执行这句 else return fun(k-1)+1;这就调用了第三次,而参数是 2-1 也就是 1。1 被当作参数传进去后,程序会执行这句 else if(k=1)return1;不再递归调用,所以最终结果为 3 次。17.有以下程序:#includestdiohint fun(int x)int p;if(x=0|x=1)return(3);p=x-fun(x-2);return p;main()printf(“dn“,fun(7);程序的运行结果是( )。(
29、分数:2.00)A.2 B.3C.7D.0解析:解析:因为 fun(int x)是一个递归函数,所以主函数中 fun(7)经过 3 次递归调用,其过程可以描述为:fun(7)=7-fun(5)=7-(5-fun(3)=7-(5-(3-fun(1)=7-(5-(3-3)=7-5=2,所以最后的输出结果为2,因此 A 选项正确。18.有以下程序:#includestdiohvoid f(int b)int i;for(i=2;i6;i+)bi*=2;main()int a10=1,2,3,4,5,6,7,8,9,10,i;f(a);for(i=0;i10;i+)pfinff(“d,“,ai);程序
30、的运行结果是( )。(分数:2.00)A.1,2,3,4,5,6,7,8,9,10,B.1,2,6,8,10,12,7,8,9,10, C.1,2,3,4,10,12,14,16,9,10,D.1,2,6,8,10,12,14,16,9,10,解析:解析:数组名是常量,表示的是数组首元素的地址。当执行 f(a)的时候,由于传递的是首地址,相当于直接对数组 a 进行操作,所以从数组 a 的第 3 个元素 a2到元素 a5,每个元素值扩大两倍,因此 B 选项正确。19.在一个 C 源程序文件中所定义的全局变量,其作用域为( )。(分数:2.00)A.由具体定义位置和 extern 说明来决定范围
31、B.所在程序的全部范围C.所在函数的全部范围D.所在文件的全部范围解析:解析:全局变量的作用域是从声明处到文件的结束,所以选择 A 选项。20.在 C 语言中,只有在使用时才占用内存单元的变量,其存储类型是( )。(分数:2.00)A.auto 和 staticB.exterrl 和 registerC.auto 和 register D.static 和 register解析:解析:auto:函数中的局部变量,动态地分配存储空间,数据存储在动态存储区中,在调用该函数时,系统会给它们分配存储空间,在函数调用结束后自动释放这些存储空间。register:为了提高效率,C 语言允许将局部变量的值放
32、在 CPU 中的寄存器中,这种变量叫“寄存器变量”,只有局部自动变量和形参可以作为寄存器变量。extern:外部变量(即全局变量)是在函数的外部定义的,它的作用域为从变量定义处开始,到本程序文件的末尾。如果外部变量不在文件的开头定义,其有效的作用范围只限于定义处到文件终了。static:静态局部变量,属于静态存储类别,在静态存储区内分配存储单元,在程序整个运行期间都不释放。21.有以下程序:#includestdiohint fun()static int x=1;x*=2:return x;main()int i,s=1;for(i=1;i=3;i+)s*=fun();printf(“dn“
33、,s);程序的运行结果是( )。(分数:2.00)A.10B.30C.0D.64 解析:解析:本题中静态局部变量 x,在静态存储区内分配存储单元,在程序整个运行期间都不释放。所以第 1 次循环 s 的值为 2;第 2 次循环中,返回的 x 值为 4,所以 s 的值为 8;第 3 次循环,返回的 x 值为 8,所以 s 的值为 64。22.有以下程序:#includestdiohint fun(int x,int n)static int sum=0,i;for(i=0;in;i+)sum+=xi;return summain()int a=1,2,3,4,5,b=6,7,8,9,s=0;s=f
34、un(a,5)+fun(b,4);printf(“dn“,s);程序的运行结果是( )。(分数:2.00)A.55B.50C.45D.60 解析:解析:内部静态变量是始终存在的,当函数被调用退出后,内部静态变量会保存数据,再次调用该函数时,以前调用时的数值仍然保留着。fun(a,5)的值是 15,再次调用后 sum=15,所以 fun(b,4)=45,s=45+15=60,因此 D 选项正确。23.下列叙述中错误的是( )。(分数:2.00)A.C 程序函数中定义的自动变量,系统不自动赋确定的初值B.在 C 程序的同一函数中,各复合语句内可以定义变量,其作用域仅限本复合语句内C.C 程序函数中定义的赋有初值的静态变量,每调用一次函数赋一次初值 D.C 程序函数的形参不可以说明为 static 型变量解析:解析:A 选项描述正确,自动变量未赋初值,为随机值;B 选项描述正确,变量定义除在函数开始位置外,在复合语句开始也可以;C 选项描述是错误的,函数内的静态变量只在第一次调用时赋值,以后调用保留上次的值;D 选项描述也正确,形参属于局部变量,占用动态存储区,而 static 型变量占用静态存储区。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1