}
voidmain(){
inta[5]={9,7,5,3,1},i;
fun(a,5);
for(i=0;i<5;i++)printf("%d",a[i]);
}
(A)13579 (B)31975 (C)97531 (D)编译时报错
7、若有数组定义语句inta[6];和函数调用语句fun(a);则在fun函数的定义中,对形参数组array的错误定义方式是___A_____。
(A)voidfun(intarray[intN=6])
(B)voidfun(intarray[10])
(C)voidfun(intarray[])
(D)voidfun(intarray[3])
9、以下说法正确的是___D_____。
(A)在函数中可以使用多条return语句来返回多个处理结果
(B)在函数中最多只能有一条return语句
(C)一个函数不可能既是被调用函数,又是主调函数
(D)如果函数值的类型与返回值的类型不一致,以函数值类型为准
10、以下程序的输出结果是___D_____。
#include
intfun(intn){
if(n==2)returnn;
elsereturnn*fun(n-2);
}
voidmain(){printf("%d\n",fun(7));}
(A)105 (B)2 (C)35 (D)递归无法正常结束
11、以下说法正确的是_B_______。
(A)在函数定义时,如果不明确指定函数的返回值类型,则默认返回值类型为“void”
(B)所有的函数都是平行的,一个函数并不从属于另一个函数
(C)属于一个C语言程序的不同文件中不允许定义同名的全局变量
(D)函数被调用时形参才分配存储单元,函数调用结束后形参不释放占据的存储单元
二、判断题
1、在C语言中定义无参函数时,函数名后的一对圆括号可以保留,也可以省略。
B
2、被调用函数执行过程中形参值的变化不会影响主调函数中的实参值。
A
3、以下函数的功能是计算1+1/2+1/3+...+1/n。
B
doublefun(intn){
inti;doubles=0.0;
for(i=1;i<=n;i++)s+=1/i;
returns;
}
4、如果被调用函数的定义出现在主调函数之前,必须使用函数原型对其进行声明。
B
5、以下程序的输出结果是:
234567。
A
#include
voidfun(intb[3]){
inti;
for(i=0;i<6;i++)b[i]++;
}
voidmain(){
inta[6],i;
for(i=0;i<6;i++)a[i]=i+1;
fun(a);
for(i=0;i<6;i++)printf("%d",a[i]);
}
三、填空题
1、在一个函数调用过程中又调用另一个函数称为函数的【 嵌套调用】。
2、以下程序的功能是输出1-3+5-7+...+45-47+49的运算结果,请填空。
#include
intfun(intn){
ints=0,t=1,i;
for(i=1;i<=n;i+=2){【 s+=t*i】;t=-t;}
returns;
}
voidmain(){printf("%d\n",fun(50));}
3、以下程序执行完毕后,变量x的值是【 8】。
#include
intfun(intn){returnn>2?
fun(n-1)+fun(n-2):
1;}
voidmain(){intx=fun(6);}
指针
1、若有语句:
inti,*p=&i;则均表示变量地址的选项是__D______。
(A)*&p,*p,&i (B)i,p,&*i (C)*&i,&i,*p (D)&i,p,&*p
3、若有语句:
intx=6,*p=&x;则下面正确的表达式是_B_______。
(A)++&x (B)(*p)-- (C)&(x+5) (D)p=1000
4、若有语句:
inta[10],*p1=a+8,*p2=&a[3];则p1-p2的值是____D____。
(A)20 (B)4 (C)16 (D)5
5、以下程序段执行完毕后,变量a和b的值分别是_A_______。
inta=4,b=5,*p1=&a,*p2=&b;
a=2*(*p1%-*p2)+5;
b=*p1**p2++;
(A)13,65 (B)-3,-15 (C)-3,-18 (D)13,78
6、以下程序段调用scanf函数为变量x赋值,则填入下划线所在位置的错误代码是__B__。
intx,*p=&x;
scanf("%d",__________);
(A)&x (B)*p (C)p (D)&*p
7、若有语句:
inta[]={1,3,2,7,3,4},*p=a+3,k;则变量k的值不等于3的选项是_D__。
(A)k=(p++,*p++) (B)k=(p-=2,*p--)
(C)k=(p--,*--p) (D)k=(p++,*++p)
8、若有定义:
inta[10],*p=a;则表示数组元素a[3]的错误选项是________。
(A)*(a+=3) (B)*(p+=3) (C)*(a+3) (D)p[3]
9、以下程序执行完毕后,变量a和b的值分别是________。
#include
voidfun(int*p,int*q){
int*t;
if(*p>*q){t=p;p=q;q=t;}
}
voidmain(){
inta=13,b=9;
fun(&a,&b);
}
(A)9,13 (B)13,13 (C)13,9 (D)9,9
10、以下程序输出数组a中的最小值,则下划线所在位置应填入的代码是________。
#include
intfindmin(int*p,intn){
int*m,*q=p+n;
for(m=p;p return*m;
}
voidmain(){
inta[6]={21,17,34,9,12,45};
printf("%d\n",findmin(a,6));
}
(A)pm (C)*p>*m (D)*p<*m
11、以下说法正确的是________。
(A)可以将整型常量作为存储单元地址存放到指针变量中。
(B)指针变量的值是指针。
(C)可以采用为数组名重新赋值的方法使其指向不同的元素。
(D)使用地址值作为实参、指针变量作为形参,形参值的改变可以使实参值发生变化。
12、若有函数定义:
doublefun(inta[10]){...},则在对该函数进行原型声明时,错误的声明语句是________。
(A)doublefun(int[]);
(B)doublefun(intb[10]);
(C)doublefun(inta);
(D)doublefun(int*a);
15、若有语句:
intx,*p=&x;则与该语句等价的语句是________。
(A)intx,*p;*p=&x; (B)intx,*p;p=&x;
(C)intx,*p;*p=x; (D)intx,*p;p=x;
二、判断题
1、当两个指针变量指向同一数组时,两个指针变量相减的差值即为两个指针变量相隔的字节个数。
B
2、如果某个指针变量赋值为0,表示该指针变量不指向任何变量A。
3、若有语句:
intx[]={5,7,3,8},*p=x+2,y;y=++*p--;则变量y的值是3。
B
4、若有函数定义:
intfun(int*a){return*a;},则函数的返回值是形参a中存放的地址值。
B
5、以下程序执行完毕后,main函数中数组a各元素的值依次是1、9、6、5、8、7、3。
B
#include
voidfun(inta[],intn,intm){
inti,t,*p;
for(i=1;i<=m;i++){
t=*(a+n-1);
for(p=a+n-2;p>=a;p--)*(p+1)=*p;
*a=t;
}
}
voidmain(){
inta[7]={8,7,3,5,1,9,6};
fun(a,7,3);
}
三、填空题
1、作为形参的数组名并不表示数组的首地址,其实质是一个【 指针变量】。
2、以下程序的功能是将1到100之间能被7或11整除的所有整数放在数组a中,并将这些数的个数放在变量n中,请填空。
voidfun(int*p,int*q){
intx;
for(x=1;x<=100;x++)
if(x%7==0||x%11==0){*p++=x;(*q)++;}
}
voidmain(){
inta[1000],n=0;
【 fun(a,&n)】;}
3、若有语句:
inta[7]={2,5,3,4,7,8,1},*p=a+1;则p[*(a+*(a+2))]的值是【 8】。