·106· 第7章 数组
习 题 (第八章)
1. 选择题
(1) 下列不正确的定义是( )。
A. int *p=&i, i; B. int *p, i; C. int i, *p=&i; D. int t, *p; (2) 下列语句定义p为指向float类型变量d的指针,其中正确的是( )。 A. float d,*p=d; B. float d,*p=&d; C. float *p=&d,d; D. float d,p=d; (3) 对语句 “int a[10],*p=a;”,下列表述中正确的是( )。
A. *p被赋初值为a数组的首地址 C. p被赋初值为数组元素a[1]的地址
B. *p被赋初值为数组元素a[0]的地址 D. p被赋初值为数组元素a[0]的地址
D.
(4) 假如指针p已经指向变量x,则&*p相当于( )。
A. x B. *p C. &x **p
(5) 假如指针p已经指向某个整型变量x,则(*p)++相当于( )。
A. p++ B. x++ C. *(p++) D. &x++
(6) 设指针x指向的整型变量值为25,则printf(\的输出是( )。
A. 23
B. 24
C. 25
D.
26
(7) 若有说明语句int a[ ]={1,2,3,4,5}, *p=a, i; 且0<=i<5, 则对数组元素错误的引用是( )。
A. *(a+i) B. a[p-a] C. p+1 D. *(&a[i])
(8) 若有说明语句 int a[5], *p=a; 对数组元素的正确引用是( )。 A. *&a[5] B. *p+2 (9) 若有以下定义,则 *(p+5) 的值为( )。
char s[ ]=”Hello”, *p=s;
C. *(a+2) D. *a++
A. '0' 确定的值
B. '\\0' C. '0'的地址 D. 不
(10) 若有以下的定义,则值为3的表达式是( )。
int a[10] ={1,2,3,4,5,6,7,8,9,10}, *p=a;
A. p+=2,*(p++) B. p+=2,*++p C. p+=3,*p++ D. p+=2,++*p; (11) 执行语句 char a[10] ={\后,*(p+4)的值是( )。
A. \不能确定
B. 'd'
C. '\\0'
D.
(12) 数组定义为“int a[4][5];”,引用“a[1]+3”表示( )。
·106 ·
第7章 数组
A. a数组第1行第3列元素的地址
B. a数组第1行第3列元素的值
·107·
C. a数组第4行的首地址 D. a数组第4列的首地址 (13) 数组定义为“int a[4][5];”,引用“*(*a+1)+2”表示( )。
A. a[1][0]+2 C. a[0][1]+2
B. a数组第1行第2列元素的地址 D. a数组第1行第2列元素的值
(14) 设有定义语句 int (*ptr)[10]; 其中的ptr是( )。
A. 10个指向整型变量的函数指针 B. 指向10个整型变量的函数指针
C. 一个指向具有10个元素的一维数组的指针 D. 具有10个指针元素的一维数组
(15) 若有如下定义和语句,则输出结果是( )。
int **pp, *p, a=10, b=20;
pp=&p; p=&a; p=&b; printf(\
A. 10, 20 2. 填空题
B. 10, 10 C. 20, 10 D. 20, 20
(1) 单目运算符“*”称为 运算符,“&”称为 运算符。 (2) 设int a[10], *p=a; 则对a[3] 的引用可以是p[ 3 ] 和 *( )。
(3) &后跟变量名,表示取该变量的 ,*后跟指针变量名,表示取该指针变量 ,&后跟指针变量名,表示取该指针变量的 。
(4) 设有int sz[4], p=sz; 有 、 、 和 四种不同的引用数组元素的方法。
(5) 设有char *a=\则printf(\的输出是 ,而printf(\的输出是 。
(6) 定义a为共有5个元素的一维整型数组、同时定义p为指向a数组首地址的指针变量的语句为 。
3. 程序阅读题
(1) 写出下列程序段的输出结果。
(2) 写出下列程序段的输出结果。
(3) 阅读下列程序,写出程序的输出结果。
#include
·107·
char *st[ ]={ \printf(\char s[ ]=\printf(\
·108· 第7章 数组
(4) 阅读程序,写出程序的主要功能。
char *a[6] ={\ int i;
for(i=0;i<4;i++) printf(\ printf(\}
(5) 阅读下列程序,写出程序运行的输出结果。
#include
int i, a[10], *p=a;
for(i=0;i<10;i++) scanf(\
for(--p; p>=a; ) printf(\}
(6) 设有下列程序,试写出运行的结果。
#include
char *p;
for(p=s;p
(7) 设有下列程序,当输入字符串“LEVEL”和“LEVAL”时,试写出运行的结果。
#include
char s[81], *pi, *pj; int n;
gets(s); n=strlen(s); pi=s; pj=s+n-1;
while(*pi==’ ’) pi++; while(*pj==’ ’) pj--;
·108 ·
#include
int i,b,c,a[ ]={1,10,-3,-21,7,13},*pb,*pc; b=c=1; pb=pc=a; for(i=0;i<6;i++) {
if(b<*(a+i)) { b=*(a+i); pb=&a[i]; } if(c>*(a+i)) { c=*(a+i); pc=&a[i]; } }
i=*a; *a= *pb; *pb=i; i= *(a+5); *(a+5) = *pc; *pc=i;
printf(\}
// 跳过空格
第7章 数组
while((pi } (8) 阅读下列程序,写出程序运行的输出结果。 #include char *alpha[4] ={\ char *p; int i; p=alpha[0]; for(i=0;i<4;p=alpha[++i]) printf(\ printf(\ } (9) 阅读下列程序,写出程序运行的输出结果。 #include int s[4][4],i,j; for(i=0;i<4;i++) for(j=0;j<4;j++) *(*(s+i)+j) =i-j; for(j=0;j<4;j++) { for(i=0;i<4;i++) printf(″M″,*(*(s+i)+j)); printf(\ } } (10) 阅读下列程序,写出程序运行的输出结果 #include int x=3,y=5; void p(int *a,int b); p(&x,y); printf(\ p(&y, x) ; printf(\} void p(int *a, int b) { *a=10; b=20; } 4. 程序设计题(全部题目均要求用指针方法实现) (1) 输入3个整数,按从大到小的次序输出。 (2) 编一个程序,输入15个整数存入一维数组,再按逆序重新存放后输出。 ·109· ·109· ·110· 第7章 数组 (3) 输入一个字符串,按相反次序输出其中的所有字符。 (4) 输入一个一维实型数组,输出其中的最大值、最小值和平均值。 (5) 输入一个3×6的二维整型数组,输出其中最大值、最小值及其所在的行列下标。 (6) 输入3个字符串,输出其中最大的字符串。 (7) 输入2个字符串,将其连接后输出。 (8) 比较2个字符串是否相等。 (9) 输入10个整数,将其中最大数和最后一个数交换,最小数和第1个数交换。 (10) 写一程序,输入一行文字,找出其中大写字母、小写字母、空格、数字以及其他字符各有多少? ·110 ·