一、選擇題
1、 若有以下說明和語句,且0<=i<10,則對數組元素的錯誤引用是( C )。
int a[]={1,2,3,4,5,6,7,8,9,0},*p,i;
p=a;
(A)*(a+i) (B) a[p-a] (C)p+i (D)*(&a[i])
2、 若有以下說明和語句,且0<=i<10,則不是對數組元素地址的正確表示的是( B )。
int a[]={1,2,3,4,5,6,7,8,9,0},*p,i;
p=a;
(A)&(a+1) (B)a++ (C)&p (D)&p[i]
3、 下面的程序中有錯誤(每行程序前面的數字表示行號)的是( A )。
1 #include <stdio.h>
2 int main( )
3 {
4 float a[3]={0.0};
5 int i;
6 for(i=0;i<3;i++)scanf("%f",&a[i]);
7 for(i=1;i<3;i++)a[0]=a[0]+a[i];
8 printf("%f ",a[0]);
9 }
(A)沒 (B)第4行 (C)第7行 (D)第8行
4、 在以下說明中,標識符prt( C )。
int(*prt)[3];
(A)說明不合法
(B)是一個指針數組名,每個元素是一個指向整型變量的指針
(C)是一個指針,它指向一個具有3個元素的一維數組
(D)是一個指向整型變量的指針
5、 以下說明與( C )中的說明等價。
Int *p[4];
(A) int p[4] (B) int *p (C)int *(p[4]) (D)int(*p)[4]
6、若有說明:int a[4] [10];則對數組元素a[i][j](0≤i<4, 0≤j<10)錯誤引用的是( B )。
(A)*(&a[0][0]+10*i+j) (B)*(a+i)[j] (c)*(*(a+i)+j) (D)*(a[i]+j)
7、下面為不正確的字符串賦值或賦初值方式是( C )。
(A) char*str;str="string"; (B) char str[7]={s,t,r,i,n,g};
(C) char strl[10];strl="string"; (D) char strl[]="string",str2[ ]="12345678";
strcpy (str2,strl);
8、若有以下說明,則不是對strcpy庫函數正確調用的是( BCD )(多選)。
char *strl="copy", str2[10],* str3="hijklmn",*str4,*str5="abcd";
(A) strcpy(str2,strl); (B) strcpy(str3,strl);
(C) strcpy(str4,strl); (D) strcpy(str5,strl);
9、若有以下的說明,則對字符串中字符正確引用的是( ABC )。(多項選擇)
其中0≤i<6。
char *strp="string";
(A) *strp (B)*(strp+i) (C) strp[i] (D) strp
10、若有語句int *point,a=4;和point=&a;下面均代表地址的一組選項是( D )。
(A) a,point,*&a (B)&*a,&a,*point
(C) *&point,*point,&a (D) &a,&*point,point
二、讀程序分析程序的運行結果
11、 以下程序的輸出結果是( D )。
int main( )
{
int a[]={1,2,3,4,5,6},*p;
p=a;*(p+3)+=2;
printf("%d,%d ",*p,*(p+3));
}
(A)0,5 (B)l,5 (C)0,6 (D)1,6
12、 以下程序的輸出結果是( D )。
int main( )
{
int a[12]= { 1,2,3,4,5,6,7,8,9,10, 11,12},*p[4], i;
for(i=0;i<4;i++)p[i]=&a[i*3];
printf("%d ",p[3][2]);
}
(A)輸出項不合法,輸出結果不定 (B)6 (C)8 (D) 12
13、 以下程序的輸出結果為( A )。
char *alpha[6]={ "ABCD","EFGH","IJKL","MNOP","QRST","UVWX"};
char **p;
int main( )
{
int i;
p=alpha;
for(i=0;i<4;i++)printf("%c",*(p[i] ));
printf(" ");
}
(A) AEIM (B) BFJN (C) ABCD (D) DHLP
三、讀程序選擇填空
14、 以下程序可找出數組中的最大值和此元素的下標,數組元素的值由鍵盤輸入。請從對應的一組選擇項中,選擇正確的選項填空。
int main()
{
int a[10],*p,*s,i;
printf("Enter a[0] a[1] … a[9l: ");
for(i=0;i<10;i++)
scanf("%d", C );
for(p=a,s=a; A <10;p++)
if(*p>*s)s= A ;
printf("max=%d,index=%d ", C , C );
}
(1)(A)*(a+i) (B)p+i (C)a+i (D)a[i]
(2) (A) p-a (B) s-a (C) a-p (D) a-s
(3)(A)p (B)a[p] (C)a[s] (D) a-p
(4)(A)a[p-a] (B)a[p] (C)*s (D)a[s]
(5) (A) p-a (B)p (C) s-a (D) a-s
15、 以下程序可輸出兩個整數中大的那個數,兩個整數由鍵盤輸入。請從對應的一組選擇項中,選擇正確的選項填空。
int main()
{
int a,b,*pl,*p2;
pl= D malloc(sizeof(int));p2= D malloc(sizeof(int));
printf(" Enter pl p2: ");
scanf("%d%d ", B );
if(*p2>*pl)*pl=*p2;
free(p2);
printf("max=%d ", A );
}
(l) (A) int (B) int* (C)(int) (D)(int*)
(2)(A)*p1,*p2 (B) pl,p2 (C)&p1,&p2 (D)&a,&b
(3)(A)*p1 (B)*p2 (C) p1 (D) p2
四、讀程序回答問題
16、下面程序的輸出是( 6 )。
int main( )
{
int a[]={2,4,6},*ptr=&a[0],x=8,y,z;
for(y=0;y<3;y++)
z=(*(ptr+y)<x)?*(ptr+y):x;
printf("%d ",z);
}
17、下面程序的輸出結果是( eybdooG )。
int main( )
{
static char b[ ]="Goodbye";