函数.docx

上传人:b****5 文档编号:6626418 上传时间:2023-01-08 格式:DOCX 页数:43 大小:29.33KB
下载 相关 举报
函数.docx_第1页
第1页 / 共43页
函数.docx_第2页
第2页 / 共43页
函数.docx_第3页
第3页 / 共43页
函数.docx_第4页
第4页 / 共43页
函数.docx_第5页
第5页 / 共43页
点击查看更多>>
下载资源
资源描述

函数.docx

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

函数.docx

函数

习题六函数

选择题

1.在一个C源程序文件中所定义的全局变量,其作用域为______。

A、所在文件的全部范围B、所在程序的全部范围

C、所在函数的全部范围D、由具体定义位置和extern说明来决定范围

2.有以下程序

#include

inta=1;

intf(intc)

{staticinta=2;

c=c+1;

return(a++)+c;

}

main()

{inti,k=0;

for(i=0;i<2;i++){inta=3;k+=f(a);}

k+=a;

printf("%d\n",k);

}

程序的运行结果是______。

A、14B、15C、16D、17

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

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

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

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

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

5.有以下程序

#include

intf(intx)

{inty;

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

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

returny;

}

main()

{intz;

z=f(3);printf("%d\n",z);

}

程序的运行结果是______。

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

6.下面的函数调用语句中func函数的实参个数是______。

func(f2(v1,v2),(v3,v4,v5),(v6,max(v7,v8)));

A、3B、4C、5D、8

7.以下叙述中错误的是______。

A、用户定义的函数中可以没有return语句

B、用户定义的函数中可以有多个return语句,以便可以调用一次返回多个函数值

C、用户定义的函数中若没有return语句,则应当定义函数为void类型

D、函数的return语句中可以没有表达式

8.以下所列的各函数声明中,正确的是______。

A、voidplay(vara:

Integer,varb:

Integer)B、voidplay(inta,b)

C、voidplay(inta,intb)D、Subplay(aasinteger,basinteger)

9.以下叙述中错误的是______。

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

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

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

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

10.有以下程序

#include

intfun(inta,intb)

{if(b==0)returna;

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

}

main()

{printf("%d\n",fun(4,2));}

程序的运行结果是______。

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

11.若各选项中所有变量已正确定义,函数fun中通过return语句返回一个函数值,以下选项中错误的程序是______。

A、main()B、floatfun(inta,intb){……}

{……x=fun(2,10);……}main()

floatfun(inta,intb){……}{……x=fun(i,j);……}

C、floatfun(intint);D、main()

main(){floatfun(inti,intj);

{……x=fun(2,10);……}……x=fun(i,j);……}

floatfun(inta,intb){……}floatfun(inta,intb){……}

12.以下存储类型中,只有在使用时才为该类型的变量分配内存的是______。

A、auto和staticB、auto和registerC、register和staticD、extern和register

13.以下程序的输出结果是______。

longfun(intn)

{longs;

if(n==1||n==2)s=2;

elses=n-fun(n-1);

returns;

}

main()

{printf("%ld\n",fun(3));}

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

14.设函数fun的定义形式为

voidfun(charch,floatx){……}

则以下对函数fun的调用语句中,正确的是______。

A、fun("abc",3.0);B、t=fun('D',16.5);C、fun('65',2.8);D、fun(32,32);

15.设有以下函数;

f(inta)

{intb=0;

staticintc=3;

b++;c++;

return(a+b+c);

}

如果在下面的程序中调用该函数,则输出结果是______。

main()

{inta=2,i;

for(i=0;i<3;i++)printf("%d\n",f(a));

}

A)B)C)D)

7777

89107

911137

A、A)B、B)C、C)D、D)

16.以下程序的结果是______。

inta,b;

voidfun()

{a=100;b=200;}

main()

{inta=5,b=7;

fun();

printf("%d%d\n",a,b);

}

A、100200B、57C、200100D、75

17.在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是______。

A、地址传递B、单向值传递C、由实参传给形,再由形参传回实参D、传递方式由用户指定

18.以下函数值的类型是______。

fun(floatx)

{floaty;

y=3*x-4;

returny;

}

A、intB、不确定C、voidD、float

19.在函数调用过程中,如果函数funA调用了函数funB,函数funB又调用了函数funA,则______。

A、称为函数的直接递归调用B、称为函数的间接递归调用

C、称为函数的循环调用D、C语言中不允许这样的递归调用

20.以下叙述中正确的是______。

A、局部变量说明为static存储类,其生存期将得到延长

B、全局变量说明为static存储类,其作用域将被扩大

C、任何存储类的变量在未赋初值时,其值都是不确定的

D、形参可以使用的存储类说明符与局部变量完全相同

21.有以下程序

voidf(intv,intw)

{intt;

t=v;v=w;w=t;}

main()

{intx=1,y=3,z=2;

if(x>y)f(x,y);

elseif(y>z)f(y,z);

elsef(x,z);

printf("%d,%d,%d\n",x,y,z);}

执行后输出结果______。

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

22.若程序中定义了以下函数:

doublemyadd(doublea,doubleb)

{return(a+b);}

并将其放在调用语句之后,则在调用之前应该对函数进行说明,以下选项中错误的说明是______。

A、doublemyadd(doublea,b);B、doublemyadd(double,double);

C、doublemyadd(doubleb,doublea);D、doublemyadd(doublex,doubley);

23.有以下程序:

floatfun(intx,inty)

{return(x+y);}

main()

{inta=2,b=5,c=8;

printf("%3.0f\n",fun((int)fun(a+c,b),a-c));

}

程序运行后的输出结果是______。

A、编译出错B、9C、21D、9.0

24.有以下程序

inta=3;

main()

{ints=0;

{inta=5;s+=a++;}

s+=a++;printf("%d\n",s);

}

程序运行后的输出结果是_______。

A、8B、10C、7D、11

25.下面程序的输出是______。

intm=13;

intfun2(intx,inty)

{intm=3;

return(x*y-m);}

main()

{inta=7,b=5;

printf("%d\n",fun2(a,b)/m);}

A、1B、2C、7D、10

26.下列函数定义中,会出现编译错误的是______。

A、max(intx,inty,int*z)B、intmax(intx,y)

{*z=x>y?

x:

y;}{intz;

z=x>y?

x:

y;

returnz;}

C、max(intx,inty)D、intmax(intx,inty)

{intz;

z=x>y?

x:

y;return(z);}{return(x>y?

x:

y);}

27.以下叙述中正确的是______。

A、全局变量的作用域一定比局部变量的作用域范围大

B、静态(static)类别变量的生存期贯穿于整个程序的运行期间

C、函数的形参都属于全局变量

D、未在定义语句中赋初值的auto变量和static变量的初值都是随机值

28.有以下程序

voidf(intx,inty)

{intt;

if(x

}

main()

{inta=4,b=3,c=5;

f(a,b);f(a,c);f(b,c);

printf("%d,%d,%d\n",a,b,c);

}

执行后输出的结果是______。

A、3,4,5B、5,3,4C、5,4,3D、4,3,5

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

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

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

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

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

30.下列叙述不正确的是______。

A、在不同的函数内可使用相同名字的变量

B、函数中的形式参数是局部变量

C、函数内的变量只在函数内有效

D、函数内复合语句中定义的变量在函数内都有效

 

1.C程序运行时的内存空间可以分成程序区,静态存储区和___动态存储区_______。

2.全局变量和静态局部变量具有静态生存期,存放在内存的____静态存储区_____区中。

3.局部变量具有局部生存期,存放在内存的____动态存储_____区中。

4.函数形参的作用域是该函数的____内部____。

5.在C语言中,一个函数由函数头和___函数体____组成。

6.函数调用的条件是:

实参与形参的个数应相等,类型应一致。

7.如果一个函数只允许同一程序文件中的函数调用,则应在该函数定义前加上__static________C保留字。

8.若“doublex=100;”是文件F1.C中的一个全局变量定义语句,若文件F2.C中的某个函数需要访问此x,则应在文件F2.C中添加对x的声明语句为__externdoublex;_。

9.如果一个函数直接或间接地调用自身,这样的调用称为___函数递归__调用。

10.对于无返回值函数,定义函数时要用____void______修饰函数类型。

11.如果一个函数定义中使用了__static__修饰,则该函数不允许被其它文件中的函数调用。

12.从一条函数原型语句“intfun1();”可知,该函数的返回类型为__int____,该函数带有___0___个参数。

13.当使用__void_____保留字作为函数类型时,该函数不返回任何值。

14.一个函数定义由_函数首部__和__函数体__两部分组成。

15.若一个函数的定义处于调用它的函数之前,则在程序开始可以省去该函数的__声明__语句。

16.C语言函数返回类型的默认定义类型是_int_____。

17.函数的实参传递到形参有两种方式:

__传值__和_传址_____。

18.在一个函数内部调用另一个函数的调用方式称为__嵌套调用____。

在一个函数内部直接或间接调用该函数称为函数_递归_____的调用方式。

19.C语言变量按其作用域分为_局部变量_____和__全局变量____。

21.已知函数定义:

voiddothat(intn,doublex){……},其函数声明的写法为

__voiddothat(intn,doublex);____。

22.凡在函数中未指定存储类别的局部变量,其默认的存储类别为__auto____。

23.在一个C程序中,若要定义一个只允许本源程序文件中所有函数使用的全局变量,则该变量需要定义的存储类别为__static____。

24.变量被赋初值可以分为两个阶段:

即__编译期__和_运行期_____。

函数阅读程序说明程序功能和写出输出结果

1.

#defineN3

intarray[N][N];

conv(intarray[3][3])

{intt,j,i;

for(i=0;i

{t=array[i][j];

array[i][j]=array[j][i];

array[j][i]=t;

}

}

main()

{inti,j;

for(i=0;i

for(j=0;j

scanf(“%d”,&array[i][j]);

conv(array);

printf(“\n\n”);

for(i=0;i

{for(j=0;j

printf(“%5d”,array[i][j]);

printf(“\n”);

}

}

输入:

1,2,3,5,6,7,9,11,12

将N阶矩阵行列互换

159

2611

3712

2.

#include

intmaxvalue(intarray[3][4])

{

inti,j,max;

max=array[0][0];

for(i=0;i<3;i++)

for(j=0;j<4;j++)

if(array[i][j]>max)

max=array[i][j];

returnmax;

}

voidmain()

{

inta[3][4]={{1,3,5,7},{2,4,6,8},{15,17,34,12}};

printf("maxvalueis%d\n",maxvalue(a));

}

有一个3×4的矩阵,求所有元素中的最大值。

maxvalueis34

3.

#defineN3

#defineM4

voidLineMax(intx[N][M])

{inti,j,p;

for(i=0;i

{p=0;

for(j=1;j

if(x[i][p]

printf("%d,%d\n",i,x[i][p]);

}

}

main()

{intx[N][M]={1,5,7,4,2,6,4,3,8,2,3,1};

LineMax(x);

}

输出N×M矩阵中每一行的行号和最大值

0,7

1,6

2,8

 

4.

#include

#defineN20

intfmax(ints[],intn)

{

intk,p;

for(p=0,k=p;p

if(s[p]>s[k])k=p;

return(k);

}

voidmain()

{

inti,a[N];

for(i=0;i

scanf("%d",&a[i]);

printf("%d\n",a[fmax(a,N)]);

}

fmax函数返回n个元素的数组s中的最大元素所在的下标。

主函数定义数组并循环输入元素值,调用fmax函数并输入返回值。

 

5.

floatmax(floatx,floaty)

{floatz=x;

if(z

return(z);

}

main()

{floata=3.5,b=8.7,c;

c=max(a,b);

printf("%4.2f\n",c);

}

定义函数求x,y最大值,主函数调用函数求a,b最大值

8.70

6.

#include

fun(inta,intb)

{inti,p=1;

for(i=1;i<=b;i++)

p=p*a;

return(p);

}

main()

{intx=5;

printf("%d\n",fun(x,3));

}

定义函数求ab

主函数调用函数求53

125

7.

fact(intn)

{intanswer;

if(n==1)return

(1);

answer=fact(n-1)*n;

return(answer);

}

main()

{intsum=0;

intnum;

for(num=1;num<=5;num+=2)

sum=sum+fact(num);

printf("%d",sum);

}

求sum=1!

+3!

+5!

127

 

8.

fact(intn)

{intanswer;

if(n==0)return

(1);

answer=fact(n-1)*n;

return(answer);

}

main()

{intsum=0;

intnum;

for(num=0;num<=5;num+=2)

sum=sum+fact(num);

printf("%d",sum);

}

求sum=0!

+2!

+4!

27

9.

inta=3,b=5;

max(inta,intb)

{intc;

c=a>b?

a:

b;

return(c);

}

main()

{inta=8;

printf("%d",max(a,b));

}

定义最大值函数,主函数中通过调用函数求局部变量m和全局变量n的最大值

8

10.

intm=4,n=6;

max(intx,inty)

{intmax;

max=x>y?

x:

y;

return(max);

}

main()

{intm=10;

printf("%d\n",max(m,n));

}

定义最大值函数,主函数中通过调用函数求局部变量m和全局变量n的最大值

10

11.

#include

intage(intn)

{

intc;

if(n==1)

c=10;

else

c=2+age(n-1);

return(c);

}

voidmain()

{

intn=5;

printf("age:

%d\n",age(5));//age表示年龄

}

计算学生的年龄。

已知第一位最小的学生年龄为10岁,其余学生的年龄一个比一个大2岁,求第5个学生的年龄。

age:

18

12.

#include

intsum(intn)

{

if(n<=0)

printf("dataerror\n");

if(n==1)

return

(1);

else

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

}

main()

{printf(“%d\n”,sum(10));}

函数sum(intn)完成计算1~n的累加和。

55

13.

intfacto(intn)

{

if(n==1)

return

(1);

else

return(n*facto(n-1));

}

main()

{printf(“%d\n”,facto(5));}

facto(intn)是一个求阶乘的递归调用函数。

120

14.

intstrlen(char*str)

{

if(*str=='\0')

return(0);

else

return(1+strlen(str+1));

}

main()

{printf(“%d\n”,”abcd\\\’”);}

函数strlen是求一个字符串str的长度。

6

15.

#include"stdio.h"

voidr(intm)

{

printf("%d",m%10);

m=m/10;

if(m>0)

r(m);

}

voidmain()

{

intn;

r(12345);

printf("\n");

}

用递归实现将整数按逆序输出。

输出54321。

16.

#include

intfun(intk)

{intm=0,mc=0;

while((k>=2)&&(mc<3))

{if((k%3==0)||(k%7==0))

{m=m+k;mc++;}

k--;

}

returnm;

}

main()

{printf("%d\n",fun(100));}

函数fun的功能是:

计算并输出k以内最大的3个能被3或7整除的自然数之和。

293

17.

#include

fun(intx,inty,intz)

{intj,t,n,m;

j=1;

t=j%x;

m=j%y;

n=j%z;

while(t!

=0||m!

=0||n!

=0)

{j=j+1;

t=j%x;

m=j%y;

n=j%z;}

returnj;}

main()

{intx1,x2,x3,j;

j=fun(2,7,8);

printf("j=%d\n",j);}

函数fun的功能是:

求三个数的最小公倍数。

56

18.

#include

longfun(longnum)

{

longk=1;

do

{k*=num%

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

当前位置:首页 > 医药卫生 > 基础医学

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

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