数组选择题
1.若有函数fun的定义为void fun(…){static int a=1;…}则下列叙述中不正确的是( )
【 正确答案: B】
A 在每次调用fun函数时,变量a的值是上次调用结束时a的值
B 在fun函数之外,可以用变量名a直接引用a的值
C 在其他函数中,可以出现声明double a=2.5;
D fun函数的形式参数不能取名为a
2.在C语言中,只有在使用时才占用内存单元的变量,其存储类别是() 【 正确答案: A】 A auto和register B extern和register C auto和static D static和register
3.下面函数定义中正确的是
【 正确答案: a】
A double fun(double f1, double f2){ }
B double fun(double f1; double f2){ }
C double fun(double f1, double f2); { }
D double fun(double f1, f2){ }
4.以下叙述中错误的是() 【 正确答案: B】 A 用户定义的函数中可以没有return语句 B 用户定义的函数中可以有多个return语句,以便可以调用一次返回多个函数值 C 用户定义的函数中若没有return语句,则应当定义函数为void类型 D 函数的return语句中可以没有表达式
5.以下isprime函数的功能是判断形参a是否为素数,
是素数,函数返回1,否则返回0。则(1)(2)空为
int isprime(int a){
int i;
for(i=2;i<=a/2;i++)
if (a%i==0)
(1);
(2);
}
【 正确答案: a】
A return 0 return 1
B return 1 return 0
6.C语言规定,变量作实参时,它和对应形参之间的数据传递方式是 【 正确答案: b】 A 地址传递 B 单向值传递 C 由实参传给形参,再由形参传回给实参 D 由用户指定传递方式
7.若函数调用时的实参为变量,则以下关于函数形参和实参的叙述中正确的是( ) 【 正确答案: D】 A 实参和其对应的形参占用同一存储单元 B 形参不占用存储单元 C 同名的实参和形参占用同一存储单元 D 形参和实参占用不同的存储单元
8.在C语言中,函数返回值的类型最终取决于() 【 正确答案: A】 A 函数定义时在函数首部所说明的函数类型 B return语句中表达式值的类型 C 调用函数时主函数所传递的实参类型 D 函数定义时形参的类型
9.下面关于return语句的叙述正确的是 【 正确答案: b】 A 一个自定义函数中必须有一条return语句 B 一个自定义函数中可以根据不同情况设置多条return语句 C 定义成void类型的函数中可以有带返回值的return语句 D 没有return语句的自定义函数在执行结束时不能返回到调用处
10.设有函数f的定义如下;
void f(int x,int *y){
*y=x*x*x;
}
int main(){
int i,c[4]={1,2,3,4},s[4]={0};
for(i=0;i<4;i++){
_________
printf("%d",s[i]);
}
}
若在main函数中欲调用f函数,则正确的调用语句是( )
【 正确答案: C】
A f(c,s);
B f(c[i],s[i]);
C f(*(c+i),&s[i]);
D f(c+i,s+i);
11.下面叙述中正确的是 【 正确答案: c】 A C语言处理系统以函数为单位编译源程序 B main()函数必须放在程序开始 C 用户定义的函数可以被一个或多个函数调用任意多次 D 在一个函数体内可以定义另外一个函数
12.在一个C源程序文件中所定义的全局变量,其作用域为() 【 正确答案: D】 A 所在文件的全部范围 B 所在程序的全部范围 C 所在函数的全部范围 D 由具体定义位置和extern说明来决定范围
指针选择题
1.以下声明中正确的是( )。
【 正确答案: D】
A int n=2,a[n]={10};
B int n=10,*p[2]=&n;
C int n=10,a[2]={n};
D int a[2][2]={10},(*p)[2]=a+1;
2.已知有声明 int i,a[10],*p=a; ,现需要将1到l0保存到元素a[0]到a[9]中, 以下程序段中不能实现这一功能的是( )。 【 正确答案: D】 A for(i=0;i<10;i++) a[i]=i+1; B for(i=0;i<10;i++) p[i]=i+1; C i=1;while(p3.若有定义语句:int a[4][10],*p,*q[4];且 0≤i<4,则错误的赋值是( )。 【 正确答案: A】 A p=a B q[i]=a[i] C p=a[i] D p=&a[2][1]4.若有声明语句"int a=5,b=4,c=3,*p=&a;",则下列( )表达式语句是正确的。 【 正确答案: B】 A (*p)++=c; B printf(a%4==0?"%3dn":"%3d",*p); C *(*p)++; D a>20?return *p-20:return *p-1;5.设有定义:char *c;,以下选项中能够使字符型指针 c 正确指向一个字符串的是( )。 【 正确答案: A】 A char str[]="string";c=str; B scanf("%s",c); C c=getchar(); D c=*string";6.已知有声明 int a[4][4]={{1,2,3,4},{5,6,7,8), {9,10,11,12},{13,14,15,16)}; 若需要引用值为12的数组元素,则下列选项中错误的是( )。 【 正确答案: A】 A *(a+2)+3 B *(*(a+2)+3) C *(a[2]+3) D a[2][3]7.有以下程序: void main (){ int a[]={1,2,3,4},y,*p=&a[3]; --p; y=*p; printf("y=%dn",y); } 其运行结果是() 【 正确答案: D】 A y=0 B y=1 C y=2 D y=38.下面选项中正确的赋值语句是(设 char a[5],*p=a;)( )。 【 正确答案: A】 A p="abcd"; B a="abcd"; C *p="abcd"; D *a="abcd";9.以下程序的输出结果是int a[5]={2,4,6,8,10}, *p=a; p++;printf("%d",*p); 【 正确答案: b】 A 2 B 4 C 6 D 810.以下程序的输出结果是 main(){ int m=1, n=2, *p=&m, *q=&n, *r; r=p; p=q; q=r; printf("%d,%d,%d,%dn",m,n,*p,*q); } 【 正确答案: b】 A 1,2,1,2 B 1,2,2,1 C x D x11.有以下程序: void main (){ char ch[]="uvwxyz", *pc;pc=ch; printf("%cn", *(pc+5)); } 其运行结果是() 【 正确答案: A】 A z B 0 C 元素ch[5]的地址 D 字符y的地址12.已知:int *p, a;则语句“p= &a;”中的运算符“&”的含义是() 【 正确答案: D】 A 位与运算 B 逻辑与运算 C 取指针内容 D 取变量地址13.以下程序的输出结果是 # define N 5 int fun(int *s, int a, int n){ int j;*s=a;j=n; while(a!=s[j]) j--; return j; } void main (){ int s[N+1]; int k; for(k=1;k<=N;k++) s[k]=k+1; printf("%dn",fun(s,4,N)); } 【 正确答案: b】 A 3 B 4 C x D x14.若有声明"int a [5],*b=a,(*c)[3],*d[3];",则在以下表达式中有语法错误的是( )。 【 正确答案: C】 A a[0]=0 B b[0]=0 C c[0]=0 D d[0]=015.若有定义语句:double x[5]={1.0, 2.0. 3.0, 4.0,5.0}, *p=x;,则错误引用x数组元素的是() 【 正确答案: B】 A *p B x[5] C *(p+l) D *x16.以下程序的输出结果是 void fun (char **p){ ++p; printf("%sn",*p); } void main ( ){ char *a[]={"Morning", "Afternoon", "Evening", "Night"}; fun( a ); } 【 正确答案: b】 A Morning B Afternoon C Eveningx D Night17.设有如下程序段: char s[20]="Bejing",*p;p=s;则执行p=s;语句后,以下叙述正确的是() 【 正确答案: A】 A 可以用*p表示s[0] B s数组中元素的个数和p所指的字符串长度相等 C s和p都是指针变量 D 数组s中的内容和指针变量p中的内容相等18.有以下程序: void main (){ int i=5; do{ if(i%3==1) if (i%5==2){ printf("*%d",i); break; } i++; }while (i!=0); printf("n"); } 其运行结果是() 【 正确答案: A】 A *7 B *3*5 C *5 D *2*619.以下程序的输出结果是 void swap (int *a, int*b){ int *t; t=a; a=b; b=t; } void main(){ int i=3,j=5,*p=&i,*q=&j; swap(p,q); printf ("%d %dn", *p, *q); } 【 正确答案: a】 A 3 5 B 5 3 C x D x20.若要对a进行++运算,则a应具有以下说明( )。 【 正确答案: C】 A int a[3][2]; B char *a[]={"12","ab"}; C int b[10],*a=b; D char (*a)(char);



