C语言函数题库及答案_第1页
C语言函数题库及答案_第2页
C语言函数题库及答案_第3页
C语言函数题库及答案_第4页
C语言函数题库及答案_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第六部分函数

一、单项选择题

1.C语言中的函数返回值的类型是由(D)决定

A.return语句中的表达式B.调用函数的主调函数

C.调用函数时临时D.定义函数时所指定的函数类型

2.下面不正确的描述是(B)。

A.调用函数时,实参可以是表达式

B.调用函数时,实参和形参可以共用内存单元

C.调用函数时,将形参分配内存单元

D.调用函数时,实参与形参的类型必须一致

3.在C语言中,调用一个函数时,实参变量和形参变量之间的数据传递是(D)

A.地址传递B.值传递

C.由实参传递给形参,并由形参传回给实参D.由用户指定传递方式

4.下面的函数调用语句中含有(A)个实参

inta,b,c;

intsum(intxl,intx2);

total=sum((a,b),c);

A.2B.3C.4D.5

5.在C语言中(C)

A.函数的定义可以嵌套,但函数的调用不可以嵌套

B.函数的定义和调用均不可以嵌套

C.函数的定义不可以嵌套,但是函数的调用可以嵌套

D.函数的定义和调用均可以嵌套

6.关于C语言中的return语句正确的是(C)

A.只能在主函数中出现

B.在每个函数中都必须出现

C.可以在一个函数中出现多次

D.只能在除主函数之外的函数中出现

7.两个形参中,第一个形参为指针类型、第二个形参为整型,则对函数形参的说

明有错误的是(D)

A.inta(floatx[],intn)

B.inta(float*x,intn)

C.inta(floatx[10],intn)

D.inta(floatx,intn)

8.在C语言中,函数的数据类型是指(A)

A.函数返回值的数据类型

B.函数形参的数据类型

C.调用该函数时的实参的数据类型

D.任意指定的数据类型

9.已知如下定义的函数:

funl(a)

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

}

则该函数的数据类型是(C)

A.与参数a的类型相同

B.void型

C.整型

D.无法确定

10.定义一个函数实现交换x和y的值,并将结果正确返回。能够实现此功能的

是⑻

A.swaps(intx,inty)

{inttemp;

temp=x;x=y;y=temp;

}

B.swapb(int*x,int*y)

{inttemp;

temp=x;x=y;y=temp;

}

C.swapc(int^x,int*y)

{inttemp;

temp=*x;*x=*y;*y=temp;

}

D.swapd(int*x,int*y)

{int*temp;

temp=x;x=y;y=temp;

)

11.求一个角的正弦函数值的平方。能够实现此功能的函数是(B)

A.

sqofsina(x)

{floatx;

return(sin(x)*sin(x));

)

B.doublesqofsinb(x)

{floatx;

return(sin((double)x)*sin((double)x));

)

C.doublesqofsinc(x)

{return(((sin(x)*sin(x));

}

D.sqofsind(x)

{floatx;

return(double(sin(x)*sin(x)));

12.已知函数定义如下:

floatfunl(intx,inty)

{floatz;

z=(float)x/y;

return(z);

}

主调函数中有inta=l,b=0;可以正确调用此函数的语句是(D)

A.printffunl(a,b));B.printffunl(&a,&b));

C.printffunl(*a,*b));D.调用时发生错误

13.下面函数的功能是(B)

a(si,s2)

chars1[],s2[];

{while(s2++=sl++);

}

A.字符串比较

B.字符串复制

C.字符串连接

D.字符串反向

二、填空题

1.在C语言中,存储类型为局部和自动型的变量,只能在使用它们时才占用存储

空间。

2.在一个源文件中定义的全局变量的作用域为整个源程序。

3.下面程序的执行结果是“

intd=1;

fun(intp)

intd=5;

d+=p++;

printf(tt%d,,,d);

)

main()

inta=3;

fun(a);

d+=a++;

printf("%d”,d);

)

4.该fun函数的功能是求10的阶乘。

l)#include

2)longfun(intn)

3){if(—1—)

4)return(n*fun(_2___));

5)elseif(_3___)

6)returnl;}

第一处:n>l

第二处:n-1•

第三处:n==l

解析:从第2、4行看到了函数名,函数体中又出现了函数的调用,则是递归。我们知

道:n!=n*(nT)!这就是一个递归的表达式,写成函数就是fun(n)=n*fun(nT)。因此,4

行处填写n-1。又:1!=1故3,5行就好填了。因此答案是n>ln-ln=l。还有0!=1故,还

可填写:n>0n-ln==0

注意:35行的条件是相反的,这也是if与else条件的互斥性。

5.程序的功能是计算s=1!+2!+3!+……+n!

1)longfun(intn)

2){inti;

3)longs;

4)s=—1—;

5)for(i=l;i<=n;i++)

6)s二—2一;

7)returns;

8))

9)main()

10){longs;

11)intk,n;

12)scanf("%d〃,&n);

13)s=—3—;

14)for(k=l;k<=n;k++)

15)s=_4___;

16)printf(/z%ld\n,z,s);

17))

第一处:1

第二处:s*i

第三处:0

第四处:s+fun(k)

解析:首先,搞清楚函数fun、main各自的功能。

Fun是求一个数的阶乘,我们知道:n!=l*2*3*3*n

同时要死记住:求积,积的初值一般等于1。故fun中s是用来存放积的,其初值等于

1;求阶乘是连乘,故s=s*i

Main是求和,记住:和的初值一般等于0.

两个函数中的局部变量s的作用是不同的。Main中的s是存放和的。

最后:注意一些变量的类型。

阶乘是求积,积的增长速度是比较快的,为防止溢出,fun的返回值类型是long。输出

中Id是输出长整数。

6.请在函数fun的横线上填写若干个表达式,使从键盘上输入一个整数n,输出斐波纳

契数列。斐波契数列是一种整数数列,其中每数等于前两数之后,如:011235813……

1)intfun(intn){

2)if(—1—)

3)return0;

4)elseif(___2___)

5)returnl;

6)else

7)return___3___;

8))

第一处:n==0

第二处:n==l

第三处:fun(n-l)+fun(n-2)

解析:求斐波契数列:一项等于其前两项的和。

这也是一个递归。

求斐波契数列的第n项的值,n从0开始。

7.请补全函数fun,该函数的功能是求出以下分数序列的前n项之和。和值通过函数值返

回到main函数。

l)#include

2)#include

3)__1___fun(intn)

4){inta,b,c,k;

5)doubles;

6)s=0.0;

7)a=2;

8)b=l;

9)for(k=l;k<=n;k++)

10){

11)s=s+(_2___)a/(___3___)b;

12)c=a;

13)a=a+b;

14)b=c;

15))

16)returns;

17))

第一处:double

第二处:double

第三处:double

解析:从第11——14总结出数列的表达式。第1项是a/b=2/l;3/24/3

故:s=2/l+3/2+4/3+……和的初值是0。

记住:两个整数进行算术运算结果也是整数,算术运算中只要有一个操作数是实数,运

算结果就是实数。

本题希望结果是实数,故要进行强制类型转换,2,3只要有一个进行强制转换就可以

了。

最后,函数需要有一个返回值类型,当然也是双精度浮点数了。

8.给定程序的功能是计算并输出下列级数的前N项之和SN,直到SN大于q为止,q的值通

过形参传入。

1)doublefun(doubleq)

2){intn;

3)doubles;

4)n=2;

5)s=2.0;

6)while(s_1___q)

7)(

8)s=s+(double)(n+l)/n;

9)—2—;

10))

11)printf(/zn=%d\nz,,n);

12)—3—;

13))

第一处:s<=q

第二处:n++

第三处:returns

解析:从第8行,

从数学的角度总结出数列的表达式。

(n+l)/nn从2开始,每次增加1,故:SN=2+3/2+4/3+……和的初值是2.0

循环条件是“SN大于q为止”,while是满足条件才循环,故填写s〈二q

最后,函数需要有一个返回值。

9.给定程序功能是计算S=f(-n)+f(-n+l)+-+f(0)+f(l)+f(2)+・・・+f(n)的值。

floatf(doublex)

{

if(x=0.0||x==2.0)

return___1___;

elseif(x<0.0)

return(x-1)/(x-2);

else

return(x+1)/(x-2);

}

doublefun(intn)

{inti;doubles=0.0,y;

for(i=-n;i<=___2___;i++)

{y=f(1.0*i);s+=y;}

return___3

}

main()

{

printf(〃%f\n〃,fun(5));

}

第一处:0.0

第二处:n

第三处:s

解析:函数f(doublex)求每个单项的值。if...else的条件是互斥的。

fun()是求和。

10.给定程序的功能是计算score中m个人的平均成绩aver,将低于aver的成绩放在below

中,通过函数名返回人数。

intfun(intscore[],intm,intbelow[])

{inti,j=0;

floataver=0.0;

for(i=0;i<m;i++)aver+=score[i];

aver/=(float)m;

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

if(score[i]<aver)below[j++]=___1___;

returnj;

)

main()

{inti,n,below[9];

intscore[9]={10,20,30,40,50,60,70,80,90);

n=fun(score,9,___2___);

printf(,z\nBelowtheaveragescoreare:〃);

for(i=0;i<n;i++)printf___3___);

)

第一处:score[i]

第二处:below

第三处:belowti]

解析:求平均值,应先求和。此处,和与平均值使用了同一个变量。

Score□是原来的成绩,

Below[]存放低于平均分的分数,还有人数。Below的长度一定不大于score的长度。

Below的长度必须通过计数才能得到,且是在比较的过程中得到的。Below数组的长度用j

来计数,其初值当然为0。

Fun函数中:先求总分,平均分;再比较,比平均分低,存于below,j++。

J是后加,不能错了。

函数fun的返回值赋值给n,n就是below数组的长度。

11.在主函数中从键盘输入若干个数放入数组x中,用0结束输入但不计入数组。下列给定

程序中,函数fun功能是:输出数组元素中小于平均值的元素。

voidfun(___1___,intn)

(

doublesum=0.0;

doubleaverage=0.0;

inti=0;

for(i=0;i<N;I++)<p>

—2—;

average=___3___;

for(i=0;i<N;I++)<p>

if(x[i]<AVERAGE)<p>

(

if(i%5==0)

printf("\n");

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

第一处:intx[]

第二处:sum+=x[i]

第三处:sum/n

解析:算法思想同上题

12.请补全fun函数,该函数的功能是求不超过给定自然数的各个偶数之和。

intfun(intx)

(

inti,s;

s=___1___;

for(___2___)

s+=i;

returns;

}

第一处:o

第二处:i=2;i

解析:求和,和的初值s为0。

最小的非负偶数是0,偶数间的大小关系是

相差2o

13.请补全main函数,该函数的功能是:计算并输出下列多项式的值。

S=l+l/(l+2)+1/(1+2+3)+....+1/(1+2+3+....+50)

#include

___1___fun(intn)

inti,j;

doublesum=0.0,t;

for(i=l;i<=n;i++)

t=0.0;

for(j=l;j<=i;j++)

t+=—2—;

sum+=___3___;

)

returnsum;

}

第一处:double

第二处:j

第三处:1.0/t

解析:S中的每一项的分母是1+2+3+……+i需要用一个一重循环实现,

把所有商相加,需要用一个循环;

组合起来整个就需要二重循环。内循环求每个单项的和,外循环求商的和。

每单项的分子是1,应该用浮点数L0;

每单项的分母是求和,和的初值为0.0;

函数的返回值是浮点数。

14.请补全main函数,该函数的功能是,计算两个自然数n和m(m<10000)之间所有数的和。

n和m从键盘输入。

main()

{intn,m;

longsum;

1

clrscr();

printf(,z\nlnputn,m\n〃);

scanf(〃%d,%d〃,&n,&m);

while(n<=m)

(

―2—;

n++;

)

printf(zzsum=%___3___\n〃,sum);

)

第一处:sum=O

第二处:sum+=n

第三处:Id

解析:求和问题

15.请补全main函数,该函数的功能是:从键盘上输入3个整数,然后找出最大的数并输

出。

main()

{inta,b,c,max;

clrscr();

printf(^Xnlnputthreenumbers:\n〃);

scanf(zz%d,%d,&a,&b,&c);

printf(Z/Thethreenumbersare:%d,%d,%d\n〃,a,b,c);

if

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论