文档库 最新最全的文档下载
当前位置:文档库 › C语言指针经典练习题-及答案

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

C语言指针经典练习题-及答案
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);

}程序运行后的输出结果是

A)1,2,1,2 B)1,2,2,1

C)2,1,2,1 D)2,1,1,2

8. 有以下程序

main()

{ int a=1, b=3, c=5;

int *p1=&a, *p2=&b, *p=&c;

*p =*p1*(*p2);

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

}执行后的输出结果是

A)1 B)2 C)3 D)4

9. 有以下程序

main()

{ int a,k=4,m=4,*p1=&k,*p2=&m;

a=p1==&m;

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

}程序运行后的输出结果是()

A)4 B)1 C)0 D)运行时出错,无定值

10. 在16位编译系统上,若有定义int a[]={10,20,30}, *p=&a;,当执行p++;后,下列说法错误的是()

A)p向高地址移了一个字节B)p向高地址移了一个存储单元

C)p向高地址移了两个字节D)p与a+1等价

11.有以下程序段

int a[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3], b; b=p[5]; b中的值是()

A)5 B)6 C)8 D)9

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

int a[5],*p=a;

a)*&a[5] b)a+2 c)*(p+5) d)*(a+2)

13.若有以下定义,则p+5表示_______.

int a[10],*p=a;

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

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

14.设已有定义: int a[10]={15,12,7,31,47,20,16,28,13,19},*p; 下列语句中正确的是()

A) for(p=a;a<(p+10);a++);

B) for(p=a;p<(a+10);p++);

C) for(p=a,a=a+10;p

D) for(p=a;a

15.有以下程序段

#include

int main()

{ int x[] = {10, 20, 30};

int *px = x;

printf("%d,", ++*px); printf("%d,", *px);

px = x;

printf("%d,", (*px)++); printf("%d,", *px);

px = x;

printf("%d,", *px++); printf("%d,", *px);

px = x;

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

return 0;

}程序运行后的输出结果是( )

A)11,11,11,12,12,20,20,20 B)20,10,11,10,11,10,11,10

C)11,11,11,12,12,13,20,20 D)20,10,11,20,11,12,20,20

16.设有如下定义则程序段的输出结果为

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

17.若有定义:int a[]={2,4,6,8,10,12},*p=a;则*(p+1)的值是_4__. *(a+5)的值是__12__.

18.若有以下说明和语句,int c[4][5],(*p)[5];p=c;能正确引用c数组元素的是___ __.

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

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

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

20.若有以下定义:int a[2][3]={2,4,6,8,10,12};则a[1][0]的值是_8_. *(*(a+1)+0)的值是_ _8.

21.有以下定义char a[10],*b=a; 不能给数组a输入字符串的语句是()

A)gets(a) B)gets(a[0]) C)gets(&a[0]); D)gets(b);

22.下面程序段的运行结果是___ __.

char *s="abcde";

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

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

23.以下程序段中,不能正确赋字符串(编译时系统会提示错误)的是()

A) char s[10]="abcdefg"; B) char t[]="abcdefg",*s=t;

C) char s[10];s="abcdefg"; D) char s[10];strcpy(s,"abcdefg");

24.设已有定义: 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);

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

main()

{

char a[]="programming",b[]="language";

char *p1,*p2;

p1=a;p2=b;

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

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

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

}

A)gm B)rg C)or D)ga

26.设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是_____.

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

27.以下正确的程序段是____.

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]);

28.若有说明语句则以下不正确的叙述是____.

char a[]="It is mine";

char *p="It is mine";

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

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

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

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

29.下面程序的运行结果是___.

#include

#include

main()

{ char *s1="AbDeG";

char *s2="AbdEg";

s1+=2;s2+=2;

printf("%d\n",strcmp(s1,s2));

}

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

30.有以下程序运行后的输出结果是____。

void f(int *x,int *y)

{

int t;

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

}

main()

{

int a[8]={1,2,3,4,5,6,7,8},i=0,*p,*q;

p=a;q=&a[7];

while(*p!=*q && i<8){f(p,q);p++;q--;i++;}

for(i=0;i<8;i++) printf("%d,",a[i]);

A)8,2,3,4,5,6,7,1, B)5,6,7,8,1,2,3,4,

C)1,2,3,4,5,6,7,8, D)8,7,6,5,4,3,2,1,

31. 已定义以下函数

fun (int *p)

{ return *p; }

该函数的返回值是

A)不确定的值B)形参p中存放的值

C)形参p所指存储单元中的值D)形参p的地址值

32. 有以下程序

int f(int b[][4])

{ int i,j,s=0;

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

{ i=j;

if(i>2) i=3-j;

s+=b[i][j];

}

return s;

}

main( )

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

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

} 执行后的输出结果是

A) 12 B) 11 C) 18 D) 16

33.若有以下函数首部则下面针对此函数的函数声明语句中正确的是

int fun(double x[10], int *n)

A)int fun(double x, int *n); B)int fun(double , int ); C)int fun(double *x, int n); D)int fun(double *, int *);

34.有以下程序执行后的输出结果是()

void sum(int *a)

{ a[0]=a[1];}

main( )

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

for(i=2;i>=0;i--) sum(&aa[i]);

printf("%d\n",aa[0]);

}

A)4 B)3 C)2 D)1

35.下段代码的运行结果是:

int main()

{

char a;

char *str=&a;

strcpy(str,"hello");

puts(str);

return 0;

}

A)hello B)null C)h D)发生异常

36.下段程序的运行结果是

void main()

{

char *p,*q;

char str[]="Hello,World\n";

q = p = str;

p++;

print(q);

print(p);

}

void print(char *s)

{

printf(“%s”,s);

}

A)H e

B)Hello,World ello,World

C)Hello,World Hello,World

D)ello,World ell,World

37.有以下程序

void fun(char *c,int d)

{

*c=*c+1;

d=d+1;

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

}

void 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

38、下面选项属于函数指针的是:A、(int*)p(int, int) B、int *p(int, int) C、两者都是D、两者都不是

39、若有函数max(a,b),并且已使函数指针变量p指向函数max,当调用该函数时,正确的调用方法是__ __.

A)(*p)max(a,b); B)*pmax(a,b);

C) (*p)(a,b); D) *p(a,b);

40、下面几个选项中的代码能通过编译的是:

A)int* fun()

{

int s[3]={1,3,4};;

return s;

}

int main()

{

int * result;

result = fun();

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

printf("%d\n",result[i]);

return 0;

}

B)int& fun()

{

int s[3]={1,3,4};;

return s;

}

int main()

{

int * result;

result = fun();

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

printf("%d\n",result[i]);

return 0;

}

C)int* fun()

{

int s[3]={1,3,4};;

return &s;

}

int main()

{

int * result;

result = fun();

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

printf("%d\n",result[i]);

return 0;

}

D)int& fun()

{

int s[3]={1,3,4};;

return &s;

}

int main()

c++指针类练习题及答案

1 5 6 6 5 #include using namespace std; void swap(int *xp,int *yp) { int tmp; tmp=*xp; *xp=*yp; *yp=tmp; } int main() { int a,b; cin>>a>>b; swap(&a,&b); cout< #include using namespace std; int main() { char str[100]; cin>>str; int len; len=strlen(str); char *p=&str[len-1]; while(p>=str) { cout<<*p; p--; } cout<

1 2 2 2 3 7 #include using namespace std; void selectsort(int *list,int count) { for(int i=0;i>n; int array[20]; for(int j=0;j>array[j]; selectsort(array,n); for(int i=0;i using namespace std; void bubble_up(int *ptr,int count) { for(int i=0;ii;j=j-1)

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完全相同

指针练习题

编程题 1用指向数组的指针变量输出数组的全部元素 2 使用函数调用,形参为指针,实参为数组,把一个数组逆序存放在输出 练习题: 一判断题 1.指针是变量,它具有的值是某个变量或对象的地址值,它还具有一个地址值,这两个地址值是相等的。 2.指针的类型是它所指向的变量或对象的类型。 3.定义指针时不可以赋初值。 4.指针可以赋值,给指针赋值时一定要类型相同,级别一致。 5.指针可以加上或减去一个int型数,也可以加上一个指针。 6.两个指针在任何情况下相减都是有意义的。 7.数组元素可以用下标表示,也可以用指针表示。 8.指向数组元素的指针只可指向数组的首元素。 9.字符指针是指向字符串的指针,可以用字符串常量给字符指针赋值。 10.引用是一种变量,它也有值和地址值。 11.引用是某个变量的别名,引用是被绑定在被引用的变量上。 12.创建引用时要用一个同类型的变量进行初始化。 13.指针是变量,它可以有引用,而引用不能有引用。

二单选题 1.下列关于定义一个指向double型变量的指针,正确的是()。 A.int a(5);double *pd=a;B.double d(2.5),*pd=&d;C.double d(2.5),*pd=d;D.double a(2.5),pd=d; 2.下列关于创建一个int型变量的引用,正确的是()。 A.int a(3),&ra=a;B.int a(3),&ra=&a; C.double d(3.1);int &rd=d;D.int a(3),ra=a; 3.下列关于指针概念的描述中,错误的是()。 A.指针中存放的是某变量或对象的地址值 B.指针的类型是它所存放的数值的类型 C.指针是变量,它也具有一个内存地址值 D.指针的值是可以改变的 4.下列关于引用概念的描述中,错误的是()。 A.引用是变量,它具有值和地址值 B.引用不可以作数组元素 C.引用是变量的别名 D.创建引用时必须进行初始化 5.已知:int a[5],*p=a;则与++*p相同的是()。 A.*++p B.a[0] C.*p++ D.++a[0]

指针综合练习题(带答案)

指针综合练习题 一、选择题 1.若有以下定义,则对a数组元素的正确引用是____d_____. 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列元素地址的正确引用为__d____. a)*(a[i]+j) b)(a+i) c)*(a+j) d)a[i]+j 3.若有以下定义,则p+5表示___a____. int a[10],*p=a; a)元素a[5]的地址b)元素a[5]的值 c)元素a[6]的地址d)元素a[6]的值 4.设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确 执行的赋值语句是____b____. a)c=*p1+*p2; b)p2=c c)p1=p2 d)c=*p1*(*p2); 5.若有说明语句 char a[]="It is mine"; char *p="It is mine"; 则以下不正确的叙述是___d_____. a)a+1表示的是字符t的地址 b)p指向另外的字符串时,字符串的长度不受限制 c)p变量中存放的地址值可以改变 d)a中只能存放10个字符 二、填空题 1 指针变量保存了另一变量的(1)值,不可以任意给指针变量赋一个地址值,只能赋给 它(2)和(3)的地址。使用变量名来访问变量,是按(4)来直接存取变量称为(5)方式;而借助指针变量取得另一变量的地址,访问该变量称为(6)方式。 答案:(1)地址 (2)NULL (3)已经分配了内存的变量的地址 (4)按变量的地址 (5)直接访问 (6)间接访问 2 以下程序的功能是:通过指针操作,找出三个整数中的最小值并输出。 请填空。 void main() {int *a,*b,*c,num,x,y,z; a=&x;b=&y;c=&z; cou<<"输入3个整数:"; cin>>a>>b>>c; cout<<*a<<*b<<*c; num=*a;

多用电表的使用 经典练习题含答案)

(时间:60分钟) 1.甲、乙两同学使用多用电表欧姆挡测同一个电阻时,他们都把选择开关旋到“×100”挡,并能正确操作.他们发现指针偏角太小,于是甲把选择开关旋到“×1 k”挡,乙把选择开关旋到“×10”挡,但乙重新调零,而甲没有重新调零.则以下说法正确的是() A.甲选挡错误,而操作正确 B.乙选挡正确,而操作错误 C.甲选挡错误,操作也错误 D.乙选挡错误,而操作正确 答案 D 解析在使用多用电表的欧姆挡时一定要先进行欧姆调零,再测量;同时为了减小误差,要尽量使指针指在中间刻度附近,即要合理地选择倍率挡位. 2.用多用电表的欧姆挡(×1 kΩ)检验性能良好的晶体二极管,发现多用电表的指针向右偏转的角度很小,这说明() A.二极管加有正向电压,故测得电阻很小 B.二极管加有反向电压,故测得电阻很大 C.此时红表笔接的是二极管的正极 D.此时红表笔接的是二极管的负极 答案BC 3.关于多用电表表面上的刻度线,下列说法中正确的是() A.直流电流刻度线和直流电压刻度线都是均匀的,可以共用一个刻度盘 B.电阻刻度是不均匀的 C.电阻刻度上的零刻度与直流电流的最大刻度线相对应 D.电阻刻度上的零刻度与直流电流的最大刻度线不对应 答案ABC 解析多用表中,直流电流和电压刻度是均匀的,但电阻刻度不均匀,A、B选项正确;电阻零刻度对应I g.电阻∞刻度线对应I=0,故C选项正确.

4.如图2124所示为多用电表的刻度盘.若选用倍率为“×100”的电阻挡测电阻时,表针指示如图所示,则: 图2124 (1)所测电阻的阻值为________ Ω;如果要用此多用电表测量一个阻值约为 2.0×104Ω的电阻,为了使测量结果比较精确,应选用的欧姆挡是________(选填“×10”、“×100”或“×1 k”). (2)用此多用电表进行测量,当选用量程为50 mA的电流挡测量电流时,表针指于图示位置,则所测电流为________ mA;当选用量程为250 mA的电流挡测量电流时,表针指于图示位置,则所测电流为________ mA. (3)当选用量程为10 V的电压挡测量电压时,表针也指于图示位置,则所测电压为________ V. 答案(1)1.5×103×1 k(2)30.8(30.7~30.9都正确)154(3)6.2 解析(1)欧姆表读数:对应最上一行刻度值为15,倍率为“×100”,读数为 1.5×103Ω;测 2.0×104Ω电阻时应选“×1 k”的欧姆挡. (2)选50 mA直流电流挡,则每一大格表示10 mA,每一小格表示1 mA,测量的 精确度为1 mA,应估读到0.1 mA(此时为1 10估读),指针对应的读数为30.8 mA; 选择量程为250 mA的电流挡,则每一大格表示50 mA,每一小格表示5 mA,测 量的精确度为5 mA,应估读到1 mA(此时为1 5估读),指针对应的读数为154 mA. (3)选择10 V电压挡,则每一大格表示2 V,每一小格表示0.2 V,测量的精确度为 0.2 V,应估读到0.1 V(此时应为1 2估读),指针对应的读数为6.2 V. 5.用多用电表的欧姆挡测量一未知电阻的阻值,若将选择倍率的旋钮拨至“×100 Ω”的挡时,测量时指针停在刻度盘0 Ω附近处,为了提高测量的精确度,有下列可供选择的步骤: A.将两根表笔短接 B.将选择开关拨至“×1 kΩ”挡 C.将选择开关拨至“×10 Ω”挡

第七章字符数组与指针练习题参考答案

第七章字符数组与字符串 【题7.29】下面是对s的初始化,其中不正确的是。 A)char s[5]={“abc”};B)char s[5]={‘a’,‘b’,‘c’}; C)char s[5]=“”;D)char s[5]=“abcdef”; 【题7.30】下面程序段的运行结果是。 char c[5]={‘a’,‘b’,‘\0’,‘c’,‘\0’}; printf(“%s”,c); A)‘a’‘b’ B)ab C)ab c 【题7.31】对两个数组a和b进行如下初始化 char a[]=“ABCDEF”; char b[]={‘A’, ‘B’,‘C’,‘D’,‘E’,‘F’}; 则以下叙述正确的是。 A)a与b数组完全相同B)a与b长度相同 C)a和b中都存放字符串D)a数组比b数组长度长 提示:‘\0’是字符串结束的标志 【题7.32】有两个字符数组a、b,则以下正确的输入格式是。 A)gets(a,b); B)scanf(“%s %s”,a,b); C)scanf(“%s %s”,&a,&b);D)gets(“a”),get(“b”); 【题7.33】有字符数组a[80]和b[80],则正确的输出形式是。 A)puts(a,b); B)printf(“%s %s”,a[],b[]); C)putchar(a,b); D)puts(a),puts(b); 【题7.34】下面程序段的运行结果是。 char a[7]=“abcdef”; char b[4]=“ABC”; strcpy(a,b); printf(“%c”,a[5]); A)空格B)\0 C)e D)f 提示:复制后a[0]=‘A’,a[1]=‘B’,a[2]=‘C’,a[3]=‘\0’, a[4]=‘e’,a[5]=‘f’, a[6]=‘\0’,

函数、指针与结构体练习题_参考答案

函数 (一)选择题 1.以下正确的说法是_________. 建立函数的目的之一是a)提高程序的执行效率 b)提高程序的可读性 c)减少程序的篇幅 d)减少程序文件所占存 2.以下正确的函数原型声明形式是________. a)double fun(int x,int y) b)double fun(int x; int y) c)double fun(int x, int y); d)double fun(int x,y); 3.C语言规定,简单变量做实参时,它和对应形参之间的数据传递方式为______. A)地址传递 B)单向值传递 C)由实参传给形参,再由形参传回给实参 D)由用户指定传递方式 4.C语言允许函数值类型缺省定义,此时该函数值隐含的类型是______. a)float b)int c)long d)double 5.已有以下数组定义和f函数调用语句,则在f函数的说明中,对形参数组array 的错误定义方式为________. int a[3][4]; f(a); a)f(int array[][6])

b)f(int array[3][]) c)f(int array[][4]) d)f(int array[2][5]) 6.以下程序的正确运行结果是_________. #include void num() { extern int x,y;int a=15,b=10; x=a-b; y=a+b; } int x,y; main() { int a=7,b=5; x=a+b; y=a-b; num(); printf("%d,%d\n",x,y); } a)12,2 b)不确定c)5,25 d)1,12 7.以下正确的描述是____________. a)C语言的预处理功能是指完成宏替换和包含文件的调用 b)预处理指令只能位于C源程序文件的首部 c)凡是C源程序中行首以"#"标识的控制行都是预处理指令 d)C语言的编译预处理就是对源程序进行初步的语法检查 8.在"文件包含"预处理语句的使用形式中,当#include后面的文件名用< >(尖括号)括起时,找寻被包含文件的方式是_______. a)仅仅搜索当前目录 b)仅仅搜索源程序所在目录

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);

指针经典练习题及答案

二、程序题 1、计算字符串中子串出现的次数。要求:用一个子函数subString()实现, 参数为指向字符串和要查找的子串的指针,返回次数。 2、加密程序:由键盘输入明文,通过加密程序转换成密文并输出到屏幕上。 算法:明文中的字母转换成其后的第4个字母,例如,A变成E(a变成e), Z变成D,非字母字符不变;同时将密文每两个字符之间插入一个空格。 例如,China转换成密文为G l m r e。 要求:在函数change中完成字母转换,在函数insert中完成增加空格, 用指针传递参数。 3、字符替换。要求用函数replace将用户输入的字符串中的字符t(T)都替换为e(E), 并返回替换字符的个数。 4、编写一个程序,输入星期,输出该星期的英文名。用指针数组处理。 5、有5个字符串,首先将它们按照字符串中的字符个数由小到大排列, 再分别取出每个字符串的第三个字母合并成一个新的字符串输出 (若少于三个字符的输出空格)。要求:利用字符串指针和指针数组实现。 6、定义一个动态数组,长度为变量n,用随机数给数组各元素赋值, 然后对数组各单元排序,定义swap函数交换数据单元,要求参数使用指针传递。7、实现模拟彩票的程序设计:随机产生6个数字,与用户输入的数字进行比较, 输它们相同的数字个数(使用动态内存分配)。 /*1、计算字符串中子串出现的次数。要求:用一个子函数subString()实现, 参数为指向字符串和要查找的子串的指针,返回次数。*/ #include int subString(char *a, char *b) { int i = 0; int j = 0; int m = 0; char *p = b; while(*a) { while(*a) { if(*a == *b) { break; } a++; } while(*b) { if(*a != *b)

计算机二级c语言第九章 数组和指针习题与答案

第九章数组和指针 1、有以下程序 main() { int a[]={2,4,6,8,10}, y=0, x, *p; p=&a[1]; for(x= 1; x< 3; x++) y += p[x]; printf("%d\n",y); } 程序运行后的输出结果是 A)10 B)11 C)14 D)15 2、有以下程序 void sum(int a[]) { a[0] = a[-1]+a[1]; } main() { int a[10]={1,2,3,4,5,6,7,8,9,10}; sum(&a[2]); printf("%d\n", a[2]); } 程序运行后的输出结果是 A)6 B)7 C)5 D)8 3、有以下程序 main() { int p[8]={11,12,13,14,15,16,17,18},i=0,j=0; while(i++< 7) if(p[i]%2) j+=p[i]; printf("%d\n",j); } 程序运行后的输出结果是 A)42 B)45 C)56 D)60 4、设有定义语句 int x[6]={2,4,6,8,5,7},*p=x,i; 要求依次输出x数组6个元素中的值,不能完成此操作的语句是 A)for(i=0;i<6;i++) printf("%2d",*(p++)); B)for(i=0;i<6;i++) printf("%2d",*(p+i)); C)for(i=0;i<6;i++) printf("%2d",*p++); D)for(i=0;i<6;i++) printf("%2d",(*p)++); 5、有以下程序 #include < stdio.h > main() { int a[]={1,2,3,4,5,6,7,8,9,10,11,12,},*p=a+5,*q=NULL; *q=*(p+5); printf("%d %d\n",*p,*q); } 程序运行后的输出结果是 A)运行后报错 B)6 6 C)6 11 D)5 10

电与磁经典练习题(带答案)

> 电与磁经典练习题含答案 1.如图所示,手压电筒都有一个按柄,通过塑料齿轮带动铜丝线圈内的磁性飞轮高速旋转,实现切割磁感线,产生感应电流,因此它是利用▲原理,把▲能转化为电能. 2.电梯为居民出入带来很大的便利,出于安全考虑,电梯都设置超载自动报警系统,其工作 原理如图甲所示。已知控制电路的电源电压U=6伏,保护电阻R1=l00欧,压敏电阻R2的阻 值随压力F大小变化如图乙所示,电梯底架自重和电磁铁线圈的阻值都忽略不计。 (1)当压敏电阻R。受到的压力F增大时,其阻值减小,控制电路中的电流增大,从而使电 磁铁的磁性增强。电梯超载时,衔铁被电磁铁吸住,触点K与触点__▲__接触,电铃发出警 报声。 (2)若电梯在20秒内将一位重600牛的乘客匀速提升l5米,求电梯对乘客做功的功率。 、 (3)当电磁铁线圈电流达到20毫安时:衔铁刚好被吸住。若该电梯厢内站立总质量为1000千克的乘客时,试通过计算说明电梯是否超载。(g取l0牛/千克) 3.如图是一种“闯红灯违规证据模拟器”的工作原理 图,光控开关接收到红光时会自动闭合,压敏电阻若同 时受到车的压力,其阻值变小,电磁铁的磁性因电路中 电流的改变而变_______ (强/“弱),当电流变化到一 定值时,衔铁与触点______( 1/2)接触,电控照相机工 作,拍摄违规车辆。 4.为了研究问题的方便,物理学家创造性地引入了一系列科学概念,譬如: ○1在研究光的传播时引入了“光线”;○2在研究物质结构时引入了“原子”;

○3在研究物质导电性时引入了“绝缘体”;○4在研究磁场时引入了“磁感线”; ○5在研究人类听觉范围时引入了“超声”。 其中属于科学假想而实际并不存在的是() A.○1○2 B.○1○4 C.○3○4 D.○2○5 — 5.如图是水位自动报警器示意图:(1)A、B都是碳棒,在水位由甲处升到乙处的过程中,碳棒B 受的浮力将___ (选填“变大”、“变小”或“不变”);(2)水库中的水是导体,当水位到达乙位置时,“控制电路”接通,电磁铁C产生磁性,吸下衔铁D,此时“工作电路”中__ 灯会发光警示;(3)若该灯两端的电压是220V,通过的电流是,则该灯的功率是 W。 6.一次家庭探究活动中,小明把一个正在发光的灯泡放到U形磁体中间,惊讶的发现了灯丝在晃动。关于这种现象,下列说法正确的是( ) A. 灯丝晃动是一种电磁感应现象 B. 灯丝晃动是内能转化成了机械能 — C. 灯丝晃动是受到磁体的吸引作用 D. 灯丝晃动是磁场对电流的作用 7.如图2所示,闭合开关,通电螺线管的上端为极, 将滑动变阻器滑片向右滑动,弹簧将 (选填“伸长”或“缩短”)。如果用电流表替代虚线框内仪 器,然后将条形磁体迅速插入线圈中,与之相连的电流表的 指针会发生偏转,这是现象。 图2 8.发电机和电动机的相继问世,使电能的大规模生产和利用成为现实,人类社会进入了电气化的时代.如图所示的四幅图,其中属于电磁感应现象实验图及其应用图的是( ) —

c语言指针部分题答案

#include int substring(char *s,char *t); int main() { char s[50]; char t[20]; int num; scanf("%s%s",s,t); num=substring(s,t); printf("%d\n",num); return 0; } int substring(char *s,char *t) { char *st=s; char *tt=t; int num=0; int offset=0; for(;*st!='\0';) { offset=0; for(;*tt!='\0';) { if(*st==*tt) { st++,tt++,offset++; } else break; } if(*tt=='\0') num++; else { st=st-offset+1; } tt=t; } return num; } #include void change(char *s); void insert(char *s);

int main() { char s[100]; scanf("%s",s); change(s); insert(s); printf("%s\n",s); return 0; } void change(char *s) { for(;*s!='\0';s++) { if(((*s)>'A'&&(*s)<='V')||((*s)>='a'&&(*s)<'v')) *s=(*s)+4; if(((*s)>='W'&&(*s)<='Z')||((*s)>='w'&&(*s)<='z')) *s=(*s)-22; } } void insert(char *s) { char temp[100]; int size=0,i; for(i=0;s[i]!='\0';i++) { temp[size]=s[i]; size++; temp[size]=' ',size++; } temp[size]='\0'; for(i=0;temp[i]!='\0';i++) s[i]=temp[i]; s[i]='\0'; } #include int replace(char *s); int main() { char s[50]; int num; scanf("%s",s);

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” ;

指针练习题及答案

六、指针习题及答案 一、单项选择题 1. *p最终值是( D) int *p,b=10;static int a[]={2,3,4,1,5,6}; p=a;p+=3;a[3]=b; A. 1 B. 3 C. 4 D. 10 2. *p最终值是( A ) char b[10]= "abcdefghi",*p; p=b+5; A. ’f’ B. ’g’ C. ’h’ D. ’e’ 3. 有一个二维数组a[3][4],其2行3列元素a[2][3]的正确表示方法为( D )。 A. &a[2][3] B. a[2]+3 C. *(a+2)+3 D. *(a[2]+3) 4. 指向一个包含4个整型元素的一维数组的行指针变量的定义形式为( D )。 A. int (*p)[] B. int *p[4] C. int *(p[]) D. int (*p)[4] 5. 4个指向int型元素的指针构成一个一维指针数组的定义形式为( B )。 A. int (*p)[] B. int *p[4] C. int *(p[]) D. int (*p)[4] 6. 若char *str1="china",char *str2="student"; 则语句strcpy(str2,str1)执行后,str2的值为( A )。 A. china B. student C. studentchina D. chinastudent 7.若有以下定义和语句: int a[]={1,2,3,4,5,6,7,8,9,0}, *p=a; 则值为3的表达式是( B )。 A. p+=2,*(++p) B.p+=2,*p++ C.p+=3,p++ D. p+=2,++*p 8.若有以下定义: char s[20]="programming", *ps=s; 则下列不能代表字符“o”的表达式是( A )。 A. ps+2 B. s[2] C. ps[2] D.ps+=2,*ps 9. 若有定义和语句: int **pp,*p, a=10,b=20;

C语言复习题及答案

一.单项选择题 1.下列选项中,不是转义字符集中的符号是( C )。 A \\ B \’ C 074 D \0 2. 下列给出的符号串中,不属于C语言保留字的是( B )。 A switch B cher C case D else 3. 下列给出的符号串中,不能作为C语言标识符的是( C )。 A a_2 B _2a C a.3 D a_3 4. 下列属于C语言字符常量的是( C )。 A ‘abc’ B “\n” C ‘a’ D ‘a\0’ 5. 字符串”ABC”再内存占用的字节数为( B )。 A 3 B 4 C 6 D 8 6. 设有宏定义“#define R 2+3”,则R*R的宏替换结果正确的是( B )。 A (2+3)*(2+3) B 2+3*2+3 C 5*5 D 5.0*5.0 7. 设整形变量I的值为3,则表达式i---i的值为( A )。 A 0 B 1 C 2 D 3 8. 表达式“10!=9”的值为( D )。 A true B 非零值 C 0 D 1 9. 设有语句int a=3;则执行了语句a+=a-=a*a;后,变量a的值为( D )。 A 3 B 0 C 9 D -12 10. 下列选项中,正确的赋值表达式为( C )。 A a=7+b+c=a+7 B a=7+b++=a+7 C a=(7+b,b++,a+7) D a=7+b,c=a+7 11. 若有以下定义语句:char a;float c; double d; 则表达式a*b+d-c值的类 型为( D )。 A float B int

C char D double 12. 用十进制数表示表达式“12||012”的运算结果是( A )。 A 1 B 0 C 14 D 12 13. 下列一组运算符中,优先级别最高的运算符是( C )。 A <= B = C % D && 14. 设定“ char a=3,b=6,c;”,计算表达式c=(a^b)<<2后c的二进制值是 ( D )。 A 00011100 B 00000111 C 00000001 D 00010100 15. 设x,y,z,t 均为int类型,则执行下列语句串后,变量t的值为(C )。 X=y=z=0; If(x=y) t=z; Else t=!z; A 不定值 B 2 C 1 D 0 16. 设整形变量m1值为3,m2值为2,m3值为1,执行下列语句后,整形变量 m4值为( D )。 Switch(m1=m2==m3+1) { case1:m4=1;break; case2:m4=3;break; case3:m4=2;break; default:m4=4; } A 1 B 2 C 3 D 4 17. 设有数据定义语句“int a[200];”,下列数组元素引用中下标不越界的是 ( A )。 A a[-1] B a[0] C a[201] D a[200] 18. 若有以下数据定义语句,则数值为4的表达式是( A )。 int a[12]={1,2,3,4,5,6,7,8,9,10,11,12}; A a[‘g’-‘c’] B a[4]

C语言指针习题及答案

指针主要内容的习题及答案 ?选择题 1. 变量的指针,其含义是指该变量的 __B ____________ 。 A )值 B )地址 C )名 D )一个标志 2. 已有定义int k=2;int *ptr1,*ptr2; 且ptrl 和ptr2均已指向变量k ,下面不 能正确执行的赋值语句是 B 。 4.已有变量定义和函数调用语句:int a=25;print_value (&a ); 下面函数的输出 结果是 D __________________ void prin t_value(i nt *x) { printf( “ %d\n” ,++*x); } A) 23 B ) 24 C ) 25 D ) 26 5.若有说明:int *p1, *p2,m=5,n; 以下均是正确赋值语句的选项是 ____ C ____________ 。 A) p 仁&m; p2=&p1 ; B ) p 仁&m; p2=&n; *p1 =*p2 ; C ) p 仁&m; p2=p1 ; D ) p 仁&m; *p 仁*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[1O]={“ china ” };等价于 char str[1O]; str[ ]={ “ china ” ;} C) char *s= ” china ” ; 等价于 char *s; s= ” china ” ; A) k=*ptr1+*ptr2 B ) ptr2=k C ) ptr1=ptr2 3.若有说明:int *p,m=5,n; A ) p=&n ; seanf( “ %d ,&p); C ) scanf( “ %d ,&n); *p=n ; 以下程序段正确的是 B scanf ( D *p = m ; D ) k=*ptr1*(*pt ⑵ D 。 )p = &n ; “%d ,*p); )p = &n ;

C语言指针习题及答案

指针主要内容的习题及答案?选择题 1.变量的指针,其含义是指该变量的A)值B)地址B 。 D )一个标志C)名 2.已有定义int k=2;int *ptr1,*ptr2; 且ptrl 和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 ; seanf( %d”,&p);seanf( %d”,*p); C) seanf( %d”,&n);D)p = &n ; *p=n ; *p = m ; 4. 已有变量定义和函数调用语句:int a=25;print_value(&a); 下面函数的输出结果是 D ___________ 。 void prin t_value(i nt *x) { printf( %d\n”,++*x); } A) 23 B) 24 C) 25 D) 26 5. 若有说明:int *p1, *p2,m=5,n; 以下均是正确赋值语句的选项是____ C _______ 。 A) p仁&m; p2=&p1 ; B) p仁&m; p2=&n; *p1 =*p2 ; C) p仁&m; p2=p1 ; D) p仁&m; *卩仁*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=”ch in a”;等价于char *a; *a=”ch in a”; B) char str[1O]={ china”};等价于char str[1O]; str[ ]={ china”;} C) char *s=”china”;等价于char *s; s=”china” ; D) char c[4]=”abc',d[4]= ”abc”;等价于char c[4]=d[4]= ”abc ;

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); }

相关文档
相关文档 最新文档