函数练习题及答案.docx
《函数练习题及答案.docx》由会员分享,可在线阅读,更多相关《函数练习题及答案.docx(16页珍藏版)》请在冰豆网上搜索。
函数练习题及答案
单项选择
==================================================
题号:
2914
函数定义时的参数为形参,调用函数时所用的参数为实参,则下列描述正确的是().
A、实参与形参是双向传递
B、形参和实参可以同名
C、实参类型一定要在调用时指定
D、形参可以是表达式
答案:
B
题号:
4060
以下程序的输出结果是
main()
{intk=4,m=1,p;
p=func(k,m);
printf("%d,",p);
p=func(k,m);
printf("%d\n",p);
}
func(inta,intb)
{staticintm,i=2;
i+=m+1;
m=i+a+b;
return(m);
}
A、8,20
B、8,16
C、8,17
D、8,8
答案:
C
题号:
2491
请阅读以下程序:
#include
#include
voidfun(intb[])
{staticinti=0;
do
{b[i]+=b[i+1];
}while(++i<2);}
main()
{intk,a[5]={1,3,5,4,9};
fun(a);
for(k=0;k<5;k++)printf("%d",a[k]);}
上面程序的输出是().
A、48579
B、48549
C、48999
D、13579
答案:
B
题号:
2643
有以下程序:
#include
voidfun(inta[],intn)
{inti,t;
for(i=0;i}
main()
{intk[10]={1,2,3,4,5,6,7,8,9,10},i;
fun(k,5);
for(i=2;i<8;i++)printf("%d",k[i]);
printf("\n");
}
程序的运行结果是().
A、876543
B、321678
C、1098765
D、345678
答案:
B
程序设计
==================================================
题号:
5340
/*------------------------------------------------
【程序设计】
--------------------------------------------------
题目:
给定n个数据,求最小值出现的位置
(如果最小值出现多次,求出第一次出
现的位置即可)。
--------------------------------------------------
注意:
部分源程序给出如下。
请勿改动主函数
main和其它函数中的任何内容,仅在函数
station的花括号中填入所编写的若干语句。
*********Begin**********和**********End**********不可删除
------------------------------------------------*/
#include"stdio.h"
intstation(ints[],intn)
{
/*********Begin**********/
/**********End**********/
}
main()
{
inta[100],n,i,t;
scanf("%d",&n);
for(i=0;iscanf("%d",&a[i]);
t=station(a,n);
printf("themin_valuepositionis:
%d\n",t);
TestFunc();
}
TestFunc()
{
FILE*IN,*OUT;
intn;
inti[10];
into;
IN=fopen("in.dat","r");
if(IN==NULL)
{printf("ReadFileError");
}
OUT=fopen("out.dat","w");
if(OUT==NULL)
{printf("WriteFileError");
}
for(n=0;n<10;n++)
{
fscanf(IN,"%d",&i[n]);
}
o=station(i,10);
fprintf(OUT,"%d\n",o);
fclose(IN);
fclose(OUT);
}
示例代码:
inti,k;
k=0;
for(i=1;iif(s[i]
return(k);
题号:
5371
/*------------------------------------------------
【程序设计】
--------------------------------------------------
功能:
求小于形参n同时能被3与7整除的所有自然数之和的平方根,
并作为函数值返回。
例如若n为1000时,程序输出应为:
s=153.909064。
*********Begin**********和**********End**********不可删除
------------------------------------------------*/
voidTestFunc();
#include
#include
doublefun(intn)
{
/*********Begin**********/
/**********End**********/
}
main()
{printf("s=%lf\n",fun(1000));
TestFunc();
}
voidTestFunc()
{
FILE*IN,*OUT;
inti;
doubles;
IN=fopen("in.dat","r");
if(IN==NULL)
{
printf("ReadFILEError");
}
OUT=fopen("out.dat","w");
if(OUT==NULL)
{
printf("WriteFILEError");
}
fscanf(IN,"%d",&i);
s=fun(i);
fprintf(OUT,"%lf",s);
fclose(IN);
fclose(OUT);
}
示例代码:
inti;
doubles=0;
for(i=1;iif(i%3==0&&i%7==0)
s+=i;
returnsqrt(s);
程序填空
==================================================
题号:
599
/*-------------------------------------------------------
【程序填空】
---------------------------------------------------------
功能:
计算并输出500以内最大的10个能被13或17整除的自然数之和。
-------------------------------------------------------*/
#include"stdio.h"
/***********FILL***********/
intfun(_____)
{
intm=0,mc=0,j,n;
/***********FILL***********/
while(k>=2&&_____)
{
/***********FILL***********/
if(k%13==0||_____)
{
m=m+k;
mc++;
}
k--;
}
/***********FILL***********/
_____;
}
main()
{
printf("%d\n",fun(500));
}
答案:
位置1:
intk
位置2:
mc<10【或】10>mc【或】mc<=9【或】9>=mc
位置3:
k%17==0【或】!
(k%17)【或】k/17*17==k
位置4:
returnm【或】return(m)
题号:
546
/*给定程序中,函数fun的功能是:
将N×N矩阵中元素的值按列右移1个位置,右边被移出矩阵的元素绕回左边。
例如,N=3,有下列矩阵
123
456
789
计算结果为
312
645
978
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:
不得增行或删行,也不得更改程序的结构!
*/
#include
#defineN4
voidfun(int(*t)[N])
{inti,j,x;
/**********FILL**********/
for(i=0;i<___1___;i++)
{
/**********FILL**********/
x=t[i][___2___];
for(j=N-1;j>=1;j--)
t[i][j]=t[i][j-1];
/**********FILL**********/
t[i][___3___]=x;
}
}
main()
{intt[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10},i,j;
printf("Theoriginalarray:
\n");
for(i=0;i{for(j=0;jprintf("\n");
}
fun(t);
printf("\nTheresultis:
\n");
for(i=0;i{for(j=0;jprintf("\n");
}
}
答案:
位置1:
N
位置2:
N-1
位置3:
0
题号:
543
/*给定程序中,函数fun的功能是:
将形参n中,各位上为偶数的数取出,并按原来从高位到低位相反的顺序组成一个新的数,并作为函数值返
回。
例如,输入一个整数:
27638496,函数返回值为:
64862。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:
不得增行或删行,也不得更改程序的结构!
*/
#include
unsignedlongfun(unsignedlongn)
{unsignedlongx=0;intt;
while(n)
{t=n%10;
/**********FILL**********/
if(t%2==__1__)
/**********FILL**********/
x=__2__+t;
/**********FILL**********/
n=__3__;
}
returnx;
}
main()
{unsignedlongn=-1;
while(n>99999999||n<0)
{printf("Pleaseinput(0");scanf("%ld",&n);}
printf("\nTheresultis:
%ld\n",fun(n));
}
答案:
位置1:
0
位置2:
10*x
位置3:
n/10
程序改错
==================================================
题号:
708
/*给定程序中函数fun的功能是:
求三个数的最小公倍数。
例如,给主函数中的变量x1、x2、x3分别输入15112,则输出结果应当是:
330。
请改正程序中的错误,使它能得出正确结果。
注意:
不要改动main函数,不得增行或删行,也不得更改程序的结构。
*/
#include
/**********ERROR**********/
fun(intx,y,z)
{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;
}
/**********ERROR**********/
returni;
}
main()
{intx1,x2,x3,j;
printf("Inputx1x2x3:
");scanf("%d%d%d",&x1,&x2,&x3);
printf("x1=%d,x2=%d,x3=%d\n",x1,x2,x3);
j=fun(x1,x2,x3);
printf("Theminimalcommonmultipleis:
%d\n",j);
}
答案:
位置1:
intfun(intx,inty,intz)
位置2:
returnj;
题号:
693
/*给定程序中函数fun的功能是:
用选择法对数组中的n个元素按从小到大的顺序进行排序。
请修改程序中的错误,使它能得出正确的结果。
注意:
不要改动main函数,不得增行和删行,也不得更改程序的结构!
*/
#include
#defineN20
voidfun(inta[],intn)
{inti,j,t,p;
for(j=0;j/**********ERROR**********/
p=j
for(i=j;iif(a[i]/**********ERROR**********/
p=j;
t=a[p];a[p]=a[j];a[j]=t;
}
}
main()
{
inta[N]={9,6,8,3,-1},i,m=5;
printf("排序前的数据:
");
for(i=0;ifun(a,m);
printf("排序后的数据:
");
for(i=0;i}
答案:
位置1:
p=j;
位置2:
p=i;
题号:
692
/*给定程序中函数fun的功能是:
计算n!
。
例如,给n输入5,则输出120.000000。
请改正程序中的错误,使程序能输出正确的结果。
注意:
不要改动main函数,不得增行或删行,也不得更改程序的结构!
*/
#include
doublefun(intn)
{doubleresult=1.0;
/**********ERROR**********/
ifn==0
return1.0;
while(n>1&&n<170)
/**********ERROR**********/
result*=n--
returnresult;
}
main()
{intn;
printf("InputN:
");
scanf("%d",&n);
printf("\n\n%d!
=%lf\n\n",n,fun(n));
}
答案:
位置1:
if(n==0)
位置2:
result*=n--;