指针部分课堂练习一

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

指针部分课堂练习
一、选择题:2‟*20=40‟
1.设有定义“int a=3,b,*p=&a”,则下列语句中使b不为3的语句是__________
A) b=*&a B) b=*p C)b=a D)b=*a
2.若有说明:int i,j=7,*p=&i;则与i=j;等价的语句是________
A)i=*p; B)*p=*&j; C)i=&j; D)i=**p;
3.int j,*p=&j;要实现j的内容加10,错误的是__________
A)*p=*&j+10 B)j=*p+10 C)*p=*p+10 D)*p=&j+10
4.设指针x指向的整型变量值为25,则printf(”%d\n”,++*x);的输出是__________
A)23 B)24 C)25 D)26
5.设P1和P2是指向同一个int型一维数组的指针变量,k为int型变量,则不能正
确执行的语句是__________
A)k=*P1+*P2; B)P2=k; C)P1=P2; D)k=*P1 *(*P2);
6. 对基类型相同的指针变量不能进行的运算是____
A)+ B)- C)= D)==
7.与int *p[4];等价的是_____
A)int p[4]; B)i nt *p; C)int *(p[4]); D)int (*p)[4];
8.若有说明语句“int a[10],*p=a;”,对数组元素的正确引用是___________
A)a[p] B)p[a] C)*(p+2) D)p+2
9.若有以下定义,则不能表示a数组元素的表达式是__________
int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;
A)*p B)a[10] C)*a D)a[p-a]
10.若有以下定义,则值为3的表达式是_________
int a[]={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 s[ ]={"12345"}, *p=s;则下列表达式中错误的是。

A) *(p+1) B) *(s+2) C) p="ABC " D) s="ABC "
12.执行语句char a[10]={ "abcd"},*p=a;后,*(p+4)的值是_______
A) "abcd" B)‟d‟C)‟\0‟D)不能确定
13.有int a[4][10],*p,*q[4];则错误的赋值是_____ (0<=j<4)
A)p=a B)q[j]=a[j] C)p=a[j]D)q[j]=a[2][0]
14.设有定义语句 int x[]={2, 4, 6, 8, 10}; int *p=&x[4]; 则不能正确引用数组
x的合法元素的表达式是()。

A) *(p--) B) *(--p) C) *(p++) D) *(++p)
15.若有以下定义:char s[20]= "programming",*ps=s;则不能代表字符o的表达式是
A)ps+2 B)s[2] C)ps[2] D)ps+=2,*ps
16.char a[6],*p=a;正确的赋值为________
A)a[6]=”Hello”; B)a=”Hello”; C)*p=”Hello” ; D)p=”Hello”;
17.下面各语句行中,能正确进行赋字符串操作的语句是___________
A)char s[5]={ ”ABCDE”}; B)char s[5]={ ‟A‟,‟B‟,‟C‟,‟D‟,‟E‟};
C)char *s; s=”ABCDE”; D)char *s; scanf(”%s”,&s);
18.设有如下定义:
int arr[]={6,7,8,9,10};
int *ptr;
则下列程序段的输出结果为________
ptr=arr;
*(ptr+2)+=2;
printf (“%d,%d\n”,*ptr,*(ptr+2));
A) 8,10 B) 6,8 C) 7,9 D) 6,10
19.设已有定义: char *st="how are you";下列程序段中正确的是_______
A) char a[11], *p; strcpy(p=a+1,&st[4]);
B) char a[11]; strcpy(++a, st);
C) char a[11]; strcpy(a, st);
D) char a[], *p; strcpy(p=&a[1],st+2);
20.下列程序段的输出结果________
char s[20]=“abcd”,*sp=s;
sp++;puts(strcat(sp,”ABCD”));
A)abcdABCD B)ABCDabcd C)bcdABCD D)BCDabcd
二、填空题2‟*10=20‟
1.设有char *a=”ABCD”,则printf(“%s”,a)的输出是___________________;而
printf(“%c”,*a)的输出是___________。

2.只能给指针变量赋_________和__________ 。

3.若int a[10], *p, k=5; p=a+k; 则p的内容为 , *p的内容。

4.设char s1[10], *s2=”ab\0cdef”, 执行strcpy(s1,s2)后, s1的内容。

5.定义int a[ ]={1,2,3,4,5,6},*p=a;表达式(*++p)++的值是________。

6.以下语句的输出结果:_______
char *s1=“AbCdEf”,*s2=“Ab”;
s1++;printf(“%d”,strcmp(s1,s2));
7.有定义和语句:int a[3][4],(*p)[4];p=a;则下列符号的含义分别是:
(1)p+1 _____________________
(2)*(p+2) _______________
(3)*(p+1)+2 ________________
(4)*(*p+2) _________________
8.若有定义:int a[2][3]={2,4,6,8,10,12}; 则 *(&a[0][0]+2*2+1) 的值是
__________, *(a[1]+2)的值是______________。

9.阅读程序,写出程序的主要功能________________________________________.
main()
{int i,a[10],*p=&a[9];
for(i=0;i<10;i++) scanf(”%d”,&a[i]);
for(; p>=a;p--) printf(”%d\n”,*p);
}
10.若实参为一维数组名,则对应的形参可为:_____________________________。

三、读程题4‟*6=24‟
1.阅读下列程序,写出程序的输出结果___________。

#include <stdio.h>
main()
{
int a[]={1,2,3,4,5};
int x,y,*p;
p=&a[0];
x=*(p+2);y=*(p+4);
printf("*p=%d,x=%d,y=%d",*p,x,y);
}
2.下面程序完成的功能是 .
str1(char *s)
{int i;
i=strlen(s);
while(*(s+i-1)==‟…&& i-->0);
*(s+i)=‟\0‟; }
3.下列程序的输出结果:___________
main( )
{
int s[6][6],j,k;
for(j=0;j<6;j++)
for(k=0;k<6;k++)
*(*(s+j)+k)=j-k;
for(j=0;j<6;j++)
{
for(k=0;k<6;k++)
printf(“%4d”, *(*(s+j)+k));
printf(“\n”);}
}
4.下列程序的运行结果是_________
main( )
{
char *p1,*p2,str[50]=“xyz”;
p1=“abcd”; p2=“ABCD”;
strcpy(str+2,strcat(p1+2,p2+1));
printf(“%s”,str);
}
5.阅读下列程序,写出程序的输出结果_________。

char s[ ]=”ABCD”;
main()
{
char *p;
for(p=s;p<s+4;p++) printf(”%s\n”,p);
}
6.下列程序的输出结果:_____________
#include “stdio.h”
main( )
{char s1[10]=“abcdefgho”,s2[10];
sub(s1,s2,9); puts(s2);
}
sub(char *a1,char *a2,int n)
{int j;
for(j=0;j<n;j++)
a2[j]=(a1[j]-‟a‟-3+26)%26+‟a‟;
a2[n]=…\0‟;}
四、完善程序题2‟*8=16‟
1.求3行4列二维数组中的最大元素
#include <stdio.h>
int max_value(int [1] , int ____[2]______)
{ int i, j, m=pa[0][0];
for(i=0;i<row;i++)
for (j=0;j<4;j++)
if( [3] )
m=pa[i][j];
return(m);
}
main()
{ static int aa[3][4]={{1, 3, 5, 7},{2, 4, 6, 8},{20, 15, 32, 12}};
printf("max element is %d\n", [4] );
}
2.用多种方法访问一维数组各元素
#include <stdio.h>
main( )
{ static int a[5]={1, 3, 5, 7, 9}, i , [5] ;
for (i=0;i<5;i++) printf(“%d”,a[i]);
for (i=0;i<5;i++) printf(“%d”,*(a+i));
for (i=0;i<5;i++) printf(“%d”,p [6] );
for (i=0;i<5;i++) printf(“%d”,*(p+i));
for (;p<a+5;p++) printf(“%d”, [7] );
[8] ; while (p<a+5) printf(“%d”,*p++);}。

相关文档
最新文档