第7章 函数Word下载.docx

上传人:b****6 文档编号:17899617 上传时间:2022-12-12 格式:DOCX 页数:15 大小:23.26KB
下载 相关 举报
第7章 函数Word下载.docx_第1页
第1页 / 共15页
第7章 函数Word下载.docx_第2页
第2页 / 共15页
第7章 函数Word下载.docx_第3页
第3页 / 共15页
第7章 函数Word下载.docx_第4页
第4页 / 共15页
第7章 函数Word下载.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

第7章 函数Word下载.docx

《第7章 函数Word下载.docx》由会员分享,可在线阅读,更多相关《第7章 函数Word下载.docx(15页珍藏版)》请在冰豆网上搜索。

第7章 函数Word下载.docx

,a);

}

doublef(doublex)

{returnx*x+1;

程序运行后的输出结果是

A)500B)401C)503D)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。

5.以下叙述中正确的是

A)用户自己定义的函数只能调用库函数

B)实用的C语言源程序总是由一个或多个函数组成

C)不同函数的形式参数不能使用相同名称的标识符

D)在C语言的函数内部,可以定义局部嵌套函数

B

【解析】A选项中,"

用户自己定义的函数只能调用库函数"

描述是不正确的,也可以调用自定义函数;

C选项中,对于不同函数的形式参数可以使用相同名称的标识符;

D选项中,关于函数的定义不可以嵌套,但函数的调用可以嵌套。

因此B选项正确。

6.以下叙述中错误的是(  )。

A)可以给指针变量赋一个整数作为地址值

B)函数可以返回地址值

C)改变函数形参的值,不会改变对应实参的值

D)当在程序的开头包含头文件stdio.h时,可以给指针变量赋NULL

【解析】不能将一个整数直接赋给指针变量作为地址,所以A)是错误的。

函数的返回值可以是地址,即指针。

函数调用中形参值的变化不会传递给实参。

7.有以下程序

inta=4;

intf(intn)

{intt=0;

staticinta=5;

if(n%2){inta=6;

t+=a++;

else{inta=7;

returnt+a++;

{ints=a,i=0;

for(;

2;

i++)s+=f(i);

printf("

%d\n"

s);

}

A)36B)24C)32D)28

D

【解析】在主函数main()中定义了两个变量s和i,同时给s赋初值。

a=4,i赋初值0。

当i=0时。

执行"

s+=f(i);

"

语句,调用f()并将i的初值0传递给形参n。

首先执行if语句中内条件:

n%2,若条件为假。

则执行else下的语句,a=7,t=7+0=7,使用return返回t,t=7+(a++)=7+5=12,此时a运算完后自增1,变为6;

返回主函数中,s=4+12=16。

当i=1时,执行"

s+=f(i);

语句,调用f()并将i的初值1传递给形参n。

首先执行if语句中的条件:

n%2,条件为真,执行if下面的语句,t=0,a=6t=0+6=6,使用return返回t,t=6+6=12,返回主函数中,s=16+12=28。

最后输出的结果为28。

因此D选项正确。

8.有以下程序

{intt=0,a=5;

if(n/2){inta=6;

{ints=0,i=0;

A)28B)24C)32D)36

【解析】在主函数main()中定义了两个变量s和i,同时给s和i赋初值0。

n/2,条件为假。

返回主函数中,s=0+12=12。

n/2,条件为真,执行if下面的语句,t=0,a=6t=0+6=6,使用return返回t,t=6+6=12,返回主函数中,s=12+12=24。

最后输出的结果为24。

9.若有以下程序

inta=2;

intf(intm)

{staticintn;

n=0;

n++;

a++;

returnn+m+a;

{intk;

for(k=0;

k<

4;

k++)printf("

%d,"

f(k));

则程序的输出结果是

A)4,5,6,7,B)4,7,10,13,C)4,6,8,10,D)3,5,7,9,

【解析】主函数中变量k作为for语句的循环变量,取值0、1、2、3,同时也作为实参通过调用函数f传递给形参变量m。

由于变量a是全局变量,变量n是static静态变量,因此k=0时,f函数中,语句returnn+m+a;

即1+0+3=4;

k=1时,f函数中,语句returnn+m+a;

即2+1+3=6;

k=2时,f函数中,语句returnn+m+a;

即3+2+3=8;

k=3时,f函数中,语句returnn+m+a;

即4+3+3=10。

10.有以下程序

#include<

intfun(intn)

{if(n==1)

return1;

else

return(n+fun(n-1));

{intx;

scanf("

%d"

&

x);

x=fun(x);

x);

执行程序时,给变量x输入10,程序的输出结果是

A)55B)54C)65D)45

【解析】该程序考察的是函数的递归调用,在调用一个函数的过程中又出现直接或间接地调用该函数本身,称为函数的递归调用,执行结果为1+2+3+…+8+9+10=55。

因此A选项正确。

11.有以下程序

intf(intm)

{staticintn=0;

n+=m;

returnn;

{intn=0;

printf("

f(++n));

f(n++));

A)3,3B)1,1C)2,3D)1,2

【解析】该题目中首先区别++n和n++,第一次调用f函数时,将++n(n自增1后再参与运算)作为参数进行传递,此时变量m的值为1,执行n+=m;

后,n=1,将1返回主函数,并输出。

第二次调用f函数时,将n++(n参与运算后再自增1)作为参数进行传递,此时变量m的值为1,执行语句n+=m;

,由于n是静态存储变量,因此n=2,将2返回主函数并输出。

12.有以下程序

intfun(inta,intB)

{if(b==0)returna;

elsereturn(fun(--a,--b));

{printf("

fun(4,2));

程序的运行结果是

A)1B)2C)3D)4

【解析】本题重点考察函数的递归调用;

题目中给出的fun()函数直接调用了自身,所以是一个递归函数。

其功能是:

当参数b为0时,返回参数a的值,否则返回fun(--a,--b)的值。

从这里可以看出,当b不断递减时,a也不断递减,直到b为0时返回a的值。

那么a递减的总值就是b原来的值。

所以整个递归函数的作用就是返回a-b的值。

13.有以下程序

string.h>

typedefstruct{charname[9];

charsex;

floatscore[2];

}STU;

voidf(STUA)

{STUb={"

Zhao"

'

m'

85.0,90.0};

inti;

strcpy(a.name,b.name);

a.sex=b.sex;

for(i=0;

i++)

a.score[i]=b.score[i];

{STUc={"

Qian"

f'

95.0,92.0};

f(c);

%s,%c,%2.0f,%2.0f\n"

c.name,c.sex,c.score[0],c.score[1]);

A)Zhao,m,85,90B)Qian,m,85,90C)Zhao,f,95,92D)Qian,f,95,92

【解析】本题考查结构体的相关操作以及传值、传址的区别,该题中调用f函数后,会生成参数c的一个副本,而不会改变c的值,所以c值维持原值,选项D正确。

14.有以下程序

structA

{inta;

charb[10];

doublec;

};

voidf(structAt);

{structAa={1001,"

ZhangDa"

1098.0};

f(a);

%d,%s,%6.1f\n"

a.a,a.b,a.c);

voidf(structAt)

{t.a=1002;

strcpy(t.b,"

ChangRong"

);

t.c=1202.0;

A)1002,ZhangDa,1202.0B)1002,ChangRong,1202.0

C)1001,ChangRong,1098.0D)1001,ZhangDa,1098.0

【解析】本题考查结构体的相关操作以及传值、传址的区别,该题中调用f函数后,会生成参数a的一个副本,而不会改变a的值,所以a值维持原值,选项D正确。

15.有以下程序

charb[10];

doublec;

printf("

strcpy(t.b,"

t.c=1202.0;

A)1002,ZhangDa,1202.0B)1002,ChangRong,1202.0

C)1001,ChangRong,1098.0D)1001,ZhangDa,1098.0

16.有以下程序

STUf(STUA)

i++)a.score[i]=b.score[i];

returna;

95.0,92.0},d;

d=f(c);

d.name,d.sex,d.score[0],d.score[1]);

A)Zhao,m,85,90B)Qian,m,85,90C)Qian,f,95,92D)Zhao,f,95,92

【解析】本题考查结构体的相关操作以及传值、传址的区别,该题中调用f函数后,会返回记过计算的a值,选项A正确。

17.若有以下程序

typedefstructstu{

charname[10],gender;

intscore;

voidf(STUa,STUB)

{b=a;

printf("

%s,%c,%d,"

b.name,b.gender,b.score);

{STUa={"

290},b={"

350};

f(a,b);

%s,%c,%d\n"

b.name,b.gender,b.score);

A)Qian,f,350,Qian,f,350B)Zhao,m,290,Zhao,m,290

C)Zhao,m,290,Qian,f,350D)Zhao,m,290,Zhao,f,350

【解析】本题考查结构体的相关操作以及传值、传址的区别,该题中调用f函数后,会首先输出被重新复制的b值,且与a相同,而执行完f函数后,b值并不会改变,所以还是维持原值,选项C正确。

18.若有以下程序

typedefstructstu{charname[10],gender;

voidf(char*p)

{strcpy(p,"

);

290},b;

b=a;

f(b.name);

b.gender='

;

b.score=350;

a.name,a.gender,a.score);

A)Zhao,m,290,Qian,f,350B)Zhao,m,290,Zhao,m,290

C)Qian,f,350,Qian,f,350D)Zhao,m,290,Zhao,f,350

【解析】本题考查结构体的相关操作以及传值、传址的区别,该题中调用f函数后,b的name会重新赋值为Qian,选项A正确。

19.有以下程序

intf(intx)

{inty;

if(x==0||x==1)return(3);

y=x*x-f(x-2);

returny;

{intz;

z=f(3);

z);

A)0B)9C)6D)8

【解析】主函数中调用f函数,同时将数值3传递给变量x,执行条件与if(x==0||x==1);

此时条件不成立,跳过return(3);

,直接执行语句y=x*x-f(x-2);

这里f(x-2)为函数的递归调用,再次调用f函数,此时x=1,条件语句条件成立,返回3给f

(1),y=3*3-3=6,最后将6返回主函数,并进行输出。

20.有以下程序

intfun(intx)

{intp;

if(x==0||x==1)

return(3);

p=x-fun(x-2);

returnp;

fun(7));

执行后的输出结果是

A)2B)3C)7D)0

【解析】因为fun(intx)是一个递归函数,所以主函数中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。

21.有以下程序

intfun()

{staticintx=1;

x*=2;

returnx;

{inti,s=1;

for(i=1;

i<

=2;

i++)s=fun();

s);

A)0B)1C)4D)8

【解析】fun函数中的x为静态局部变量,占用固定的内存单元,下一次调用时仍可保留上次调用时的值。

也就是说,如果多次调用fun函数,x的定义只在第一次调用时有效,从第二次调用开始,x的定义相当于不存在,直接使用x的值。

主函数中调用两次fun函数:

第一次调用:

x=1,x=x*2=2,s=2;

第二次调用:

(直接用上次x的值)x=x*2=4,s=4。

22.有以下程序

intfun(intx[],intn)

{staticintsum=0,i;

for(i=0;

n;

i++)sum+=x[i];

returnsum;

{inta[]={1,2,3,4,5},b[]={6,7,8,9},s=0;

s=fun(a,5)+fun(b,4);

程序执行后的输出结果是

A)55B)50C)45D)60

【解析】内部静态变量是始终存在的,当函数被调用退出后,内部静态变量会保存数据,再次调用该函数时,以前调用时的数值仍然保留着。

fun(a,5)的值是15,再次调用后sum=15,所以fun(b,4)=45,s=45+15=60。

23.若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的是

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

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

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

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

【解析】本题重点考察的是函数的形参和实参。

在定义函数时函数名后面括弧中的变量名称为"

形式参数"

(简称形参),在主调函数中调用一个函数时,函数名后面括弧中的参数(可以是一个表达式)称为"

实际参数"

(简称实参)。

C语言规定,实参变量对形参变量的数据传递是"

值传递"

,即单向传递,只由实参传给形参,而不能由形参传回来给实参。

在内存中,实参单元与形参单元是不同的单元。

24.以下叙述中错误的是

A)C程序必须由一个或一个以上的函数组成

B)函数调用可以作为一个独立的语句存在

C)若函数有返回值,必须通过return语句返回

D)函数形参的值也可以传回给对应的实参

【解析】形参是函数定义时由用户定义的形式上的变量,实参是函数调用时,主调函数为被调函数提供的原始数据。

在C语言中,实参向形参传送数据的方式是"

25.以下程序中函数f的功能是:

当flag为1时,进行由小到大排序;

当flag为0时,进行由大到小排序。

voidf(intb[],intn,intflag)

{inti,j,t;

n-1;

i++)

for(j=i+1;

j<

j++)

if(flag?

b[i]>

b[j]:

b[i]<

b[j])

{t=b[i];

b[i]=b[j];

b[j]=t;

{inta[10]={5,4,3,2,1,6,7,8,9,10},i;

f(&

a[2],5,0);

f(a,5,

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

当前位置:首页 > 经管营销 > 生产经营管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1