C语言练习4函数参考答案.docx
- 文档编号:10364654
- 上传时间:2023-02-10
- 格式:DOCX
- 页数:17
- 大小:23.90KB
C语言练习4函数参考答案.docx
《C语言练习4函数参考答案.docx》由会员分享,可在线阅读,更多相关《C语言练习4函数参考答案.docx(17页珍藏版)》请在冰豆网上搜索。
C语言练习4函数参考答案
C语言(函数,变量作用范围)
一、选择题
1下列定义不正确的有(C)。
A)#definePI3.141592B)#defineS345
C)intmax(x,y);D)charc;
intx,y;
{}
2下列程序结构中,不正确的是(B)。
A)main()B)main()
{floata,b,c;{floata,b,c;
scanf("%f,%f",&a,&b);scanf("%f,%f",&a,&b);
c=add(a,b);c=add(a,b);
...........
}}
intadd(floatx,floaty)floatadd(floatx,floaty)
{...}{...}
C)floatadd(floatx,floaty);D)floatadd(floatx,floaty)
main(){...}
{floata,b,c;main()
scanf("%f,%f",&a,&b);{floata,b,c;
c=add(a,b);scanf("%f,%f",&a,&b);
......c=add(a,b);
}.....
floatadd(floatx,floaty)}
{...}
3一个C语言的程序总是从(A)开始执行的.
A)main函数
B)文件中的第一个函数
C)文件中的第一个子函数调用
D)文件中的第一条语句
4以下正确的函数定义是(D).
A)doublefun(intx,inty)
{z=x+y;returnz;}
B)doublefun(intx,inty);
{intz;
z=x+y;returnz;}
C)fun(intx,y)
{intz;returnz;}
D)doublefun(intx,inty)
{doublez;
z=x+y;returnz;}
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;
}
main()
{
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);
main()
{floata=2.6,b=3.4;
intp;
p=power((int)a,(int)b);
printf("%d\n",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[]="China";
C)printf("%s",a[0]);D)scanf("%s",a);
16-若有以下函数调用语句fun(a+b,(x,y),fun(n+k,d,(a,b)));在此函数调用语句中实际参数的个数是(A).
A)3B)4C)5D)6
17-下面程序
#include
main()
{
char*a="1234";
fun(a);
printf("\n");
}
fun(char*s)
{chart;
if(*s){t=*s++;fun(s);}
if(t!
='\0')putchar(t);
}
输出为(B).
A)1234B)4321C)1324D)4231
18-C规定,简单变量做实参时,它与对应形参之间的数据传递方式是(B).
A)地址传递
B)单向值传递
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()
{
printf("%.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])
{………..}
main()
{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;break;
case'*':
*z=x*y;break;
case'/':
*z=x/y;break;
}
}
则以下合法的函数调用语句是(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-下面程序
#include
f(intx)
{if(x==0||x==1)return(3);
elsereturn(x–f(x–2));
}
main()
{
printf("%d\n",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;
}
main()
{f();
printf("%d",a);
}
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)
intx,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;
}
main()
{unsignedn=26;
printf("%d\n",fun6(n));
}
[2]以下程序的输出结果是___9.000000_____.
doublesub(doublex,doubley,doublez)
{y-=1.0;
z=z+x;
returnz;
}
main()
{doublea=2.5,b=9.0;
printf("%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)
{intc;
c=a*b%3;
returnc;
}
main()
{intx=11,y=19;
printf("%d\n",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___;
returnz;
}
[6]以下程序的功能是计算
.请填空.
longf(intn)
{inti;longs;
s=__1___;
for(i=1;i<=n;i++)s=__s*i___;
returns;
}
main()
{longs;intk,n;
scanf("%d",&n);
s=__-1___;
for(k=0;k<=n;k++)s=s+__f(k)___;
printf("%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.
#include
floatfun(intm)
{
floatt=1;
inti;
for(i=2;i<=m;i++)
{
t=t-1.0/(i*i);
}
returnt;
}
voidmain()
{
printf("%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
#include
#include
floaty(floatx)
{
returnx*x-5*x+4;
}
voidmain()
{
floaty1,y2,y3;
intx=2;
y1=y(x);
y2=y(x+15);
y3=y(sin(x));
printf("y1=%f,y2=%f,y3=%f\n",y1,y2,y3);
}
[4]编写一个函数,把一个字符串中的大写字母改为小写字母,其余不变。
并从键盘输入一个字符串,然后使用该函数将大写字母变为小写字母后输出。
#include
#include
#defineN80
voidchangestr(charstr[])
{
inti=0;
while(str[i]!
='\0')
{
if(str[i]>='A'&&str[i]<='Z')
{
str[i]=str[i]+('a'-'A');
}
i++;
}
}
voidmain()
{
charst[N];
printf("Inputastring:
");
scanf("%s",st);
changestr(st);
printf("%s\n",st);
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 练习 函数 参考答案
![提示](https://static.bdocx.com/images/bang_tan.gif)