计算机二级C语言教程章节测试 函数Word文件下载.docx
《计算机二级C语言教程章节测试 函数Word文件下载.docx》由会员分享,可在线阅读,更多相关《计算机二级C语言教程章节测试 函数Word文件下载.docx(15页珍藏版)》请在冰豆网上搜索。
,y1,y2);
A)8,16
B)8,8
C)16,16
D)4,8
(3)程序中若有如下的说明和定义语句
charfun(char*);
{
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<
j)
{t=a[i];
a[i]=a[j];
a[j]=t;
i;
j--;
fun(a,i,j);
{intx[]={2,6,1,8},i;
fun(x,0,3);
for(i=0;
i<
4;
i)printf("
-"
x[i]);
\n"
);
A)1268
B)8621
C)8162
D)8612
(6)有以下程序
#include<
main(intargc,char*argv[])
{inti,len=0;
for(i=1;
argc;
i=2)len=strlen(argv[i]);
printf(“5d\n”,len);
}
经编译链接后生成的可执行文件是ex.exe,若运行时输入以下带参数的命令行
exabcdefgh3k44
执行后输出结果是
A)14
B)12
C)8
D)6
(7)有以下程序
voidf(inta[],inti,intj)
a[i]=a[j];
f(a,i1,j-1);
main()
{inti,aa[5]={1,2,3,4,5};
f(aa,0,4);
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)有以下程序
fun(a,i,--j);
{inta[]={1,2,3,4,5,6},i;
fun(a,0,5)
6;
i)
%d"
a[i]);
执行后的输出结果是
A)654321
B)432156
C)456123
D)123456
(9)有以下程序
intf(intn)
{if(n==1)return1;
elsereturnf(n-1)1;
{inti,j=0;
for(i=i;
3;
i)j=f(i);
printf(“%d\n”,j);
A)4
B)3
C)2
D)1
(10)有以下程序
main(intargc,char*argv[])
i)len=strlen(argv[i]);
printf(“%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);
{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;
{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
(16)若有以下说明和定义
fun(int*c){}
{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]);
3){i=2;
func2(i);
voidfunc2(inti)
func1(i);
{inti=0;
func1(i);
printf("
(18)假定下列程序的可执行文件名为prg.exe,则在该程序所在的子目录下输入命令行:
prghellogood<
后,程序的输出结果是
A)hellogood
B)hg
C)hel
D)hellogood
main()(intargc,char*argv[])
if(argc<
-0)return;
*argv[i]);
(19)以下程序的输出结果是
A)54321
B)012345
C)12345
D)543210
{intw=5;
fun(w);
fun(intk)
{if(k>
0)fun(k-1);
printf(“%d”,k);
(20)若以下程序所生成的可执行文件名为filel.exe;
当打入以下命令执行该程序时;
FILELCHINABEIJINGSHANGHAI
程序的输出结果是
A)CHINABEIJINGSHANGHAI
B)FILELCHINABEIJING
C)CBS
D)FCB
{while(arge-->
0)
{argv;
%s"
*argv);
(21)C语言规定,程序中各函数之间
A)既允许直接递归调用也允许间接递归调用
B)不允许直接递归调用也不允许间接递归调用
C)允许直接递归调用不允许间接递归调用
D)不允许直接递归调用允许间接递归调用
二、填空题:
(1)以下程序运行后的输出结果是【1】。
intf(inta[],intn)
{if(n>
=1)returnf(a,n-1)a[n-1];
elsereturn0;
{intaa[5]={1,2,3,4,5},s;
s=f(aa,5);
%d\n"
s);
(2)下面程序的运行结果是:
【2】
intf(inta[],intn)
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);
x);
{fun(6);
(4)设函数findbig已定义为求3个数中的最大值。
以下程序将利用函数指针调用findbig函数。
请填空。
{intfindbig(int,int,int);
int(*f)(),x,yz,z,big;
f=【4】;
scanf("
%d%d%d"
&
x,&
y,&
z);
big=(*f)(x,y,z);
bing=%d\n"
big);
(5)以下程序的输出结果是【5】。
{intx=0;
sub(&
x,8,1);
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;
}}
{intx;
fun(6,&
x);
(7)下面程序的输出是【7】。
longfun5(intn)
if((n==1)||(n==2))
s=2;
else
s=nfun5(n-1);
return(s);
{longx;
x=fun5(4);
%ld\n"
(8)下面h函数的功能是计算如下数学函数H的值。
doublefgh(double(*f)(doublea)<
double(*g)(doubleb),
doublex,doubley)
{return(【8】);
doubleh(doublea,doubleb)
return(fgh(sin,cos,a,b)*fgh(【9】]));
}
(9)请读程序:
#include<
stdio.h>
main(intargc,char*argv[])
printf('
argc);
for(i=0;
i<
=argc1;
i)printf("
argv[i]);
若上面的程序编译、连接后生成可执行文件ABC.EXE,则输入以下命令行
abcfile1file2<
CR>
(<
表示回车)
程序执行后的输出结果是【10】。
(10)下面程序的输出结果是【11】。
fun(intx)
{intp;
if(x==0||x==1)return(3);
p=x-fun(x-2);
returnp;
{printf("
fun(9));
(11)下面程序的输出结果是【12】。
funa(inta,intb)
{returnab;
funb(inta,intb)
{returna-b;
sub(int(*t)(),intx,inty)
{return((*t)(x,y));
{intx,(*p)();
p=funa;
x=sub(p,9,3);
x=sub(funb,8,3);
x);
(12)设有如下程序:
main(intargc,char*argv[])
{while(--argc>
0)printf("
%s"
argv[argc]);
假定上述程序经编译和连接后生成可执行文件PROG.EXE,如果在DOS提示符下键入PROGABCDEFGHIJKL<
,则输出结果为【13】。
(13)以下程序调用invert函数按逆序重新放置a数组中元素的值。
a数组中的值在main函数中读入。
#defineN10
invert(int*s,inti,intj)
if(i<
j){t=*(si);
*(sj)=(sj);
*(sj)=t;
invert(s,【14】,j-1);
}}
{inta[N],i;
N;
i)scanf("
a【15】);
invert(a,0,N-1);
参考答案
一、选择题:
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