单元测试之三函数.docx
《单元测试之三函数.docx》由会员分享,可在线阅读,更多相关《单元测试之三函数.docx(23页珍藏版)》请在冰点文库上搜索。
![单元测试之三函数.docx](https://file1.bingdoc.com/fileroot1/2023-5/18/295b4547-c5fd-47ad-b2a9-c0635e53b678/295b4547-c5fd-47ad-b2a9-c0635e53b6781.gif)
单元测试之三函数
单元测试之三函数
一.单项选择题
1.C语言总是从()函数开始执行。
A
A.mainB.处于最前的
C.处于最后的D.随机选一个
2.函数在定义时,省略函数类型说明符,则该函数值的类型为()。
A
A.intB.floatC.longD.double
3.以下()函数,真正地没有返回值。
B
A.inta(){inta=2;return(a);}B.voidb(){printf("c");}
C.inta(){inta=2;returna;}D.以上都是
4.以下函数调用语句中,含有实参的个数为()。
B
fun((2,3),(4,5+6,7));
A1B.2C.5D.6
5.函数调用可以在()。
D
A.函数表达式中B.函数语句中
C.函数参数中D.以上都是
6.被调函数返回给主调函数的值称为()。
C
A.形参B.实参C.返回值D.参数
7.(),可以不进行函数类型说明。
A
A.被调函数的返回值是整型或字符型时
B.被调函数的定义在主调函数定义之前时
C.在所有函数定义前,已在函数外预先说明了被调函数类型
D.以上都是
8.被调函数通过()语句,将值返回给主调函数。
D
A.ifB.forC.whileD.return
9.被调函数调用结束后,返回到()。
D
A.主调函数中该被调函数调用语句处
B.主函数中该被调函数调用语句处
C.主调函数中该被调函数调用语句的前一语句
D.主调函数中该被调函数调用语句的后一语句
10.以下对C语言函数的有关描述中,正确的是()。
A
A.在C中,调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参
B.C函数既可以嵌套定义又可递归调用
C.函数必须有返回值,否则不能使用函数
D.C程序中有调用关系的所有函数必须放在同一个源程序文件中
11.C语言中函数的隐含存储类型是()。
A
A.autoB.staticC.externD.无存储类型
12.能把函数处理结果的两个数据返回给主调函数,在下面的方法中不正确的是()。
A
A.return这两个数B.形参用两个元素的数组
C.形参用两个这种数据类型的指针D.用两个全局变量
13.以下正确的描述是:
在C语言程序中()。
B
A.函数的定义可以嵌套,但函数的调用不可以嵌套
B.函数的定义不可以嵌套,但函数的调用可以嵌套
C.函数的定义和函数的调用均不可以嵌套
D.函数的定义和函数的调用均可以嵌套
14.以下不正确的说法是:
C语言规定()。
B
A.实参可以是常量,变量或表达式
B.形参可以是常量,变量或表达式
C.实参可以为任何类型
D.形参应与其对应的实参类型一致
15.以下正确的说法是:
在C语言中()。
A
A.实参和与其对应的形参各占用独立的存储单元
B.实参和与其对应的形参共占用一个存储单元
C.只有当实参和与其对应的形参同名时才共占用存储单元
D.形参是虚拟的,不占用存储单元
16.若调用一个函数,且此函数中没有return语句,则正确的说法是:
该函数()。
D
A.没有返回值B.返回若干个系统默认值
C.能返回一个用户所希望的值D.返回一个不确定的值
17.以下叙述中正确的是()。
B
A.全局变量的作用域一定比局部变量的作用域范围大
B.静态(static)类别变量的生存期贯穿于整个程序的运行期间
C.函数的形参都属于全局变量
D.未在定义语句中赋初值的auto变量和static变量的初值都是随机值
18.以下正确的说法是()。
B
A.用户若需调用标准库函数,调用前必须重新定义
B.用户可以重新定义标准库函数,若如此,该函数将失去原有含义
C.系统根本不允许用户重新定义标准库函数
D.用户若需调用标准库函数,调用前不必使用预编译命令将该函数所在文件包括到用户源文件中,系统自动去调
19.若用数组名作为函数的实参,传递给形参的是()。
A
A.数组的首地址B.数组第一个元素的值
C.数组中全部元素的值D.数组元素的个数
20.以下正确的说法是()。
C
A.定义函数时,形参的类型说明可以放在函数体内
B.return后边的值不能为表达式
C.如果函数值的类型与返回值类型不一致,以函数值类型为准
D.如果形参与实参类型不一致,以实参类型为准
21.C语言规定:
简单变量做实参时,它和对应形参之间的数据传递方式是()。
B
A.地址传递B.单向值传递
C.由实参传给形参,再由形参传回给实参D.由用户指定的传递方式
22.C语言规定,函数返回值的类型是由()。
D
A.return语句中的表达式类型所决定
B.调用该函数时的主调函数类型所决定
C.调用该函数时系统临时决定
D.在定义该函数时所指定的函数类型所决定
23.有以下函数定义:
voidfun(intn,doublex){……}
若以下选项中的变量都已正确定义并赋值,则对函数fun的正确调用语句是()。
C
A.fun(inty,doublem);B.k=fun(10,12.5);
C.fun(x,n);D.voidfun(n,x);
24.下列程序的运行结果是()。
B
voidfun(int*a,int*b)
{int*k;
k=a;a=b;b=k;
}
main()
{inta=3,b=6,*x=&a,*y=&b;
fun(x,y);
printf("%d%d",a,b);
}
A.63B.36C.编译出错D.00
25.以下程序中函数sort的功能是对a所指数组中的数据进行由大到小的排序
voidsort(inta[],intn)
{inti,j,t;
for(i=0;ifor(j=i+1,jif(a[i]}
main()
{intaa[10]={1,2,3,4,5,6,7,8,9,10},i;
sort(&aa[3],5);
for(i=o;i<10;i++)print(“%d,”,aa[i]);
printf(‘\n”);
}
程序运行后的输出结果是()。
C
A.1,2,3,4,5,6,7,8,9,10B.10,9,8,7,6,5,4,3,2,1,
C.1,2,3,8,7.6.5.4.9,10D.1,2,10,9,8,7,6,5,4,3
26.以下只有在使用时才为该类型变量分配内存的存储类说明是()。
B
A.auto和staticB.auto和register
C.register和staticD.extern和register
27.以下程序的输出的结果是()。
C
intx=3;
main()
{inti;
for(i=1;i}
incre()
{staicintx=1;
x*=x+1;
printf("%d",x);
}
A.33B.22C.26D.25
28.调用函数的实参与被调用函数的形参应该有如下关系()。
D
A.只要求实参和形参个数相等B.只要求形参和实参顺序相同
C.只要求实参和形参数据类型相同D.上述三点均需具备
29.下列程序
intsum(intn)
{intp=1,s=0,i;
for(i=1;i<=n;i++)s+=(p*=i);
returns;
}
main()
{printf(“sum(5)=%d\n”,sum(5));
}
运行后输出的数据为()。
C
A.sum(5)=151B.sum(5)=152C.sum(5)=153Dsum(5)=155
30.下列程序
intc=1;
main()
{staticinta=5;intb=6;
printf(“a=%db=%dc=%d\n”,a,b,c);
func();
printf(“a=%d,b=%d,c=%d\n”,a,b,c);
func();
}
func()
{staticinta=4;intb=10;
a+=2;
c+=10;
b+=c;
printf((“a=%d,b=%d,c=%d\n”,a,b,c);
}
运行后输出的数据为()。
A
A.a=5b=6c=1B.a=5b=6c=1
a=6b=21c=11a=7b=17c=11
a=5b=6c=11a=5b=6c=11
a=8b=31c=21a=9b=17c=21
C.a=5b=6c=1D.a=5b=6c=1
a=6b=21c=11a=7b=17c=11
a=6b=21c=11a=7b=17c=11
a=8b=31c=21a=9b=38c=21
31.在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是()。
B
A.地址传递B.单向值传递
C.由实参传给形参,再由形参传回实参D.传递方式由用户指定
32.有如下程序
intfunc(inta,intb)
{return(a+b);}
main()
{intx=2,y=5,z=8,r;
r=func(func(x,y),z);printf("%d\n",r);
}
该程序的输出结果是()。
D
A.12B.13C.14D.15
33.以下程序的输出结果是()。
B
inta,b;
voidfun()
{a=100;b=200;}
main()
{inta=5,b=7;
fun();
printf("%d%d\n",a,b);
}
A.100200B.57C.200100D.75
34.有如下程序
main()
{charch[2][5]={"6937","8254"},*p[2];
inti,j,s=0;
for(i=0;i<2;i++)p[i]=ch[i];
for(i=0;i<2;i++)
for(j=0;p[i][j]>'\0';j+=2)
s=10*s+p[i][j]-'0';
printf("%d\n",s);
}
该程序的输出结果是()。
C
A.69825B.63825C.6385D.693825
35.请选择正确的运行结果填入()中。
A
include
intx,y;
num()
{
inta=15,b=10;
intx,y;
y=a-b;
y=a+b;
return;
}
main()
{inta=7,b=5;
x=a+b;
y=a-b;
num();printf("%d,%d\n",x,y);
}
A.12,2B.5,25C.2,12D.不确定
二.填空题
1.变量的作用域主要取决于变量,变量的生存期既取决于变量,又取决于变量。
所处的位置,所处的位置,存储类型
2.说明变量时,若省略存储类型符,系统默认其为存储类别,该存储类别的类型符为:
。
动态,auto
3.静态型局部变量的作用域是,生存期是。
它所在的局部,整个程序
4.函数中的形参和调用时的实参都是数组名时,传递方式为,都是变量时,传递方式为。
址传递,值传递
5.函数的形式参数的作用域为,全局的外部变量和函数体内定义的局部变量重名时,变量优先。
该函数中,局部
6.若自定义函数要求返回一个值,则应在该函数体中有一条语句,若自定义函数要求不返回一个值,则应在该函数说明时加一个类型说明符。
return,void
7.若函数的形式参数是指针类型,则实参可以是、或。
指针,数组名
8.函数的参数为char*类型时,形参与实参结合的传递方式为。
址传递
9.函数的实参为常量时,形参与实参结合的传递方式为。
值传递
10.对数组按值从大到小的顺序排序后输出,请填空。
#include
voidmain()
{
floata[7]={2,6,3,8,3,12,9};
inti ;
voidsort(float*,int);
;
for(i=0;i<7;i++)printf("%f",a[i]);
printf("\n");
}
voidsort()
{
inti,j,k;floatt;
for(i=0;i{
k=i;
for(j=i+1;jif()k=j;
{t=*(p+i);*(p+i)=*(p+k);*(p+k)=t;}
}
}
sort(a,7)float*p,intn*(p+k)<*(p+j)k!
=i
11.下列函数在n个元素的一维数组中,找出最大值、最小值并传送到调用函数,请填空。
#include
voidfind(float*p,intmax,intmin,intn)
{
intk;
*max=*p;
for(k=1;k{
t=*(p+k);
if()*max=t;
if(t<*min)*min=t;
}
}
floatt;*min=*p;*max12.观察以下函数,给出该函数所实现的功能。
doublesum(doublex,intn)
{inti;doublea,b,s;
a=1.0;b=1.0;s=1.0
for(i=1;i<=n;i++)
{a=a*x;b=b*i;s=s+a/b;}
returns;
}
__________
S=1+x+x2/2!
+x3/3!
+........+xn/n!
13.有以下程序
voidf(inty,int*x)
{y=y+*x;*x=*x+y;}
main()
{intx=2,y=4;
f(y,&x);
printf(“%d%d\n”,x,y);}
执行后输出的结果是________8
14.函数fun的功能是计算xn
doublefun(doublex,intn)
{inti;doubley=1;
for(i=1;i<=n;i++)y=y*x;
returny;
}
主函数中已经正确定义m,a,b变量并赋值,并调用fun函数计算:
m=a*4+b*4-(a+b)*3。
实现这一计算的函数调用语句为_________fun(a,4)+fun(b,4)-fun(a+b,3)
15.请在以下字程序第一行的下划线处填写适当内容使程序能正确运行,并在第二个空白处加上注释以解释本程序的功能。
main()
{doublex,y;
scanf("%lf%lf",&x,&y);
printf("%lf\n",max(x,y));
}
____(doublea,doubleb)____________
{return(a>b?
a:
b);}
doublemax/*该子程序实现求两个数之间的最大数*/
16.设在主函数中有以下定义和函数调用语句,且fun函数为void类型;请写出fun函数的首部______________。
要求形参名为b。
main()
{doubles[10][22];
intn;
┆
}
fun(s);
{
┆
}
voidfun(doubleb[][22])
三.写出下列程序运行结果:
1.
main()
{
inti=1,p;
p=fun(i,i+1);
printf("%d\n",p);
}
intfun(inta,intb)
{
intf;
if(a>b)
f=1;
elseif(a==b)
f=0;
else
f=-1;
returnf;
}
-1
2.键盘输入abcdef
#include
voidfun()
{
charc;
if((c=getchar())!
='\n')
fun();
putchar(c);
}
voidmain()
{fun();}
fedcba
3.
#include
#defineC5
intx=1,y=C;
voidmain()
{
intx;
x=y++;printf("%d%d\n",x,y);
if(x>4){intx;x=++y;printf("%d%d\n",x,y);}
x+=y--;
printf("%d%d\n",x,y);
}
56
77
126
4.
#include
intc,a=4;
func(inta,intb)
{c=a*b;a=b-1;b++;return(a+b+1);}
voidmain()
{
intb=2,p=0;c=1;
p=func(b,a);
printf("%d,%d,%d,%d\n",a,b,c,p);
}
4,2,8,9
5.
unsignedfun6(unsignednum)
{
unsignedk=1;
do{k*=num%10;num/=10;}
while(num);
returnk;
}
voidmain()
{
unsignedn=26;
printf("%d\n",fun6(n));
}
12
四.程序设计题
1.输入两个整数,求最大值,用函数实现。
答:
main()
{inta,b,c;
printf("inputthetwonumber");
scanf("%d%d",&a,&b);
c=fun(a,b);
printf("%d",c);
}
intfun(intx,inty)
{intz;
if(x>y)z=x;
elsez=y;
returnz;
}
2.用递归函数,求小于等于n的所有正整数之和。
答:
main()
{
ints,n;
printf("inputnumber\n");
scanf("%d",&n);
s=func(n);
printf("%d",s);
}
intfunc(intn)
{
ints;
if(n<0)
printf("n<0,inputerror\n");
else
s=n+fun(n-1);
retures;
}
3.编一个名为root的函数,求方程
,并作为函数的返回值。
其中的a、b、c作为函数的形式参数。
答:
floatroot(floata,floatb,floatc)
{floats;
s=b*b-4*a*c;
returns;
}
main()
{floatx,y,z,u;
printf("inputnumber\n");
scanf("%d%d%d",&x,&y,&z);
u=root(x,y,z);
printf("%d",u)
}
4.设计一个函数,求长方体的体积(边长为整数),要求写出相应的主函数。
答:
inttiji(intx,inty,intz)
{
returnx*y*z;
}
main()
{
intx,y,z;
printf(inputthenumber\n");
scanf("%d%d%d",&x,&y,&z);
printf("%d",tiji(x,y,z));
}
5.编一个函数,判断是否为为闰年,是则返回1,否则返回0。
答:
main()
{
ints,n;
printf("inputnumberofyear\n");
scanf("%d",n);
s=year(n);
printf("%d",s);
}
intyear(intn)
{
inta;
if(!
n%4)a=1;
elsea=0;
returna;
}
6.请编写一个函数jc,实现求k!
,所求阶乘值作为函数值返回,例如,若k=10,则返回值应为3628800。
#include
longfun(intk)
{if(k>0)
return(k*fun(k-1));
elseif(k==0)
return1l;
}
main()
{intk;
scanf("%d",&k);
clrscr();
printf("%d!
=%ld",k,fun(k));
}
7.编写函数summary,该函数功能是:
计算并输出k以内最大的10个能被13或17整除的自然数之和.k的值由主函数传入,若k的值为500,则函数值为4622。
#include
intsunmmary(intk)
{intsum=0,count=0,j;
while((k>=2)&&(conut<10))
{if((k%13==0)||k%17==0)
{sum=sum+k,count++;}
k--;
}
retrunsum;
}
main()
{intx;
scanf("%d",&x);
clrscr();
printf("%d\n",summary(x));
}
8.编写一个函数intfun(intw),w是一个大于10的整数,若w是n(n>=2)位的整数,函数求出w的后n-1位的猪作为函数值返回。
例如:
w值为5923,则函数返回923,w值为923则返回23。
intfun(intw)
{intn=0,i=1;
while(w>10)
{n=n+i*(w%10);
w/=10;
i*=10;