计算机二级C语言教程章节测试 函数.docx
《计算机二级C语言教程章节测试 函数.docx》由会员分享,可在线阅读,更多相关《计算机二级C语言教程章节测试 函数.docx(15页珍藏版)》请在冰豆网上搜索。
计算机二级C语言教程章节测试函数
计算机二级C语言教程章节测试函数
(1)
一、选择题
(1)有以下程序
#include
voidf(char*s,char*t)
{chark;
k=*s;*s=*t;*t=k;
s;t--;
if(*s)f(s,t);
}
main()
{charstr[10]="abcdefg",*p;
p=strstrlen(str)/21;
f(p,p-2);
printf("%s\n",str);
}
程序运行后的输出结果是
A)abcdefg
B)gfedcba
C)gbcdefa
D)abedcfg
(2)有以下程序
floatf1(floatn)
{returnn*n;}
floatf2(floatn)
{return2*n;}
main()
{float(*p1)(float),(*p2)(float),(*t)(float),y1,y2;
p1=f1;p2=f2;
y1=p2(p1(2.0));
t=p1;p1=p2;p2=t;
y2=p2(p1(2.0));
printf("%3.0f,%3.0f\n",y1,y2);
}
程序运行后的输出结果是
A)8,16
B)8,8
C)16,16
D)4,8
(3)程序中若有如下的说明和定义语句
charfun(char*);
main()
{
char*s="one",a[5]={0},(*f1)()=fun,ch;
……
}
以下选项中对函数fun的正确调用语句是
A)(*f1)(a);
B)*f1(*s);
C)fun(&a);
D)ch=*f1(s)
(4)在函数调用过程中,如果函数funA调用了函数funB,函数funB又调用了函数funA,则
A)称为函数的直接递归调用
B)称为函数的间接递归调用
C)称为函数的循环调用
D)C语言中不允许这样的递归调用
(5)有以下程序
voidfun(int*a,inti,intj)
{intt;
if(i{t=a[i];a[i]=a[j];a[j]=t;
i;j--;
fun(a,i,j);
}
}
main()
{intx[]={2,6,1,8},i;
fun(x,0,3);
for(i=0;i<4;i)printf("-",x[i]);
printf("\n");
}
程序运行后的输出结果是
A)1268
B)8621
C)8162
D)8612
(6)有以下程序
#include
main(intargc,char*argv[])
{inti,len=0;
for(i=1;iprintf(“5d\n”,len);
}
经编译链接后生成的可执行文件是ex.exe,若运行时输入以下带参数的命令行
exabcdefgh3k44
执行后输出结果是
A)14
B)12
C)8
D)6
(7)有以下程序
voidf(inta[],inti,intj)
{intt;
if(i{t=a[i];a[i]=a[j];a[j]=t;
f(a,i1,j-1);
}
}
main()
{inti,aa[5]={1,2,3,4,5};
f(aa,0,4);
for(i=0;i<5;i)printf(“%d,”,aa[i]);printf(“\n”);
}
执行后输出结果是
A)5,4,3,2,1,
B)5,2,3,4,1,
C)1,2,3,4,5,
D)1,2,3,4,5,
(8)有以下程序
voidfun(int*a,inti,intj)
{intt;
if(i{t=a[i];a[i]=a[j];a[j]=t;
fun(a,i,--j);
}
}
main()
{inta[]={1,2,3,4,5,6},i;
fun(a,0,5)
for(i=0;i<6;i)
printf("%d",a[i]);
}
执行后的输出结果是
A)654321
B)432156
C)456123
D)123456
(9)有以下程序
intf(intn)
{if(n==1)return1;
elsereturnf(n-1)1;
}
main()
{inti,j=0;
for(i=i;i<3;i)j=f(i);
printf(“%d\n”,j);
}
程序运行后的输出结果是
A)4
B)3
C)2
D)1
(10)有以下程序
#include
main(intargc,char*argv[])
{inti,len=0;
for(i=1;iprintf(“%d\n”,len);
}
程序编译连接后生成的可执行文件是ex1.exe,若运行时输入带参数的命令行是:
ex1abcdefg10<回车>
则运行的结果是:
A)22
B)17
C)12
D)9
(11)有以下程序
intfa(intx)
{returnx*x;}
intfb(intx)
{returnx*x*x;}
intf(int(*f1)(),int(*f2)(),intx)
{returnf2(x)-f1(x);}
main()
{inti;
i=f(fa,fb,2);printf(“%d\n”,i);
}
程序运行后的输出结果是
A)-4
B)1
C)4
D)8
(12)不合法的main函数命令行参数表示形式是
A)main(inta,char*c[])
B)main(intarc,char**arv)
C)main(intargc,char*argv)
D)main(intargv,char*argc[])
(13)假定以下程序经编译和连接后生成可执行文件PROG.EXE,如果在此可执行文件所在目录的DOS提示符下键入:
PROGABCDEFGHIJKL<回车>,则输出结果为
A)ABCDEFG
B)IJHL
C)ABCDEFGHIJKL
D)IJKLABCDEFGH
main(intargc,char*argv[]))
{while(--argc>0)printf(“%s”,argv[argc]);
printf(“\n”);
}
(14)以下程序的输出结果是
A)1
B)2
C)3
D)4
longfun(intn)
{longs;
if(n==1||n==2)s=2;
elses=n-fun(n-1);
returns;
}
main()
{printf(“%ld\n”,fun(3));}
(15)有如下程序
longfib(intn)
{if(n>2)return(fib(n-1)fib(n-2));
elsereturn
(2);
}
main0
{printf(“%d\n”,fib(3));
该程序的输出结果是
A)2
B)4
C)6
D)8
(16)若有以下说明和定义
fun(int*c){}
main()
{int(*a)()=fun,*b(),w[10],c;
┆
}
在必要的赋值之后,对fun函数的正确调用语句是
A)a=a(w);
B)(*a)(&c);
C)b=*b(w);
D)fun(b);
(17)下列程序执行后的输出结果是
A)hello
B)hel
C)hlo
D)hlm
voidfunc1(inti);
voidfunc2(inti);
charst[]="hello,friend!
";
voidfunc1(inti)
{printf("%c",st[i]);
if(i<3){i=2;func2(i);}
}
voidfunc2(inti)
{printf("%c",st[i]);
if(i<3){i=2;func1(i);}
}
main()
{inti=0;func1(i);printf("\n");}
(18)假定下列程序的可执行文件名为prg.exe,则在该程序所在的子目录下输入命令行:
prghellogood<回车>后,程序的输出结果是
A)hellogood
B)hg
C)hel
D)hellogood
main()(intargc,char*argv[])
{inti;
if(argc<-0)return;
for(i=1;i}
(19)以下程序的输出结果是
A)54321
B)012345
C)12345
D)543210
main()
{intw=5;fun(w);printf(“\n”);}
fun(intk)
{if(k>0)fun(k-1);
printf(“%d”,k);
}
(20)若以下程序所生成的可执行文件名为filel.exe;当打入以下命令执行该程序时;
FILELCHINABEIJINGSHANGHAI
程序的输出结果是
A)CHINABEIJINGSHANGHAI
B)FILELCHINABEIJING
C)CBS
D)FCB
main(intargc,char*argv[])
{while(arge-->0)
{argv;printf("%s",*argv);}
}
(21)C语言规定,程序中各函数之间
A)既允许直接递归调用也允许间接递归调用
B)不允许直接递归调用也不允许间接递归调用
C)允许直接递归调用不允许间接递归调用
D)不允许直接递归调用允许间接递归调用
二、填空题:
(1)以下程序运行后的输出结果是【1】。
intf(inta[],intn)
{if(n>=1)returnf(a,n-1)a[n-1];
elsereturn0;
}
main()
{intaa[5]={1,2,3,4,5},s;
s=f(aa,5);printf("%d\n",s);
}
(2)下面程序的运行结果是:
【2】
intf(inta[],intn)
{if(n>1)returna[0]f(&a[1],n-1);
elsereturna[0];
}
main()
{intaa[3]={1,2,3},s;
s=f(&aa[0],3);printf(“%d\n”,s);
}
(3)以下程序运行后的输出结果是【3】
fun(intx)
{if(x/2>0)fun(x/2);
printf("%d",x);
}
main()
{fun(6);}
(4)设函数findbig已定义为求3个数中的最大值。
以下程序将利用函数指针调用findbig函数。
请填空。
main()
{intfindbig(int,int,int);
int(*f)(),x,yz,z,big;
f=【4】;
scanf("%d%d%d",&x,&y,&z);
big=(*f)(x,y,z);
printf("bing=%d\n",big);
}
(5)以下程序的输出结果是【5】。
main()
{intx=0;
sub(&x,8,1);
printf("%d\n",x);
}
sub(int*a,intn,intk)
{if(k<=n)sub(a,n/2,2*k);
*a=k;
}
(6)以下程序的输出结果是【6】。
fun(intn,int*s)
{intf1,f2;
if(n==1||n==2)*s=1;
else{fun(n-1,&f1);fun(n-2,&f2);*s=f1f2;}}
main()
{intx;
fun(6,&x);printf("%d\n",x);}
(7)下面程序的输出是【7】。
longfun5(intn)
{longs;
if((n==1)||(n==2))
s=2;
else
s=nfun5(n-1);
return(s);}
main()
{longx;
x=fun5(4);
printf("%ld\n",x);}
(8)下面h函数的功能是计算如下数学函数H的值。
请填空。
doublefgh(double(*f)(doublea)doublex,doubley)
{return(【8】);}
doubleh(doublea,doubleb)
return(fgh(sin,cos,a,b)*fgh(【9】]));}
(9)请读程序:
#include
main(intargc,char*argv[])
{inti;
printf('%d\n",argc);
for(i=0;i<=argc1;i)printf("%s",argv[i]);
printf("\n");
}
若上面的程序编译、连接后生成可执行文件ABC.EXE,则输入以下命令行
abcfile1file2(表示回车)
程序执行后的输出结果是【10】。
(10)下面程序的输出结果是【11】。
#include
fun(intx)
{intp;
if(x==0||x==1)return(3);
p=x-fun(x-2);
returnp;
}
main()
{printf("%d\n",fun(9));}
(11)下面程序的输出结果是【12】。
#include
funa(inta,intb)
{returnab;}
funb(inta,intb)
{returna-b;}
sub(int(*t)(),intx,inty)
{return((*t)(x,y));}
main()
{intx,(*p)();
p=funa;
x=sub(p,9,3);
x=sub(funb,8,3);
printf("%d\n",x);
}
(12)设有如下程序:
#include
main(intargc,char*argv[])
{while(--argc>0)printf("%s",argv[argc]);
printf("\n");
}
假定上述程序经编译和连接后生成可执行文件PROG.EXE,如果在DOS提示符下键入PROGABCDEFGHIJKL,则输出结果为【13】。
(13)以下程序调用invert函数按逆序重新放置a数组中元素的值。
a数组中的值在main函数中读入。
#include
#defineN10
invert(int*s,inti,intj)
{intt;if(imain()
{inta[N],i;
for(i=0;iinvert(a,0,N-1);
for(i=0;iprintf("\n");}
参考答案
一、选择题:
01)B02)A03)A04)B05)C
06)D07)A08)A09)B10)D
11)C12)C13)D14)A15)B
16)B17)C18)B19)B20)A
21)A
二、填空题:
(1)15
(2)6
(3)136
(4)findbig
(5)7
(6)8
(7)9
(8)f(xy)/g(y-x)或(*f)(xy)/g(y-x)或f(xy)/(*g)(y_x)或(*f)或(*f)(xy)/(*g)(y-x)
(9)cos,sin,a,b
(10)3abc.exefile1file2(注:
两个答案,每个1分)
(11)7
(12)17
(13)IJKLEFGHABCD
(14)i1
(15)I