文档库 最新最全的文档下载
当前位置:文档库 › 指针练习题答案(1)

指针练习题答案(1)

指针练习题答案(1)
指针练习题答案(1)

指针单元练习题

一、选择题:

1.以下程序的运行结果是()

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

{*z=y-x;}

main()

{int a,b,c;

sub(10,5,&a);

sub(7,a,&b);

sub(a,b,&c);

printf(“%4d,%4d,%4d\n”,a,b,c);}

A.5,2,3

B.-5,-12,-7

C.-5,-12,-17

D.5,-2,-7

2.执行以下程序后,a的值为(),b的值为()

main(0

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

a=p1= =&m;

b=(- *p1)/(*p2)+7;

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

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

[1] A.-1 B.1 C.0 D.4

[2] A.5 B.6 C.7 D.10

3. 以下程序中调用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是一个指针变量

4. 以下程序有错,错误原因是()

main()

{int *p,i;

char *q,ch;

p=&i;

q=&ch;

*p=40;

*p=*q;……….}

A.p和q的类型不一致,不能执行*p=*q;语句;

B.*p中存放的是地址值,因此不能执行*p=40;语句

C.q没有指向具体的存储单元,所以*q没有实际意义

D.q虽然指向了具体的存储单元,但该单元中没有确定的值,所以不能执行*p=*q;语句

5. 已有定义:int k=2; int *ptr1,*ptr2;且ptr1和ptr2均指向变量k,下面不能正确执行的赋值语句是()

A.k=*ptr1+*ptr2;

B.ptr2=k;

C.ptr1=ptr2;

D.k=*ptr1*(*ptr2);

6. 变量的指针,其含义是指该变量的()

A.值

B.地址

C.名

D.一个标志

7. 若有语句:int *point ,a=4;point=&a;下面均代表地址的一组选项是()

A.a, point ,*&a

B.&*a,&a,*point

C.*&point ,*point ,&a

D.&a,&*point,point

8. 若有说明:int *p,m=5,n; 以下正确的程序段是()

A.p=&n;

scanf(“%d”,&p);

B.p=&n;

scanf(“%d”,*p);

C.scanf(“%d”,&n);

*p=n;

D.p=&n;

*p=m;

9. 设char *s= “\ta\017bc”;则指针变量s指向的字符串所占的字节数是()

A.9

B.5

C.6

D.7

10. 下面程序段中,for循环的执行次数是()

char *s= “\ta\018bc”;

for( ;*s!= ‘\0’;s++) printf(“*”);

A.9

B.5

C.6

D.7

11. 下面能正确进行字符串赋值的操作是()

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

12.下面程序段的运行结果是()。

char *s=”abcde”;

s+=2;printf(“%d”,s);

A.cde

B.字符’c’

C. 字符’c’的地址

D.无确定的输出结果

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

A.c=*p1+*p2;

B.p2=c;

C.p1=p2;

D.c=*p1*(*p2);

14.设有下面的程序段:

char a[]=”china”; char *p; p=s;则下列叙述正确的是()

A.s和p完全相同

B.数组s中的内容和指针变量p中的内容相等

C.s数组长度和p所指向的字符串长度相等

D.*p 与s[0]相等

15. 下列程序段的运行结果是()

char *format=”%s,a=%d,b=%d\n”;

int a=1,b=10;

a+=b;

printf(format , “a+=b”,a,b);

A.for,”a+=b”,ab

B.format ,”a+=b”

C.a+=b,a=11,b=10

D.以上结果都不对

16.下面程序段的运行结果是()

char a[ ]= “language”,*p;

p=a;

while(*p!= ‘u’) {printf(“%c”,*p-32);p++;}

https://www.wendangku.net/doc/431453417.html,NGUAGE

https://www.wendangku.net/doc/431453417.html,nguage

https://www.wendangku.net/doc/431453417.html,NG

https://www.wendangku.net/doc/431453417.html,ngUAGE

17. 若已定义:char s[10];则在下面表达式中不表示s[1]的地址的是()

A.s+1

B.s++

C.&s[0]+1

D.&s[1]

18. 当运行以下程序时,从键盘输入Happy,则下面程序的运行结果是()#include

#include

main( )

{char str[10],*p=str;

gets(p);

printf(“%d\n”,stre(p));}

stre(char str[ ])

{int num=0;

while(*(str+num)!= ‘\0’) num++;

return(num);}

A.7

B.6

C.5

D.10

19.下面程序的运行结果是()

# include

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

}

A.gae

B.ga

https://www.wendangku.net/doc/431453417.html,nguge

D.有语法错

20. 下面程序的运行结果是()

#include

#include

fun(char *s)

{char a[7];

s=a;

strcpy(a,”look”);}

main()

{char *p;

fun(p);

puts(p);}

A.look

B.look

C.look

D.不确定的值

21. 下面程序的运行结果是()

#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

22. 下面程序的运行结果是()

#include

#include

main( )

{char *p1,*p2,str[50]=”abc”;

p1=”abc”;p2=”abc”;

strcpy(str+1,strcat(p1,p2));

printf(“%s\n”,str);}

A.abcabcabc

B.bcabcabc

C.aabcabc

D.

23. 若有以下定义,则对a数组元素地址的正确引用是()

int a[5],*p=a;

A.*&a[5]

B.a+2

C.*(p+5)

D.*(a+2)

24.若有以下定义,int a[2][3];则对a数组的第i行第j列(假设i,j已正确说明并赋值)元素值的正确引用为()

A.*(*(a+i)+j)

B.(a+i)[j]

C.*(a+i+j)

D.*(a+i)+j

25. 若有以下定义,int a[2][3];则对a数组的第i行第j列(假设i,j已正确说明并赋值)元素地址的正确引用为()

A.*(a[i]+j)

B.(a+i)

C.*(a+j)

D.a[i]+j

26.若有以下定义和语句,则对a数组元素地址的正确引用为()

int a[2][3], (*p)[3];

p=a;

A.*(p+2)

B.p[2]

C.p[1]+1

D.(p+1)+2

27. 若有以下定义和语句,则对a数组元素的正确引用为()

int a[2][3], (*p)[3];

p=a;

A.(p+1)[0]

B.*(*(p+2)+1)

C.*(p[1]+1)

D.p[1]+2 .

28. 若有定义:int (*p)[4];则标识符p( )

A.是一个指向整型变量的指针

B.是一个指针数组名

C.是一个指针,它指向一个含有四个整型元素的一位数组

D.定义不合法

29. 若有定义:int *p[4];则标识符p( )

A.是一个指向整型变量的指针

B.是一个指针数组名

C.是一个指针,它指向一个含有四个整型元素的一位数组

D.说明不合法

30. 若有以下定义,则*(p+5)表示()

int a[10],*p=a;

A.元素a[5]的地址

B.元素a[5]的值

C.元素a[6]的地址

D.元素a[6]的值

31.若对a进行- -运算,则a应具有下面的说明()

A.int p[3];

int *a=p;

B.int k;

int *a=&k;

C.char *a[3];

D int b[10];

int *a=b+1;

32.若有以下定义和语句,则能正确表示a数组元素地址的表达式是()double a[5],*p1;

p1=a;

A.a

B.p1+5

C.*p1

D.&a[5]

33.若有以下定义,则数值不为3的表达式是()

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

A.x[3];

B.p1=x+3,*p1++

C.p1=x+2,*(p1++)

D.p1=x+2,*++p1

34.阅读以下程序:

main()

{int a[10]={2,4,6,8,10,12,14,16,18,20},*p;

p=a;

printf(“%x\n”,p);

printf(“%x\n”,p+9);

}

若第一个printf输出的是ffca,则第二个printf语句的输出是()

A.ffdd

B.ffdc

C.ffde D .ffcd

35. 设有以下定义:

char *cc[2]={“1234”, “5678”};则正确的叙述是()https://www.wendangku.net/doc/431453417.html,数组的两个元素中各自存放了字符串“1234”和“5678”的首地址

https://www.wendangku.net/doc/431453417.html,数组的两个元素分别存放的是含有4个字符的一维字符数组的首地址

https://www.wendangku.net/doc/431453417.html,是指针值,它指向含有两个数组元素的字符型一维数组

https://www.wendangku.net/doc/431453417.html,数组元素的值分别是“1234”和“5678”

36.下面程序的运行结果是()

main()

{int x[5]={2,4,6,8,10},*p,**pp;

p=x;

pp=&p;

printf(“%d”,*(p++));

printf(“%3d\n”,**pp);}

A.4 4

B.2 4

C.2 2

D.4 6

二、填空题:

1.下列程序的运行结果是__________*ptr1=7,*ptr2=5

swap(int *p1,int *p2) a=7,b=5

{int p;

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

main( )

{int a=5,b=7,*ptr1,*ptr2;

ptr1=&a; ptr2=&b;

swap(ptr1,ptr2);

printf(“*ptr1=%d,*ptr2=%d\n”,*ptr1,*ptr2);

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

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

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

sp=strcpy(s,sp);

s[0]= ‘h’;

puts(sp);

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

char s[20]= “abcd”;

char *sp=s;

sp++;

puts(strcat(sp, “ABCD”));

4.下面程序段的运行结果是____*2*4*6*8*________

char a[ ]= “123456789”,*p;

int i=0;

p=a;

while(*p)

{if(i%2= =0) *p= ‘*’;

p++;

i++;

}

put(a);

5.下面程序的功能是将字符串中的数字字符删除后输出,请填空:# include

delnum(char *s)

{int i,j;

for(i=0,j=0;s[i]!= ‘\0’;i++)

if(s[i]< ‘0’__||___s[i]> ‘9’) {s[j]=s[i];j++;}

___ s[j]!= ‘\0’_______;

}

main( )

{char *item;

gets(item);

delnum(item);

printf(“\n%s”,___item______);}

6.下面程序的功能是将字符串b复制到字符串a中,请填空:

# include

s(char *s,char *t)

{int i=0;

while (_(s[i]=t[i])!= ‘\0’___) ___i++______;}

main( )

{char a[20],b[10];

scanf(“%s”,b);

s(__a,b______);

puts(s);}

7.下面的程序的功能是将两个字符串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)____p1++______;

while (*p2) {*p1=_*p2_____;p1++;p2++;}

*p1= ‘\0’;

___return(p)__________;

}

8.下面程序的运行结果是___5______ # include

s(char *s)

{char *p=s;

while (*p) p++;

return (p-s);

}

main()

{char *a= “abded”;

int i;

i=s(a);

printf(“%d”,i);

}

9.若有以下输入1,2,则下面程序的运行结果是__a[1][2]=12_______

main()

{int a[2][3]={2,4,6,8,10,12};

int (*p)[3],i,j;

p=a;

scanf(“%d,%d”,&i,&j);

printf(“a[%d][%d]=%d\n”,i,j,*(*(p+i)+j));

}

10.下面程序的输出结果是____2 4 6 8 10 12_______

main()

{b[2][3]={2,4,6,8,10,12};

int *a[2][3]={*b,*b+1,*b+2,*(b+1),*(b+1)+1,*(b+1)+2};

int **q,k;

q=a[0];

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

{printf(“%4d”,**q);

q++;}

}

11.有以下main函数,经过编译、连接后得到的可执行文件名为file1.exe,若在系统的命令状态下输入命令行:file1 beijing shanghai <回车>,则可得到的输出是__beijing_________

main(int argc,char *argv[ ]) shanghai

{while (argc>1)

{++argv;

printf(“%s\n”,*argv);

--argc;}}

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)

托盘天平的使用练习题(含答案)

托盘天平的使用练习 一、选择题 1.使用天平称量物体质量前,发现托盘天平横梁的指针如图所示,则应() A. 将游码向左调节 B. 将游码向右调节 C. 向右端调节平衡螺母 D. 向左端调节平衡螺母 2.使用天平测量物体的质量,下列说法错误的是() A.在调节横梁平衡时,如果天平左盘下沉则应该把平衡螺母向右调 B.每移动一次天平的位置,都要重新调节衡梁平衡 C.称量物体质量时,若天平横梁不平衡,则不能调节平衡螺母 D.天平托盘哪边下沉,平衡螺母就向哪边调 3.使用托盘天平测量质量,下列操作中正确的是() A. 把水倒入右盘中称量 B. 用手拿着法码也是可以的 C. 物体放入左盘后可用调节螺母使天平平衡 D. 被测物体的质量不能超过天平的测量范围4.使用托盘天平测物体质量的实验中,下列哪一项是不必要的() A.使用天平时,应将天平放在水平工作台面上 B.调节横梁平衡时,应先将游码移至标尺左端的零刻度上 C.称量时,左盘应放置被测物体,右盘放置砝码 D.判断天平横梁是否平衡时,一定要等指针完全静止下来 5.使用托盘天平测量物体质量的时候,可能造成测量结果偏大的是() A. 测量时,指针偏向刻度盘的左边 B. 测量时,指针偏向刻度的右边 C. 装有物体的盘上粘有一小块泥(调平时就有,未发现) D. 使用生锈的砝码 6.在“使用托盘天平称物体质量”的实验中,下列各项操作中不妥当的是() A.使用天平时,应将其放在水平工作台上 B.调节横梁平衡时,应先将游码移至横梁标尺左端“0”刻度线处 C.判断天平横梁是否平衡时,一定要等指针完全静止下来 D.称量时左盘应放置被称量的物体,右盘放置砝码 7.在使用天平测量物体的质量时,发现指针略向左偏,以下做法可行的是()A.将天平的平衡螺母向右移B.将天平的平衡螺母向左移 C.将天平的游码向右移D.将天平的游码向左移 8.在使用天平测量物体质量的过程中,下列操作不规范的是() A.用镊子夹取砝码,以免砝码生锈 B.待测物体放在天平的左盘,砝码放在天平的右盘里 C.在测量中,调节横梁上的螺母,使指针在分度盘中央,然后读出示数 D.不用天平测量质量过大、超过天平测量范围的物体 9.在用托盘天平测量质量的实验中,如果使用了沾有油污的砝码,则() A.测量值比真实值偏大B.测量值比真实值偏小 C.测量结果仍然很准确D.测量结果偏大偏小是不能确定的 10.小明用托盘天平称一块橡皮的质量.正确使用天平时称得质量为m1;在托盘天平未调平衡(当指针静止时,还偏在分度盘中央刻度线的右边)就去称量,称得橡皮质量为m2.则m1和m2的大小关系是() A.m1=m2B.m1<m2C.m1>m2D.无法确定 11.在使用天平测物体质量时,为了较快测出物体质量,向托盘内增加砝码正确的做法是()

《C++指针》习题参考答案

《C++指针》习题 学号姓名 一、选择题 1、有定义如下:int a[5], *p; 则下列描述错误的是B A.表达式p=p+1是合法的B.表达式a=a+1是合法的 C.表达式p-a是合法的D.表达式a+2是合法的 2、函数定义为Fun(int &i),变量定义n=100,则下面调用该函数正确的 是C A.Fun(20) B.Fun(20+n) C.Fun(n) D.Fun(&n) 3、若有说明int I,j=2,*p=&i;则能完成i=j赋值功能的语句是B A.i=*p; B.*p=*&j; C.i=&j; D.i=**p; 4、设已有定义char *st = "how are you";下列程序中正确的是A 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); 5、设有数组int array[3][4],下列引用数组元素的方法中错误的是D A.array[i][j] B.*(*(array+i)+j) C. *(array[i]+j) D. *(array+i*4+j) 6、有定义int s[4][5],(*ps)[5];ps=s;则对数组s中元素引用的正确 的是C A.ps+1 B.*(ps+3) C. ps[0][2] D. *(ps+1)+3 7、设有说明int b[4][4],以下不能等价表示元素b[3][3]的是:B A.*&b[3][3] B.(*(*(b+3))+3) C.*(b[3]+3) D.*(*(b+3)+3) 8、若有说明"char *s[]={"234","5678","9012","3456","7890"};",则表达 式*s[1]> *s[3]比较的是B A."1234"和"9012" B.'5'和'3' C.'l'和'9' D."5678"和"3456" 9、设语句"char *s[]={"Student","Teacher","Father","Mother"},*ps=s[2];",执行语句"cout<<*s[1]<<','<

指针练习题

编程题 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用指向数组的指针变量输出数组的全部元素 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;。).下列关于创建一个int型变量的引用,正确的是(2A.int a(3),&ra=a; B int . a(3),&ra=&a;ra=a;D.int a(3), C.double d(3.1);int &rd=d;.下列关于指针概念的描述中,错误的是()。3 A.指针中存放的 是某变量或对象的地址值.指针的类型是它所存放的数值的类型 B .指针是变量,它也具有一个内存地址值 C .指针的值是可以改 变的D 。.下列关于引用概念的描述中,错误的是()4 A.引 用是变量,它具有值和地址值 B.引用不可以作数组元素 C.引用是变量的别名 D.创建引用时必须进行初始化。++*p相同的是()*p=a5.已知:int a[5],;则与a[0] . B.*++p A++a[0] .C*p++ D.;. . 6.已知:int a[ ]={1,2,3,4,5},*p=a;在下列数组元素地址的表

教材课后题答案-第6章_指针习题答案

习题解答 一、单项选择题 1.若定义了int n=2, *p=&n, *q=p;则下面【】的赋值是非法的。 A.p=q B. *p=*q C. n=*q D. p=n 【答案】D 2.若定义了double *p, a;则能通过scanf函数给输入项读入数据的程序段是【】。 A.p=&a; scanf(“%1e”,p); B. *p=&a; scanf(“%1f”,p); C. p=&a; scanf(“%f”,p); D. p=&a; scanf(“%1f”,a); 【答案】C 3.若定义了int a[10], i=3, *p; p=&a[5];下面不能表示为a数组元素的是【】。 A.p[-5] B. a[i+5] C. *p++ D. a[i-5] 【答案】D 4.若有如下定义: int n[5]={1,2,3,4,5},*p=n; 则值为5的表达式是【】。 A.*+5 B. *(p+5) C. *p+=4 D. p+4 【答案】C 5.设变量b的地址已赋给指针变量ps,下面为“真”的表达式是【】。 A.b==&ps B. b==ps C. b==*ps D. &b==&ps 【答案】C 6.设有以下定义和语句: int a[3][2]={1,2,3,4,5,6},*p[3]; p[0]=a[1]; 则*(p[0]+1)所代表的数组元素是【】。 A.a[0][1] B. a[1][0] C. a[1][1] D. a[1][2] 【答案】C 7.若定义了char *str=”Hello!”;下面程序段中正确的是【】。 A.char c[ ], *p=c; strcpy(p,str); B.char c[5], *p; strcpy(p=&c[1],&str[3]); C.char c[5]; strcpy(c,str); D.char c[5]; strcpy(p=c+2,str+3); 【答案】B 8.若有下面的程序段,则不正确的fxy函数的首部是【】。 main() { int a[20], n; … fxy(n, &a[10]); … } A.void fxy(int i, int j) B. void fxy(int x, int *y) C. void fxy(int m, int n[]) D. void fxy(int p, int q[10]) 【答案】A 9.不合法的带参数main函数的首部形式是【】。

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

指针综合练习题 一、选择题 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 Ω”挡

c语言指针的习题答案

指针练习题 1.有以下程序 main() { char a[]="programming",b[]="language"; char *p1,*p2; int i; 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 2.设有说明int(*ptr)[m];其中的标识符ptr是 A)M个指向整型变量的指针 B)指向M个整型变量的函数指针 C)一个指向具有M个整型元素的一维数组的指针 D)具有M个指针元素的一维指针数组,每个元素都只能指向整型量 3.若已定义:int a[9],*p=a;并在以后的语句中未改变p的值,不能表示a[1] 地址的表达式是 A) p+1 B) a+1 C) a++ D) ++p 4.若有语句int *point ,a=4;和point =&a;下面均代表地址的一组选项是 A. a,point,*&a B. &*a,&a,*point C. &point,*point,&a D. &a,&*point,point 5.下面程序段的运行结果是 char a[]=”language”,*p;p=a; while(*p!=’u’) {printf(“%c”, *p-32);p++;} A. LANGUAGE B. LANGuage https://www.wendangku.net/doc/431453417.html,NG https://www.wendangku.net/doc/431453417.html,ngUAGE 6.以下程序的运算结果是*p=1,m=3,n=5 。 #include void main() {

int a[5]={1,2,3,-4,5}; int m,n,*p; p=&a[0]; m=*(p+2); n=*(p+4); printf("*p=%d,m=%d,n=%d",*p,m,n); } 7.写一通用函数slength,求出一个字符串的长度,并用main函数调用slength。解: #include #include int slength(char str[]) { int i; for(i=0;str[i]!='\0';i++); return i; } void main() { char string[50]; int len; printf("请输入字符串:"); gets(string); len=slength(string); printf("字符串长度是%d",len); } 8.若有定义:int a[2][3],则对a数组的第i行j列元素地址的正确引用为______. A)*(a[i]+j) B)(a+i) C)*(a+j) D)a[i]+j 9.若有以下定义,则p+5表示_______. int a[10],*p=a; a)元素a[5]的地址b)元素a[5]的值 c)元素a[6]的地址d)元素a[6]的值 8.下面程序的运行结果是_______. #include #include main()

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

第七章字符数组与字符串 【题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.以下程序的运行结果是()。(2004南师大一、6) int f(char *s){ char *p=s; while(*p!='\0')p++; return(p-s); } void main(){ printf("%d\n",f("ABCDEF")); } 6 2. 以下程序的运行结果是()。(2004南师大一、10) main(){ int a[2][3]={{1,2,3},{4,5,6}}; int (*p)[3]=&a[0]; int m=(**p)*(**(p+1)); printf("%d\n",m); } 4 3. 假定下列程序的可执行文件名为prg.exe ,则在该程序所在的子目录下输入命令行:prg hello world<回车>后,程序的输出结果是()。(2004南师大二、4) main(int c,char *v[]){ int i; if(c<=0)return; for(i=1;i void main(){ int a[5]={1,2,3,4,5},*p,**q; p=a; q=&p; printf(“%d\t”,*(p++)); printf(“%d”,**q); }

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

函数 (一)选择题 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)仅仅搜索源程序所在目录

指针经典练习题及答案

二、程序题 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)

指针练习题答案(1)

指针单元练习题 一、选择题: 1.以下程序的运行结果是() sub(int x,int y,int *z) {*z=y-x;} main() {int a,b,c; sub(10,5,&a); sub(7,a,&b); sub(a,b,&c); printf(“%4d,%4d,%4d\n”,a,b,c);} A.5,2,3 B.-5,-12,-7 C.-5,-12,-17 D.5,-2,-7 2.执行以下程序后,a的值为(),b的值为() main(0 {int a,b,k=4,m=6,*p1=&k,*p2=&m; a=p1= =&m; b=(- *p1)/(*p2)+7; printf(“a=%d\n”,a); printf(“b=%d\n”,b);} [1] A.-1 B.1 C.0 D.4 [2] A.5 B.6 C.7 D.10 3. 以下程序中调用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是一个指针变量 4. 以下程序有错,错误原因是() main() {int *p,i; char *q,ch; p=&i; q=&ch; *p=40; *p=*q;……….} A.p和q的类型不一致,不能执行*p=*q;语句; B.*p中存放的是地址值,因此不能执行*p=40;语句 C.q没有指向具体的存储单元,所以*q没有实际意义 D.q虽然指向了具体的存储单元,但该单元中没有确定的值,所以不能执行*p=*q;语句 5. 已有定义:int k=2; int *ptr1,*ptr2;且ptr1和ptr2均指向变量k,下面不能正确执行的赋值语句是() A.k=*ptr1+*ptr2; B.ptr2=k; C.ptr1=ptr2; D.k=*ptr1*(*ptr2); 6. 变量的指针,其含义是指该变量的() A.值 B.地址 C.名 D.一个标志 7. 若有语句:int *point ,a=4;point=&a;下面均代表地址的一组选项是() A.a, point ,*&a B.&*a,&a,*point C.*&point ,*point ,&a D.&a,&*point,point 8. 若有说明:int *p,m=5,n; 以下正确的程序段是() A.p=&n; scanf(“%d”,&p); B.p=&n; scanf(“%d”,*p); C.scanf(“%d”,&n); *p=n; D.p=&n; *p=m; 9. 设char *s= “\ta\017bc”;则指针变量s指向的字符串所占的字节数是() A.9 B.5 C.6 D.7 10. 下面程序段中,for循环的执行次数是() char *s= “\ta\018bc”; for( ;*s!= ‘\0’;s++) printf(“*”); A.9 B.5 C.6 D.7 11. 下面能正确进行字符串赋值的操作是() 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); 12.下面程序段的运行结果是()。 char *s=”abcde”; s+=2;printf(“%d”,s); A.cde B.字符’c’ C. 字符’c’的地址 D.无确定的输出结果 13.设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是() A.c=*p1+*p2; B.p2=c; C.p1=p2; D.c=*p1*(*p2); 14.设有下面的程序段: char a[]=”china”; char *p; p=s;则下列叙述正确的是() A.s和p完全相同 B.数组s中的内容和指针变量p中的内容相等 C.s数组长度和p所指向的字符串长度相等 D.*p 与s[0]相等 15. 下列程序段的运行结果是() char *format=”%s,a=%d,b=%d\n”; int a=1,b=10; a+=b;

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

> 电与磁经典练习题含答案 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语言指针习题及答案

指针主要内容的习题及答案 一.选择题 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;

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