文档库 最新最全的文档下载
当前位置:文档库 › C语言指针练习题

C语言指针练习题

指针练习题

1 填空题

【1】下面函数要求用来求出两个整数之和,并通过形参传回两数相加之和值,请填空。

int add( int x, int y, )

{ =x+y;}

【2】若有定义: char ch;

(1) 使指针p 可以指向变量ch的定义语句是。

(2) 使指针p指向变量ch的赋值语句是。

(3) 通过指针p给变量ch读入字符的scanf函数调用语句是。

(4) 通过指针p 给变量ch赋字符A的语句是。

(5) 通过指针p输出ch中字符的语句是。

(6) 在16位微机上,指针变量p在内存中所占字节数是,变量ch在内在所占字

节数是。

2 选择题

【3】若有说明:int i,j=7,*p=&i;则与i=j;等价的语句是()。

A.i=*p;

B.*p=*&j;

C.i=&j;

D.i=**p;

【4】若有定义:int x,*pb;则正确的赋值表达式是()。

A.pb=&x

B.pb=x

C. *pb=&x

D.*pb=*x

【5】对于类型相同的指针变量,不能进行的运算是()。

A.< B. = C. + D. –

【6】以下程序的输出结果是()。

A.23 B. 24 C. 25 D. 26

Void fun ( int *x)

{ printf(%d\n”,++*x); }

main( )

{ int a=25;

fun (&a);

}

【7】以下程序的输出结果是()。

A.6 B. 7 C. 8 D. 9

main()

{

int k=2,m=4,n=6;

int *pk=&k,*pm=&m,*p;

*(p=&n)=*pk*(*pm);

printf("%d\n",n);

}

【8】以下程序的输出结果是()。

A.100 B. 50 C. 101 D.200

main()

{

int *v,b;

v=&b;

b=100;

*v+=b;

printf("%d\n",b);

}

【9】以下程序的输出结果是()。

A.2,3 B. 6,2 C. 3,2 D. 2,6 int ast(int x,int y,int *cp,int *dp)

{

*cp=x*y;

*dp=x%y;

}

main()

{

int a,b,c,d;

a=2;b=3;

ast(a,b,&c,&d);

printf("%d,%d\n",c,d);

}

【10】以下程序的输出结果是()。

A.1,3 B. 2,3 C. 1,6 D.2,6

main()

{

int a[]={1,2,3,4,5,6},*p;

p=a;

*(p+3)+=2;

printf("%d,%d\n",*p,*(p+3));

}

3 改错题

【11】main( )

{ int a=1,b=2;

printf(“a=%d b=%d\n”,a,b);

swap(a,b);

printf(“a=%d b=%d\n”,*a,*b);

}

swap ( int *p1, int *p2)

{

int *p;

*p=*p1; *p1=*p2;*p2=*p;

}

【12】void add (int a,int b,int c)

{ c=a+b;

return c;

}

main( )

{ int *ap,*bp,a,b,c;

ap=&a,bp=&b;

scanf(“%d %d”,&ap,&bp);

add(ap,bp,c);

printf("%d\n",c);

}

4 读程序写结果

【13】main()

{

static int a[ ][3]={{1,2,3},{4,5},{6}};

int i,*p=a[0];

int (*q)[3]=a;

for(i=0;i<3;i++)

printf("%2d",*++p);

printf("\n");

for(i=0;i<3;i++)

printf("%2d",*(*(q+i)+1));

printf("\n");

}

【14】main()

{

int a=10,b=20;

void test( );

printf("a=%d,b=%d\n",a,b);

test(a,&b);

printf("a=%d,b=%d\n",a,b);

}

void test(int x,int *y)

{

int t;

t=x;x=*y;*y=t;

}

【15】#define PRINTA printf("%d,%d\n",a,b); #define PRINTB printf("%d,%d\n",*pa,*pb); void swap(int *p,int *q)

{

int t;

t=*p;*p=*q;*q=t;

}

main( )

{

int a=1,b=2,*pa=&a,*pb=&b;

PRINTA

PRINTB

swap(pa,pb);

PRINTA

PRINTB

}

【16】main()

{

int a[]={1,2,3,4,5,6,7,8,9};

int *p=a,i,t;

for(i=0;i<9/2;i++)

{

t=*(p+i);

*(p+i)=*(p+8-i);

*(p+8-i)=t*10;

}

for(i=0;i<9;++i)

printf("%d,",a[i]);

}

【17】#include "stdio.h"

sub1(char *a,char b)

{char c;c=*a;*a=b;b=c;}

sub2(char a,char b)

{char c;c=a;a=b;b=c;}

sub3(char *a,char *b)

{char c;c=*a;*a=*b;*b=c;}

main()

{

char a,b;

a='A';b='B';sub3(&a,&b);putchar(a);putchar(b);

a='A';b='B';sub2(a,b);putchar(a);putchar(b);

a='A';b='B';sub1(&a,b);putchar(a);putchar(b); }

【18】void exc(int *i,int *j)

{

int k;

k=*i;*i=*j;*j=k;

}

void opr(int x,int y,int *z)

{

exc(&x,&y);*z=x%y;

}

main()

{

int a=89,b=10,*c;

c=&a;

opr(a,b,c);

printf("%d,%d,%d",a,b,*c);

}

【19】main()

{

int **k,*a,b=100;

a=&b;k=&a;

printf("%d\n",**k);

}

【20】fun1(int x,int y,int *cp,int *dp) {

*cp=x+y;*dp=x-y;

}

fun2(int *a,int b)

{

int c;

c=*a;*a=b;b=c;

}

main()

{

int a,b,c,d;

a=30;b=50;

fun1(a,b,&c,&d);

fun2(&c,d);

printf("%d,%d\n",c,d);

}

【21】void sub(int x,int y,int *z) {*z=y-x;}

main()

{

int a,b,c;

sub(20,15,&a);

sub(a,9,&b);

sub(a,b,&c);

printf("%d,%d,%d\n",a,b,c);

}

【22】fun(int *a,int *b)

{

int w;

*a=*a+*a;

w=*a;

*a=*b;

*b=w;

}

main()

{

int x=9,y=5,*px=&x,*py=&y;

fun(px,py);

printf("%d,%d\n",x,y);

}

【23】sub(float x,float *y,float *z)

{

*y=*y-1.0;

*z=*z+x;

}

main()

{

float a=2.5,b=0,*pa,*pb;

pa=&a;pb=&b;

sub(b-a,pa,pb);

printf("%f\n",a);

}

【24】main()

{

static char a[]="Language",b[]="Programe";

char *p1,*p2;

int k;

p1=a;

p2=b;

for(k=0;k<=7;k++)

if(*(p1+k)==*(p2+k))

printf("%c",*(p1+k));

}

【25】main()

{

int i,k;

for(i=0;i<4;i++)

{

k=sub(&i);

printf("%3d",k);

}

printf("\n");

}

sub(int *s)

{

static int t=0;

t=*s+t;

}

【26】#include "stdio.h"

main()

{

char a[]="123456789",*p;

int i=0;

p=a;

while(*p)

{

if(i%2==0) *p='*';

p++;i++;

}

puts(a);

}

【27】main()

{

int x[]={0,1,2,3,4,5,6,7,8,9};

int s,i,*p;

s=0;

p=&x[0];

for(i=1;i<10;i+=2)

s+=*(p+i);

printf("sum=%d",s);

}

5 编程题

【28】编写一个使用指针的C函数,交换数组a和数组b中对应元素。

【29】编写函数,通过指针连接两个字符串。

【30】产生动态数组。编写程序,输入数组大小后,通过动态分配内存函数malloc产生数组。

指针练习题答案

1 填空题

【1】 int *z *z

【2】(1)char *p; (2)p=&ch ; (3)scanf(”%c”,p);

(4)*p=’A’; (5)printf(“%c”,*p); (6)2 1

2 选择题

【3】B 【4】A 【5】C 【6】D 【7】C 【8】D 【9】B 【10】C 3 改错题

【11】main( )

{ int a=1,b=2;

printf(“a=%d b=%d\n”,a,b);

swap(&a,&b);

printf(“a=%d b=%d\n”,a,b);

}

swap ( int *p1, int *p2)

{ int p;

p=*p1; *p1=*p2;*p2=p;

}

【12】void add (int a,int b,int *c) { *c=a+b;

/*return c;删除*/

}

main( )

{ int *ap,*bp,a,b,c;

ap=&a,bp=&b;

scanf(“%d %d”,ap,bp);

add(a,b,&c);

printf(“%d\n”,c);

}

4 读程序写结果

【13】︼2︼3︼4<换行>︼2︼5︼0

【14】a=10,b=20<换行>a=10,b=10

【15】1,2<换行>1,2<换行>2,1<换行>2,1 【16】9,8,7,6,5,40,30,20,10,【17】BAABBB

【18】10,10,10

【19】100

【20】-20,-20

【21】-5,14,19

【22】5,18

【23】1.500000

【24】gae

【25】︼︼0︼︼1︼︼3︼︼6

【26】*2*4*6*8*

【27】sum=25

5 编程题

【28】 #include

swap(int *pa,int *pb)

{ int temp;

temp=*pa;*pa=*pb;*pb=temp;

}

main()

{ int a[5]={1,2,3,4,5};

int b[5]={10,20,30,40,50};

int i;

for(i=0;i<5;i++)

swap(&a[i],&b[i]);

for(i=0;i<5;i++)

printf("a[%d]=%2d,",i,a[i]);

printf("\n");

for(i=0;i<5;i++)

printf("b[%d]=%2d,",i,b[i]);

printf("\n");

}

【29】 #include

char *strcat(char *str1,char *str2)

{ char *p=str1;

while(*p!='\0') p++;

while(*p++=*str2++);

return(str1);

}

main()

{ char a[50],b[30];

printf("Enter string1:"); scanf("%s",a);

printf("Enter string2:"); scanf("%s",b);

printf("a+b=%s\n",strcat(a,b));

}

【30】 #include

#include

main()

{ int *p,n,i;

printf("Enter array size:");

scanf("%d",&n);

p=(int *)malloc(n*sizeof(int));

for(i=0;i

*(p+i)=i*10;

for(i=0;i

printf("array[%d]=%d\n",i,*(p+i));

}

相关文档