int *p, a = 10, b=1; p = &a; a = *p*b;
A) 12 B) 编译出错 C) 10 D) 1
37.以下各语句或语句组中,正确的操作是 C 。(1级)
A) char s[5]=\B) char *s; gets(s);
C) char *s; s=\ D) char s[5]; scanf(\
38.若已定义:int a[9],*p=a;并在以后的语句中未改变p的值,则不能表示a[1]地址的表达式是 C 。(1级)
A) p+1 B) a+1 C) a++ D) ++p
39.下列语句行中,哪些语句能正确进行字符串赋值操作 B 。(1级)
A) char st[4][5]
B) char s[5]={?A?, ?B?, ?C?, ?D?, ?E?} C) char *s; s = “ABCDE”; D) char *s; scanf(“%s”,s);
40.以下程序的输出结果是 D 。(1级) #include
{ char a[] = {9, 8, 7, 6, 5, 4, 3, 2, 1, 0}, *p = a+5;
printf(“%d”, *--p);
}
A) 非法 B) a[4]的地址 C) 3 D) 5
41.以下程序的运行结果是 C 。(2级)
#include
{int a[4][3]={ 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12}; int *p[4], j;
for (j=0; j<4; j++) p[j]=a[j];
printf(\
}
A) 4, 4, 9, 8 B) 程序出错 C) 4, 2,12,11 D) 1, 1, 7, 5
42.若有下列说明和语句:int a[4][5], (*p)[5]; p = a; 则对a数组元素的正确引用是 B 。(1级)
A) p+1 B) *(p+3) C) *(p+1)+3 D) *(*p+2)
43.若有以下定义和语句,则输出结果是 D 。(2级)
int **pp,*p,a=10,b=20;
pp=&p;p=&a;p=&b;printf(\
A)10,20 B)10,10 C)20,10 D)20,20 44.若有以下定义和语句,则输出结果为 A 。(1级)
char *sp=”\\t\\b\\\\\\0English\\n”; printf(“%d”,strlen(sp));
A)12 B)3 C)17 D)13
45.以下程序输出的结果是 C 。(2级)
void main()
{ int a=5,*p1,**p2; p1=&a,p2=&p1; (*p1)++;
printf(“%d\\n”,**p2); }
A) 5 B) 4 C) 6 D) 不确定
46.设void f1(int * m,long n);int a;long b;则以下调用合法的是 B 。(2级) A)f1(a,b); B)f1(&a,b); C)f1(a,&b); D)f1(&a,&b);
47.设int x;,则经过 B 后,语句*px=0;可将x值置为0。(1级) A) int * px; B)int * px=&x; C) float * px; D)float * px=&x;
48.若有说明:int i, j=2,*p=&i;,则能完成i=j赋值功能的语句是 B 。
(1级)
A) i=*p; B) *p=*&j; C) i=&j; D) i=**p;
49.以下定义语句中,错误的是 D 。(1级)
A) int a[]={1,2}; B) char *a[3]; C) char s[10]=\ D) int n=5,a[n]; 50.阅读以下函数 fun(char *sl,char *s2) { int i=0;
while(sl[i]==s2[i]&&s2[i]!='\\0') i++; return(sl[i]=='\\0'&&s2[i]=='\\0'); }
此函数的功能是 C 。(2级) A) 将s2所指字符串赋给s1
B) 比较s1和s2所指字符串的大小,若s1比s2的大,函数值为1,否则函数值为0
C) 比较s1和s2所指字符串是否相等,若相等,函数值为1,否则函数值为0 D) 比较s1和s2所指字符串的长度,若s1比s2的长,函数值为1,否则函数值为0
51. 若有以下定义:
int a[10],*p=a; 则*(p+3)表示的是 B 。(01~02第二学期试题)
A)元素a[3]的地址 B)元素a[3]的值 C)元素a[4]的地址 D)元素a[4]的值 52. 若有如下语句: int *p1,*p2;则其中int所指的是 D 。(01~02第二学期试题)
A)p1的类型 B)*p1和*p2的类型
C)p2的类型 D)p1和p2所能指向变量的类型 53. 有如下语句:
int a=5,b=8,*p1,*p2; p1=&a; p2=&b;
若有如下表达式: p1=p2; 则能正确表示该语句执行后变量在内存中的存储结构的图示为 D 。(01~02第二学期试题)
A) B) p1 5 a p1 5 a p2 8 b p2 8 b
C) D) p1 5 a p1 5 a
p2 8 b p2 8 b
54. 有如下语句 int a=10,b=20,*p1,*p2; p1=&a; p2=&b; 如图1所示;若实现如图2所示的存储结构,可选用的赋值语句是: B 。(往届试题)
p1 p2 p1 p2
a b a b 10 20 10 20 图1 图2
A)*p1=*p2 B)p1=p2 C)p1=*p2 D)*p1=p2
55. 若有说明:int i, j , *p=&i ;则下面语句中与i =j;等价的语句是: A 。(往届试题)
A)*p=*&j ; B)i = *p C)i=&j ; D)i=**p 56. 以下程序的输出结果是 。(2级) main()
{char *s=\int k=0,a=0,b=0; do {k++;
if (k%2==0) {a=a+s[k]-'0';continue;} b=b+s[k]-'0; a=a+s[k]-'0'; }while(s[k+1]);
printf(\}
A)k=3 a=2 b=3 B)k=3 a=3 b=2 C)k=2 a=3 b=2 D)k=2 a=2 b=3 57. 设有以下定义:
int a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12}; int(*ptr)[3]=a,*p=a[0];
则下列能正确表示数组元素a[1][2]的表达式是 。(1级) A)*((*ptr+1)[2]) B)*(*(p+5))
C)(*ptr+1)+2 D)*(*(a+1)+2) 58. 执行以下程序后,y的值是 。(1级) main()
{ int a[]={2,4,6,8,10}; int y=1,x,*p; p=&a[1];
for(x=0;x<3;x++)
y+=*(p+x); printf(\ }
A) 17 B) 18 C) 19 D) 20
59. 阅读程序
#include
{ int a[10]={1,2,3,4,5,6,7,8,9,0},*p; p=a;
printf(\ printf(\ }
该程序有两个printf语句,假设第一个printf语句输出的是194,则第二个printf语句输出结果是 。(1级)
A)203 B) 204 C) 1a4 D) 1a6 60.下列程序的输出结果是 。(2级) main()
{static int num[5]={2,4,6,8,10};
int *n,**m; n=num; m=&n;
printf(\ printf(\ }
A) 4 4 B) 2 2 C) 2 4 D) 4 6 61.以下程序的输出结果是 。(2级) #include
{int a[2][3]={1,3,5,7,9,11},*p; p=(int *)malloc(sizeof(int)); fut(&p,a);
printf(\ }
A) 1 B) 7 C) 9 D) 11
62. int a[10],*p;下列表达式正确的是 。(1级)
A) p=a; B) p=a[0]; C) *p=&a[0]; D) p=&a;
63. 执行以下程序段后y的值为 。(1级) static int a[]={1,3,5,7,9}; int y,x,*ptr; y=1;
ptr=&a[1];
for(x=0;x<3;x++) y*=*(ptr+x);
A) 105 B) 15 C) 945 D) 无确定值 64.执行以下程序段后,m的值是 。(1级) static int a[]={7,4,6,3,10};
int m,k,*ptr; m=10; ptr=&a[0];
for(k=0;k<5;k++)
m=(*(ptr+k) A) 10 B) 7 C) 4 D)3 65.执行以下程序段后,m的值为 。(1级) static int a[2][3]={1,2,3,4,5,6}; int m,*ptr; ptr=&a[0][0]; m=(*ptr)*(*(ptr+2))*(*(ptr+4)); A) 15 B)48 C) 24 D) 无定值 66.若有以下定义和语句 int w[2][3],(*pw)[3];pw=w; 则对w数组元素的非法引用是 。(1级) A) *(w[0]+2) B) *(pw+1)[2] C) pw[0][0] D) *(pw[1]+2) 67.以下程序的输出结果是 。(1级) Static int a[2][3]={1,2,3,4,5,6},(*p)[2],I; p=a; for (I=0;I<3;I++) printf(\ A) 输出不确定 B) 3 4 5 C) 2 3 4 D) 4 5 6 68.若有以下定义 int a[]={1,2,3,4,5,6,7,8,9,10},*p=a; 则值为3的表达式是 。(1级) A) p+=2,*(p++) B) p+=2,*++p C) p+=3,*p++ D)p+=2,++*p 69.若有以下定义和语句 int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a; 则不能表示a数组元素的表达式是 。(1级) A) *p B) a[10] C) *a D) a[p-a] 70.设char ﹡﹡s;以下正确的表达式是 。(2级) A)s=〞computer 〞; B)﹡s=〞computer 〞; C)﹡﹡s=〞computer 〞; D)﹡s=?c?; 二、填空题 1.若有定义:int a[2][3]={2,4,6,8,10,12};则﹡(&a[0][0]+2﹡2+1)的值是 ,﹡(a[1] +2)的值是 。(1级) 2.完成以下有关数组描述的填空。(0级) (1) C语言中,数组名是一个不可改变的 ,不能对它进行赋值运算。 (2) 数组在内存中占用一段连续的存储空间,它的首地址由 表示。 3.定义语句int ﹡f ( );和int (﹡f) ( );的含义分别为 和 。 4.在C程序中,指针变量能够赋 值或 值。(0级)