全国计算机等级考试二级C语言考前复习资料(真的非常全的笔试资(10)

2019-08-31 13:16

实参。实参和形参在数据上、类型上、顺序上要一致。在函数调用过程中,形参的变化不会改变实参的变化。 例1、(09-09-24)有以下程序 #include void fun(int p)

{ int d=2; p=d++; printf(“%d”,p); } main() { int a=1;

fun(a); printf(“%d\\n”,a);

} 程序运行后的输出结果是( C ) A) 32 B)12 C)21 D)22

【解析】此题考点为函数参数的传递。C语言中函数参数的传递是值传递,是把实参的值传给形参,是单向传递,形参的改变不会影响到实参的值。程序中,把实参a的值传给形参p,p=1,然后p=d++,再次赋值后p=2,输出p的值2。返回到主程序中,输出a的值为1。(形参p的改变不会影响到实参a的值,a的值仍为1).因此答案为C.

? 在传递数值时,形参和实在分别占据不同的存储单元(形参变量只有在被调用时才分配内存单元,调用结束后,即刻释放分配的内存单元)

例1、(07-04-25)若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的是( D)

A)函数的实参和其对应的形参共占同一存储单元

B)形参只是形式上的存在,不占用具体存储单元

C)同名的实参和形参占同一存储单元

D)函数的形参和实参分别占用不同的存储单元

【解析】本题考点是函数的参数定义,在函数中,主调数中里边的参数叫做实参,而被调函数里边的参数叫做形参,当函数传递时,传递的是值,它们占用的不是同一存储单元,而且在传递中,是单向传的,由实参传向形参。

? “传值”与“传址”的区别:传数值的话,形参的变化不会改变实参的变化。传地址的话,形参的变化就有可能改变实参所对应的量。 例1:(10-03-26)有以下程序 #include void fun(char *c,int d) { *c=*c+1; d=d+1; printf(“%c,%c”,*c,d); }

main()

{ char b=?a?, a=?A?; fun(&b,a);

printf((“%c,%c\\n”,b,a);

} 程序运行后的输出结果是( A)

A) b,B,b,A B)b,B,B,A C)a,B,B,a D)a,B,a,B 4、知识点:函数调用的一般形式和调用方式

第 46 页 共 78 页

? 函数调用的一般形式为:函数名(实际参数表); 例1、(06-09-32)若有以下函数首部 实参可以是常数、变量或其他构造类型数据及表达式,也 int fun(double x[10],int *n) 可以没有(当为无参函数时) 则下面针对此函数声母语句中正确的是(D) ? 函数调用的方式: A)int fun(double x,int *n); B)int fun(double,int); (1)函数表达式:函数作为表达式中的一项出现在表达式 C)int fun(double*x,int n); D)int fun(double *,int。); 中,以函数返回值参与表达式运算。例如:z=max(x,y); 【解析】本题考点是对函数的声明,在函数声明的时候,其格 (2)函数语句:函数调用的一般形式上加上分号。例如:式如下:返回值类型函数名(参数类型[参数名],参数类型[参printf(“%d\\n”,a); 数名]??)其中,参数名可以不写,但是参数类型一定要写全 (3)函数实参:函数作为另一个函数调用的实际参数出现。? 省去主调函数中对被调函数的函数说明的几种情况: 例如:printf(“%d”,max(x,y)); (1)被调函数的返回值是整型或字符型时(返回值自动按? 程序从main函数进入,上往下执行,当碰到函数名后,把整型处理) 值传给调用函数,当程序得到了返回值或调用函数结束,(2)当被调函数的函数定义在主调函数之前时 再顺序往下执行,最后到main函数结束。 (3)在所有函数定义之前,在函数外预先说明了各个函数5、知识点:函数的声明及其位置 的类型 ? 函数要“先定义后调用”,或“先声明再调用后定义”。函例2:(10-09-24)有以下程序 数的声明一定要有函数名、函数返回值类型、函数参数类 #include 型,但不一定要有形参的名称。 int f(int x); 一般形式为: main() 类型说明符 被调函数名(类型 形参,类型 形参…); { int n=1,m; 或 类型说明符 被调函数名(类型,类型…); m=f(f(f(n))); printf(“%d\\n”,m); 注意:其末尾“;”不能省 }

例如:int max(int a,int b); 或 int max(int ,int); 两者 int f(int x) 功能相同 { return x*2;}

第 47 页 共 78 页

程序运行的输出结果( D )

A) 1 B)2 C)4 D)8 【解析】f函数定义在main下面,但在外部进行声明int f(int x);因此在main中可直接调用。

三次调用函数:f(n)=f(1)=2 f(2)=4 f(4)=8 m=f(f(f(n)))=f(f(f(1)))=f(f(2))=f(4)=8

答案:double avg(double a,double b); 或avg(double ,double );

double

【解析】当函数定义在调用之后,调用前必须对函数进行申明,申明的形式和函数定义中的函数头部分相同,最后加分号即

例3:(11-03-12)有以下程序,请在 【12】 处填写正确语句,可。 使程序可正常编译运行。 【12】; main()

{ double x,y,(*p)();

scanf(\p=avg;

printf(\}

double avg(double a,double b) { return((a+b)/2);}

6、知识点:函数的嵌套调用

? C语言中不允许作嵌套的函数定义,但是允许在一个函数的断定仪中出现对另一个函数的调用,即嵌套调用。 例1:(06-04-33)有以下程序

int funl(double a){return a*=a;} int fun2(double x,double y) {double a=0,b=0;

a=funl(x);b=funl(y);return (int)(a+b); }

main()

{double w;w=fun2(1.1,2.0);??} 程序执行后变量w中的值是( C ) A)5.2l B)5 C)5.0 D)0.0

【解析】此题考查函数的嵌套调用。main函数中调用了fun2函数;fun2函数中又调用了如fun1函数

第 48 页 共 78 页

w=fun2(1.1,2.0)-->w=(int)(funl(1.1)+funl(2.0))?w=(int)5.21;w值为5,但是w是double类型变量,故将5转换成5.0赋值给变量w 例2、(09-3-24)有以下程序 #include int 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)); printf(“%d\\n”,d);

} 程序运行后的输出结果是( B ) A) 10 B)9 C)8 D)7

【解析】程序的main()函数中,定义了4个变量,前3个分别初始化,D用来接收调用函数后返回的值,主函数一共调用了3次f()函数,第一次传递a,b的值,给形参x,y,返回(y-x)*x的值为3,第二次将a,c的值传递给形参x,y,返回(y-x)*x的值为6,接着将f(a,b),f(a,c)的值3、6传递给形参,执行后返回值9,赋值变量d,最后输出结果为9 7、知识点:函数的递归调用

? 函数直接或间接地调用自己称为函数的递归调用。递归调用必须有一个明确的结束递归的条件。在做递归题时可把递归的步骤一步步写下来,不要弄颠倒了。

例1、(04-09-37)在函数调用过程中,如果函数funA调用了函数funB,函数funB又调用了函数funA,则 ( B ) A)称为函数的直接递归调用 B)称为函数的间接递归调用 C)称为函数的循环调用

D)C语言中不允许这样的递归调用

【解析】此题考查函数递归的基本概念。一个函数直接或间接调用自己称为函数的递归调用;若直接调用了自己,则称为直接递归调用,若间接调用了自己则称为间接递归调用;根据间接递归调用的概念可知,本题中的函数调用为间接递归调用。 例2、(09-09-15) #include fun(int x)

{ if(x/2>0) fun(x/2); printf(“%d ”,x); }

main()

{ fun(6); printf(“\\n”);}程序运行后的输出结果是__1 3 6______ 【解析】程序的执行过程是先递推、后递归的过程。当x=1时,条件不成立,递推终止。程序执行流程参照示意图。

第 49 页 共 78 页

x=6 x=3 x=1 main() fun(3) fun(1) printf(1) fun(6) printf(6) printf(3) printf(\\n) 例3:(10-03-33)有以下程序 #include

int f(int t[],int n);

main()

{ int a[4]={1,2,3,4},s;

s=f(a,4); printf(“%d\\n”,s);

}

int f(int t[],int n)

{ if(n>0) return t=[n-1]+f(t,n-1);

第 50 页

else return 0;

}程序运行后的输出结果是( B) A) 4 B) 10

C)14

D)6

】s=f(a,4)=t[3]+f(a,3)=4+f(a,3)=4+t[2]+f(a,2)=4+3+f(a,2)=7+t[1]+f(a,1) =7+2+f(a,1)=9+t[0]+f(a,0)=9+1+f(a,0)=10+0=10 例4:(11-03-32)设有如下函数定义

int fun(int k)

{ if (k<1) return 0;

else if(k==1) return 1;

else return fun(k-1)+1;

}若执行调用语句:n=fun(3);,则函数fun总共被调用的次数

是( B)

A)2 B)3 C)4 共 78 页


全国计算机等级考试二级C语言考前复习资料(真的非常全的笔试资(10).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:感受生命的意义教学设计

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: