国家二级C语言(函数)机试模拟试卷5
选择题
1.若有代数式(A)
A. sqrt(fabs(pow(n,x)+exp(x)))
B. sqrt(fabs(pow(n,x)+pow(x,e)))
C. sqrt(abs(n^x+e^x))
D. sqrt(fabs(pow(x,n)+exp(x)))
解析:B选项中函数pow(x,e)错误,应该直接使用exp(x)函数。C选项中函数abs(n^x+e^x)错误,应该使用fabs( )返回浮点数的绝对值。D选项中pow(x,n)参数顺序错误。
2.下列叙述中错误的是( )。(A)
A. 可以给指针变量赋一个整数作为地址值
B. 函数可以返回地址值
C. 改变函数形参的值,不会改变对应实参的值
D. 当在程序的开头包含头文件stdio.h时,可以给指针变量赋NULL值
解析:不能将一个整数直接赋给指针变量作为地址,所以A选项是错误的。函数的返回值可以是地址,即指针。函数调用中形参值的变化不会传递给实参。
3.若函数调用时的实参为变量,下列关于函数形参和实参的叙述中正确的是( )。(A)
A. 函数的形参和实参分别占用不同的存储单元
B. 形参只是形式上的存在,不占用具体存储单元
C. 同名的实参和形参占同一存储单元
D. 函数的实参和其对应的形参共占同一存储单元
解析:本题重点考查的是函数的形参和实参。在定义函数时,函数名后面括弧中的变量名称为“形式参数”(简称形参),在主调函数中调用一个函数时,函数名后面括弧中的参数(可以是一个表达式)称为“实际参数”(简称实参)。C语言规定,实参变量对形参变量的数据传递是“值传递”,即单向传递,只由实参传给形参,而不能由形参传回来给实参。在内存中,实参单元与形参单元是不同的单元,因此A选项正确。
4.下列叙述中错误的是( )。(D)
A. C程序必须由一个或一个以上的函数组成
B. 函数调用可以作为一个独立的语句存在
C. 若函数有返回值,必须通过return语句返回
D. 函数形参的值也可以传回给对应的实参
解析:形参是函数定义时由用户定义的形式上的变量。实参是函数调用时,主调函数为被调函数提供的原始数据。在C语言中,实参向形参传送数据的方式是“值传递”,因此D选项正确。
5.下列关于return语句的叙述中正确的是( )。(B)
A. 一个自定义函数中必须有一条return语句
B. 一个自定义函数中可以根据不同情况设置多条return语句
C. 定义成void类型的函数中可以有带返回值的return语句
D. 没有return语句的自定义函数在执行结束时不能返回到调用处
解析:在函数中允许有多个return语句,但每次调用只能有一个return语句被执行,因此只能返回一个函数值,A选项描述错误。定义成void类型的函数,不允许从该函数取得返回值,也不允许使用return语句,C选项描述错误。没有return语句的函数在执行到函数的最后一条语句后会自动返回到调用处,D选项描述错误。因此B选项正确。
6.已定义以下函数int fun(int*p){return*p;}fun函数的返回值是( )。(A)
A. 一个整数
B. 不确定的值
C. 形参P中存放的值
D. 形参P的地址值
解析:返回值为指针变量指向的数据,该数据已被定义为整型,因此A选项正确。
7.下列叙述中错误的是( )。(B)
A. 用户定义的函数中可以没有return语句
B. 用户定义的函数中可以有多个return语句,以便可以调用一次返回多个函数值
C. 用户定义的函数中若没有return语句,则应当定义函数为void类型
D. 函数的return语句中可以没有表达式
解析:本题重点考查函数返回值的相关知识。函数的值只能通过return语句返回主调函数,在函数中允许有多个return语句,但每次调用只能有一个return语句被执行,因此只能返回一个函数值。不返回函数值的函数,可以明确定义为“空类型”,类型说明符为void。因此选择B选项。
8.若各选项中所用变量已正确定义,函数fun中通过return语句返回一个函数值,下列选项中错误的程序是( )。
A
解析:在调用子函数时,应对其进行说明。A选项中,调用时没有对子函数进行说明。B、C选项中,被调用函数在主调函数之前定义,不用说明;D选项中,在主函数中对被调用函数的返回值类型进行了说明。因此选择A选项。
9.有以下程序:
#include<stdio.h>
void fun(int a,int b)
{int t;
t=a:
a=b;
b=t;
}
main( )
{int c[10]={1,2,3,4,5,6,7,8,9,0},i;
for(i=0;i<10;i+=2)
fun(c[i],c[i+1]);
for(i=0;i<10;i++)
printf(\\(A)
A. 1,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,
解析:函数调用中发生的数据传送是单向的,即只能把实参的值传送给形参,而不能把形参的值反向地传送给实参。因此在函数调用过程中,形参的值发生改变,而实参的值不会变化,所以数组c中的元素值并没有变化,选择A选项。
10.有以下程序:
#include<stdio.h>
double f(double x);
main( )
{
double a=0;int i;
for(i=0;i<30;i+=10)a+=f((double)i);
printf(\\(C)
A. 500
B. 401
C. 503
D. 1404
解析:本题重点考查函数的定义和调用。第一次循环,a=0,i=0,返回值a=0*0+1=1;第二次循环,a=1,i=10,返回值a=10*10+1+1=102;第三次循环,a=102,i=20,返回值a=20*20+1+102=503;第四次循环,a=503,i=30,不符合i<30,跳出循环,最后结果输出a=503。
11.有以下程序:
#include<stdio.h>
main( )
{
int m=1,n=2,*p=&m,*q=&n,*r;
r=p:
p=q:
q=r;
printf(\\(D)
A. 2,1,1,2
B. 1,2,1,2
C. 2,1,2,1
D. 1,2,2,1
解析:int m=1,n=2,*p=&m,*q=&n,*r;即指针变量p指向m,指针变量q指向n,r=p;p=q;q=r;即通过指针变量r,将指针p和指针q的指向交换,因此最后输出1,2,2,1。
12.
本文档预览:3600字符,共8059字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载