C语言补充练习题(6)

2018-12-17 15:24

第五章 指针

一.

单项选择题:

1.变量的指针,其含义为指该变量的 。

A. 值 B. 地址 C. 名 D. 一个标志

2.设ptr1和ptr2均为指向同一个int型一维数组的指针变量,k为int型变量,则下

面不能正确执行的赋值语句是 。 A. k = *ptr1 + *ptr2; B. ptr2 = k;

C. ptr1 = ptr2; D. k = *ptr1 * (*ptr2);

3.设char *s=”\\ta\\017bc”,则指针变量s指向的字符串所占的字节数是 。 A. 9 B. 5 C. 6 D. 7 4.以下程序有错,错误原因是 。 main()

{ int *p,i; char *q,ch;

p=&i; q=&ch; *p=40; *p=*q; …… }

A. p和q的类型不一致,不能执行*p=*q;语句

B. *p中存放的是地址值,因此不能执行*p=40;语句 C. q无具体指向,所以*q无实际意义

D. q虽然指向了具体的存储单元,但该单元无确定值,故不能执行*p=*q; 5.有四组对指针变量操作的语句,以下判断正确的是 。 (1) int *p,*q; q=p; int a,*p,*q; p=q=&a;

(2) int a,*p,*q; q=&a; p=*q; int a=20,*p; *p=a;

(3) int a=b=0,*p; p=&a; b=*p; int a=20,*p,*q=&a; *p=*q; (4) int a=20,*p,*q=&a; p=q; a=*p;

A. 正确:(1) 不正确:(2) (3) (4) B. 正确:(1) (4) 不正确:(2) (3) B. 正确:(3) 不正确:(1) (2) (4) D. 正确:(4) 不正确:(1) (2) (3)

6.设程序段 char s[]=”china”; char *p; p=s; 则下列叙述正确的是 。 A. s和p完全相等

B. 数组s中的内容和指针变量p中的内容完全相等 C. s数组长度和p所指向的字符串长度完全相等 D. s[0]和*p相等

7.设有以下语句,则 不是对a数组元素的正确引用,其中0≤i<10。 int a[10] = {0,1,2,3,4,5,6,7,8,9}; int *p = a; 供选择的答案是:

A. a[p-5] B. *(&a[i]) C. p[i] D. *(a+i) 8.若有定义:char s[20]=”programming”, *ps=s;

26

则不能代表字符‘o’的表达式是 。

A. ps+2 B. s[2] C. ps[2] D. ps+=2, *ps 9.若有以下定义和语句:

int **pp, *p, a=10, b=20;

pp=&p; p=&a; p=&b; printf(“%d,%d\\n”, *p, **pp); 则输出结果是: 。

A. 10,20 B. 10,10 C. 20,10 D. 20,20

10.指针a所指的字符串长度为 ,这个长度是可以用strlen(a)测出来的。 char *a = \ 供选择的答案是:

A. 26 B. 27 C. 28 D. 23

11.已设p1和p2为指针变量,且已指向同一个数组中的元素,a是一个整型变量,问下面哪一个语句不能正确执行? A. a = *p1 B. a = *p1 + *p2 C. a = p1 - p2 D. p1 = a - p2

12.有一个二维数组a[3][4], 2行3列元素的正确表示方法为 。 A. &a[2][3] B. a[2] + 3 C. *(a + 2) + 3 D. *(a[2] + 3)

13.指向一个包含4个整型元素的一维数组的指针变量的定义形式为 。 A. int (*p)[4] B. int *p[4] C. int (p[4]) D. int (p)[ ] 14.设有以下程序片段:

char a[4][12] = {\ int i ;

for ( i = 0 ; i < 4 ; i++ ) p[ i ] = a[ i ] ;

下面 不是对一个字符串的正确引用(其中0≤i<1)。 A. a[i] B. p[i] C. *p D. p

二、填空题:

1.定义 int a[]={0,1,2,3},*p=&a[1]; 则 ++(*p) 的值是 。 2.定义 int a[]={0,1,2,3},*p=&a[2]; 则 *--p 的值是 。 3.定义 int a[]={2,4,6,8,10,12},*p=a;

则 *(p+1) 的值是 , *(a+5) 的值是 。 4.定义 int a[2][3]={2,4,6,8,10,12};

则 *(&a[0][0]+2*2+1) 的值是 , *(a[1]+2) 的值是 。 5.定义 int s[2][3]={0},(*p)[3];p=s; 则 **(p+1) 表示数组元素 。 6.定义 int a[2][3]={2,4,6,8,10,12};

则 a[1][0] 的值是 , *(*(a+1)+0) 的值是 。 7.定义 int *p[3],a[6],i;

for (i=0;i<3;i++) p[i]=&a[2*i];

27

则 *p[0] 引用的是a数组元素 。 *(p[1]+1) 引用的是a数组元素 。 8.设有以下语句:

static int a[4] = {2,4,6,8};

static int *p1[4] = {&a[0],&a[1],&a[2],&a[3]}; int **p; p = p1;

则 **(p+2) 的值是 ,*(p+3) 的值是元素 的地址。 9.下面程序段的运行结果是 。 char s[20]=”abcd”; char *sp=s; sp++; puts(strcat(sp,”ABCD”));

10.下面程序段的运行结果是 。 char s[80],*sp=”HELLO!”;

sp=strcpy(s,sp); s[0]=?h?; puts(s);

11.以下语句有错,错误原因是 。 #include main() { int *p; *p=100; …… }

12.下面程序段的运行结果是 。 char a[]=”12345”,*p; int s=0;

for (p=a;*p!=?\\0?;p++) s=10*s+*p-?0?; printf(“%d\\n”,s);

13.下面程序段的运行结果是 。 char str[]=”abc\\0def\\0ghi”,*p=str; printf(“%s”,p+5);

14.下面程序段的运行结果是 。 char *p=”PDP1-0”; int i,d; for(i=0;i<7;i++) { d=*(p+i);

if(d!=0) printf(“%c*”,*(p+i)); }

15.下面程序段的运行结果是 。 char a[]=”123456789”,*p; int i=0; p=a;

28

while(*p)

{ if(i%2==0) *p=?*?; p++; i++; }

printf(“%s”, a );

三 、判断题:

1.指针变量用于存放指针所指对象的地址。( ) 2.指针就是变量的地址。( )

3.通过指针可以间接引用指针所指的变量。( ) 4.“指针”与“指针变量”是同一个概念。( ) 5.一个指针变量只能指向同一类型的变量。( ) 6.可以给指针变量赋一个整型值。( ) 7.所谓数组的指针就是指数组元素的地址。( )

8.若定义 int a[5],*p=a; 则 *&a[5] 是对a数组元素的正确引用。( )

9.若定义 int a[2][3]; 则 *(*(a+i)+j) 是对a数组第i行第j列元素的正确引用。( )

四 程序阅读题:

1.执行以下程序段后,sum的值为: 。 static int a[3][3] = {7,2,1,3,4,8,9,2,6}; int sum, *p;

p = a[0]; sum = (*p)*(*(p+4))*(*(p+8));

2.下面程序的运行结果是 。 #include \ int a[ ] = {1,5,7,9,11,13}; main()

{ int *p; p = a + 3;

printf(\ printf(\ }

3.下面程序的运行结果是 。 #include \ main()

{ char *ptr1, *ptr2; ptr1 = ptr2 = \

while ( *ptr2 != '\\0' ) putchar(*ptr2++); while ( --ptr2 >= ptr1 ) putchar(*ptr2);

29

putchar('\\n'); }

4.有以下main()函数,经过编译连接后得到的可执行文件为file1.exe,若在dos系统下输入命令行:file1 beijing shanghai<回车>,则得到的输出是 。 main(int argc,char *argv[])

{ while(argc>1) { ++argv;

printf(“%s\\n”,*argv); --argc; } }

五. 程序填空题:

1.以下程序对数组a中的数据进行降序排序。请填空。 #define N 10 main()

{ int a[N],i,j,k; k=N;

printf(“Enter - data that will be sorted:\\n”,k); for(i=0;i

if(*(a+i)<*(a+i+1))

{ j=*(a+i); *(a+i)=*( ② ); *( ③ )=j; }

for(i=0;i

2.程序通过指针数组p和一维数组a构成如下所示的二维数组的左下半三角结构,然后输出。请填空。

1 6 7

11 12 13

16 17 18 19

21 22 23 24 25 #define M 5

#define NUM (M+1)*(M)/2

30


C语言补充练习题(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:《祭十二郎文》优秀教案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: