当前位置:文档之家› C语言指针练习题

C语言指针练习题

C语言指针练习题
C语言指针练习题

指针练习题

(一)选择题

1.若有以下定义,则对a数组元素的正确引用是_________.

int a[5],*p=a; a)*&a[5] b)a+2 c)*(p+5) d)*(a+2)

2.若有定义:int a[2][3],则对a数组的第i行j列元素地址的正确引用为______.

a)*(a[i]+j) b)(a+i) c)*(a+j) d)a[i]+j

3.若有以下定义,int a[10],*p=a; 则p+5表示_______.

a)元素a[5]的地址 b)元素a[5]的值 c)元素a[6]的地址 d)元素a[6]的值

4.下面程序段的运行结果是_________.

char *s="abcde"; s+=2;printf("%d",s);

a)cde b)字符'c' c)字符'c'的地址 d)无确定的输出结果

5.设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确

执行的赋值语句是________.

a)c=*p1+*p2; b)p2=c c)p1=p2 d)c=*p1*(*p2);

6.以下正确的程序段是_________.

a)char str[20]; b)char *p;

scanf("%s",&str); scanf("%s",p);

c)char str[20]; d)char str[20],*p=str;

scanf("%s",&str[2]); scanf("%s",p[2]);

7.若有说明语句

char a[]="It is mine"; char *p="It is mine"; 则以下不正确的叙述是________.

a)a+1表示的是字符t的地址

b)p指向另外的字符串时,字符串的长度不受限制

c)p变量中存放的地址值可以改变

d)a中只能存放10个字符

8.下面程序的运行结果是_______.

#include

#include

main()

{ char *s1="AbDeG"; char *s2="AbdEg";

s1+=2;s2+=2; printf("%d\n",strcmp(s1,s2)); }

a)正数 b)负数 c)零 d)不确定的值

9.下面程序的运行结果是_______.

#include

#include

fun(char *w,int n)

{char t,*s1,*s2; s1=w;s2=w+n-1;

while(s1

main()

{char *p; p="1234567"; fun(p,strlen(p)); puts(p); }

a)7654321 b)1714171 c)1711717 d)7177171

10.变量的指针,其含义是指该变量的_________.

a)值 b)地址 c)名 d)一个标志

11.若有语句int *point,a=4;和point=&a;下面均代表地址的一组选项是_____.

a)a,point,*&a b)&*a,&a,*point

c)*&point,*point,&a d)&a,&*point ,point

12.若有说明;int *p,m=5,n;以下正确的程序段的是________.

a)p=&n; b)p=&n;

scanf("%d",&p); scanf("%d",*p);

c)scanf("%d",&n); d)p=&n;

*p=n; *p=m;

13.已知有以下的说明,

int a[]={8,1,2,5,0,4,7,6,3,9};那么a[*(a+a[3])]的值为_ __.

14.对于指向同一数组的指针变量,不能进行哪种运算? ()

A. +

B. -

C. =

D. ==

15.若有以下说明和语句,且0<=i<10, 则下面哪个是对数组元素的错误引用?()int a[]={1,2,3,4,5,6,7,8,9,0}, *p, i; p=a;

A. *(a+i)

B. a[p-a]

C. p+i

D. *(&a[i])

16.若有以下说明和语句,且0<=i<10,则下面哪个是对数组元素地址的正确表示? ()int a[]={1,2,3,4,5,6,7,8,9,0}, *p,i; p=a;

A. &(a+1)

B. a++

C. &p

D. &p[i]

17.以下程序的输出结果是哪一项? ()

#include

main()

{ int a[12]={1,2,3,4,5,6,7,8,9,10,11,12}, *p[4],i;

for(i=0;i<4;i++) p[i]=&a[i*3]; printf("%d\n",*p[3]);}

A. 输出项不合法

B. . 7 D. 10

18.有以下说明和语句,, 则p2-p1的值为多少?(单选) ()

int a[10], *p1, *p2; p1=a; p2=&a[5];

A. 5

B. . 10 D. 没有指针与指针的减法

19.若有以下定义和语句:

int s[4][5],(*ps)[5]; ps=s; 则对s数组元素的正确引用形式是()

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

20.若有以下的定义,int t[3][2];能正确表示t数组元素地址的表达式是()

A) &t[3][2] B) t[3] C) t[1] D) *t[2]

21.以下程序的输出结果是a= _, b= _, c= _。

#include

int func(int a,int *p);

void main()

{ int a=1,b=2,c; c=func(a,&b); a=1,b=4,c=6;

b=func(c,&a); c=6,a=9,b=16 a=func(b,&c); b=16,c=19,a=36;

printf("a=%d,b=%d,c=%d",a,b,c); }

int func(int a,int *p)

{ a++; *p=a+2; return(*p+a);}

22.有以下程序

void fun(char *c,int d)

{*c=*c+1;d=d+1; printf("%c,%c,",*c,d); }

main()

{char a='A',b='a'; fun(&b,a); printf("%c,%c\n",a,b); }

程序运行后的输出结果是()。 A) B,a,B,a B) a,B,a,B C) A,b,A,b D) b,B,A,b 23.在说明语句:int *f();中,标识符f代表的是()

A) 一个用于指向整型数据的指针变量 B) 一个用于指向一维数组的行指针

C) 一个用于指向函数的指针变量 D) 一个返回值为指针型的函数名

24.以下程序段给数组所有元素输入数据,应在下划线处添入的是()

A)a+(i++) B)&a[i+1] C)a+i D)&a[++i]

main( )

{ int a[10], i=0;while(i<10) scanf(“%d”,_____);……}

25.以下程序的输出结果是()

A)17 B))19 D)20

main( )

{int a[ ]={2,4,6,8,10},y=1,x,*p; p=&a[1];

for (x=0;x<3;x++) y+=*(p+x); printf(“%d\n”,y); }

26、若有定义:int x,*pb; 则以下正确的赋值表达式是()

A、pb=&x

B、pb=x

C、*pb=&x

D、*pb=*x

27、以下程序的输出结果是()

A、因变量无定义输出不定值

B、0

C、-1

D、1

#include "Stdio.h"

#include "Conio.h"

int main(void)

{ printf("%d\n",NULL); getch(); return 0;}

28、以下程序的输出结果是()

A、5,2,3

B、-5,-12,-7

C、-5,-12,-17

D、5,-2,-7

#include "Stdio.h"

#include "Conio.h"

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

{ *z=y-x; }

int main()

{ int a,b,c; sub(10,5,&a);sub(7,a,&b);sub(a,b,&c);

printf("%d,%d,%d\n",a,b,c); getch(); return 0;}

29、以下程序的输出结果是()

A、4

B、6

C、8

D、10

#include "Stdio.h"

#include "Conio.h"

int main()

{ int k=2,m=4,n=6; int *pk=&k,*pm=&m,*p; *(p=&n)=*pk*(*pm);

printf("%d\n",n); getch(); return 0;}

30、已知指针p的指向如图所示,则执行语句*p++;后,*p的值是()

A、20

B、30

C、21

D、31

31、已知指针p的指向如5题中图所示,则表达式*++p的值是()

A、20

B、30

C、21

D、31

32、已知指针p的指向如5题中图所示,则表达式++*p的值是()

A、20

B、30

C、21

D、31

33、以下程序的输出结果是()

#include "Stdio.h"

#include "Conio.h"

void prtv(int *x)

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

int main()

{ int a=25; prtv(&a); getch(); return 0;}

A、23

B、24

C、25

D、26

34、以下程序的输出结果是()

#include "Stdio.h"

#include "Conio.h"

int main()

{ int **k,*a,b=100; a=&b; k=&a; printf("%d\n",**k);

getch(); return 0;}

A、运行出错

B、100

C、a的地址

D、b的地址

35、以下程序的输出结果是()

#include "Stdio.h"

#include "Conio.h"

void fun(float *a,float *b)

{ float w; *a=*a+*a; w=*a; *a=*b; *b=w;}

int main()

{ float x=2.0,y=3.0; float *px=&x,*py=&y;

fun(px,py);

printf("%2.0f,%2.0f\n",x,y); getch(); return 0;}

A、4,3

B、2,3

C、3,4

D、3,2

36、以下程序的输出结果是()

#include "Stdio.h"

#include "Conio.h"

void sub(float x,float *y,float *z)

{ *y=*y-1.0; *z=*z+x;}

int main()

{ float a=2.5,b=9.0,*pa,*pb; pa=&a; pb=&b;

sub(b-a,pa,pb);

printf("%f\n",a); getch(); return 0;}

A、9.000000

B、1.500000

C、8.000000

D、10.500000

37、设有以下定义:

int a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12};int (*prt)[3]=a, * p=a[0];

则下列能够正确表示数组元素a[1][2]的表达式是()

A、*((*prt+1)[2])

B、*(*(p+5))

C、(*prt+1)+2

D、*(*(a+1)+2)

(二)填空题

1.以下程序的功能是:通过指针操作,找出三个整数中的最小值并输出。请填空。

#include "stdlib.h"

main()

{int *a,*b,*c,num,x,y,z; a=&x;b=&y;c=&z;

printf("输入3个整数:"); scanf("%d%d%d",a,b,c);

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

num=*a;

if(*a>*b)______;

if(num>*c)______;

printf("输出最小整数:%d\n",num); }

2.下面程序段的运行结果是________.

char s[80],*sp="HELLO!";

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

3.下面程序段的运行结果是________.

char str[]="abc\0def\0ghi",*p=str; printf("%s",p+5);

4.下面程序的功能是将两个字符串s1和s2连接起来。请填空。

#include

main()

{char s1[80],s2[80]; gets(s1); gets(s2);

conj(s1,s2); puts(s1); }

conj(char *p1,char *p2)

{char *p=p1;

while(*p1)______;

while(*p2){*p1=______;p1++;p2++;}

*p1='\0';

__________;

}

5.若有定义:int a[]={2,4,6,8,10,12},*p=a;则*(p+1)的值是___. *(a+5)的值是______. 6.若有以下定义:int a[2][3]={2,4,6,8,10,12};则a[1][0]的值是_____.

*(*(a+1)+0))的值是________.

7.以下程序将数组a中的数据按逆序存放,请填空。

#define M 8

main()

{int a[M],i,j,t;

for(i=0;i

i=0;j=M-1;

while(i

{ t=*(a+i);________;*(_______)=t; i++;j--; }

for(i=0;i

8.若有定义:int a[3][5],i,j;(且0<=i<3,0<=j<5),则a数组中任一元素可用

五种形式引用。它们是:

(1)a[i][j] (2)*(a[i]+j) (3)*(*______);

(4)(*(a+i))[j] (5)*(____+5*i+j)

9.下面程序的运行结果是.

main()

{char *a[]={"Pascal","C language","dBase","Coble"};

char (**p)[]; int j; p=a+3;

for(j=3;j>=0;j--)printf("%s\n",*(p--));}

10、以下程序的输出结果是()

#include "Stdio.h"

#include "Conio.h"

int main(void)

{ int *var,ab;

ab=100; var=&ab; ab=*var+10;

printf("%d\n",*var); getch(); return 0;}

11、以下程序的输出结果是()

#include "Stdio.h"

#include "Conio.h"

void ast(int x,int y,int *cp,int *dp)

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

int main(void)

{ int a,b,c,d; a=4; b=3; ast(a,b,&c,&d); printf("%d,%d\n",c,d);

getch(); return 0;} }

12、若有定义 char ch;

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

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

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

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

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

13、若有图中所示五个连续的int类型的存储单元并赋值如图,且p和s的基类型皆为int,p

已指向存储单元a[1].

(1)通过指针p给s赋值,使其指向最后一个存储单元a[4]的语句是().

(2)用以移动指针s,使之指向中间的存储单元a[2]的表达式是().

(3)已知k=2,指针s已指向存储单元a[2],表达式*(s+k)的值是().

(4)指针s已指向存储单元a[2],不移动指针s,通过s引用存储单元a[3]的表达式是().

(5)指针s已指向存储单元a[2],p指向存储单元a[0],表达式s-p的值是().

(6)若p指向存储单元a[0],则以下语句的输出结果是().

14、What results after run the following code ?

1、#include

int main()

{

int *ptr;

ptr = (int *)0x8000;

*ptr = 123;

printf("%d",*ptr);

return 0;

}

2、#include

int main()

{ int v[2][10];

int (*a)[10] = &v[0];

int (*tmp)[10] = a;

a++;

printf("%d\n", (int)a - (int)tmp);

return 0;

}

三、编程题:

1、编写一个函数,其功能是对传送过来的两个浮点数求出和值与差值,并通过形参传送回调用函数。

#include "Stdio.h"

#include "Conio.h"

void f(float x,float y,float *ps,float *pd)

{ *ps=x+y;

*pd=x-y;

return;

}

int main(void)

{

float x,y,sum,diff;

printf("input x,y=?");

scanf("%f,%f",&x,&y);

f(x,y,&sum,&diff);

printf("%f+%f=%f %f-%f=%f",x,y,sum,x,y,diff);

getch();

return 0;

}

评析:此题要求编写的函数需要返回两个结果(和值和差值),而函数的返回值只能返回一个值。因此使用指针作为函数参数,题目要求编写的函数没有返回值,即类型为void。注意实参与形参的对应关系。

2、编写一个函数,对传送过来的三个数求出最大和最小数,并通过形参传送回调用函数。#include "Stdio.h"

#include "Conio.h"

void f(int a,int b,int c,int *pmax,int *pmin)

{ *pmax=*pmin=a;

if(*pmax

if(*pmax

if(*pmin>b) *pmin=b;

if(*pmin>c) *pmin=c;

return;

}

int main(void)

{

int a,b,c,max,min;

printf("input a,b,c=?");

scanf("%d,%d,%d",&a,&b,&c);

f(a,b,c,&max,&min);

printf("max=%d min=%d",max,min);

getch();

return 0;

}

(三)程序设计题(要求用指针的方法完成)

1.编写程序,交换数组a和数组b中的对应元素。

2.有10个数围成一圈,求出相邻三个数之和的最小值。

3.产生动态数组。输入数组大小后,通过动态分配内存函数malloc产生数组。4.编写程序,将一个字符串反向存放。

5.输入一串英文文字,统计其中字母(不区分大小写)的数目。

四、程序改错

1、这个程序有什么问题?该如何修改?

char *strA()

{char str[] = “Hello World”;return str;}

c语言指针习题及答案69923

指针习题及答案 一.选择题 1.变量的指针,其含义是指该变量的 B 。 A)值B)地址C)名D)一个标志 2.已有定义int k=2;int *ptr1,*ptr2;且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值语句是 B 。 A)k=*ptr1+*ptr2 B)ptr2=k C)ptr1=ptr2 D)k=*ptr1*(*ptr2) 3.若有说明:int *p,m=5,n;以下程序段正确的是 D 。 A)p=&n ; B)p = &n ; scanf(“%d”,&p); scanf(“%d”,*p); C)scanf(“%d”,&n); D)p = &n ; *p=n ; *p = m ; 4.已有变量定义和函数调用语句:int a=25;print_value(&a);下面函数的输出结果是 D 。 void print_value(int *x) { printf(“%d\n”,++*x); } A)23 B)24 C)25 D)26 5.若有说明:int *p1, *p2,m=5,n;以下均是正确赋值语句的选项是 C 。 A)p1=&m; p2=&p1 ; B)p1=&m; p2=&n; *p1=*p2 ; C)p1=&m; p2=p1 ; D)p1=&m; *p1=*p2 ; 6.若有语句:int *p,a=4;和p=&a;下面均代表地址的一组选项是 D 。 A)a,p,*&a B)&*a,&a,*p C)*&p,*p,&a D)&a,&*p,p 7.下面判断正确的是 C 。 A)char *a=”china”; 等价于char *a; *a=”china” ; B)char str[10]={“china”}; 等价于char str[10]; str[ ]={“china”;} C)char *s=”china”; 等价于char *s; s=”china” ; D)char c[4]=”abc”,d[4]=”abc”; 等价于char c[4]=d[4]=”abc” ; 8.下面程序段中,for循环的执行次数是 C 。 char *s=”\ta\018bc” ; for ( ; *s!=’\0’ ; s++) printf(“*”) ; A)9 B)7 C)6 D)5 9.下面能正确进行字符串赋值操作的是 C 。 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) ; 10.下面程序段的运行结果是 C 。 char *s=”abcde” ; s+=2 ; printf(“%d”,s); A)cde B)字符’c’C)字符’c’的地址D)不确定11.设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是 B 。 A)c=*p1+*p2 B)p2=c C)p1=p2 D)c=*p1*(*p2) 12.设有程序段:char s[ ]=”china”; char *p ; p=s ;则下面叙述正确的是 D 。A)s和p完全相同

c语言指针编程练习题

c语言指针编程练习题 2. 从命令行输入两个实型数据,请比较大小并输出。参考答案 3. 输入3个数a,b,c,按大小顺序输出。利用指针方法参考答案 4. 输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。参考答案 5. 有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数参考答案 6. 有n个人围成一圈,顺序排号。从第一个人开始报数,凡报到3的人 退出圈子,问最后留下的是原来第几号的那位。参考答案 7. 写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。参考答案 8. 编写一个函数,输入n为偶数时,调用函数求1/2+1/4+…+1/n,当输入n为奇数时,调 用函数1/1+1/3+…+1/n 参考答案 9. 八进制转换为十进制参考答案 10. 编一个函数fun,函数的功能是分别求出数组中所有奇数之 和以及所有偶数之和。形参n给了数组中数据的个数:

利用指针odd返回奇数之和,利用指针even返回偶数之和。例如:数组中的值依次为:1,8,2,3,11,6;则利用指针odd返回奇数之和24;利用指针even返回偶数之和8。参考答案 11. 复制字符串。参考答案 一、用指针方法编写一个程序,输入3个整数,将它们按由小到大的顺序输出 #include void swap { int temp; temp = *pa; *pa = *pb; *pb = temp; } void main { int a,b,c,temp; scanf; if swap; if swap;

if swap; printf; } 二、C语言用指针方法输入3个字符串按由小到大顺序输出 #include “stdio.h” #include “string.h” int main { char *t; char *p1=NULL,*p2=NULL,*p3=NULL; char ch1[20]={0},ch2[20]={0},ch3[20]={0}; p1=ch1; p2=ch2; p3=ch3; printf; scanf; fflush; printf; scanf; fflush;

C语言指针习题与答案

指针主要内容的习题及答案 一.选择题 1.变量的指针,其含义是指该变量的 B 。 A)值B)地址C)名D)一个标志2.已有定义int k=2;int *ptr1,*ptr2;且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值语句是 B 。 A)k=*ptr1+*ptr2 B)ptr2=k C)ptr1=ptr2 D) k=*ptr1*(*ptr2) 3.若有说明:int *p,m=5,n;以下程序段正确的是 D 。 A)p=&n ; B)p = &n ; scanf(“%d”,&p); scanf(“%d”,*p); C)scanf(“%d”,&n); D)p = &n ; *p=n ; *p = m ; 4.已有变量定义和函数调用语句:int a=25;print_value(&a);下面函数的输出结果是 D 。 void print_value(int *x) { printf(“%d\n”,++*x); } A)23 B)24 C)25 D)26 5.若有说明:int *p1, *p2,m=5,n;以下均是正确赋值语句的选项是 C 。 A)p1=&m; p2=&p1 ; B)p1=&m; p2=&n; *p1=*p2 ;

C)p1=&m; p2=p1 ; D)p1=&m; *p1=*p2 ; 6.若有语句:int *p,a=4;和p=&a;下面均代表地址的一组选项是 D 。 A)a,p,*&a B)&*a,&a,*p C)*&p,*p,&a D)&a,&*p,p 7.下面判断正确的是 C 。 A)char *a=”china”; 等价于char *a; *a=”china” ; B)char str[10]={“china”}; 等价于char str[10]; str[ ]={“china”;} C)char *s=”china”; 等价于char *s; s=”china” ; D)char c[4]=”abc”,d[4]=”abc”; 等价于char c[4]=d[4]=”abc” ; 8.下面程序段中,for循环的执行次数是 C 。 char *s=”\ta\018bc” ; for ( ; *s!=’\0’ ; s++) printf(“*”) ; A)9 B)7 C)6 D)5 9.下面能正确进行字符串赋值操作的是 C 。 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) ; 10.下面程序段的运行结果是 C 。 char *s=”abcde” ; s+=2 ; printf(“%d”,s); A)cde B)字符’c’C)字符’c’的地址D)不确定

C语言复习题

一、填空: 1.整型数据变量声明中所使用的关键字是 int 。 2.设 float x=,y=; int a=7;,表达式 x+a%3*(int)(x+y)%2/4的值为。 3.printf(“My age is %d.”, age); 函数中,使用%d表示输出的是整型类型的数据。 4.每个源程序有且只有一个主函数,系统总是从该函数开始执行C语言程序。 5.设 int x=5,y,z;执行y=z=x;x=y==z;后,变量x的结果是 1 。 6. C 语言中,数组在内存中占一片的存储区,由代表它的首地址。数组名是一 个,不能对它进行赋值运算。 7.函数的参数为 char *类型时,形参与实参结合的传递方式为。 8.C程序编译、连接后生成程序。 9.当a=10,b=4,c=2时,表达式f=a>b>c的值是。 10.字符串数组与字符数组的在长度至少一个元素。 11.若函数的形式参数是指针类型,则实参可以是或。 12.如定义语句为 char a[ ]= "windows",b[ ]= "7";,语句 printf("%s",strcat(a,b));的输出结果 为。 13.请在下面的程序段中填写正确的格式说明符: int main(void) { float salary; printf(“Enter your desired monthly salary:.”, salary); } 14.C程序编译后生成程序。 15.C 语言的标识符只能由、数字和三种字符组成。 16.设有定义 int y; ,分别写出描述“y是偶数”的表达式,“y是奇数”的 表达式。 17.C语言没有字义专门的字符串变量类型,而是把它存储在数组中。 18.字符串常量"\\\22a,0\n\""的长度是。 19.字符串存储到数组中时,在数组的最后将增加一个标记字符串结束的字符。 20.设有定义语句 static int a[3][4] ={{1},{2},{3}}; 则 a[1][0]值为,a[1][1] 值 为,a[2][1]的值为。 21.假设int a=7; 执行语句a+=a-=a*a; 后,a的值是。 22.若自定义函数要求返回一个值,则应在该函数体中有一条语句,若自定义函数要求不返 回一个值,则应在该函数说明时加一个类型说明符 23.若x和n都是int型变量,且x的初值为12,n的初值为5,则计算表达式x%=(n%=2)后x的值 为。 24.设 int x=10, y, z; 执行y=z=x; x=y= =z;后,变量x的结果是。

C语言指针习题__附答案[1]

一、选择题 1.变量的指针,其含义是指该变量的_________. a)值b)地址 c)名d)一个标志 2.若有语句int *point,a=4;和point=&a;下面均代表地址的一组选项是_____. a)a,point,*&a b)&*a,&a,*point c)*&point,*point,&a d)&a,&*point ,point 3.若有说明;int *p,m=5,n;以下正确的程序段的是________. a)p=&n; b)p=&n; scanf("%d",&p); scanf("%d",*p); c)scanf("%d",&n); d)p=&n; *p=n; *p=m; 4. 以下程序中调用scanf函数给变量a输入数值的方法是错误的,其错误原因是________. main() { int *p,*q,a,b; p=&a; printf(“input a:”); scanf(“%d”,*p); …… } a)*p表示的是指针变量p的地址 b)*p表示的是变量a的值,而不是变量a的地址 c)*p表示的是指针变量p的值 d)*p只能用来说明p是一个指针变量 5. 已有变量定义和函数调用语句:int a=25; print_value(&a); 下面函数的正确输出结果是________. void print_value(int *x) { printf(“%d\n”,++*x);} a)23 b)24 c)25 d)26 6.若有说明:long *p,a;则不能通过scanf语句正确给输入项读入数据的程序段是 A) *p=&a;scanf("%ld",p);

C语言指针精选习题和答案

一、用指针方法编写一个程序,输入3个整数,将它们按由小到大的顺序输出#include void swap(int *pa,int *pb) { int temp; temp = *pa; *pa = *pb; *pb = temp; } void main() { int a,b,c,temp; scanf("%d%d%d",&a,&b,&c); if(a>b) swap(&a,&b); if(b>c) swap(&b,&c); if(a>c) swap(&a,&c); printf("%d,%d,%d",a,b,c); } 二、C语言用指针方法输入3个字符串按由小到大顺序输出 #include "stdio.h" #include "string.h" int main(int argc, char* argv[]) { char *t; char *p1=NULL,*p2=NULL,*p3=NULL; char ch1[20]={0},ch2[20]={0},ch3[20]={0}; p1=ch1; p2=ch2; p3=ch3; printf("No1:"); scanf("%s",p1); fflush(stdin); printf("No2:"); scanf("%s",p2); fflush(stdin); printf("No3:"); scanf("%s",p3);

fflush(stdin); if(strcmp(p1,p2)>0) {t=p1;p1=p2;p2=t;} if(strcmp(p1,p3)>0) {t=p1;p1=p3;p3=t;} if(strcmp(p2,p3)>0) {t=p2;p2=p3;p3=t;} printf("%s\n%s\n%s\n",p1,p2,p3); return 0; } 9.4编程输入一行文字,找出其中的大写字母,小写字母,空格,数字,及 其他字符的个数 #include void main() { int a=0,b=0,c=0,d=0,e=0,i=0; char *p,s[20]; while((s[i]=getchar())!='\n')i++; p=s; while(*p!=10) { if(*p>='A'&&*p<='Z') a++; else if(*p>='a'&&*p<='z') b++; else if(*p==' ') c++; else if(*p>='0'&&*p<='9') d++; else e++; p++; } printf("大写字母%d 小写字母%d\n",a,b); printf("空格 %d 数字 %d 非字符 %d\n",c,d,e); }

C语言指针习题及答案

指针习题及答案 一.选择题 1、变量的指针,其含义就是指该变量的 B 。 A)值B)地址C)名D)一个标志 2、已有定义int k=2;int *ptr1,*ptr2;且ptr1与ptr2均已指向变量k,下面不能正确执行的赋值语句就是 B 。 A)k=*ptr1+*ptr2 B)ptr2=k C)ptr1=ptr2 D)k=*ptr1*(*ptr2) 3、若有说明:int *p,m=5,n;以下程序段正确的就是 D 。 A)p=&n ; B)p = &n ; scanf(“%d”,&p); scanf(“%d”,*p); C)scanf(“%d”,&n); D)p = &n ; *p=n ; *p = m ; 4、已有变量定义与函数调用语句:int a=25;print_value(&a);下面函数的输出结果就是 D 。 void print_value(int *x) { printf(“%d\n”,++*x); } A)23 B)24 C)25 D)26 5、若有说明:int *p1, *p2,m=5,n;以下均就是正确赋值语句的选项就是 C 。 A)p1=&m; p2=&p1 ; B)p1=&m; p2=&n; *p1=*p2 ; C)p1=&m; p2=p1 ; D)p1=&m; *p1=*p2 ; 6、若有语句:int *p,a=4;与p=&a;下面均代表地址的一组选项就是 D 。 A)a,p,*&a B)&*a,&a,*p C)*&p,*p,&a D)&a,&*p,p 7、下面判断正确的就是 C 。 A)char *a=”china”; 等价于char *a; *a=”china” ; B)char str[10]={“china”}; 等价于char str[10]; str[ ]={“china”;} C)char *s=”china”; 等价于char *s; s=”china” ; D)char c[4]=”abc”,d[4]=”abc”; 等价于char c[4]=d[4]=”abc” ; 8、下面程序段中,for循环的执行次数就是 C 。 char *s=”\ta\018bc” ; for ( ; *s!=’\0’ ; s++) printf(“*”) ; A)9 B)7 C)6 D)5 9、下面能正确进行字符串赋值操作的就是 C 。 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) ; 10、下面程序段的运行结果就是 C 。 char *s=”abcde” ; s+=2 ; printf(“%d”,s); A)cde B)字符’c’C)字符’c’的地址D)不确定 11、设p1与p2就是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句就是 B 。 A)c=*p1+*p2 B)p2=c C)p1=p2 D)c=*p1*(*p2) 12、设有程序段:char s[ ]=”china”; char *p ; p=s ;则下面叙述正确的就是 D 。 A)s与p完全相同 B)数组s中的内容与指针变量p中的内容相等

C语言指针经典练习题-及答案

C语言指针练习题及答案 一、选择题 1. 变量的指针,其含义是指该变量的____. a)值b)地址 c)名d)一个标志 2.若有语句int *point,a=4;和point=&a;下面均代表地址的一组选项是__ _. a)a,point,*&a b)&*a,&a,*point c)*&point,*point,&a d)&a,&*point ,point 3.若有说明;int *p,m=5,n;以下正确的程序段的是________. a)p=&n; b)p=&n; scanf("%d",&p); scanf("%d",*p); c)scanf("%d",&n); d)p=&n; *p=n; *p=m; 4. 以下程序中调用scanf函数给变量a输入数值的方法是错误的,其错误原因是__ _____. main() { int *p,*q,a,b; p=&a; printf(“input a:”); scanf(“%d”,*p); …… } a)*p表示的是指针变量p的地址 b)*p表示的是变量a的值,而不是变量a的地址 c)*p表示的是指针变量p的值 d)*p只能用来说明p是一个指针变量 5. 已有变量定义和函数调用语句:int a=25; print_value(&a); 下面函数的正确输出结果是______. void print_value(int *x) { printf(“%d\n”,++*x);} a)23 b)24 c)25 d)26 6.若有说明:long *p,a;则不能通过scanf语句正确给输入项读入数据的程序段是 A) *p=&a;scanf("%ld",p); B) p=(long *)malloc(8);scanf("%ld",p); C) scanf("%ld",p=&a); D) scanf("%ld",&a); 7.有以下程序 #include main() { int m=1,n=2,*p=&m,*q=&n,*r; r=p;p=q;q=r; printf("%d,%d,%d,%d\n",m,n,*p,*q); }程序运行后的输出结果是

C语言5指针练习题5

第五章指针 一、选择题 1.若有说明语句:int a,b,c,*d=&c;,则能正确从键盘读入三个整数分别赋给变量a、 b、c的语句是 A.scanf("%d%d%d",&a,&b,&d); B.scanf("%d%d%d",&a,&b,d); C.scanf("%d%d%d",a,b,d); D.scanf("%d%d%d",a,b,*d); 2.若已定义:int a[9],*p=a;并在以后的语句中未改变p的值,不能表示a[1]地址的表达式是 A.p+1 B.a+1 C.a++ D.++p 3.若已定义:int a[ ]={0,1,2,3,4,5,6,7,8,9},*p=a,i; 其中 0

C语言指针练习+答案+讲解

第七章指针 7.1 选择题 1.若有说明:int a=2, *p=&a, *q=p;,则以下非法的赋值语句是(D)。 A. p=q; B. *p=*q; C. a=*q; D. q=a; a是整型数, int *p,*q定义了指针, p,q是指向整型的指针。 p取得a的地址,而q取得p的地址 p,q是指针(也就是一个地址),而*p和*q是这个指针指向的整型数值(存放在这个地址的值)。 A)把q的地址赋给p,则p和q完全一样了,都指向一个数2 B)把q中数据个p C)把q中数据给a D)a中数据是2,不能够给一个地址。除非*q=a 2.若定义:int a=511, *b=&a;,则printf("%d\n", *b);的输出结果为:D A.无确定值 B. a的地址 C. 512 D. 511 int a=511,*b=&a; a 是整形变量 b 是整形指针变量,指向 a printf("%d\n",*b);就是输出指针变量 b, 所指变量的值输出结果511 3.已有定义int a=2, *p1=&a, *p2=&a; 下面不能正确执行的赋值语句是(B)。A. a=*p1+*p2; B. p1=a; C. p1=p2; D. a=*p1*(*p2); 47、已知在程序中定义了如下的语句: int *P1,*P2; int k; p1=&k;p2=&k;

则下列语句中不能正确执行是( B ) A、k=*P1+*P2; B、p2=k; C、P1=P2; D、K=*P1 * (*P2); P1 P2是指针,K是整型变量,变量怎么可以赋值给指针呢? A其实是执行了K=K+K(P1和P2都指向K,所以*P1 *P2其实都是指K) C是赋值语句 D其实执行了K=K*K 4.变量的指针,其含义是指该变量的(B)。 A.值 B.地址 C.名 D.一个标志5.若有说明语句:int a, b, c, *d=&c;,则能正确从键盘读入三个整数分别赋给变量a、b、c的语句是(A)。 A. scanf("%d%d%d", &a, &b, d); B. scanf("%d%d%d", a, b, d); C. scanf("%d%d%d", &a, &b, &d); D. scanf("%d%d%d", a, b,*d); 对于int c,*d=&c;,c是一整型数据,d是一指针,它指向变量c(即d=&c,*是指针类型的说明符),所以,输入c的值可以用scanf("%d",&c); 也可以用scanf("%d",d); 6.若已定义int a=5; 下面对(1)、(2)两个语句的正确解释是(D)。 (1) int *p=&a; (2) *p=a; A.语句(1)和(2)中的*p含义相同,都表示给指针变量p赋值。 B. (1)和(2)语句的执行结果,都是把变量a的地址值赋给指针变量p。 C. (1)在对p进行说明的同时进行初始化,使p指向a; (2)变量a的值赋给指针变量p。 D. (1)在对p进行说明的同时进行初始化,使p指向a; (2)将变量a的值赋予*p。 A:(1):*p,定义p为int类型指针(2):*p,表示p所指向的变量 B(1)把变量a的地址赋给指针变量p(2)把变量a的值,赋值给P所指向的变量 C前半句正确,后半句错误,(2)是把变量a的值赋值给P所指的变量。

C语言综合习题及答案

C语言练习题 一、选择题 1. 一个完整的C源程序是【B 】。 A)要由一个主函数或一个以上的非主函数构成 B)由一个且仅由一个主函数和零个以上的非主函数构成 C)要由一个主函数和一个以上的非主函数构成 D)由一个且只有一个主函数或多个非主函数构成 2. 以下关于函数的叙述中正确的是【C】。 A)C语言程序将从源程序中第一个函数开始执行 B)可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行 C)C语言规定必须用main作为主函数名,程序将从此开始执行,在此结束 D)main可作为用户标识符,用以定义任意一个函数 3. 以下关于函数的叙述中不正确的是【B】。 A)C程序是函数的集合,包括标准库函数和用户自定义函数 B)在C语言程序中,被调用的函数必须在main函数中定义 C)在C语言程序中,函数的定义不能嵌套 D)在C语言程序中,函数的调用可以嵌套 4. 在一个C程序中,【B 】。 A)main函数必须出现在所有函数之前 B)main函数可以在任何地方出现 C)main函数必须出现在所有函数之后 D)main函数必须出现在固定位置 5.C程序的执行是从【A 】开始的。 A)主函数 B)子函数 C)从程序第一行 D)printf()函数 6.以下选项中不合法的标识符是【C 】 A)print B)FOR C)&a D)_00 7.以下选项中可作为C语言合法常量的是【A】 A)-80 B)-080 C)-8e1.0 D)-80.0e 8.以下选项中不属于字符常量的是【B】 A)′C′ B)"C" C)′\xCC′ D) ′\072′ 9. 若在C语言中未说明函数的类型,则系统默认该函数的数据类型是【C】 A)float B)long C)int D)double 10. 以下关于函数叙述中,错误的是【D】。 A)函数未被调用时,系统将不为形参分配内存单元 B)实参与形参的个数应相等,且实参与形参的类型必须对应一致 C)当形参是变量时,实参可以是常量、变量或表达式 D)形参可以是常量、变量或表达式 11. C程序中各函数之间可以通过多种方式传递数据,下列不能用于实现数据传递的方式是

开发之C语言基础测试题-含答案

第1 题 设有语句“ char s[ ] = “ Program ”,*p = s;”, 则以下叙述正确的是 A.数组s 的内容与指针变量p 中内容相同 B.数组s 的长度与strlen ( p ) 的值相等 C.p[5]的值等于s[5] 的值 D.sizeof( s ) 等于sizeof( *p ) 第2 题 若fp是指向某文件的指针,且已读到此文件末尾,则库函数feof(fp)的返回值是 A.EOF B.0 C.非零值 D.NULL 第3 题 若有定义:int a[2][3];则对该数组的i行j列元素值的正确引用为 A.*(*(a+i)+j) B.(a+i)[j] C.*(a+i+j) D.*(a+i)+j 第4 题 若有以下的说明,则对初值中字符'a'的引用方式为 static struct st { char ch;double x;char a[];} struct st c[2][2]={{'a',3.5,'bc'},{'c',4.5,'de'},{'m',8.6,'abc'}}; A.c.ch B.c[0][0].ch C.c[1][1].ch D.a[0] 第5 题 对于用"r"方式打开文件下列说法正确的是 A.用"r"方式打开的文件只输入不能输出 B.用"r"方式打开的文件只能输出,不能输入 C.用"r"方式可以打开任何文件 D.以上均不对 第6 题 设p1和p2均为指向同一个int型一维数组的指针变量,k为int型变量,下列语句不正确的是 A.k=*p1+*p2 B.B. k=*p1*(*p2) C.p2=k D.p1=p2 第7 题 一个C程序由函数A、B、C和函数P构成,在函数A中分别调用了函数B和函数C,在函数B中调用了函数A,且在函数P中也调用了函数A,则可以说 A.函数B中调用的函数A是函数A的间接递归调用 B.函数A被函数B中调用的函数A间接递归调用 C.

C语言数组和指针练习题

若当堂没做完,下周四之前上交也可。 至 用户名和密码:stu C语言程序设计练习题——数组 一、选择题 77、以下对一维数组a的正确说明是_d ___ A、char a(10); B、int a[ ]; C、int k=5,a[k]; D、char a[ ]={'a' , 'b' , 'c'}; 78、若有说明语句:int a[2][4];,则对a数组元素的正确引用是_a___ A、a[0][3] B、a[0][4] C、a[2][2] D、a[2][2+1] 79、以下能对二维数组y进行初始化的语句是_b__ A、static int y[2][ ]={{1,0,1}, {5,2,3}}; B、static int y[ ][3]={{1,2,3}, {4,5,6}}; C、static int y[2][4]={{1,2,3}, {4,5} , {6}}; D、static int y[ ][3]={{1,0,1,0}, { }, {1,1}}; 80、若有说明语句:int y[ ][4]={0,0};则下面叙述不正确的是_d___ A、数组y的每个元素都可得初值0 B、二维数组y的行数为1 C、该说明等价于int y[ ][4]={0}; D、只有元素y[0][0]和y[0][1]可得到初值0,其余元素均得不到初值0 81、以下各组选项中,均能正确定义二维实型数组s的选项是_c___ A、float s[3][4]; B、float s(3,4); float s[ ][4]; float s[ ][ ]={{0};{0}}; float s[3][ ]={{1},{0}}; float s[3][4]; C、 float s[3][4]; D、float s[3][4]; static float s[ ][4]={{0},{0}}; float s[3][ ]; auto float s[ ][4]={{0},{0},{0}}; float s[ ][4]; 82、若有说明语句:int a[ ][3]={1,2,3,4,5,6,7,8}; ,则a数组的行数为__a__ A、3 B、2 C、无确定值 D、1 83、若二维数组y有m列,则在y[i][j]前的元素个数为_B___ A、j*m+i B、i*m+j C、i*m+j-1 D、i*m+j+1 84、下面程序中有错误的行是__D__ 1、 main( ) 2、 { 3、 int x[3]={1}; 4、 int k; 5、 scanf("%d", &x); 6、 for (k=1; k<3; k++) 7、 x[0]=x[0]+x[i]; 8、 printf("x[0]=%d\n", x[0]); 9、 } A、3 B、6 C、7 D、5 85、若有以下语句,则正确的描述是__b__ char x[ ]="12345"; char y[ ]={'1', '2', '3', '4', '5'}; A、x数组与y数组的长度相同 B、x数组长度大于y数组长度 C、x数组长度小于y数组长度

C语言指针习题及答案

指针主要内容得习题及答案 一.选择题 1、变量得指针,其含义就是指该变量得 B 。 A)值 B)地址 C)名 D)一个标志 2、已有定义int k=2;int *ptr1,*ptr2;且ptr1与ptr2均已指向变量k,下面不能正确执行得赋值语句就是 B 。 A)k=*ptr1+*ptr2 B)ptr2=k C)ptr1=ptr2 D)k=*ptr1*(*ptr2) 3、若有说明:int *p,m=5,n;以下程序段正确得就是 D 。 A)p=&n ; B)p = &n ; scanf(“%d”,&p); scanf(“%d”,*p); C)scanf(“%d”,&n); D)p = &n ; *p=n ; *p = m ; 4、已有变量定义与函数调用语句:int a=25;print_value(&a);下面函数得输出结果就是 D 。 void print_value(int *x) { printf(“%d\n”,++*x); } A)23 B)24 C)25 D)26 5、若有说明:int *p1, *p2,m=5,n;以下均就是正确赋值语句得选项就是 C 。 A)p1=&m; p2=&p1 ; B)p1=&m; p2=&n; *p1=*p2 ; C)p1=&m; p2=p1 ; D)p1=&m; *p1=*p2 ; 6、若有语句:int *p,a=4;与p=&a;下面均代表地址得一组选项就是

D 。 A)a,p,*&a B)&*a,&a,*p C)*&p,*p,&a D)&a,&*p,p 7、下面判断正确得就是 C 。 A)char *a=”china”; 等价于 char *a; *a=”china” ; B)char str[10]={“china”}; 等价于 char str[10]; str[ ]={“china”;} C)char *s=”china”; 等价于 char *s; s=”china” ; D)char c[4]=”abc”,d[4]=”abc”; 等价于 char c[4]=d[4]=”abc” ; 8、下面程序段中,for循环得执行次数就是 C 。 char *s=”\ta\018bc” ; for ( ; *s!=’\0’ ; s++) printf(“*”) ; A)9 B)7 C)6 D)5 9、下面能正确进行字符串赋值操作得就是 C 。 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) ; 10、下面程序段得运行结果就是 C 。 char *s=”abcde” ; s+=2 ; printf(“%d”,s); A)cde B)字符’c’ C)字符’c’得地址 D)不确定 11、设p1与p2就是指向同一个字符串得指针变量,c为字符变量,则以下不能正确执行得赋值语句就是 B 。

相关主题
文本预览
相关文档 最新文档