C语言第七章习题带答案

练习7-1答案选择题

1.已知:int *p, a;,则语句“p=&a;”中的运算符“&”的含义是( D )。 A.位与运算 B.逻辑与运算 C.取指针内容 D.取变量地址 2.已知:int a, x;,则正确的赋值语句是( C )。

A.a=(a[1]+a[2])/2; B.a*=*a+1; C.a=(x=1, x++, x+2); D.a=\3.已知:int a, *p=&a;,则下列函数调用中错误的是( D )。

A.scanf(\.scanf(\C.printf(\D.scanf(\4.已知:char *p, *q;,选择正确的语句( C )。 A.p*=3; B.p/=q; C.p+=3; D.p+=q; 5.已知:int x;,则下面的说明指针变量pb的语句( C )是正确的。 A.int pb=&x; B.int *pb=x; C.int *pb=&x; D.*pb=*x;

练习7-2答案

一、选择题

1.设有说明int (*ptr)[M];,其中的标识符ptr是( C )。 A.M个指向整型变量的指针

B.指向M个整型变量的函数指针

C.一个指向具有M列的二维数组的一行的指针 D.具有M个指针元素的一维数组的指针 2.已知:double *p[6];,它的含义是( C )。 A.p是指向double型变量的指针 B.p是double型数组 C.p是指针数组 D.p是数组指针

3.已知:char s[10], *p=s,则在下列语句中,错误的语句是( B )。 A.p=s+5; B.s=p+s; C.s[2]=p[4]; D.*p=s[0]; 4.已知:char s[100]; int i;,则在下列引用数组元素的语句中,错误的表示形式是( D )。 A.s[i+10] B.*(s+i) C.*(i+s) D.*((s++)+i) 5.已知:char b[5], *p=b;,则正确的赋值语句是( C )。 A.b=\ B.*b=\ C.p=\ D.*p=\6.下列对字符串的定义中,错误的是( A )。 A.char str[7]=\ B.char str[]=\C.char *str=\ D.char str[]={'F', 'O', 'R', 'T', 'R','A','N',0}; 7.已知:char s[20]=\,则不能引用字母o的表达式是( A )。 A.ps+2 B.s[2] C.ps[2] D.ps+=2,*ps 8.已知:char **s;,正确的语句是( B )。

A.s=\B.*s=\C.**s=\.*s='A';

9.已知:char c[8]=\,则下面的输出语句中,错误的是( B )。 A.printf(\ B.printf(\C.for (i=0; i<7; i++) D.for(i=0; i<7; i++) printf(\ printf(\10.已知:char *aa[2]={\,则以下说法正确的是( D )。

A.aa数组元素的值分别是\序列和\序列

B.aa是指针变量,它指向含有两个数组元素的字符型一维数组

C.aa数组的两个元素分别存放的是含有4个字符的一维字符数组的首地址 D.aa数组的两个元素中各自存放了字符'a'和'A'的地址

11.已知:int a[3][4], *p=&a[0][0]; p+=6;,那么*p和( D )的值相同。

A.*(a+6) B.*(&a[0]+6) C.*a[1]+2 D.a[1][2] 12.已知:int a[]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}, *p=a;,则值为3的表达式是( A )。

A.p+=2, *(p++) B.p+=2, *++p C.p+=3, *p++ D.*(&a[0][0]+6) 13.已知:int **p;,则变量p是( B )。

A.指向int的指针 B.指向指针的指针 C.int型变量 D.以上三种说法均是错误的

14.已知:int a[]={1, 2, 3, 4}, y, *p=&a[1];,则执行语句y=(*--p)++;之后,变量y的

值为( A )。

A.1 B.2 C.3 D.4 15.已知:int b[]={1, 2, 3, 4}, y, *p=b;,则执行语句y=*p++;之后,变量y的值为( A )。

A.1 B.2 C.3 D.4 16.已知:int x[]={1, 3, 5, 7, 9, 11}, *ptr=x;,则能够正确引用数组元素的表达式是( B )。

A.x B.*(ptr--) C.x[6] D.*(--ptr)

17.已知:int x[]={1, 3, 5, 7, 9, 11}, *ptr=x;,则不能够正确引用数组元素的表达式是

( B )。

A.*(ptr--) B.*(--ptr) C.*(ptr++) D.*(++ptr) 18.若有以下语句且0<=k<6,则正确表示数组元素地址的表达式是( C )。

static int x[]={1, 3, 5, 7, 9, 11}, *ptr=x, k; A.x++ B.&ptr C.&ptr[k] D.&(x+1) 19.已知:int i, x[3][4];,则不能将x[1][1]的值赋给变量i的语句是( C )。

A.i=*(*(x+1)+1); B.i=x[1][1]; C.i=*(*(x+1)); D.i=*(x[1]+1); 20.已知:int a[2][3]={2, 4, 6, 8, 10, 12};,正确表示数组元素的地址是( A )。

A.*(a+1) B.*(a[1]+2) C.a[1]+3 D.a[0][0]

21.已知:int*p;,使用如下语句动态申请一个int型的存储单元,应当使用( D )。

p=( )malloc(sizeof(int)); A.int B.int * C.(* int) D.(int *) 二、填空题

22.阅读程序,下面程序的输出结果是( 15 )。

#include main()

{ static int a[2][3]={{1, 2, 3}, {4, 5, 6}}; int m, *ptr; ptr=&a[0][0];

m=(*ptr)*(*(ptr+2))*(*(ptr+4)); printf(\}

23.下面程序的功能是:从键盘上输入一行字符,存入一个字符数组中,然后输出

该字符串.则①是( '\\0' 或 0 )、②是( ++ )。 main()

{ char str[81], *sptr; int i;

for (i=0; i<80; i++) { str[i]=getchar();

if (str[i]=='\\n') break; }

str[i]= ① ; sptr=str;

while (*sptr) putchar(*sptr ② ); }

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4