错题集一
一、选择题
1.下列程序段执行后s值为( )
int i=1, s=0;
do {
if(!(i%2)) continue;
s += i;
} while(++i<10);
A.1 B.45 C.25 D.以上均不是
2.对于如下说明,则有意义的表达式是( )
int b=3, c=5, d=8, p[3], *a[3]={&b, &c, &d};
A.p=a B.p[0]=a C.p[0]=**a D.a[0]*=2
3.对于以下结构定义:
struct { int x; int y;
} s[10], *p=s, *q=s+1;则表达式(int *)q - (int *)p的值等于( )
A. 1 B. 2 C. 4 D.表达式语法有错
4.下列程序执行后的输出结果是( )
int a=1;
fun(int k)
{ static int a=5;
a+=k;
printf("%d ", a);
return a;
}
void main()
{ int b=3;
printf("%d\n", fun(b+fun(a)));
}
A.699 B.669 C.61515 D.6615
5.对于struct node{ char s[10]; int i; } p[4]; 下列哪个赋值是正确的( )
A.p->i=2 B.p[0].s="abc" C.p[0]->i=2 D.p->s='a'
6.已知某函数内有声明:int a[3][3], (*ptr)[3]=a, *p=a; ,则能正确引用数组元素a[1][2]的是( )
A.*(++ptr)[2] B.*(++p+2) C.*(*++ptr+2) D.*(*++a+2)
7.若程序中有如下函数定义:
void fun(int p[10], int n)
{ int j;
for(j=0; j<n; j++) p[j]=0;
}且主函数中有声明:int a, b[10];,则主函数中对fun函数的调用正确的是( )
A.a=f(b,1); B.f(b[10],1); C.f(a,1); D.f(&a,1)
8. 若有以下定义和语句:
int s[4][5], (*ps)[5]; ps=s;则对s数组元素的正确引用形式是( )
A.ps+1 B.*(ps+3) C.ps[0][2] D.*(ps+1)+3
9. 下列程序执行后的输出结果是( )
#define max(x) x*(x-1)
void main()
{ int a=1, b=2;
printf(“%d\n”, max(1+a+b));
}
A.6 B.8 C.10 D.12
10. 对于struct node { char s[10]; int i; }p[4]; 下列不正确的赋值是( )
A.p[0].i=2 B.p[0].s=“abc” C.p->i=2 D.*(p->s)='a'
11.下列程序执行后的输出结果是( )
#include "stdio.h"
void main()
{
int a[6], i;
for(i=1; i<6; i++)
{
a[i]=9*(i-2+4*(i>3)%5);
printf("%2d", a[i]);
}
}
A.-9 0 9 5 4 3 6 B.-18 -9 0 9 54 C.-9 0 95463 D.-9095463
12.对于以下递归函数f,调用f(4),其返回值为( )
int f(int n)
{
if(n) return f(n-2)+n;
else return n;
}
A.6 B. 4 C. 0 D. 无限递归
13.对于如下说明,则有意义的正确表达式是( )
int *p[3], a[3];
A.p=a B.p[0]=a[0] C.p[0]=a D.p[0]*=2
14. 对于以下结构定义,++p->str中的++加在( )
struct { int len; char *str; } *p;
A.指针str上 B.指针p上 C.str指的内容上 D.以上均不是
15. 若有以下说明:
int w[3][4] = { {0,1}, {2,4}, {5,8}};
int (*p)[4] = w;则数值为 4的表达式是( )。
A) *w[1]+1 B) p++,*(p+1) C) w[2][2] D) p[1][1]
16. 以下程序运行后,输出结果是( )
#include <stdio.h>
int main( )
{
int y=18, i=0, j, a[8];
do {
a[i]=y%2;
i++;
y=y/2;
} while(y>=1);
for(j=i-1; j>=0; j--)
printf("%d", a[j]);
printf("\n")
return 0;
}
A)10000 B)10010 C)00110 D)10100
17. 以下程序的输出结果是( )。
#include <stdio.h>
int main(){
int a=2,c=5;
printf("a=%%d,b=%%d\n", a, c);return 0;}
A) a=%2,b=%5 B) a=2,b=5 C) a=%%d,b=%%d D) a=%d,b=%d
18. 设有以下定义:
int a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12};
int (*prt)[3]=a, *p=a[0];
则下列能够正确表示数组元素 a[1][2]的表达式是( )
A) *((*prt+1)[2]) B) *(*(p+5))
C) (*prt+1)+2 D) *(*(a+1)+2)
19. 若有定义: float w; int num; char s; 则合法的switch语句是_______。
A. switch(w) { case 1.0: printf("*\n"); case 2.0: printf("**\n"); }
B. switch(num); { case 1 printf("*\n"); case 2 printf("**\n"); }
C.switch(s) { case 'a': printf("*\n"); case 'b': printf("**\n"); default: printf("\n");}
D. switch(num+1) { case 1: printf("*\n"); case 1: printf("**\n");default: printf("\n"); }
20. 设有语句:int x[]={0,1,2,3,4,5,6,7,8,9}, *p=x+5; while(*p++<7);
则语句 printf("%d",*p--);的输出结果为_______。
A. 出错
B. x[7]的地址
C. 7
D. 8