}
第三章指针与数组
1.若有说明:char *p1,*p2,*p3,*p4,ch;则不能正确赋值的程序语句为〖C〗。
A)p1=&ch; cin >> *p1; B)p2=new char; cin >> *p2;
C)cin.get(*p3); D)p4=&ch; cin.get(*p4);
2.对于基类型相同的指针变量,不能进行〖A〗运算
A)+ B)- C)= D)==
3.若有以下说明和语句,则〖C〗是对数组元素的错误引用。
int a[]={1,2,3,4,5,6,7,8,9,0},*p=a,i=2;
A)*(a+i) B)a[p-a] C)p+i D)*(&a[i])
4.若有以下说明和语句,则〖D〗是对数组元素地址的正确表示。
int a[]={1,2,3,4,5,6,7,8,9,0},*p=a,i=2;
A)&(a+i) B)a++ C)&p D)&p[i]
5.下面的程序中〖A〗有错误(每行前面的数字是行号)。
1 #include
2 void main(void)
3 { float a[3]={0.0};
4 int i;
5 for(i=0;i<3;i++) cin >> a[i];
6 for(i=1;i<3;i++) a[0]=a[0]+a[i];
7 cout << a[0] << endl;
8 }
A)没B)第3行C)第6行D)第7行
6.以下程序找出数组中最大值和此元素的下标,数组元素的值由键盘输入,请从对应的一组选择项中,选择正确的填入。
#include
void main(void)
{ int a[10],*p,*s,i;
for(i=0;i<10;i++) cin >>〖1D〗;
for(p=a,s=a;〖2A〗<10;p++)
if(*p>*s) s=〖3A〗;
cout << "max=" <<〖4C〗<< ','
<< "index=" <<〖5C〗<< endl;
}
〖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
7.以下程序的输出结果是〖D〗。
#include
void main(void)
{ int a[]={1,2,3,4,5,6},*p;
p=a; *(p+3)+=2;
cout << *p << ',' << *(p+3) << endl;
}
A)0,5 B)1,5 C)0,6 D)1,6
8.以下程序输出两个整数中大的那个数,两个整数由键盘输入,请从对应的一组选择项中,选择正确的填入。
#include
void main(void)
{ int a,b,*p1,*p2;
p1=new 〖1A〗; p2=new 〖1A〗;
cin >> 〖2B〗;
if(*p2>*p1) *p1=*p2;
cout << "max=" << 〖3A〗<< endl;
delete p1; delete p2;
}
〖1〗A)int B)float C)int * D)float *
〖2〗A)p1>>p2 B)*p1>>*p2 C)&p1>>&p2 D)&a>>&b
〖3〗A)*p1 B)*p2 C)p1 D)p2
9.在以下说明中,标识符ptr〖C〗。
int (*ptr)[3];
A)说明不合法
B)是一个指针数组名,每个元素是一个指向整数变量的指针
C)是一个指针,它指向一个具有三个整型元素的一维数组
D)是一个指向整型变量的指针
10.以下说明与〖C〗中的说明等价。
int *p[4];
A)int p[4] B)int *p C)int *(p[4]) D)int (*p)[4]
11.若有说明:int a[4][10];则〖B〗是对数组元素a[i][j]的错误引用(此处0<=i<4,0<=j<10)。
A)*(&a[0][0]+10*i+j) B)*(a+i)[j] C)*(*(a+i)+j) D)*(a[i]+j)
12.若有说明:int a[4][3],b[3][4],(*ptr)[3];且0<=i<3,则〖A〗是正确的赋值语句。
A)ptr=a B)ptr=b C)ptr=b[i] D)ptr=a[i]
13.设有以下说明语句:
int a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12},(*prt)[3]=a,*p=a[0];
能够正确表示数组元素a[1][2]的表达式是〖D〗。
A)*((*prt+1)[2]) B)*(*(p+5)) C)(*prt+1)+2 D)*(*(a+1)+2)
14.以下程序建立一个如下所示的二维数组,并按以下格式输出。请从对应的一组选择项中,选择正确的填入。
1 0 0 0 1
0 1 0 1 0
0 0 1 0 0
0 1 0 1 0
1 0 0 0 1
#include
#include
void main(void)
{ int a[5][5]={0},*p[5],i,j;
for(i=0;i<5;i++) p[i]=〖1A〗;
for(i=0;i<5;i++)
{ *(p[i]+〖2C〗)=1;
*(p[i]+5-〖3D〗)=1;
}
for(i=0;i<5;i++)
{ for(j=0;j<5;j++) cout << setw(3) << p[i][j];
〖4A〗;
}
}
〖1〗A)&a[i][0] B)&a[i][1] C)&p[i] D)&a[0][i]
〖2〗A)0 B)1 C)i D)(i+1)
〖3〗A)0 B)1 C)i D)(i+1)
〖4〗A)cout<<'\n' B)cout<<'\0' C)cout<<"\0" D)cout<<'\t'
15.以下程序的输出结果是〖D〗。
#include
void main(void)
{ 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];
cout << p[3][2] << endl;
}
A)输出项不合法,输出结果不定B)6 C)8 D)12
16.以下程序的输出结果是〖B〗。
#include
void main(void)
{ int a[20],*p[4],i,k=0;
for(i=0;i<20;i++) a[i]=i;
for(i=0;i<4;i++) p[i]=&a[i*(i+1)];
for(i=0;i<4;i++) k+=p[i][i];
cout << k << endl;
}
A)数组元素引用不合法,输出结果不定B)26 C)10 D)16
17.若有以下说明和语句,则〖D〗中表示的都是对a数组元素的正确引用,其中0<=i<4,0<=j<3。
int a[4][3]={0},(*ptr)[3],i,j;
ptr=a;
...
A)a[i][j], a[i]+j, *(*(a+i)+j)
B)*(ptr+i)[j], ptr[i]+j, *(*(ptr+i)+j)
C)*(ptr+i)[j], *(a+i)[j], *(ptr+i)
D)ptr[i][j], *(ptr[i]+j), *(a[i]+j)
18.若有以下说明和语句,则〖A〗是对a数组元素的错误引用。
int a[12]={0},*p[3],**pp,i;
for(i=0;i<3;i++) p[i]=&a[i*4];
pp=p;
A)a[12] B)p[2][3] C)a[10] D)pp[0][1]
19.若有以下说明和语句,则〖B〗中表示的都是a数组元素的地址,其中0<=i<4,0<=j<3。
int a[4][3]={0},*p[4],**pa,i,j;
for(i=0;i<4;i++) p[i]=a[i];
pa=p;
...
A)&a[i][j], p[i]+j, pa[i][j] B)*(pa+i)+j, p[i], *(p+i)+j
C)&a[j], &p[i], *(*(pa+i)+j) D)**pa, a, p
20.请填空。以下程序把一由小到大的有序数列放在a[1]到a[n]中,a[0]用做工作单元,程序把读入的x值插入到a数组中,插入后,数组中的数仍然有序。
#include
#include
void main(void)
{ int a[10]={0,12,17,20,25,28},x,i,n=5;
cout << "Enter a number:";
cin >> x;
a[0]=x; i=n;
while(a[i]>x) { a[〖1〗]=a[i];〖2〗; }
a[〖3〗]=x; n++;
for(i=1;i<=〖4〗;i++) cout << setw(4) << a[i];
cout << endl;
}
〖1〗i+1 〖2〗--i或i--或i=i-1 〖3〗++i 〖4〗n
21.请填空。以下程序分别在a数组和b数组中放入an+1和bn+1个由小到大的有序数,程序把两个数组中的数按由小到大的顺序归并到c数组中。
#include
#include
void main(void)
{ int a[10]={1,2,5,8,9,10},an=5;
int b[10]={1,3,4,8,12,18},bn=5;
int i,j,k,c[20],max=9999;
a[an+1]=b[bn+1]=max;
i=j=k=0;
while((a[i]!=max)||(b[j]!=max))
if(a[i]
else { c[k]=〖3〗; k++; 〖4〗; }
for(i=0;icout << endl;
}
〖1〗a[i] 〖2〗i++或++i或i=i+1 〖3〗b[j] 〖4〗j++或++j或j=j+1
22.请写出以下程序运行后的输出结果。
#include
#include
#define M 6
#define NUM 21
void main(void)
{ int a[NUM],*p[M],i,j,add;
for(i=0;ifor(i=0;ifor(i=2;ifor(j=1;j
for(i=0;i{ for(j=0;j<=i;j++) cout << setw(4) << p[i][j];
cout << endl;
}
}
〖答案〗1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
23.指出下列程序中的错误,并说明错误的原因:
(1)#include
void main(void)
{ char s[80],*p;
p=s[0];
cin.getline(s,80);
cout<
}
(2)#include
void main(void)
{ float x,y; int *p;
x=3.45;
p=&x;
y=*p;
cout<<*p<<','<}
(3)#include
void main(void)
{ int x,*p;
x=10;
*p=x;
cout<<*p<}
(4)#include
void main(void)
{ int *p=&a,a;
a=10;
cout<<*p<}
第四章字符数组与字符串
1.不正确的字符串赋值或赋初值方式是〖B,C,D〗。
A)char *str; str="string";
B)char str[7]={'s','t','r','i','n','g'};
C)char str1[10]; str1="string";
D)char str1[]="string",str2[]="12345678";
strcpy(str2,str1);
注:在VC++中,不允许直接或间接(如通过指针)修改常量的值。2.若有以下说明,则〖C〗不是对strcpy库函数的正确调用。
char *str1="copy",str2[10],*str3="hijklmn",*str4,*str5="abcd";
A)strcpy(str2,str1); B)strcpy(str3,str1); C)strcpy(str4,str1); D)strcpy(str5,str1);
3.若有以下说明和语句,则输出结果是〖B〗。
char *sp="\t\v\\\0will\n";
cout << strlen(sp);
A)14 B)3 C)9 D)字符串中有非法字符,输出值不定
4.若有以下说明和语句,则输出结果是〖C〗。
char *sp="\x69\082\n";
cout << strlen(sp);
A)3 B)5 C)1 D)字符串中有非法字符,输出值不定
5.若有以下说明和语句,则输出结果是〖C〗。
char *sp="\"D:\\ANI.WSP\"";
cout << sp;
A)字符串中有非法字符,输出值不定B)\"D:\\ANI.WSP\"
C)"D:\ANI.WSP" D)"D:\\ANI.WSP"
6.设有说明:
char *argv[]={"hello","nanjing","jiangsu"},**pargv=argv;
请给出下列语句的输出结果。
语句结果
cout<<*(pargv+1)<cout<cout<<*(*pargv+1)<cout<<*(*(pargv+2)+4)<7.以下程序的输出结果为〖A〗。
#include
char *alpha[6]={"ABCD","EFGH","IJKL","MNOP","QRST","UVWX"};
char **p;
void main(void)
{ int i;
p=alpha;
for(i=0;i<4;i++) cout << *(p[i]);
cout << endl;
}
A)AEIM B)BFJN C)ABCD D)DHLP
8.以下程序的输出结果为〖B〗。
#include
char *alpha[6]={"ABCD","EFGH","IJKL","MNOP","QRST","UVWX"};
char **p;
void main(void)
{ int i;
p=alpha;
for(i=0;i<4;i++) cout << (*p)[i];
cout << endl;
}
A)EIMQ B)ABCD C)EFGH D)AEIM
9.以下程序从键盘读入一行字符串放在字符数组中,然后输出。请从对应的一组选择项中,选择正确的填入。
#include
void main(void)
{ char s[81],*sp;
int i;
for(i=0;i<80;i++)
{ cin.get(s[i]);
if(s[i]=='\n') break;
}
s[i]=〖1C〗; sp=〖2A〗;
while(*sp) cout << *sp〖3C〗;
}
〖1〗A)'\n' B)s[i--] C)'\0' D)s[--i]
〖2〗A)s B)s[0] C)'\0' D)'\n'
〖3〗A)+1 B)[i--] C)++ D)[--i]
10. 下面的程序完成以下三个操作:
(1)输入10个字符串(每串不多于9个字符),依次放在a数组中,指针数组str中的每个元素依次指向每个字符串的开始;
(2)输出每个字符串;
(3)从这些字符串中选出最小的那个串输出。
请从对应的一组选择项中,选择正确的填入。
#include
#include
void main(void)
{ char a[100],*str[10],*sp;
int i,k;
sp=〖1C〗;
for(i=0;i<10;i++)
{ cin>>sp; str[i]=sp;
k=strlen(sp); sp+=〖2C〗;
}
for(i=0;i<10;i++) cout<k=0;
for(i=1;i<10;i++)
if(strcmp(str[i],str[k]) 〖3B〗0)k=i;
cout<}
〖1〗A)'\0' B)str C)a D)&a[1]
〖2〗A)1 B)k C)k+1 D)k+i
〖3〗A)> B)< C)== D)!=
11.若有以下的说明语句,则〖A,B,C〗是对字符串中字符的正确引用(多项选择)。其中0<=i<6。
char *strp="string";
A)*strp B)*(strp+i) C)strp[i] D)strp
12.若有以下的说明语句,则它与〖C〗中的说明是等价的。
char s[3][5]={"aaaa","bbbb","cccc"};
A)char **s1={"aaaa","bbbb","cccc"};
B)char *s2[3]={"aaaa","bbbb","cccc"};
C)char s3[][5]={"aaaa","bbbb","cccc"};
D)char s4[][4]={"aaaa","bbbb","cccc"};
13.〖A〗程序能正确地从键盘输入一个字符串(多项选择)。
A)#include
void main(void)
{ char str[80]; cin.getline(str,80); cout<B)#include
void main(void)
{ char *str; cin.getline(str,80); cout<C)#include