函数和数组.docx
《函数和数组.docx》由会员分享,可在线阅读,更多相关《函数和数组.docx(42页珍藏版)》请在冰豆网上搜索。
![函数和数组.docx](https://file1.bdocx.com/fileroot1/2023-1/6/fc8b96ad-daa8-4d3d-8c2c-fbd7fa8bfd2f/fc8b96ad-daa8-4d3d-8c2c-fbd7fa8bfd2f1.gif)
函数和数组
第3章函数和数组
库函数的调用
(1)有以下程序(strcpy为字符串复制函数,strcat为字符串连接函数)
#include
#include
main()
{chara[10]="abc",b[10]="012",c[10]="xyz";
strcpy(a+1,b+2);
puts(strcat(a,c+1));
}
程序运行后的输出结果是
A)bc2yz
B)a2yz
C)a12xyz
D)12yz
(2)若各选项中所用变量已正确定义,函数fun中通过return语句返回一个函数值,以下选项中错误的程序是
A)main(){……x=fun(2,10);……}floatfun(inta,intb){……}
B)floatfun(inta,intb){……}main(){……x=fun(i,j);……}
C)floatfun(int,int);main(){……x=fun(2,10);……}floatfun(inta,intb){……}
D)main(){floatfun(inti,intj);……x=fun(i,j);……}floatfun(inta,intb){……}
(3)以下叙述中正确的是
A)用户自己定义的函数只能调用库函数
B)不同函数的形式参数不能使用相同名称的标识符
C)在C语言的函数内部,可以定义局部嵌套函数
D)实用的C语言源程序总是由一个或多个函数组成
(4)若有定义语句:
chars[10]="1234567\0\0";则strlen(s)的值是
A)8
B)7
C)9
D)10
(5)有以下程序
#include
main()
{charp[20]={'a','b','c','d'},q[]="abc",r[]="abcde";
strcat(p,r);strcpy(p+strlen(q),q);
printf("%d\n",strlen(p));
}
程序运行后的输出结果是
A)9
B)11
C)6
D)7
(6)若有定义语句:
char*s1="OK",*s2="ok";以下选项中,能够输出"OK"的语句是
A)if(strcmp(s1,s2)!
=0)puts(s1);
B)if(strcmp(s1,s2)!
=0)puts(s2);
C)if(strcmp(s1,s2)==1)puts(s1);
D)if(strcmp(s1,s2)==0)puts(s1);
(7)有以下程序,程序中库函数islower(ch)用以判断ch中的字母是否为小写字母
#include
#include
voidfun(char*p)
{inti=0;
while(p[i])
{if(p[i]==''&&islower(p[i-1]))p[i-1]=p[i-1]-'a'+'A';
i++;
}
}
main()
{charsl[100]="abcdEFG!
";
fun(s1);printf("%s\n",s1);
}
程序运行后的输出结果是
A)AbCdEFg!
B)abcdEFG!
C)abcdEFg!
D)aBcDEFG!
(8)若有以下定义和语句
chars1[10]="abcd!
",*s2="\n123\\";
printf("%d%d\n",strlen(s1),strlen(s2));
则输出结果是
A)105
B)107
C)55
D)58
(9)有以下程序
#include
intfun(inta,intb)
{if(b==0)returna;
elsereturn(fun(--a,--b));
}
main()
{
printf("%d\n",fun(4,2));
}
程序的运行结果是
A)1
B)2
C)3
D)4
(10)下列选项中,能够满足“只要字符串s1等于字符串s2,则执行ST”要求的是
A)if(s1==s2)ST;
B)if(strcpy(s1,s2)==1)ST;
C)if(strcmp(s2,s1)==0)ST;
D)if(s1-s2==0)ST;
函数的定义和返回值
(11)以下叙述中正确的是
A)函数名代表该函数的入口地址
B)所有函数均不能接受函数名作为实参传入
C)函数体中的语句不能出现对自己的调用
D)如果函数带有参数,就不能调用自己
(12)以下叙述中正确的是
A)函数既可以直接调用自己,也可以间接调用自己
B)任何情况下都不能用函数名作为实参
C)函数的递归调用不需要额外开销,所以效率很高
D)简单递归不需要明确的结束递归的条件
(13)以下关于return语句的叙述中正确的是
A)一个自定义函数中必须有一条return语句
B)一个自定义函数中可以根据不同情况设置多条return语句
C)定义成void类型的函数中可以有带返回值的return语句
D)没有return语句的自定义函数在执行结束时不能返回到调用处
(14)已定义以下函数intfun(int*p){return*p;}fun函数返回值是
A)不确定的值
B)一个整数
C)形参p中存放的值
D)形参p的地址值
(15)以下叙述中错误的是
A)用户定义的函数中可以没有return语句
B)用户定义的函数中若没有return语句,则应当定义函数为void类型
C)用户定义的函数中可以有多个return语句,以便可以调用一次返回多个函数值
D)函数的return语句中可以没有表达式
(16)以下叙述中错误的是
A)函数调用可以作为一个独立的语句存在
B)函数形参的值也可以传回给对应的实参
C)若函数有返回值,必须通过return语句返回
D)C程序必须由一个或一个以上的函数组成
函数的调用及要求
(17)有以下程序
intadd(inta,intb)
{
return(a+b);
}
main()
{intk,(*f)(),a=5,b=10;
f=add;
…
}
则以下函数调用语句错误的是
A)k=add(a,b);
B)k=(*f)(a,b);
C)k=*f(a,b);
D)k=f(a,b);
(18)以下叙述中正确的是
A)函数调用时,不必区分函数名称的大小写
B)调用函数时,函数名必须与被调用的函数名完全一致
C)函数名允许用数字开头
D)在函数体中只能出现一次return语句
函数的说明
(19)若有以下函数首部intfun(doublex[10],int*n)则下面针对此函数的函数声明语句中正确的是
A)intfun(double,int);
B)intfun(double*x,intn);
C)intfun(double*,int*);
D)intfun(doublex,int*n);
(20)以下选项中叙述错误的是
A)在C程序的同一函数中,各复合语句内可以定义变量,其作用域仅限本复合语句内
B)C程序函数中定义的赋有初值的静态变量,每调用一次函数,赋一次初值
C)C程序函数中定义的自动变量,系统不自动赋确定的初值
D)C程序函数的形参不可以说明为static型变量
调用函数和被调用函数之间的数据传递
(21)有以下程序
intf(intx);
main(){
intn=1,m;
m=f(f(f(n)));
printf("%d\n",m);}
intf(intx)
{returnx*2;}
程序运行后的输出结果是
A)1
B)2
C)4
D)8
(22)有以下程序
#include
intfun(intx,inty)
{if(x==y)return(x);
elsereturn((x+y)/2);
}
main()
{inta=4,b=5,c=6;
printf("%d\n",fun(2*a,fun(b,c)));
}
程序运行后的输出结果是
A)3
B)6
C)8
D)12
(23)有以下程序
#include
intf(intx,inty)
{return((y-x)*x);}
main()
{inta=3,b=4,c=5,d;
d=f(f(a,b),f(a,c));
printf("%d\n",d);
}
程序运行后的输出结果是
A)10
B)8
C)9
D)7
(24)有以下程序
#include
doublef(doublex);
main()
{doublea=0;inti;
for(i=0;i<30;i+=10)a+=f((double)i);
printf("%5.0f\n",a);
}
doublef(doublex)
{returnx*x+1;}
程序运行后的输出结果是
A)401
B)500
C)503
D)1404
(25)若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的是
A)形参只是形式上的存在,不占用具体存储单元
B)函数的形参和实参分别占用不同的存储单元
C)同名的实参和形参占同一存储单元
D)函数的实参和其对应的形参共占同一存储单元
(26)有以下程序
voidfun(inta,intb,intc)
{
a=b;b=c;c=a;
}
main(){
inta=10,b=20,c=30;
fun(a,b,c);
printf("%d,%d,%d\n",c,b,a);}
程序运行后的输出结果是
A)10,20,30
B)20,30,10
C)30,20,10
D)0,0,0
(27)有以下程序
#include
intf(intx);
main()
{inta,b=0;
for(a=0;a<3;a++)
{b=b+f(a);putchar('A'+b);
}
}
intf(intx)
{returnx*x+1;}
A)BCD
B)BDI
C)ABE
D)BCF
(28)若有以下程序
voidf(intx)
{
if(x>=10)
{
printf("%d-",x%10);
f(x/10);}
elseprintf("%d",x);}
main(){
intz=123456;
f(z);}
则程序的输出结果是
A)6-5-4-3-2-1
B)6-5-4-3-2-1-
C)1-2-3-4-5-6
D)1-2-3-4-5-6-
(29)有以下程序
#include
intfun(intx){
intp;
if(x==0||x==1)return(3);
p=x-fun(x-2);return(p);}
main(){
printf("%d\n",fun(9));
}
程序运行后的输出结果是
A)5
B)9
C)4
D)7
(30)有以下程序
#include
intfun(intn){
inta;
if(n==1)return1;
a=n+fun(n-1);
return(a);}
main(){
printf("%d\n",fun(5));
}
程序的输出结果是
A)14
B)10
C)15
D)9
(31)有以下程序
#include
intfun(inta,intb){
returna+b;}
main(){
intx=6,y=7,z=8,r;
r=fun(fun(x,y),z--);
printf("%d\n",r);}
程序运行后的输出结果是
A)15
B)21
C)20
D)31
(32)以下选项中函数形参不是指针的是
A)fun(int&p){…}
B)fun(inta[10]){…}
C)fun(int*a){…}
D)fun(intp[]){…}
(33)设有如下函数定义
intfun(intk)
{
if(k<1)return0;
elseif(k==1)return1;
elsereturnfun(k-1)+1;
}
若执行调用语句:
n=fun(3);,则函数fun总共被调用的次数是
A)2
B)4
C)3
D)5
对函数的进一步讨论
(34)有以下程序
#include
intf(intx)
{
inty;
if(x==0||x==1)return(3);
y=x*x-f(x-2);
returny;
}
main()
{
intz;
z=f(3);printf("%d\n",z);
}
程序的运行结果是
A)9
B)0
C)6
D)8
(35)有以下程序(strcat函数用以连接两个字符串)
#include
#include
main()
{chara[20]="ABCD\0EFG\0",b[]="IJK";
strcat(a,b);printf("%s\n",a);
}
程序运行后的输出结果是
A)ABCDE\0FG\0IJK
B)ABCDIJK
C)IJK
D)EFGIJK
(36)有以下程序
intfun(intn)
{if(n==1)return1;
else
return(n+fun(n-1));
}
main()
{intx;
scanf("%d",&x);x=fun(x);printf("%d\n",x);
}
执行程序时,给变量x输入10,程序的输出结果是
A)54
B)65
C)45
D)55
(37)有以下程序
fun(intx)
{intp;
if(x==0‖x==1)return(3);
p=x-fun(x-2);
returnp;
}
main()
{printf("%d\n",fun(7));}
执行后的输出结果是
A)3
B)7
C)0
D)2
(38)若有以下程序
intf(inta[],intn)
{
if(n>1)
{
intt;t=f(a,n-1);
returnt>a[n-1]?
t:
a[n-1];}
elsereturna[0];}
main()
{
inta[]={8,2,9,1,3,6,4,7,5};
printf("%d\n",f(a,9));}
则程序的输出结果是
A)9
B)1
C)8
D)5
局部变量和全局变量
(39)以下叙述中正确的是
A)只有全局变量才有自己的作用域,函数中的局部变量没有作用域
B)只要是用户定义的标识符,都有一个有效的作用域
C)只有在函数内部定义的变量才是局部变量
D)局部变量不能被说明为static
(40)以下叙述中正确的是
A)对于变量而言,“定义”和“说明”这两个词实际上是同一个意思
B)在复合语句中不能定义变量
C)全局变量的存储类别可以是静态类
D)函数的形式参数不属于局部变量
(41)有以下程序
intd=1;
voidfun(intp)
{
intd=5;
d+=p++;
printf("%d",d);}
main(){
inta=3;
fun(a);
d+=a++;
printf("%d\n",d);}
程序的输出结果是
A)96
B)94
C)84
D)85
(42)有以下程序
#include
inta=1,b=2;
voidfun1(inta,intb)
{printf(“%d%d”,a,b);}
voidfun2()
{a=3;b=4;}
main()
{fun1(5,6);fun2();
printf("%d%d\n",a,b);
}
程序运行后的输出结果是
A)3456
B)1256
C)5612
D)5634
(43)在一个C源程序文件中所定义的全局变量,其作用域为
A)由具体定义位置和extern说明来决定范围
B)所在程序的全部范围
C)所在函数的全部范围
D)所在文件的全部范围
(44)有以下程序
voidfun2(chara,charb)
{printf("%c%c",a,b);}
chara='A',b='B';
voidfun1()
{a='C';b='D';}
main()
{fun1();
printf("%c%c",a,b);
fun2('E','F');
}
程序的运行结果是
A)ABEF
B)CDEF
C)ABCD
D)CDAB
变量的作用域和生存期
(45)有以下程序
#include
fun(inta,intb){
intstaticm=0,i=2;
i=i+m+1;
m=i+a+b;
returnm;}
main(){
intk=4,m=1,p;
p=fun(k,m);
printf("%d,",p);
p=fun(k,m);
printf("%d\n",p);}
程序运行后的输出结果是
A)8,17
B)7,16
C)8,8
D)7,17
(46)有以下程序
#include
func(intn)
{staticintnum=1;
num=num+n;printf("%d",num);
}
voidmain()
{func(3);func(4);printf("\n");}
程序运行后的输出是
A)45
B)35
C)48
D)34
(47)有以下程序
fun(intx,inty)
{staticintm=0,i=2;
i+=m+1;m=i+x+y;returnm;
}
main()
{intj=1,m=1,k;
k=fun(j,m);printf("%d,",k);
k=fun(j,m);printf("%d\n",k);
}
执行后的输出结果是
A)5,5
B)5,11
C)11,11
D)11,5
(48)在C语言中,只有在使用时才占用内存单元的变量,其存储类型是
A)extern和register
B)auto和static
C)static和register
D)auto和register
(49)有以下程序
#include
intfun(){
staticintx=1;
x*=2;
returnx;}
main(){
inti,s=1;
for(i=1;i<=3;i++)
s*=fun();
printf("%d\n",s);}
程序运行后的输出结果是
A)0
B)10
C)30
D)64
(50)有以下程序
#include
intf(intn);
main(){
inta=3,s;
s=f(a);
s=s+f(a);
printf("%d\n",s);}
intf(intn){
staticinta=1;
n+=a++;
returnn;}
程序运行后的输出结果是
A)9
B)8
C)7
D)10
(51)有以下程序
#include
intfun(){
staticintx=1;
x+=1;
returnx;}
main(){
inti,s=1;
for(i=1;i<=5;i++)s+=fun();
printf("%d\n",s);}
程序运行后的输出结果是
A)11
B)21
C)6
D)120
(52)有以下程序
intfun(intx[],intn)
{staticintsum=0,i;
for(i=0;ireturnsum;
}
main()
{inta[]={1,2,3,4,5},b[]={6,7,8,9},s=0;
s=fun(a,5)+fun(b,4);printf("%d\n",s);
}
A)50
B)45
C)60
D)55
(53)有以下程序
intf(intm)
{
staticintn=0;
n+=m;returnn;}
main(){
intn=0;
printf("%d,",f(++n));
printf("%d\n",f(n++));}
程序运行后的输出结果是
A)1,1
B)1,2
C)2,3
D)3,3
(54)有以下程序
#include
intfun()
{staticintx=1;
x*=2;returnx;
}
main()
{inti,s=1;
for(i=1;i<=2;i++)s=fun();
printf("%d\n",s);
}
程序运行后的输出结果是
A)4
B)1
C)0
D)8
(55)有下列程序:
inta=4;
intf(intn)
{intt=0;staticinta=5;
if(n%2){inta=6;t+=a++;}
else{inta=7;t+=a++;}
returnt+a++;
}
main()
{ints=a,i=0;
for(;i<2;i++)s+=f(i);
printf("%d\n",s);
}
程序运行后的输出结果是
A)28
B)24
C)32
D)36
一维数组的定义和元素的引用
(56