C语言函数题库及答案.docx

上传人:b****0 文档编号:18501553 上传时间:2023-08-18 格式:DOCX 页数:18 大小:19.80KB
下载 相关 举报
C语言函数题库及答案.docx_第1页
第1页 / 共18页
C语言函数题库及答案.docx_第2页
第2页 / 共18页
C语言函数题库及答案.docx_第3页
第3页 / 共18页
C语言函数题库及答案.docx_第4页
第4页 / 共18页
C语言函数题库及答案.docx_第5页
第5页 / 共18页
C语言函数题库及答案.docx_第6页
第6页 / 共18页
C语言函数题库及答案.docx_第7页
第7页 / 共18页
C语言函数题库及答案.docx_第8页
第8页 / 共18页
C语言函数题库及答案.docx_第9页
第9页 / 共18页
C语言函数题库及答案.docx_第10页
第10页 / 共18页
C语言函数题库及答案.docx_第11页
第11页 / 共18页
C语言函数题库及答案.docx_第12页
第12页 / 共18页
C语言函数题库及答案.docx_第13页
第13页 / 共18页
C语言函数题库及答案.docx_第14页
第14页 / 共18页
C语言函数题库及答案.docx_第15页
第15页 / 共18页
C语言函数题库及答案.docx_第16页
第16页 / 共18页
C语言函数题库及答案.docx_第17页
第17页 / 共18页
C语言函数题库及答案.docx_第18页
第18页 / 共18页
亲,该文档总共18页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

C语言函数题库及答案.docx

《C语言函数题库及答案.docx》由会员分享,可在线阅读,更多相关《C语言函数题库及答案.docx(18页珍藏版)》请在冰点文库上搜索。

C语言函数题库及答案.docx

C语言函数题库及答案

第六部分函数

一、单项选择题

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(intx1,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.已知如下定义的函数:

fun1(a)

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

}

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

A.与参数a的类型相同

B.void型

C.整型

D.无法确定

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

能够实现此功能的是(D)

A.swapa(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.已知函数定义如下:

floatfun1(intx,inty)

{floatz;

z=(float)x/y;

return(z);

}

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

A.printf("%f",fun1(a,b));B.printf("%f",fun1(&a,&b));

C.printf("%f",fun1(*a,*b));D.调用时发生错误

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

a(s1,s2)

chars1[],s2[];

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

}

A.字符串比较

B.字符串复制

C.字符串连接

D.字符串反向

二、填空题

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

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

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

intd=1;

fun(intp)

{

intd=5;

d+=p++;

printf(“%d”,d);

}

main()

{

inta=3;

fun(a);

d+=a++;

printf(“%d”,d);

}

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

  1)#include

  2)longfun(intn)

  3){if(___1___)

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

  5)elseif(___3___)

  6)return1;}

  第一处:

n>1

  第二处:

n-1·

  第三处:

n==1

  解析:

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

我们知道:

n!

=n*(n-1)!

这就是一个递归的表达式,写成函数就是fun(n)=n*fun(n-1)。

因此,4行处填写n-1。

又:

1!

=1故3,5行就好填了。

因此答案是n>1n-1n==1。

还有0!

=1故,还可填写:

n>0n-1n==0

  注意:

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

5.程序的功能是计算s=1!

+2!

+3!

+……+n!

  1)longfun(intn)

  2){inti;

  3)longs;

  4)s=___1___;

  5)for(i=1;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=1;k<=n;k++)

  15)s=___4___;

  16)printf("%ld\n",s);

  17)}

  第一处:

1

  第二处:

s*i

  第三处:

0

  第四处:

s+fun(k)

  解析:

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

  Fun是求一个数的阶乘,我们知道:

n!

=1*2*3*…*n

  同时要死记住:

求积,积的初值一般等于1。

故fun中s是用来存放积的,其初值等于1;求阶乘是连乘,故s=s*i

  Main是求和,记住:

和的初值一般等于0.

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

Main中的s是存放和的。

  最后:

注意一些变量的类型。

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

输出中ld是输出长整数。

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

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

011235813……

  1)intfun(intn){

  2)if(___1___)

  3)return0;

  4)elseif(___2___)

  5)return1;

  6)else

  7)return___3___;

  8)}

  第一处:

n==0

  第二处:

n==1

  第三处:

fun(n-1)+fun(n-2)

  解析:

求斐波契数列:

一项等于其前两项的和。

  这也是一个递归。

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

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

和值通过函数值返回到main函数。

  1)#include

  2)#include

  3)___1___fun(intn)

  4){inta,b,c,k;

  5)doubles;

  6)s=0.0;

  7)a=2;

  8)b=1;

  9)for(k=1;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/1;3/24/3

  故:

s=2/1+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+1)/n;

  9)___2___;

  10)}

  11)printf("n=%d\n",n);

  12)___3___;

  13)}

  第一处:

s<=q

  第二处:

n++

  第三处:

returns

  解析:

从第8行,

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

  (n+1)/nn从2开始,每次增加1,故:

SN=2+3/2+4/3+……和的初值是2.0

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

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

 9.给定程序功能是计算S=f(-n)+f(-n+1)+…+f(0)+f

(1)+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

  aver/=(float)m;

  for(i=0;i

  if(score[i]

  returnj;

  }

  main()

  {inti,n,below[9];

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

  n=fun(score,9,___2___);

  printf("\nBelowtheaveragescoreare:

");

  for(i=0;i

  }

  第一处:

score[i]

  第二处:

below

  第三处:

below[i]

  解析:

求平均值,应先求和。

此处,和与平均值使用了同一个变量。

  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  ___2___;

  average=___3___;

  for(i=0;i  if(x[i]  {

  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;

  }

  第一处:

0

  第二处:

i=2;i

  解析:

求和,和的初值s为0。

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

  相差2。

13.请补全main函数,该函数的功能是:

计算并输出下列多项式的值。

  S=1+1/(1+2)+1/(1+2+3)+……+1/(1+2+3+……+50)

  #include

  ___1___fun(intn)

  {

  inti,j;

  doublesum=0.0,t;

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

  {

  t=0.0;

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

  t+=___2___;

  sum+=___3___;

  }

  returnsum;

  }

  第一处:

double

  第二处:

j

  第三处:

1.0/t

  解析:

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

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

  组合起来整个就需要二重循环。

内循环求每个单项的和,外循环求商的和。

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

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

  函数的返回值是浮点数。

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

n和m从键盘输入。

  main()

  {intn,m;

  longsum;

  ___1___;

  clrscr();

  printf("\nInputn,m\n");

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

  while(n<=m)

  {

  ___2___;

  n++;

  }

  printf("sum=%___3___\n",sum);

  }

  第一处:

sum=0

  第二处:

sum+=n

  第三处:

ld

  解析:

求和问题

15.请补全main函数,该函数的功能是:

从键盘上输入3个整数,然后找出最大的数并输出。

  main()

  {inta,b,c,max;

  clrscr();

  printf("\nInputthreenumbers:

\n");

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

  printf("Thethreenumbersare:

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

  if(a>b)

  ___1___;

  else

  ___2___;

  if(max  ___3___;

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

  }

  第一处:

max=a

  第二处:

max=b

  第三处:

max=c

  解析:

  若a>b则a较大,将其放入max中;否则将b存于max。

  此时,max中存放的就是前两个数中较大的,再将max与c比较。

16.函数fun的功能是:

从三个形参a,b,c中找出中间的那个数,作为函数值返回。

  intfun(inta,intb,intc)

  {intt;

  t=(a>b)?

(b>c?

b:

(a>c?

c:

___1___)):

((a>c)?

___2___:

((b>c)?

c:

___3___));

  returnt;

  }

  第一处:

a

  第二处:

a

  第三处:

b

  解析:

条件表达式的理解。

17.请补全fun函数,该函数的功能是把从键盘输入的3个整数按从小到大输出。

  main()

  {intx,y,z,t;

  clrscr();

  printf("Inputx,y,z\n");

  scanf("%d%d%d",&x,&y,&z);

  if(___1___)

  {

  t=x;

  x=y;

  y=t;

  }/*交换x,y的值*/

  if(___2___)

  {

  t=z;

  z=x;

  x=t;

  }/*交换x,z的值*/

  if(___3___)

  {

  t=y;

  y=z;

  z=t;

  }/*交换z,y的值*/

  第一处:

x>y

  第二处:

x>z

  第三处:

y>z

  解析:

  3个数排序,两两比较,小的放前,大者放后。

  交换。

 

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

当前位置:首页 > 表格模板

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2