第5章 函数带答案Word文件下载.docx
《第5章 函数带答案Word文件下载.docx》由会员分享,可在线阅读,更多相关《第5章 函数带答案Word文件下载.docx(28页珍藏版)》请在冰点文库上搜索。
{floaty=x+2;
return(y);
A)3.6B)3C)4D)3.0
14、设有如下的函数,则函数返回值的类型是()C
ggg(floatx)
{return(x*x);
}
A)与参数x的类型相同B)voidC)intD)无法确定
15、有以下程序,则执行后输出的结果是()A
#include"
stdio.h"
voidfun(intk,intn)
{intt;
t=k;
k=n;
n=t;
voidmain()
{intk=1,m=2;
fun(k,m);
printf("
%d,%d\n"
k,m);
A)1,2B)2,1C)1,1D)2,2
16、以下程序运行后的输出结果是()D
intfun(inta,intb)
{if(a>
b)return(a);
elsereturn(b);
voidmain()
{intx=3,y=8,z=6,r;
r=fun(fun(x,y),2*z);
printf("
%d\n"
r);
A)3B)6C)8D)12
*********************************数组作函数参数*********************************
17、对于一维数组名作函数实参,以下描述正确的是(A)
A)必须在主调函数中说明此数组的大小
B)实参数组类型与形参数组类型可以不一致
C)函数调用时是将实参数组中的所有元素值复制到形参数组中
D)实参数组名与形参数组名必须保持一致
18、数组名作参数时,以下叙述正确的是()B
A)函数调用时是将实参数组的所有元素传给形参
B)函数调用时是将实参数组的首地址传给形参
C)函数调用时是将实参数组的第1个元素传给形参
D)函数调用时是将实参数组所有元素的地址传给形参
19、已有如下数组定义和函数调用语句,则fun函数的形参数组的正确定义方法是(C)
inta[3][4];
fun(a);
A)fun(inta[][6])B)fun(inta[3][]C)fun(inta[][4])D)fun(inta[][])
20、有以下程序,则执行后的结果为()C
voidfun(intb[],intn)
{for(inti=0;
i<
n;
i++)
++b[i];
{
intx,a[5]={2,3,4,5,6};
f(a,5);
a[1]);
A)2B)3C)4D)5
***********************************嵌套和递归***********************************
21、以下描述错误的是()D
A)C程序中,函数可以直接或间接的调用自己
B)函数调用时,函数名必须与所调用的函数名字完全一致
C)函数声明语句中的类型必须与函数返回值的类型一致
D)实参数可以与形参个数不一致
22、关于递归函数的叙述错误的是()C
A)递归函数是自己调用自己B)递归函数占用较多的存储空间
C)递归函数的运行速度很快D)递归函数的运行速度一般比较慢
23、关于递归函数的叙述错误的是(A)
A)用递归函数求n!
比用循环求n!
的速度快B)递归函数经常使用if结构
C)递归函数运行时占用较多的存储空间D)通常递归函数的代码比较简洁
24、下列的结论中正确的是()B
A)所有的递归程序均可以采用非递归算法实现
B)只有部分递归程序可以用非递归算法实现
C)所有的递归程序均不可以采用非递归算法实现
D)以上三种说法都不对
25、关于二分搜索以下说法错误的是()B
A)二分搜索算法可以用循环语句实现B)二分搜索对数据排列没有要求
C)二分搜索算法可以用递归函数实现D)二分搜索体现了分治法的思想
****************************局部和全局变量及存储类别****************************
26、以下描述错误的是(D)
A)在不同的函数中可以使用相同名字的变量
B)函数定义中的形参是局部变量
C)在一个函数内部定义的变量只能在该函数内使用
D)在一个函数内的复合语句中定义变量在整个函数范围内有效
27、以下对局部变量描述正确的是()D
A)在函数内部定义的变量B)在main函数中定义的变量是局部变量
C)形式参数也是局部变量D)局部变量在程序的全部执行过程中一直占用存储单元
28、在一个源文件中定义的全局变量的作用域为()D
A)本文件的全部范围B)本程序的全部范围
C)本函数的全部范围D)从定义该变量的位置开始到本文件结束
29、以下关于局部变量和全局变量的叙述错误的是()D
A)main函数中定义的变量是局部变量B)局部变量可以与全局变量重名
C)在所有函数外定义的变量是全局变量D)形式参数不是局部变量
30、阅读下列程序,则执行后输出的结果是()A
intk=1;
voidfun(intk)
{k++;
k=k*6;
{fun(k);
printf("
k);
A)1B)2C)6D)12
31、对于函数中的局部变量来说,默认的存储类型是(A)
A)autoB)staticC)externD)register
32、C语言中,默认的函数的存储类别是(C)
A)autoB)staticC)externD)函数没有存储类别
33、程序中定义的全局变量存放在以下哪个存储区()C
A)堆存储区B)栈存储区C)静态存储区D)程序代码区
34、设在C程序中有2个文件f1.cpp和f2.cpp,若要定义一个只允许在f1.cpp中所有函数使用的全局变量,则该变量的存储类别应该是()D
A)externB)registerC)autoD)static
35、以下叙述不正确的是()B
A)在C语言中,若整型变量做函数参数,调用函数时是把实参的值传送给形参
B)在C的函数中,应该尽量多的使用全局变量
C)在C语言中,函数的返回值使用return语句返回
D)在C语言中,函数可以嵌套调用
二、填空题
1、用户自定义函数,必须先定义后使用。
2、C语言程序的基本单位是函数,C语言程序从开始执行。
main函数
3、用户自定义函数包括两个部分:
声明部分和执行部分,这两部分的顺序不能颠倒。
4、从函数定义的角度看,函数可以分为标准库函数和自定义函数两种。
5、对于有返回值的函数来说,通常函数体内包含有return语句。
6、当一个函数的返回值类型缺省时,意味着该函数的返回值类型为int型。
7、数组名作函数参数时,实际上是将实参数组的传给形参。
首地址
8、调用带参数的函数时,实参必须和形参数量相同,顺序一致。
9、C语言函数自己调用自己的方式称之为函数的。
递归
10、用递归求解问题的两个特点是和。
递归的结束条件求解问题的递归方式
11、变量的作用域和生存期是分别从空间和时间的角度来体现变量的特性。
12、变量的存储类型可分为静态存储和动态存储两种,具体的存储类型有四种:
auto,
static,register,extern。
13、一个已编译的C程序在运行时将占用4块内存区域:
、、、栈存储区。
静态存储区程序代码区堆存储区
14、根据函数能否被其他源文件中的函数调用,可分为内部函数和。
外部函数
三、阅读程序题
1、写出程序的输出结果。
voidfun(inta,intb)
{ints;
s=a*b/2;
a++;
b++;
s=%d\n"
s);
{inta=10,b=16;
fun(a,b);
a=%d,b=%d\n"
a,b);
输出结果:
s=80
a=10,b=16
2、写出函数func的功能,假设输入x和y的值为18和24,写出程序的运行结果。
#include<
stdio.h>
intfun(inta,intb);
voidmain()
{intx,y,z;
scanf(“%d%d”,&
x,&
y);
z=fun(x,y);
printf(“z=%d”,z);
{intr,t;
if(a<
b)
{t=a;
a=b;
b=t;
while(b!
=0)
{r=a%b;
b=r;
return(a);
函数功能:
求两个数的最大公约数
运行结果:
z=6
3、写出程序的输出结果。
intfun1()
{intk=20;
returnk;
intfun2()
{inta=15;
returna;
voidfun3(inta,intb)
{intk;
k=(a-b)*(a+b);
k=%d\n"
{fun3(fun1(),fun2());
输出结果:
k=175
4、写出程序的输出结果。
#include<
floatfun(intx,inty)
{return(x+y);
{inta=2,b=5,c=8;
%3.0f\n"
fun((int)fun(a+c,b),a-c));
}
__9
5、写出fun1和fun2函数的功能和程序的运行结果。
(5分)
intfun1(intx)
{inti,t=1;
for(i=1;
i<
=3;
i++)t=t*x;
return(t);
intfun2(intn)
{inti,s=0;
=n;
i++)s=s+fun1(i);
return(s);
{inty;
y=fun2(3);
y=%d\n"
y);
fun1函数的功能是:
求x!
fun2函数的功能是:
求1!
+2!
+…+n!
累加和
程序运行结果是:
y=36
6、写出程序的功能,假设输入为:
4↙,请写出输出结果。
(难度3颗星)
#defineM6
{intn,i,j,pos,a[M]={1,3,5,7,9};
scanf("
%d"
&
n);
if(n>
a[M-2])a[M-1]=n;
else
{for(pos=0;
pos<
M-1;
pos++)
if(a[pos]>
n)break;
for(j=M-1;
j>
pos;
j--)
a[j]=a[j-1];
a[pos]=n;
for(i=0;
M;
i++)printf("
%4d"
a[i]);
\n"
);
功能:
在有序数组中插入一个数,并保持其有序性
134579
7、写出程序的运行结果和函数fun所实现的功能。
#defineN3
#defineM4
voidfun(intx[N][M])
{inti,j,p;
for(i=0;
N;
i++)
{p=0;
for(j=1;
j<
j++)
if(x[i][p]<
x[i][j])p=j;
line%d:
%d\n"
i,x[i][p]);
{inta[N][M]={1,5,7,4,2,6,4,3,8,2,3,1};
fun(a)
;
运行结果:
line0:
7
line1:
6
line2:
8
函数fun所实现的功能:
找出二维数组中每行中的最大值
8、写出下面程序的输出结果。
intfun(intn)
{if(n==1)return1;
elsereturnfun(n-1)+n;
//该递归函数功能是计算1~n的和
{inti,sum=0;
for(i=1;
i++)
sum=sum+fun(i);
sum=%d\n"
sum);
sum=10
9、写出下面程序的输出结果。
charstr[]="
ABCDEFGH"
voidfun(inti)
{printf("
%c"
str[i]);
if(i<
3)
{i=i+2;
fun(i);
{inti=0;
ACE
10、写出程序的运行结果。
voidfun(intx)
k=x+1;
printf("
{k++;
fun(k);
k=2
k=3
11、写出程序的输出结果。
inta=3;
voidmain()
{ints=0;
{inta=5;
s+=a++;
s+=a++;
s=%d,a=%d\n"
s,a);
s=8,a=4
12、写出程序的输出结果。
voiddec()
{staticintx=5;
x=x-1;
%d"
x);
{intk;
for(k=0;
k<
3;
k++)
dec();
432
13、写出程序的输出结果。
voidf1()
{staticinti=1;
i++;
i);
{inti=0;
f1();
2
3
15、写出程序的运行结果。
intfun(inta)
{intb=1;
staticintc=2;
c++;
return(a+b+c);
{inta=3,x1,x2;
x1=f(a);
x2=f(a);
printf(“x1=%d,x2=%d\n”,x1,x2);
x1=8,x2=9
16、写出下面程序的输出结果。
intx=3;
voidfun()
{staticintx=1;
x*=x+1;
x=%d\n"
x);
{inti;
x;
{printf("
i=%d:
"
i);
fun();
}
i=1:
x=2
i=2:
x=6
17、写出程序的运行结果。
{staticintf=1;
f=f*a;
return(f);
{inti,a=3;
printf(“%d\n”,fun(a));
9
27
18、写出下面程序的输出结果。
(选做题,难度4颗星)
voidfun(inta[],inti,intj)
{intt;
j)
{t=a[i];
a[i]=a[j];
a[j]=t;
fun(a,i+1,j-1);
{inti,a[5]={1,2,3,4,5};
fun(a,0,4);
for(i=0;
5;
%d,"
5,4,3,2,1,
19、写出函数fun1和fun2的功能及程序的运行结果。
(选做题,难度5颗星)
voidfun1(inta[],intp,intr);
intfun2(inta[],intp,intr);
{inti,a[10]={3,6,1,0,9,4,8,5,2,7};
fun1(a,0,9);
10;
%3d"
voidfun1(inta[],intp,intr)
{if(p<
r)
{intq=fun2(a,p,r);
fun1(a,p,q-1);
fun2(a,q+1,r);
intfun2(inta[],intp,intr)
{inti=p,j=r+1,x=a[p],t;
while
(1)
{while(a[++i]<
x);
//注意这里的分号
while(a[--j]>
if(i>
=j)break;
t=a[i];
a[p]=a[j];
a[j]=x;
returnj;
0123456789
fun1的功能:
将数组按中间值分成两组分别进行排序
fun2的功能:
找出数组中间值的下标
四、程序填空题
1、下面的递归函数是完成1~n的累加,请填写完整。
intfun(intk)
{intsum;
if(k<
=0)printf("
e