C语言练习4函数参考答案文档格式.docx
《C语言练习4函数参考答案文档格式.docx》由会员分享,可在线阅读,更多相关《C语言练习4函数参考答案文档格式.docx(17页珍藏版)》请在冰点文库上搜索。
{intz;
z=x+y;
C)fun(intx,y)
D)doublefun(intx,inty)
{doublez;
5以下正确的函数声明形式是(D).
A)doublefun(intx,inty)
B)doublefun(intx;
inty)
C)doublefun(int,int)
D)doublefun(int,int);
6以下说法中正确的是(A)
在C语言中
A)实参与其对应的形参各占用独立的存储单元
B)实参与其对应的形参占用同一个存储单元
C)只有当实参与形参同名时才占用同一个存储单元
D)实参占用存储单元,但形参是虚拟的,不占用存储单元
7设有如下函数定义:
intf(char*s)
{char*p=s;
while(*p!
='
\0'
)p++;
return(p-s);
如果在主程序中用下面的语句调用上述函数,则输出结果为(A).
printf("
%d\n"
f("
goodbye!
"
));
的输出结果是
A)3B)6C)8D)0
8下面程序段中,主函数中变量a被初始化为(C)。
intf()
{
return3.5;
}
{
inta=f();
A)3.5B)无确定值
C)3D)程序出错
9下面叙述不正确的是(D).
A)在函数中,通常用return语句传回函数值;
B)在函数中,可以有多条return语句;
C)在C中,主函数main后的一对圆括号中也可以带有形参;
D)在C中,调用函数必须在一条独立的语句中完成;
10-C语言函数返回值的类型是由(C)决定的。
A)调用该函数的主调函数类型B)定义函数时所指定的函数类型
C)return语句中的表达式类型D)以上都错
11-以下说法中正确的是(A).
A)实参可以是常量、变量或表达式
B)形参可以是常量、变量或表达式
C)实参可以为任意类型
D)形参应与其对应的实参类型一致
12-C语言中规定,简单变量做实参时,它和对应形参之间的数据传递方式是(B).
A)地址传递
B)单向值传递
C)由实参传给形参,再由形参传给实参
D)由用户指定传递方式
13-以下程序的输出结果是(A)。
intpower(intx,inty);
{floata=2.6,b=3.4;
intp;
p=power((int)a,(int)b);
printf("
p);
intpower(intx,inty)
{inti,p=1;
for(i=y;
i>
0;
i--)
p=p*x;
returnp;
A)8B)9C)27D)81
14-以下不正确的描述为(B).
A)调用函数时,实参可以是表达式
B)调用函数时,实参变量与形参变量可以共用内存单元
C)调用函数时,将为形参分配内存单元
D)调用函数时,实参与形参的类型必须一致
15-下列语句中,不正确的是(C)。
A)chara[]={"
China"
};
B)chara[]="
;
C)printf("
%s"
a[0]);
D)scanf("
a);
16-若有以下函数调用语句fun(a+b,(x,y),fun(n+k,d,(a,b)));
在此函数调用语句中实际参数的个数是(A).
A)3B)4C)5D)6
17-下面程序
#include<
stdio.h>
main()
{
char*a="
1234"
fun(a);
\n"
);
fun(char*s)
{chart;
if(*s){t=*s++;
fun(s);
if(t!
)putchar(t);
输出为(B).
A)1234B)4321C)1324D)4231
18-C规定,简单变量做实参时,它与对应形参之间的数据传递方式是(B).
A)地址传递
C)有实参传递到形参,再由形参传回给实参。
19-执行完下列语句段后,i值为(C).
inti;
intf(intx)
{intk=x+1;
intt;
t=k;
k=x;
x=t;
returnx;
i=f(f
(1));
A)1B)2C)3D)以上都错
20-下列程序段的运行结果为(B).
floatf(intx)
x=x+3.6;
returnx;
main()
%.1f"
f
(2));
A)6.0B)5.0C)5.6D)以上都不对
21-执行下列程序后,变量a的值应为(A).
intf(intx,inty)
{returnx*y;
main()
{inta=2;
a=f(f(a,a*a),f(a+a,a/3));
A)0B)2C)8D)16
22-若有以下函数定义,则在主函数中正确的调用语句是(B).
viodfun(intarray[3][5])
{………..}
{inta[3][5],b;
……..}
A)fun(a[3][5]);
B)b=fun(a);
C)fun(a);
D)fun(&
a);
23-若有以下变量说明和函数定义:
inta=4,b=6,c,k;
charch='
x'
floatx,y,z;
sub(intx,inty,charch,float*z)
{switch(ch)
{case'
+'
:
*z=x+y;
break;
case'
-'
*z=x-y;
*'
*z=x*y;
/'
*z=x/y;
则以下合法的函数调用语句是(B).
A)sub(10,20,ch,y);
B)sub(1,2+3,'
z);
C)sub(sub(1,2,'
y),sub(3,4,'
x),'
y);
D)sub(a,b,&
x,ch);
24-下面程序
f(intx)
{if(x==0||x==1)return(3);
elsereturn(x–f(x–2));
main()
printf("
f(9));
输出结果是(A).
A)7B)3C)6D)8
25-以下说法中正确的是(B).
A)一个函数在它的函数体内调用它自身称为嵌套调用。
B)一个函数在它的函数体内调用它自身称为递归调用。
这种函数称为递归函数。
C)一个函数在它的函数体内调用其它函数称为递归调用。
D)一个函数在它的函数体内不能调用自身
26-以下叙述中不正确的是(D).
A)在不同的函数中可以使用相同名字的变量
B)函数中的形式参数是局部变量
C)在一个函数内定义的变量只在本函数范围内有效
D)在一个函数内的复合语句中定义的变量在本函数范围内有效
27-C函数返回值的类型由(D)决定.
A)调用函数时临时
B)return语句中的表达式类型
C)调用该函数的主调函数类型
D)定义函数时指定的函数返回值类型
28-执行下列语句后,程序的运行结果为(A).
inta=10;
f()
{inta;
a=12;
{f();
%d"
A)10B)12C)0D)不确定
29-以下说法中不正确的是(D).
A)主函数中定义的变量只在主函数内部有效
B)形式参数是局部变量
C)在函数内部定义的变量只在本函数范围内有效
D)当全局变量与局部变量同名时,局部变量不起作用
30-当全局变量与函数内部的局部变量同名时,则在函数内部(A).
A)全局变量有效
B)局部变量有效
C)全局变量与局部变量都有效
D)全局变量与局部变量都无效
31-设下面程序段中调用fun函数传送实参a和b:
main()
{chara[10],b[10];
……
fun(a,b);
则在fun函数头部中,对形参正确的定义是:
(BCD)
A)fun(chara,b)
B)fun(chara1[],chara2[])
C)fun(charp[10],charq[10])
D)fun(char*s1,char*s2)
二、判断题
1形参可以是常量、变量或表达式。
错
2如函数值的类型与返回值类型不一致,以函数值类型为准。
对
3下面两种写法等价。
对
(1)intfun(intx,inty)
(2)intfun(x,y)
4在C语言中,最好使用全局变量.错
5以下说法是否正确:
若调用C标准库函数,调用前必须重新定义。
6形式参数和实际参数的个数可以不同。
7数组名做函数的参数时,实参数组和形参数组大小一定要一致。
8用数组名做函数参数,形参数组可以不指定大小。
9C语言中函数的返回值类型是由return语句中的表达式类型决定的。
10数组名作为函数参数,应该在主调函数与被调函数中分别定义数组,不能只在一方定义。
11以数组名作为参数时,数据传送方向是“双向的”。
即形参值可以传回给实参。
12所有的函数都是平行的,一个函数并不从属于另一个函数。
13只有主函数才可以调用其它函数。
14在C语言中,函数可以递归调用或递归定义。
15在同一文件中,外部变量与局部变量同名。
在局部变量的作用范围内,外部变量的值等于局部变量的值。
16main函数中定义变量是全局变量。
17当全局变量与函数内部的局部变量同名时,则在函数内部全局变量有效。
三、填空题
[1]以下程序的输出结果是_____12___.
unsignedfun6(unsignednum)
{unsignedk=1;
do
{k*=num%10;
num/=10;
while(num);
returnk;
{unsignedn=26;
fun6(n));
[2]以下程序的输出结果是___9.000000_____.
doublesub(doublex,doubley,doublez)
{y-=1.0;
z=z+x;
returnz;
{doublea=2.5,b=9.0;
%f\n"
sub(b-a,a,a));
[3]以下程序的输出结果是____4____.
fun1(inta,intb)
{intc;
a+=a;
b+=b;
c=fun2(a,b);
returnc*c;
fun2(inta,intb)
c=a*b%3;
returnc;
{intx=11,y=19;
fun1(x,y));
[4]下面pi函数的功能是,根据以下公式返回满足精度要求的的值.请填空.
doublepi(doubleeps)
{doubles=0.0,t=1.0;
intn;
for(__n=1___;
t>
eps;
n++)
{s+=t;
t=n*t/(2*n+1);
return(2.0*__s___);
[5]以下函数用以求x的y次方.请填空.
doublefun(doublex,inty)
{inti;
doublez=1;
for(i=1;
i__i<
=y___;
i++)
z=__z*x___;
}
[6]以下程序的功能是计算
.请填空.
longf(intn)
longs;
s=__1___;
i<
=n;
i++)s=__s*i___;
returns;
{longs;
intk,n;
n);
s=__-1___;
for(k=0;
k<
k++)s=s+__f(k)___;
%ld\n"
s);
四、编程题
[1]编写函数intmymod(inta,intb)用以求a被b除之后的余数.
intmymod(inta,intb)
{
returna%b;
[2]编写函数,根据整型形参m的值,计算如下公式的值.
t=1-1/2*2-1/3*3-...-1/m*m
例如,若m=5,则应输出0.536389.
floatfun(intm)
floatt=1;
for(i=2;
i<
=m;
i++)
t=t-1.0/(i*i);
returnt;
voidmain()
%f"
fun(5));
[3]编写函数用以求表达式x*x-5*x+4,x作为参数传送给函数,调用此函数求:
y1=2*2-5*2+4
y2=(x+15)*(x+15)-5*(x+15)+4
y3=sinx*sinx-5*sinx+4
math.h>
floaty(floatx)
returnx*x-5*x+4;
floaty1,y2,y3;
intx=2;
y1=y(x);
y2=y(x+15);
y3=y(sin(x));
y1=%f,y2=%f,y3=%f\n"
y1,y2,y3);
[4]编写一个函数,把一个字符串中的大写字母改为小写字母,其余不变。
并从键盘输入一个字符串,然后使用该函数将大写字母变为小写字母后输出。
#defineN80
voidchangestr(charstr[])
inti=0;
while(str[i]!
)
if(str[i]>
A'
&
str[i]<
Z'
{
str[i]=str[i]+('
a'
}
i++;
charst[N];
Inputastring:
st);
changestr(st);
%s\n"