当前位置:文档之家› 第3章 数据类型——指针习题(有答案)

第3章 数据类型——指针习题(有答案)

第3章 数据类型——指针习题(有答案)
第3章 数据类型——指针习题(有答案)

第3章数据类型——指针习题及参考答案

1.若正常执行了如下语句:

int m[5]={9,8,4,5,6},*p1=m,*p2=&m[3],n;

n=p2-p1;

则n的值为(3 )。

2.若正常执行了如下语句:

int m[]={1,2,3,4,5,6,7,8},*p1=m+3,*p2=&m[6],*p3;

p3=p1+3;

cout<

则程序的输出是(4,7,7 )。

3.P为一指针变量,取p所指向单元的数据作为表达式的值,然后使p指向下一个单元的表达式是(*p++ )。

4.P为一指针变量,取p所指向单元的数据作为表达式的值,然后使该单元的数据值增1的表达式是((*p)++ )。

5.P为一指针变量,使p指向下一个单元,然后取该单元的数据作为表达式的值的表达式是(*++p )。

6.p1,p2都是字符指针,p1指向字符串“ABCDEFGIJKLMN”,p2-p1的差为9,则执行语句cout<

7.已知变量ld定义为:long ld;,现需要一个指向ld的指针p,但又禁止通过p修改ld,则p应定义为(const long *p=&ld )。

8.已知指针p为int型指针,且其指针值为5000,则p+3的指针值为(5000+3*sizeof(int) )。11.(单选)下列说法正确的是()。

A.空指针也称为void指针,是一种不指向任何数据的指针。

B.空指针也称为无类型指针,是一种可指向任何类型数据的指针。

C.除了void指针外,任何非空指针都指向某种既定类型的数据。

D.void指针也称为无类型指针,是一种不指向任何数据的指针。

12.(单选)下列说法正确的是()。

A.在2000,2001,2002…2007这几个连续的地址单元中可存放8个数据。

B.在2000,2001,2002…2007这几个连续的地址单元中可存放8个字符。

C.在2000,2001,2002…2007这几个连续的地址单元中可存放字符串”ABCDEFGH”。D.在2000,2001,2002…2007这几个连续的地址单元中可存放8个整数。

13.(单选)已知一运行正常的程序中有这样两个语句:

int *p1,*p2=&a;

p1=b;

由此可知,变量a和b的类型分别是()。

A.int和int

B.int *和int

C.i nt和int*

D.int*和int*

14.(多选)已知变量ld定义为:long ld;在下面关于指针p的定义中,不能通过p修改ld 的有()。

A.long *p=&ld;

B.l ong const *p=&ld;

C.l ong *const p=&ld;

D.const long *p=&ld;

15.(单选)已知I,j都是整形变量,下列表达式中,与下标引用X[I][j]不等效的是()。A.*(X[I]+j)

B.*(X+I)[j]

C.*(X+I+j)

D.*(*(X+I)+j)

16.(单选)要使指针变量p指向2维数组A的第一个元素(0行0列元素),正确的赋值表达式是()。

A.p=A或p=A[0][0]

B.p=A[0]或p=A[0][0]

C.p=A[0]或p=&A[0][0]

D.p=A或p=&A[0][0]

17.下列程序功能是:将字符串中的小写字母都改成对应的大写字母,其他字母不变。请更改程序中的错误。

#include

#include

char *fun(char str ) //?

{

int i;

for(i=0;str;i++) //?

if((…a?<=str[i])||(str[i]<=?z?))

str[i]+=32; //?

return *str; //?

}

main()

{

char str[81];

printf(“\n Please enter a string:”);

gets{str[81]};

printf(“\n The result string is:\n%s”,fun(str));

}

18.要使用引用jr代表变量int j;jr应定义为()。

19.要使引用pr代表变量char *p;pr应定义为()。

20.已知变量a,b定义为:int a=99,&b=a;则cout<

21.已知变量x,y定义为:int x[]={99,98,97},&y=x[1];则cout<

22.已知函数fa的原形是:int fa(int,char *);,pfa是指向fa的指针,则pfa的定义是()23.已知函数fb的原形是:char *fb(const char *);,pfb是指向fb的指针,则pfb的定义是()。24.(单选)已知函数f1的原形是:void f1(int *a,char *b);,变量v1,v2的定义是:int v1;char v2[]=”ABCDW”;,把v1和v2分别作为第一参数和第二参数来调用函数f1,正确的调用语句是()。

A.f1(v1,v2);

B.f1(&v1,v2);

C.f1(v1,&v2);

D.f1(&v1,&v2);

25.(单选)已知函数f1的原形是:

void f1(int *a,long b);

变量v1,v2的定义是:

int v1;long v2;

把v1和v2分别作为第一参数和第二参数来调用函数f1,正确的调用语句是()。

A.f1(v1,v2);

B.f1(&v1,v2);

C.f1(v1,&v2);

D.f1(&v1,&v2);

26.指针函数与函数指针的区别:

指针函数:返回指针值的函数

函数指针:指向函数的指针

(1)指针函数与函数指针形式上的区别:

int f1(int n){…}

char *f2(int n,char *s){…}

int (*pf1)(int);

pf1=f1;//或合并为:int (*pf1)(int)=f1;

char *(*pf2)(int ,char *);

pf2=f2;//或合并为:char *(*pf2)(int,char *)=f2;

(2)函数指针的应用:

#include

int add(int a,int b){return a+b;}

void main()

{

int (*p)(int ,int);

p=add;

cout<

cout<<(*p)(3,5); //8

cout<

cout<<(*add)(3,5); //8

}

(3)函数指针作为参数传递

int add(int a,int b){return a+b;}

int sub(int a,int b){return a-b}

int double(int a,int b,int (*p)(int ,int)){

return p(a,b)*2;

}

void main()

{

cout<

cout<

}

上述习题参考答案

1. 3

2.4,7,7

3.*p++

4.(*p)++

5.*++p

6.KLMN

7.const long *p=&ld

8.5000+3*sizeof(int)

11.C

12.B

13.C

14.BD

15.C

16.C

18.int &jr=j;

19.char *&pr=p;

20.98,100

21.97,196

22.int (*pfa)(int,char *)=fa;

23.char *(*pfb)(const char *)=fb;

24.B

25.B

第十章 指针

第十章指针 一、选择题 1.变量的指针,其含义是指该变量的_______________。 A) 值B) 地址C) 名D)一个标志 2.已有定义int k=2; int *ptr1, *ptr2;且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值是________________。 A)k=*ptr1+*ptr2 B) ptr2=k C) ptr1=ptr2D)k=*ptr1*(*ptr2) 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.若有定义:int *p1, *p2, m=5, n;以下____________是正确的赋值语句。 A) p1=&m; p2=&p1; B)*p1=*p2; C) p1=&m; p2=p1; D) p1=&m; *p2=*p1; 5.若有int *p, a=4;和p=&a;下面____________均代表地址。 A) a, p, *&a B)&*a, &a, *p C) *&p, *p, &a D)&a, &*p, p 6.若变量已正确定义并且指针p已经指向变量x,则*&x相当于____________。 A) x B) p C) &x D) &*p 7.若定义了int m, n=0, *p1=&m;则下列____________表达式与m=n等价。 A) m=*p1 B)*p1=&*n C) *&p1=&*n D) *p1=*&n; 8. 假如指针p已经指向整型变量x,则(*p)++相当于____________。 A) x++ B) p++ C) *(p++) D) &x++ 9. 对于基类型相同的两个指针变量之间,不能进行的运算是____________。 A) < B) = C) + D) - 10. 若程序中已包含头文件stdio.h,以下选项中正确运用指针变量的程序段是__________。 A) int *i=NULL; B) float *f=NULL scanf("%d",i); *f=10.5; C) char t='m',*c=&t; D) long *L; *c=&t; L='\0'; 11. 有如下函数和变量定义int a=25; 执行语句print_value(&a);后的输出结果是___________。 void print_value(int *x) { printf("%d",++*x); } A) 23 B) 24 C) 25 D) 26 12. 若有定义:char s[10]; 则在下面表达式中不表示s[1]的地址的是___________。 A) s+1 B) s++ C) &s[0]+1 D) &s[1] 13.若有定义:int a[5], *p=a; 则对a数组元素的正确引用是_____________。 A)*&a[5]B)a+2 C)*(p+5) D)*(a+2) 14. 若有定义:int a[5], *p=a; 则对a数组元素地址的正确引用是_____________。 A)p+5B)*a+1 C)&a+1 D)&a[0] 15. 若有定义:int a[5]; 则a数组中首元素的地址可以表示为_____________。 A)&a B)a+1 C)a D)&a[1] 16. 若要对a进行合法的自减运算,则之前应有下面___________的说明。 A) int p[3]; B) int k; C) char *a[3]; D) int b[10];

《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]<<','<

C程序设计第三版第十章题解

第十章指针 10.1 输入3个整数,按照从小到大的顺序输出 #include void main() { void swap(int *p1, int *p2); int n1,n2,n3; int *p1,*p2,*p3; printf("input three integer:"); scanf_s("%d,%d,%d",&n1,&n2,&n3); p1=&n1; p2=&n2; p3=&n3; if(n1>n2) swap(p1,p2); if(n1>n3) swap(p1,p3); if(n2>n3) swap(p2,p3); printf("the order: %d,%d,%d\n",n1,n2,n3); } void swap(int *p1, int *p2) { int temp; temp=*p1; *p1=*p2; *p2=temp; } NOTE:scanf的参数为地址,printf参数为参数 10.2输入三个字符串,按照从小到大的顺序输出 #include #include void main() { void swap(char *p1, char *p2); char str1[20],str2[20],str3[20]; printf("input three string:"); gets_s(str1); gets_s(str2); gets_s(str3); if(strcmp(str1,str2)) swap(str1,str2);

if(strcmp(str1,str3)) swap(str1,str3); if(strcmp(str2,str3)) swap(str2,str3); printf("the order: %s,%s,%s\n",str1,str2,str3); } void swap(char *p1, char *p2) { char temp[20]; strcpy(temp,p1); strcpy(p1,p2); strcpy(p2,temp); } NOTE:gets()用于获取字符串输入。strcmp() 和strcpy()的应用 10.3 输入10个整数,将其中最小的数和第一个数对换,把最大的数和最后一个数对换,写三个函数:①输入十个数;②进行处理;③输出十个数 #include void main() { void input(int *); void output(int *); void proceed(int *); int number[10]; input(number); proceed(number); output(number); } void input(int *number) { int i; printf("input ten integer:\n"); for (i=0;i<10;++i) { scanf("%d",&number[i]); } } void proceed(int *number)

教材课后题答案-第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;

指针练习题与答案

编程题 1用指向数组的指针变量输出数组的全部元素 #include void main( ) { int a[10], i; int *p; for (i=0; i<10; i++) cin>>a[i]; for (p=a; p void main( ) { int a[10], i; int *p=a; for (i=0; i<10; i++) cin>>a[i]; for (i=0; i<10; i++) cout<<*p++<<‘\t’; } 2 使用函数调用,形参为指针,实参为数组,把一个数组逆序存放在输出

#include void inv(int *x, int n); void main( ) { int i, a[10]={3,7,9,11,0,6,7,5,4,2}; inv(a,10); for (i=0;i<10; i++) cout<

第十章(指针)

1.补充程序,程序实现从10个数中找出最大值和最小值。 #include #include int max,min; void find_max_min(int *p,int n) { int *q; max=min=*p; for(q=p; q*q) min=*q; } void main() { int i,num[10]; printf("Input 10 numbers: "); for(i=0;i<10;i++) scanf("%d",&num[i]); find_max_min(/**/ num /**/,10); printf("max=%d,num=%d\n",max,min); } 2.补充程序,其中main函数通过调用average函数计算数组元素的平均值。 #include float average(int *pa,int n) { int k; /**/ float avg=0; /**/ for(k=0;k #include

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.doczj.com/doc/915248519.html,NG https://www.doczj.com/doc/915248519.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’,

C语言第十章习题答案

C程序设计[谭浩强](第三版)课后答案第十章指针2010-06-25 14:04 第十章指针 10.1 main() {int n1,n2,n3; int *p1,*p2,*p3; scanf("%d,%d,%d",&n1,&n2,&n3); p1=&n1; p2=&n2; p3=&n3; if(n1>n2)swap(p1,p2); if(n1>n3)swap(p1,p3); if(n2>n3)swap(p2,p3); printf("%d,%d,%d\n",n1,n2,n3); } swap(p1,p2) int *p1,*p2; {int p; p=*p1;*p1=*p2;*p2=p; } 10.2 main() {char *str1[20],*str2[20],*str3[20]; char swap(); scanf("%s",str1); scanf("%s",str2); scanf("%s",str3); if(strcmp(str1,str2)>0)swap(str1,str2); if(strcmp(str1,str3)>0)swap(str1,str3); if(strcmp(str2,str3)>0)swap(str2,str3); printf("%s\n%s\n%s\n",str1,str2,str3); } char swap(p1,p2) char *p1,*p2; {char *p[20]; strcpy(p,p1); strcpy(p1,p2); strcpy(p2,p); } 10.3 main() {int number[10]; input(number);

第十章练习题

第十章练习题 一、选择题 1.将逻辑值赋给内存变量LZ的正确方法是: A)LZ=“.T.”B)STORE “T” TO LZ C)LZ=TRUED)STORE .T. TO LZ 2.将98年国庆节的日期赋给内存变量ND的正确方法是: A)ND=DTOC(“10/01/98”)B)ND=CTOD([10/01/98]) C)STORE DATE()TO NDD)STORE 10/01/98 TO ND 3.执行命令INPUT “请输入出生日期:” TO MDATE时,如果通过键盘输入CTOD(“01/01/88”)则内存变量MDATE的值应当是: A)CTOD(“01/01/88”)B)“01/01/88” C)日期值01/01/88D)拒绝接收,MDATE不赋值 4.在DO WHILE .T.的循环中,退出循环应使用的命令是: A)LOOPB)EXITC)CLOSED)CLEAR 5.下列程序的运行结果是: A=10 IF A=10 S=0 ENDIF S=1 ?S A)0B)1C)程序出错D)结果无法确定 6.有如下的程序: M=0

N=0 DO WHILE N>M M=M+N N=N-10 ENDDO ?M 运行此程序后M的值为: A)0B)10C)100D)99 7.有如下程序: SET TALK OFF STORE 2 TO S,K DO WHILE S<14 S=S+K K=K+2 ENDDO ?S,K SET TALK ON RETURN 此程序运行后的输出结果是: A)2210B)228 C)148D)14108.执行如下程序:SET TALK OFF S=0 I=1

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

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

数据结构严蔚敏版第十章答案

第十章内部排序 10.23 void Insert_Sort1(SqList &L)//监视哨设在高下标端的插入排序算法 { k=L.length; for(i=k-1;i;--i) //从后向前逐个插入排序 if(L.r[i].key>L.r[i+1].key) { L.r[k+1].key=L.r[i].key; //监视哨 for(j=i+1;L.r[j].key>L.r[i].key;++j) L.r[j-1].key=L.r[j].key; //前移 L.r[j-1].key=L.r[k+1].key; //插入 } }//Insert_Sort1 10.24 void BiInsert_Sort(SqList &L)//二路插入排序的算法 { int d[MAXSIZE]; //辅助存储 x=L.r.key;d=x; first=1;final=1; for(i=2;i<=L.length;i++) { if(L.r[i].key>=x) //插入前部 { for(j=final;d[j]>L.r[i].key;j--) d[j+1]=d[j]; d[j+1]=L.r[i].key; final++; } else //插入后部 { for(j=first;d[j]

指针练习题答案(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、计算字符串中子串出现的次数。要求:用一个子函数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.以下程序的运行结果是【C】。 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.若已定义 char s[10]; 则在下面表达式中不表示s[1]的地址的是【 B 】 A)s+1 B)s++ C)&s[0]+1 D)&s[1] 3.下列程序能对两个整型变量的值进行交换。以下正确的说法是【 D】。 main() { int a=10,b=20; printf("(1)a=%d,b=%d\n",a,b); swap(&a,&b); printf(“(2)a=%d,b=%d\n”a,b); } swap(int p, int q) { int t; t=p;p=q;q=t;} A. 该程序完全正确 B. 该程序有错,只要将语句swap(&a,&b);中的参数改为a,b即可 C. 该程序有错,只要将swap()函数中的形参p和q以及t均定义为指 针(执行语句不变)即可 D. 以上说法都不正确 4.有四组对指针变量进行操作的语句,以下判断正确的选项是【】。 (1)int *p,*q; q=p; int a,*p,*q;p=q=&a; (2)int a,*p,*q; q=&a; p=*q; int a=20, *p; *p=a; (3)int a=b=0,* p; p=&a; b=* p; int a=20,*p,*q=&a; *p=*q; (4)int a=20,*p,*q=&a; p=q; int p, *q; q=&p; A.正确:(1);不正确:(2),(3),(4) B.正确:(l),(4);不正确:(2),(3) C.正确:(3);不正确:(1),(2),(4) D.以上结论都不正确 5.以下程序中调用scanf函数给变量a输入数值的方法是错误的,其错误原因是【】。

第五章指针习题解答

习题解答 第五章指针 1、指针的基类型定义了该指针所指向变量的类型。从技术上讲,任何类型的指针均可指向内存中的任何位置,但因所有的指针运算都是与它的基类型相关联的,所以正确说明指针非常重要。 (1)基类型使指针只能指向基类型定义的一类变量。 (2)限制引用操作满足基类型的约束(范围、运算、内存表示)。 (3)限制指针移动操作的跨度。 2、(1)通过指针引用数组元素是C语言提供的一种高效数组访问机制,通过带下标的指针变量引用一维数组元素。 (2)通过指针指向数组或数组元素的地址完成各种赋值、引用、移动、比较等操作。 数组名在C语言中被处理成一个地址常量,也就是数组所占连续存储单元的起始地址,一旦定义,数组名永远是数组的首地址,在其生存期不会改变。可以通过数组首地址引用数组元素,输出数组中全部元素。也可以将数组名与数组指针赋值完成各种操作。 3、(1)指针数组定义形式为int * a[size];实质是一个数组,共有size个元素,其中每个元素都是指针类型的,并且每个元素的基类型是整型。 (2)数组指针定义形式为int (*p)[size];实质是一个变量,是一个指针变量,这个指针变量的基类型是size 个int类型元素的数组。 简单的说数组指针是一个指针,它指向一个数组,通过这个指针可以对数组进行多种操作,和使用数组下标起到相同的作用,这个指针最初指向数组第一个元素;指针数组就是一个数组,它里边的元素都是指针。举例如下: int *p[5]; // 指针数组,p是数组名,数组里放5个int指针。 int (*p)[5]; // 数组指针,p是指针名,指向一个有5个int元素的数组。 4、(1)int *p;//定义了一个基类型为整型的指针变量p即p是整型指针。 (2)int *p[5];//定义了一个指针数组p,数组中含有5个基类型为整型的指针,即p 是5个元素的数组,数组元素是整型指针。 (3)int (*p)[5]; 定义了一个数组指针p,p指向一个含有5个整型元素的数组,即p 是指针,指向数组,数组有5个整型元素。 (4)int *fp();定义了一个函数fp,函数的返回值是个指向整型变量的指针变量。(5)int (*fp)(); 定义一个指向函数的指针变量fp,返回值为整型。 (6)int * (*fp)(); fp是指针,指向返回类型为整型指针的函数。 (7)void *fp();fp是函数,函数返回通用指针。 (8)int **p;定义了一个指向指针的指针p,p为整型指针的指针,即p是指针,指向一个整型指针。 5、(1)1 2 3 4 5 6 7 8 9 10 11 12 (2)11,11,11

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

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