C习题函数部分.docx
《C习题函数部分.docx》由会员分享,可在线阅读,更多相关《C习题函数部分.docx(21页珍藏版)》请在冰豆网上搜索。
C习题函数部分
函数
一、选择题
1.以下说法中错误的是
A.C程序中可以只包含一个main函数__________。
B.C程序由一个main函数和若干其它函数构成
C.C程序中可以没有main函数,但至少包含一个其他函数
D.C程序由函数组成,函数是构成程序的基本单位
2.以下说法中正确的是__________。
A.main函数和其他函数间可相互调用
B.main函数可以调用其他函数,但其他函数不能调用main函数
C.因为main函数可不带参数,所以其后的参数小括号能省略
D.根据情况可以不写main函数
3.以下正确的函数首部定义形式是__________。
A.doublefun(intx,inty)B.doublefun(intx;inty)
C.doublefun(intx,inty);D.doublefun(intx,y);
4.C语言规定,函数返回值的类型是由__________。
A.return语句中的表达式类型所决定B.在定义该函数时所指定的函数类型所决定
C.调用该函数时系统临时决定D.调用该函数时的主调函数类型所决定
5.在C语言程序中,以下正确的描叙是__________。
A.函数的定义可以嵌套,但函数的调用不可以嵌套
B.函数的定义和函数的调用均不可以嵌套
C.函数的定义不可以嵌套,但函数的调用可以嵌套
D.函数的定义和函数的调用均可以嵌套
6.以下正确的说法是__________。
A.用户若需调用标准库函数,调用前必须重新定义
B.用户若需调用标准库函数,调用前不必使用预编译命令将函数所在文件包括到用户源文件中,系统自动去调
C.系统根本不允许用户重新定义标准库函数
D.用户可以重新定义标准库函数,若如此,该函数将失去原有含义
7.以下所列的各函数原型中,正确的是__________。
A.voidabc(vara:
intergervarb:
interger)B.voidabc(inta,b)
C.voidabc(inta,intb)D.subabc(aasinterger,aasinterger)
8.在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是__________。
A.地址传递B.单向值传递
C.由实参传给形参,再由形参传给实参D.传递方式由用户指定
9.在C语言中,以下正确的说法是__________。
A.实参和与其对应的形参各占用独立的存储单元
B.实参和与其对应的形参共占用一个存储单元
C.只有当实参和与其对应的形参同名时才共占用存储单元
D.形参是虚拟的,不占用存储单元
10.下面函数调用语句含有实参的个数为__________。
func((expl,exp2),(exp3,exp4,exp5));
A.lB.2C.4D.5
11.以下程序的输出结果是__________。
fun(intx,inty,intz)
{z=x*x+y*y;}
main()
{inta=3l;
fun(5,2,a);
printf(“%d”,a);}
A.0B.29C.3lD.无定值
11.以下程序的输出结果是__________。
inta,b,
voidfun()
{a=100;b=200;}
main()
{inta=5,b=7;
fun();
printf(‘%d%d\n”,a,b);}
A.100200B.57C.200100D.75
12.以下程序的输出结果是__________。
intd=1;
fun(intp)
{intd=5;
d+=p++;printf(“%d”,d);}
main()
{inta=3;fun(a);d+=a++;printf(“%d\n”,d);}
A.8,4B.9,6C.9,4D.8,5
13.以下不正确的说法为__________。
A.在不同函数中可以使用相同名字的变量
B.形式参数是局部变量
C.在函数内定义的变量只在本函数范围内有效
D.在函数内的复合语句中定义的变量在本函数范围内有效
14.若用数组名作为函数调用的实参,传递给形参的是__________。
A.数组的首地址B.数组第一个元素的值
C.数组中全部元素的值D.数组元素的个数
15.已有以下数组定义和f函数调用语句,则在f函数的说明中,对形参数组array
的错误定义方式为__________。
inta[3][4];
f(a);
A.f(intarray[][6])B.f(intarray[3][])
C.f(intarray[][4])D.f(intarray[2][5])
16.在C语言中,函数的隐含存储类型是__________。
A.autoB.taticC.externD.无存储类型
17.以下程序的输出结果为__________。
main()
{inta=5;
fun(a);printf(“\n”);}
fun(intb)
{if(b>0)fun(b-1);
printf(“%d”,b);)
A.5432lB.012345C.l2345D.543210
18.以下程序的输出结果是__________。
#include
f(inta)
{intb=0;
staticc=3;
a=c++,b++;returna;}
main()
{inta=2,i,k;
for(i=0;i<2;i++)
k=f(a++);printf(%d”,k);}
A.3B.0C.5D.4
二、填空题
1.C语言规定,可执行程序的开始执行点是。
main函数开始
2.C语言中,函数的定义由函数首和___________两部分组成。
函数体
3.函数实参传递到形参有两种方式_____________和_________________。
4.C语言允许函数值类型缺省定义,此时该函数值隐含的类型是__________。
int
5.定义变量可以在函数的内部,也可以在函数的外部,在函数外部定义的变量一般称为__________变量全局
6.若自定义函数要求返回一个值,则在该函数体中应有一条______________语句;若自定义函数要求不返回值,则应在该函数说明时加一个类型说明符__________________。
returnvoid
7.函数形参的作用域_________,全局的外部变量与函数体内定义的局部变量同名时,在函数体内,__________变量起作用。
整个函数体内局部
8.静态局部变量的作用域_________________。
定义它的函数或复合语句内部
9.下面add函数的功能是求两个参数的和,并将和值返回调用函数。
函数中错误的部分是_________;改正后为__________。
voidfloat
voidadd(floata,floatb)
{floatc;
c=a+b;
returnc;
}
10.在一个函数内部调用另一个函数的调用方式称为_________。
在一个函数内部直接或间接调用该函数称为函数________________的调用方式。
嵌套递归
11.C语言变量按其作用域分为__________________和___________________。
按其生存期分为______________和_____________________。
局部变量全局变量动态存储变量静态存储变量
12.C语言变量的存储类别有_____________、______________、_____________和_________。
autostaticregisterextern
13.被调用函数执行结束时,此函数中定义的___________________类型的变量不被释放。
静态或static
14.静态型外部变量的作用域是______________________________________。
源程序文件
15.在一个C程序中,若要定义一个只允许本文件中函数使用的全局变量,则该变量需要定义的存储类别为_________________________。
static
16.变量赋初值可以在两个阶段,即__________________和_______________________。
编译阶段运行阶段
三、程序阅读
1.分析下列程序,写出运行结果_______________。
15
intfun(inta,intb)
{return(a+b);}
main()
{intx=2,y=5,z=8,r;
r=fun(fun(x,y),z);
printf(“%d\n”,r);}
2.以下程序的运行结果是(4)。
i=2,j=7,x=5
i=7,j=6,x=7
mian()
{inti=2,x=5,j=7;
fun(j,6);
printf(“i=%d;j=%d;x=%d\n”,i,j,x);
}
fun(inti,intj)
{intx=7;
printf(“i=%d;j=%d;x=%d\n”,i,j,x);}
3.分析下列程序,写出运行结果_______________。
64
#include“stdio.h”
main()
{intx,n;
longp,pw();
x=2;n=6;
p=pw(x,n);
printf(“%ld”,p);
}
longpw(intx,intn)
{inti,p=1
for(i=0;ip*=x;
return(p);
}
4.以下程序的运行结果是________.A+B=9
inta=5;intb=7;
main()
{inta=4,b=5,c;
c=plus(a,b);
printf("A+B=%d\n",c);
}
plus(intx,inty)
{intz;
z=x+y;
return(z);
}
5.分析下列程序,写出运行结果_______________。
8
#include“stdio.h”
intabc();
main()
{inta=24,b=16,c;
c=abc(a,b);
printf(“%d\n”,c);
}
intabc(intx,inty)
{intt;
while(y)
{t=x%y;x=y;y=t;}
6.分析下列程序,写出运行结果_______________。
84
intd=1;
fun(intp)
{intd;
d+=p++;printf(“%d”,d);
}
main()
{inta=3;
fun(a);
d+=a++;
printf(“%d\n”,d);
}
7.分析下列程序,写出运行结果_______________。
4
longfib(intn)
{if(n>2)return(fib(n-1)+fib(n-2));
elsereturn
(2);
}
main()
{printf(“%d\n”,fib(3));
}
8.分析下列程序,写出运行结果_______________。
1
longfun(intn)
{longs;
if(n==1||n==2)s=2
elses=n-fun(n-1);
returns;
}
main()
{printf(“%d\n”,fun(3));
}
9.分析下列程序,写出运行结果_______________。
3600
intw=3;
main()
{intw=10;
printf(“%d\n”,fun(5)*w);}
fun(intk)
{if(k==0)returnw;
return(fun(k-1)*k);
}
10.分析下列程序,写出运行结果_______________。
61515
intd=1;
fun(intp)
{staticintd=5;
d+=p;printf(“%d”,d);
return(d);}
main()
{inta=3;
printf(“%d\n”,fun(a+fun(d)));
}
11.分析下列程序,写出运行结果_______________。
9
f(inta)
{intb=0;staticintc=3;
b++;
c++;
return(a+b+c);
}
main()
{inta=2,i;
for(i=0;i<3;i++)
printf(“%d”,f(a));
}
12.分析下列程序,写出运行结果_______________。
sum=55
#include“stdio.h”
intisum(intb[])
{ints,i;
s=i=0;
while(b[i]!
=-999)
s=s+b[i++];
return(s);
}
main()
{staticinta[]={1,2,3,4,5,6,7,8,9,10,-999};
printf(“sum=%d\n”,isum(a));
}
13.分析下列程序,写出运行结果_______________。
81
fun(inta[5])
{
inti;
for(i=1;i<5;i++)
a[i]=a[i-1]*3;
}
main()
{inta[5]={1};
fun(a);
printf(“%d\n”,a[4]);
}
14.下面程序的输出结果_______________。
3,4
main()
{staticinta[]={1,2,3,4};
inti,j=2;
for(i=l;i<3;i++)
{f1(a);j++;}
printf(“%d,%d\n”,a[0],j);}
fl(inta[4])
{inti,j=l;
for(i=l;i<4;i++)
a[i-l]=a[i];
j++;}
15.以下程序的运行结果是_______________。
,其算法是_______________。
。
-737510冒泡排序
main()
{inta[5]={5,10,-7,3,7},i,t,j;
sort(a);
for(i=0;i<=4;i++)
printf(“%d”,a[i]);
sort(inta[])
{inti,j,t;
for(i=0;i<4;i++)
for(i=0;j<4-i;j++)
if(a[j]>a[j+l]
{t=-a[j];a[j]=a[j+1];a[j+1]=t;}
}
16.以下程序的运行结果是_______________,其算法是_______________。
-13689选择排序
main()
{inta[5]={9,6,8,3,一1},i,t,j,p;
sort(a);
for(i=0;i<=4;i++)
printf(“%d”,a[i]);
}
sort(inta[])
{inti,j,t,p;
forr(j=0;j<4;j++)
{p=j;
for(i=j;i<=4;i++)
if(a[i]p=i;
t=a[p];
a[p]=a[j];
a[j]=t;
}
}
17.分析下列程序,写出运行结果_______________。
s=-9
#defineN3
intfun(inta[N][N])
main()
{inta[N][N]={1,-2,-5,-1,2,5,-4,4,3},s;
s=fun(a);
printf(“s=%d\n”,s);
}
intfun(inta[N][N])
{
inti,j,sum=0;
for(i=0;ifor(j=0;jif(a[i][j]
}
四、程序填空
1.函数gongyu的作用是求整数num1和num2的最大公约数,并返回该值。
请填空。
gongyu(intnum1,intnum2)
{inttemp,a,b;
if(num1(_____)num2)<
{temp=num1;num1=num2;num2=temp;}
a=num1;b=num2;
while(____)b!
=0
{temp=a%b;a=b;b=temp;}
return(a);
}
2.下面程序的功能是在fun函数中计算20个学生的平均成绩,返回主函数输出,请填空。
x[i]return(ave)fun(a,20)
floatfun(floatx[],intnum)
{inti;
floatave,s=0;
for(i=0;iave=s/num;
_______________
}
#include
main()
{floata[20],t;
inti,n;
for(i=0;i<20;i++){scanf(“%f”,&t);a[i]=t;}
printf(“average=%f\n”,_____________)
}
3.以下函数是求x的y次方,请填空。
doublefun(doublex,doubley)
{intx;doublez=1.0;
for(i=1;
(1);i++)i<=y
z=
(2);z*x
returnz;}
4.下面程序的功能是:
第一个数是1,从地二个数起每个数都是它的前一项加5,求第n个数是多少?
请填空(n从键盘输入,用递归的方法实现该算法)
1add(n-1)add(n)
#include
longadd(intn)
{longm;
if(n==1)m=______________________
elsem=5+_____________;
return(m);
}
main()
{longm;intn;
scanf(“%d”,&n);
m=___________
printf(“%ld\n”,m);}
5.下面程序的功能是用函数的递归调用求1!
+2!
+3!
+4!
+….+10!
,请填空。
n*f(n-1)0f(i)
#include
longf(intn)
{if(n==1);return
(1);
elsereturn(_______________)
}
main()
{inti=1;
longs;
s=_____________
while(i<=10)
{s+=______________;i++;}
printf(“%ld”,s);
}
6.函数acopy将整型数组a的内容逆序复制到整型数组b中(-999为数组的结束标志),请填空。
inta[],intb[]b[j]=a[i]b[i++]
#include
voidacopy(_____________)
{inti=0;j=0;
while(a[j]!
=-999)j++;
b[j]=a[j];j--;
while(a[i]!
=-999)
{________________;
i++;j--;
}}
main()
{staticinta[]={1,3,5,7,9,2,4,6,7,10,-999};
intb[20],i=0;
acopy(a,b);
while(b[i]!
=-999)
printf(“%3d”,_____________);
7.下面程序是将字符串str的字符按相反的次序存放,请填空。
#include
voidinvert(charstr[])
{inti,j,k;
for(i=0,j=
(1);i{k=str[i];
(2);str[j]=k;}str[i]=str[j]
五、编程
1.请编写函数fun,函数的功能是:
根据以下公式计算s,计算结果作为函数值返回;n通过形参传入。
S=1+1/(1+2)+1/(1+2+3)+、、、、、、+1/(1+2+3+、、、、、+n)
floatfun(intn)
{intI,j,t=0;
for(i=1;i<=n;i++)
{t+=i;
s=s+1.0/t;
}
returns;
}
2.编写一个函数,重复打印给定的字符n次。
#include“stdio.h”
#defineN10
main()
{inti;
charc;
printf(“Enteracharacter:
”);
c=getchar();
for(i=0;i{printf(“%c”,c);
}
}
3.编写一个函数求出一个正整数的所有因子。
如72=2*2*2*3*3
#include“stdio.h”
voidfactors(intnumber)
{inti,factor;
for(i=2;i<=number;i++)
{if(number%2==0)
{factor=i;
break;
}
}
printf(“%d\*”,factor);
if(number!
=i)
{number=number/i;
factors(number);
}
else
{for(i=0;i<2;i++)
{putchar(‘\b’);
putchar(‘’);
}
}
}
main()
{inta;
printf(“pleaseenteranumber\n”);
scanf(“%d”,&a);
printf(“%d=”,a);
factors(a);
}
4.试编程求S的值。
要求在主函数中输入n(n的值大于等于0),输出结果S.功能函数voidfun(float*sn,intn)用来计算S,计算结果通过形参指针sn传回,n的值通过参数传入。
S的计算公式如下所示:
#include
voidfun(float*sn,intn)
{floats=0.0,w,f=-1.0;
inti=0;
for(i=0;i<=n;i++)
{f=–1*f;w=f/(2*i+1);s+=w;}
*sn=s;
}
voidmain()
{floats;intn;