指针习题

合集下载

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

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

《C++指针》习题学号姓名一、选择题1、有定义如下:int a[5], *p; 则下列描述错误的是 BA.表达式p=p+1是合法的B.表达式a=a+1是合法的C.表达式p-a是合法的D.表达式a+2是合法的2、函数定义为Fun(int &i),变量定义n=100,则下面调用该函数正确的是 CA.Fun(20) B.Fun(20+n) C.Fun(n) D.Fun(&n)3、若有说明int I,j=2,*p=&i;则能完成i=j赋值功能的语句是 BA.i=*p; B.*p=*&j; C.i=&j; D.i=**p;4、设已有定义char *st = "how are you";下列程序中正确的是 AA.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],下列引用数组元素的方法中错误的是 DA.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中元素引用的正确的是 CA.ps+1 B.*(ps+3) C. ps[0][2] D. *(ps+1)+37、设有说明int b[4][4],以下不能等价表示元素b[3][3]的是: BA.*&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]比较的是 BA."1234"和"9012" B.'5'和'3' C.'l'和'9' D."5678"和"3456"9、设语句"char *s[]={"Student","Teacher","Father","Mother"},*ps=s[2];",执行语句"cout<<*s[1]<<','<<ps<<','<<*ps<<'\n';",则输出结果是 A A.T,Father,F B.Teacher,F,FatherC.Teacher,Father,Father D.语法错无输出10、设有以下说明语句:char sl[20]="hello",s2[20]="china";const char *ptr=s1;以下语句中不符合C++语法规则的语句是 DA.strcpy(s2,ptr); B.ptr=s2; C.ptr=ptr+4; D.*ptr=*s2; 11、设s和t分别为指向两个长度相同的字符数组的指针,则循环语句while( C );可以正确实现字符串t到s的完整复制功能。

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

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

习题解答一、单项选择题1.若定义了int n=2, *p=&n, *q=p;则下面【】的赋值是非法的。

A.p=qB. *p=*qC. n=*qD. p=n【答案】D2.若定义了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);【答案】C3.若定义了int a[10], i=3, *p; p=&a[5];下面不能表示为a数组元素的是【】。

A.p[-5]B. a[i+5]C. *p++D. a[i-5]【答案】D4.若有如下定义:int n[5]={1,2,3,4,5},*p=n;则值为5的表达式是【】。

A.*+5B. *(p+5)C. *p+=4D. p+4【答案】C5.设变量b的地址已赋给指针变量ps,下面为“真”的表达式是【】。

A.b==&psB. b==psC. b==*psD. &b==&ps【答案】C6.设有以下定义和语句: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]【答案】C7.若定义了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);【答案】B8.若有下面的程序段,则不正确的fxy函数的首部是【】。

时分秒画指针练习题

时分秒画指针练习题

时分秒画指针练习题1. 时钟上有()小格,有()大格。

钟面上时针走一大格是(),分针走一大格是(),秒针走一大格是()。

2. 时针从8走到11,分针要走()圈;分针从3走到5,经过了()分;秒针从12走到7,经过了()秒。

3. 写出下面钟面上的时刻。

4. 钟面上,时针刚过了9,分针从12起走了6小格,现在是();时针指在5与6之间,分针指着5,现在是();时针接近9,分针指着11,现在是()。

5. 小华绕操场跑一圈用58秒,小文跑一圈用1分。

()跑得快,快()秒。

6. 钟面上时针刚过了5,分针指着5,这时是( : ); 钟面上时针靠近9,分针指着10,这时是(:)。

7. 妈妈8点上班,从家到妈妈单位要15分钟,妈妈最迟要在()时()分从家里出发。

8. 妈妈8点下班,从妈妈单位到家里要15分钟,妈妈最早在()时()分能到家。

9. 星期天,小明从上午7: 30开始做作业,10: 30正好做完,小明做作业共用了()。

时分秒综合练习21.1时=()分 1分=()秒2. ()走一圈是12小时;分针从12走到4,经过了(); 秒针走15圈,分针走()大格,从3走到()。

3. 写出下面钟面上的时刻。

:::::4.钟面上时针刚走过6,分针从12起走了5个小格,这时是()时()分;时针指在7和8之间,分针指着7,这时是()时()分。

5. 小芳从早上6时开始,先用10分洗脸刷牙,然后用15分吃早饭,再用()分读书,正好是一-小时,这时是(:)。

6. 小朋友参加50米赛跑。

小文用了12秒,小亮用了10秒,小刚用了9秒,小宁用了14秒。

()跑得最快,()跑得最慢。

跑得最快的比跑得最慢的少用()秒。

7. 左边的钟面上的时间是(); 20分钟前是()时()分;15分钟后是()时()分。

8. 时针从12走到5,经过()小时,从4走到11,经过()小时;分针从12走到6,经过()分,从3走到10,经过()分;秒针从12走到9,经过()秒,从12走到12,经过()秒。

认识钟表练习题含答案

认识钟表练习题含答案

认识钟表练习题含答案时钟是我们生活中很常见的物品之一,它帮助我们了解时间的流逝。

对于小朋友和初学者来说,认识钟表并学习如何读时间是一个重要的环节。

本文将为大家提供一些钟表练习题,通过这些练习题的训练,帮助大家更好地认识钟表并掌握读时间的能力。

练习题一:钟表的指针练习1. 当时针指向12点方向,分针指向6点方向,那么现在是几点钟?答案:现在是6点钟。

2. 当时针指向3点方向,分针指向12点方向,那么现在是几点钟?答案:现在是3点钟。

3. 当时针和分针重合在一起,那么现在是几点钟?答案:现在是12点钟。

练习题二:从钟表上读取时间4. 请根据以下钟表的指针方向,写出对应的时间。

(图片:一张钟表图片,时针指向8点方向,分针指向2点方向)答案:对应时间为8点2分。

5. 请根据以下钟表的指针方向,写出对应的时间。

(图片:一张钟表图片,时针指向4点方向,分针指向10点方向)答案:对应时间为4点10分。

6. 请根据以下钟表的指针方向,写出对应的时间。

(图片:一张钟表图片,时针指向12点方向,分针指向6点方向)答案:对应时间为12点6分。

练习题三:计算时间差7. 甲同学从上午10点钟开始读书,读了3个小时,那么结束时间是几点钟?答案:结束时间是下午1点钟。

8. 乙同学从下午2点钟开始睡觉,睡了5个小时,那么结束时间是几点钟?答案:结束时间是晚上7点钟。

9. 丙同学上午9点钟参加音乐课,课程持续50分钟,那么结束时间是几点几分?答案:结束时间是上午9点50分。

以上提供的练习题可以帮助小朋友和初学者巩固对钟表的认识和读时间的能力。

除了练习题,还有一些其他的方法可以帮助我们更好地认识和学习钟表。

第一,多观察周围的钟表和时间,通过观察不同钟表的指针方向和对应的时间,加深对钟表的认识。

第二,可以尝试制作自己的钟表模型,用纸板或者其他材料制作一个简易的钟表,通过自己动手制作钟表模型,加深对钟表结构的理解。

第三,可以利用手机或其他电子设备上的钟表应用程序,通过这些应用程序练习读时间和计算时间差,加强对钟表的认知。

C语言指针-练习

C语言指针-练习

复习题(二)一、基础题1、设有:int k[]={2,4,6,8,10,12}, *p=k+2; 表达式*(p+2)*p[2] 的值:100 。

2、设有:int a[10], *p1, *p2; 则执行语句:p1=a; p2=&a[5]; 则p2-p1的值:5。

3、设有:int x[]={4,3,2,1},q,*p=&x[1];则执行语句:q=(*--p)++ ; 后;变量q的值为4。

4、设有:int *p, a=10, b=1; 则执行以下语句:p=&a; a=*p+b; 后;a的值为:11。

5、下列程序段的输出结果是2,1 。

int k=1, j=2, *p=&k, *q=p;p=&j;printf("%d, %d",*p, *q);6、设x为整型变量,p为指向整型的指针变量,则让p指向x变量的赋值表达式是P=&x。

7、设有变量定义:float d[]={1.0,2.0,3.0,4.0,5.0}, *p=d+3;请写出printf("\n %f %f", *p, d[0]); 的输出结果为:4.0和 1.0。

8、设有变量定义如下:char s[]="Hello!", *p=s; int i;执行完for(i=0; *(p+i); i++); 后,变量i的值是_6_;*(p+i)的值是‟\0‟_。

9、函数void f(char s[ ], char t[ ]){ int k=0;while (s[k]=t[k]) k++;}等价于void f(char *s, char *t)1、{ while (*s++=*t++); }二、选择题1、下面的程序段用来定义指针并赋值,请选出语法正确的程序段( C )。

A)int *p; scanf(“%d”,p); B)int *s,k; *s=100;C) int *s,k; D) int *s,kchar *p,*c; char *p,*c;s=&k; p=&c; s=&k; p=&c;*p=‟a‟; s=p; *s=1;2、程序段:int *p,a,b=1; p=&a; *p=10; a=*p+b; 执行后,a的值(B)。

指针编程练习题

指针编程练习题

指针编程练习题指针是一种特殊的数据类型,在C语言中有着重要的作用。

通过指针,我们可以直接访问和操作内存中的数据。

为了熟悉和掌握指针的使用,下面将给出一些指针编程练习题供大家参考。

1. 交换两个变量的值请编写一个程序,使用指针来交换两个整数变量的值。

要求在程序中定义两个整数变量a和b,通过指针交换它们的值,并打印交换后的结果。

示例输入:a = 10,b = 20示例输出:交换前:a = 10, b = 20交换后:a = 20, b = 102. 求数组元素的和请编写一个程序,使用指针来计算一个整型数组中所有元素的和。

要求在程序中定义一个整型数组array,并使用指针访问数组中的元素,计算它们的和,并打印结果。

示例输入:array = {1, 2, 3, 4, 5}示例输出:数组元素的和为:153. 查找数组中的最大值和最小值请编写一个程序,使用指针来查找一个整型数组中的最大值和最小值。

要求在程序中定义一个整型数组array,并使用指针访问数组中的元素,找到数组中的最大值和最小值,并打印结果。

示例输入:array = {7, 4, 9, 2, 5}示例输出:最大值为:9最小值为:24. 字符串长度计算请编写一个程序,使用指针来计算一个字符串的长度。

要求在程序中定义一个字符数组string,并使用指针访问字符数组中的元素,计算字符串的长度,并打印结果。

示例输入:string = "Hello, World!"示例输出:字符串长度为:135. 动态内存分配请编写一个程序,使用指针来动态分配内存空间,并进行数据的读写操作。

要求在程序中使用malloc函数动态分配内存空间,读取用户输入的整数值并存储到动态分配的内存中,然后使用指针访问该内存中的数据,并打印结果。

示例输入:请输入一个整数: 10示例输出:读取到的整数为: 10以上是几个指针编程练习题的示例,通过练习这些题目,可以提高对指针的理解和使用技巧。

c语言第8章练习题--指针

c语言第8章练习题--指针

1、int *p 的含义是(B)A.p是一个指针, 用来存放一个整型数B.p是一个指针, 用来存放一个整型数据在内存中的地址C.p是一个整型变量D. 以上都不对2、以下函数用来求出两整数之和,并通过形参将结果传回,请填空。

void func(int x,int y, ___int*____ z){ *z=x+y; }3、有如下程序段(B)int *p,a=10,b=1;p=&a; a=*p + b;执行该程序段后,a的值是A. 12B. 11C. 10D. 编译出错4、若己定义:int a[9],*p=a;并在以后的语句中未改变p的值,不能表示a[1]地址的表达式是( C)A) p+1B) a+1C) a++D) ++p5、以下程序运行后的输出结果是(A)void main( ){ int a[ ]={1,2,3,4,5,6,7,8,9,0},*p;for(p=a;p<a+10;p++) printf("%d,",*p);}A)1,2,3,4,5,6,7,8,9,0,B)2,3,4,5,6,7,8,9,10,1,C)0,1,2,3,4,5,6,7,8,9,D)1,1,1,1,1,1,1,1,1,1,6、下面程序的输出是(D)void prtv(int *x)printf("%d\n", ++*x);}main(){ int a=25;prtv(&a);}A) 23 B) 24 C) 25D) 267、有以下函数(B)char fun(char *p){ return p; }该函数的返回值是A) 无确切的值B) 形参p中存放的地址值C) 一个临时存储单元的地址D) 形参p自身的地址值8、下列程序的输出结果是(7)#include<stdio.h>void fun (int *p1, int *p2){ if (*p1>*p2) printf ("%d\n",*p1);else printf ("%d\n",*p2);}void main ( ){ int a=3,b=7;fun (&a, &b);}9、下列程序的运行结果是(B)void fun(int *a, int *b){ int *k;k=a; a=b; b=k;}main(){ int a=3, b=6, *x=&a, *y=&b;fun(x,y);printf("%d %d", a, b);}A) 6 3 B) 3 6 C) 编译出错D) 0 010、以下程序调用findmax函数返回数组中的最大值(B)findmax(int *a,int n){ int *p,*s;for(p=a,s=a; p-a<n; p++)if ( ) s=p;return(*s);}main(){ int x[5]={12,21,13,6,18};printf("%d\n",findmax(x,5));}在下划线处应填入的是(B)A) p>s B) *p>*s C) a[p]>a[s] D) p-a>p-s11、下列程序段的输出结果是(A)void fun(int *x, int *y){ printf("%d %d", *x, *y); *x=3; *y=4;}main(){ int x=1,y=2;fun(&y,&x);printf("%d %d",x, y);}A) 2 1 4 3 B) 2 1 3 4 C) 1 2 1 2 D) 2 1 1 212、以下程序执行后输出的结果是___84________。

指针练习题及答案

指针练习题及答案

六、指针习题及答案一、单项选择题1. *p最终值是( D)int *p,b=10;static int a[]={2,3,4,1,5,6};p=a;p+=3;a[3]=b;A. 1B. 3C. 4D. 102. *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]+3C. *(a+2)+3D. *(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. chinaB. studentC. studentchinaD. chinastudent7.若有以下定义和语句: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,++*p8.若有以下定义:char s[20]="programming", *ps=s;则下列不能代表字符“o”的表达式是( A )。

A. ps+2B. s[2]C. ps[2]D.ps+=2,*ps9. 若有定义和语句:int **pp,*p, a=10,b=20;pp=&p;p=&a;p=&b;cout<<*p<<","<<**pp;则输出结果是: ( D )。

(完整word版)C语言指针习题___附答案

(完整word版)C语言指针习题___附答案

一、选择题1。

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

a)值 b)地址c)名 d)一个标志2.若有语句int *point,a=4;和point=&a;下面均代表地址的一组选项是_____。

a)a,point,*&a b)&*a,&a,*pointc)*&point,*point,&a d)&a,&*point ,point3.若有说明;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)26B) p=(long *)malloc(8);scanf(”%ld”,p);C) scanf(”%ld",p=&a);D) scanf("%ld",&a);7.有以下程序#include〈stdio。

h>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,28.有以下程序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)49。

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

第3章 数据类型——指针习题(有答案)
22.int (*pfa)(int,char*)=fa;
23.char *(*pfb)(const char *)=fb;
24.B
25.B
int(*pf1)(int);
pf1=f1;//或合并为:int(*pf1)(int)=f1;
char *(*pf2)(int,char *);
pf2=f2;//或合并为:char *(*pf2)(int,char*)=f2;
(2)函数指针的应用:
#include<iostream.h>
intadd(inta,intb){returna+b;}
20.已知变量a,b定义为:inta=99,&b=a;则cout<<a-1<<’,’<<b+1;的输出是()。
21.已知变量x,y定义为:intx[]={99,98,97},&y=x[1];则cout<<y-1<<’,’<<y*2;的输出是()。
22.已知函数fa的原形是:intfa(int,char*);,pfa是指向fa的指针,则pfa的定义是()
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.下列程序功能是:将字符串中的小写字母都改成对应的大写字母,其他字母不变。请更改程序中的错误。
23.已知函数fb的原形是:char *fb(const char *);,pfb是指向fb的指针,则pfb的定义是()。

指针经典练习题(含答案版)一

指针经典练习题(含答案版)一

指针经典练习题(含答案版)⼀指针⼀.填空题(20分)1. 指针变量是把内存中另⼀个数据的地址作为其值的变量。

2. 能够直接赋值给指针变量的整数是 0。

3. 如果程序中已有定义:int k;1)定义⼀个指向变量k的指针变量p的语句是 int* p = &k 。

2)通过指针变量,将数值6赋值给k的语句是 *p = 6; 。

3)定义⼀个可以指向指针变量p的变量pp的语句是 int ** pp; 。

4)通过赋值语句将pp指向指针变量p的语句是 pp = &p 。

5)通过指向指针的变量pp,将k的值增加⼀倍的语句是 *(*pp)*= 2; 。

4. 当定义某函数时,有⼀个形参被说明成int *类型,那么可以与之结合的实参类型可以是int型指针、 int型数组等。

4. 以下程序的功能是:将⽆符号⼋进制数字构成的字符串转换为⼗进制整数。

例如,输⼊的字符串为:556,则输出⼗进制整数366。

请填空。

45*8#includemain( ){ char *p,s[6]; int n; p=s; gets(p); n=*p-'0';while( *++p != '\0') //先++ ,后*n=n*8+*p-'0';printf("%d \n",n);}⼆.选择题(22分)1. 以下count函数的功能是统计substr在母串str中出现的次数。

int count(char *str,char *substr){ int i,j,k,num=0;for(i=0; ①B ;i++){for( ②B ,k=0;substr[k]==str[j];k++,j++)if(substr[ ③C ]==?\0?){num++;break;}}return num;}①A) str[i]==substr[i] B) str[i]!= 0C) str[i]==…\0? D) str[i]>substr[i]②A) j=i+1 B) j=i C) j=i+10 D) j=1③A) k B) k++ C) k+1 D) ++k2. 以下Delblank函数的功能是删除字符串s中的所有空格(包括Tab、回车符和换⾏符)。

指针习题

指针习题
(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)从字符串s的首字符起顺序查找右括号”)”的个数在任何时候均不超过所遇到的左括号”(”的个数;
若字符串同时满足上述两个条件,函数返回1,否则返回0
#include "stdio.h"
main()
{ char c[80];
int d;
printf("Input a string:");
gets(c);
A)ced B)字符'c' C)字符'c'的地址D)无确定的输出结果
14.设有下面的程序段,则下列正确的是。
char s[]="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)以上结果都不对

指针练习题及答案

指针练习题及答案

指针练习题及答案1. 请编写一个程序,交换两个变量的值,并通过指针来实现。

```c#include<stdio.h>void swap(int *a, int *b){int temp = *a;*a = *b;*b = temp;}int main(){int num1 = 10, num2 = 20;printf("交换前的值:num1=%d, num2=%d\n", num1, num2);swap(&num1, &num2);printf("交换后的值:num1=%d, num2=%d\n", num1, num2);return 0;}```2. 编写一个函数,统计字符串中某个字符出现的次数,并通过指针返回结果。

```c#include<stdio.h>int countChar(const char *str, char target){int count = 0;while(*str != '\0'){if(*str == target)count++;str++;}return count;}int main(){char str[] = "hello world";char target = 'l';int count = countChar(str, target);printf("字符 %c 出现的次数为:%d\n", target, count); return 0;}```3. 编写一个函数,找到整型数组中的最大值,并通过指针返回结果。

```c#include<stdio.h>int findMax(const int *arr, int size){int max = *arr;for(int i = 1; i < size; i++){if(*(arr+i) > max)max = *(arr+i);}return max;}int main(){int arr[] = {10, 20, 30, 40, 50};int size = sizeof(arr) / sizeof(arr[0]);int max = findMax(arr, size);printf("数组中的最大值为:%d\n", max);return 0;}```4. 编写一个函数,将字符串反转,并通过指针返回结果。

c语言指针习题及答案

c语言指针习题及答案

c语言指针习题及答案C语言指针习题及答案C语言作为一门广泛应用于软件开发和系统编程的编程语言,指针是其重要的特性之一。

掌握指针的使用对于理解和编写高效的C程序至关重要。

本文将介绍一些常见的C语言指针习题,并提供相应的答案,帮助读者更好地理解和掌握指针的概念和用法。

1. 习题一:交换两个变量的值请编写一个函数,接受两个整型指针作为参数,实现交换两个变量的值。

例如,如果输入a=10,b=20,函数执行后,a=20,b=10。

答案:```cvoid swap(int *a, int *b) {int temp = *a;*a = *b;*b = temp;}```2. 习题二:查找数组中的最大值和最小值请编写一个函数,接受一个整型数组和数组长度作为参数,返回数组中的最大值和最小值。

例如,对于数组[5, 2, 9, 1, 7],函数应该返回最大值9和最小值1。

答案:```cvoid findMinMax(int *arr, int length, int *max, int *min) {*max = *min = arr[0];for (int i = 1; i < length; i++) {if (arr[i] > *max) {*max = arr[i];}if (arr[i] < *min) {*min = arr[i];}}}```3. 习题三:计算字符串长度请编写一个函数,接受一个字符串作为参数,返回字符串的长度。

例如,对于字符串"Hello, World!",函数应该返回12。

答案:```cint stringLength(char *str) {int length = 0;while (*str != '\0') {length++;str++;}return length;}```4. 习题四:复制字符串请编写一个函数,接受两个字符串指针作为参数,将第一个字符串复制到第二个字符串中。

CH6-指针练习题及答案

CH6-指针练习题及答案

第六章指针练习题及答案一、填空题1、定义int a[]={1,2,3,4,5,6},*p=a;语句printf("%d",(*++p)++);的输出结果是()。

2、以下程序的执行结果是()。

main(){ char s[]="abcdefg"; char *p;p=s; printf("ch=%c\n",*(p+5)); }3、以下程序的执行结果是()。

main(){ int a[][={1,2,3,4,5,6};for(p=&a[5];p>=a;p--) printf("%d",*P);printf("\n"); }4、以下程序的执行结果是()。

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][2]);}5、设包含如下程序的文件名为myprog.c,编译后键入命令:myprog one two three,则执行结果是()。

main(int argc,char *argv[]){ int i;for(i=1;i<argc;i++)printf("%s%c",argv[i],(i<argc-1)?":');}6、下面程序的运行结果是()char s[80],*sp="HELLO!";sp=strcpy(s,sp); s[0]='h'; puts(s);7、下面程序段的运行结果是()char *s1="AbcdEf",*s2="aB";s1++; t=(strcmp(s1,s2)>0); printf("%d\n",t);8、下面程序段的运行结果是()char str[]="abc\0def\0ghi"; char *p=str; printf("%s",p+5)9、若有以下定义和语句:int a[4]={0,1,2,3},*p; p=&a[1]; 则++(*p)的值是()。

C习题指针部分

C习题指针部分

指针一、选择题1.变量的指针,其含义是指该变量的____________。

A.值B.地址C.名D.一个标志2.已知int *p,a;则语句“p=&a;”中的运算符“&”的含义是____________。

A. 逻辑与运算B.位与运算C.取指针内容D.取地址变量3.对于类型相同的指针变量,不能进行()运算。

A.+B.—C. =D.==4.若有语句int *point,a=4;和point=&a;下面均代表地址的一组选项是____________。

A.a,point,*&aB.&*a,&a,*pointC.*&point,*point,&aD.&a,&*point ,point5.设指针x指向的整型变量值为28,则printf(“%d\n”,++*x);的输出是____________。

A.27B.28C. 29D.306.若有说明:int *p,m=5,n;以下正确的程序段是____________。

A.p=&n; scanf(“%d”,&p);B.p=&n; *p=m;C.scanf(“%d”,&n); *p=n;D.p=&n; scan(“%d”,*p);7.若有以下定义和语句:则下列说法正确的是____________。

double r==99,,*p=&r*p=r;A.以上两处的*p含义相同,都说明给指针变量p赋值B.在double r==99,*p=&r,把r的地址赋给了p所指的存储单元C.语句“*p=r”,把变量r的值赋给指针变量pD.语句“*p=r”,取变量r的值放回r中8.执行下面程序段后,变量a的值为____________。

int *p,a,b=1;p=&a;*p=l0;a=*p+b;A.12B.11C.10D.编译错误9.若有说明:int i, j=7,*p=&i; 则i与j;等价的语句是____________。

指针 练习题

指针 练习题

指针练习题指针是C语言中非常重要的概念之一。

掌握指针的使用和理解对于C语言程序的编写至关重要。

本文将介绍一些指针的练习题,帮助读者巩固对指针的理解和应用。

练习题一:交换变量的值请编写一个函数,使用指针作为参数,交换两个整型变量的值。

函数原型为:void swap(int* p1, int* p2);在主函数中调用该函数进行测试,并输出交换后的结果。

练习题二:查找数组中的最大值和最小值请编写一个函数,使用指针作为参数,实现在一个整型数组中查找最大值和最小值的功能。

函数原型为:void findMinMax(int* arr, int size, int* max, int* min);其中,arr表示整型数组的首地址,size表示数组的大小,max和min分别表示最大值和最小值的指针。

在主函数中调用该函数进行测试,并输出最大值和最小值。

练习题三:统计字符出现次数请编写一个函数,使用指针作为参数,统计一个字符串中某个字符的出现次数。

函数原型为:int countChar(char* str, char ch);其中,str表示字符串的首地址,ch表示要统计的字符。

在主函数中调用该函数进行测试,并输出字符出现的次数。

练习题四:字符串反转请编写一个函数,使用指针作为参数,将一个字符串进行反转。

函数原型为:void reverseString(char* str);其中,str表示字符串的首地址。

在主函数中调用该函数进行测试,并输出反转后的字符串。

练习题五:动态分配内存并初始化请编写一个函数,使用指针作为参数,动态分配一块内存,并将其中的每个元素初始化为给定的初始值。

函数原型为:int* initArray(int size, int initialValue);其中,size表示要分配的内存块的大小,initialValue表示初始化的值。

在主函数中调用该函数进行测试,并输出分配的内存块中的元素。

通过以上的练习题,读者可以进一步巩固和提升对指针的理解和应用。

C语言指针习题及答案

C语言指针习题及答案

C语言指针习题及答案1.变量的指针,其含义是指该变量的地址。

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

3.若有说明:int *p。

m=5.n。

以下程序段正确的是p=*p=m。

4.已有变量定义和函数调用语句:int a=25.print_value(&a)。

下面函数的输出结果是26.void print_value(int *x){ printf("%d\n"。

++*x)。

}5.若有说明:int *p1.*p2.m=5.n。

以下均是正确赋值语句的选项是p1= p2=p1.6.若有语句:int *p。

a=4.和p=&a;下面均代表地址的一组选项是&*p。

&a。

p。

7.下面判断正确的是char *s="china"。

等价于char *s。

s="china";8.下面程序段中,for循环的执行次数是6.char*s="\ta\018bc"。

for (。

*s!='\0'。

s++) printf("*");9.下面能正确进行字符串赋值操作的是charstr[10]="china"。

1.strcmp1(char *s,char *t)改写为:int strcmp1(char *s。

char *t) { while (*s == *t) {if (*s == '\0') {return 0;s++;t++;return (*s - *t);2.strcmp2(char *s,char *t)改写为:int strcmp2(char *s。

char *t) {while (*s++ = *t++) {if (!*s) {return 0;return (*s - *t);3.strcmp3(char *s,char *t)改写为:int strcmp3(char *s。

C++指针函数习题

C++指针函数习题

C++指针函数习题一、选择题1.以下程序的运行结果是()。

sub(intx,inty,int*z){ *z=y-x;}voidmain(){ inta,b;sub(10,5,&a);sub(7,a,&b);2.)。

4.5.(去掉A)cdeB)字符'c'C)字符'c'的地址D)无确定的输出结果9.设有下面的程序段:则下列叙述正确的是()。

chars[]="china";char*p;p=s;A)s和p完全相同B)数组s中的内容和指针变量p中的内容相等C)*p与s[0]相等D)s数组长度和p所指向的字符串长度相等10.若有定义inta[5],*p=a;则对a数组元素的正确引用是()。

A)*&a[5]B)a+2C)*(p+5)D)*(a+2)11.若已定义chars[10];则在下面表达式中不表示s[1]的地址的是()。

A)s+1B)s++C)&s[0]+1D)&s[1]12.下面程序的运行结果是()。

#include<iostream.h>#include<string.h>intmain(){ char*s1="AbDeG";char*s2="Abdeg";s1+=2;s2+=2;cout<<strcmp(s1,s2);}A)负数B)正数C)零D)不确定的值18A)p=max;B)*p=max;C)p=max(a,b);D)*p=max(a,b);19.下面程序段的运行结果是()。

chara[]="language",*p;p=a;while(*p!='u'){cout<<(*p-32);p++;}A)LANGUAGEB)languageC)LANGD)language20.关于语句int*ptr();以下说法正确的是()。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

指针(C语言程序设计习题解答与上机指导)
1.以下说法正确的是()
A.一个变量的地址称为该变量的指针
B.变量的地址和指向它的指针变量的地址是相同的
C.指针变量的指向一旦确定就不能改变
D.不能定义两个指针变量指向同一个变量
答案:A
2.执行下面程序的输出结果为()
int m=1,j,+p=&m;
for (j=0;j<3;j++)
*p=*p+j;
printf(“%d,%d”,m,*p);
A. 1,4
B. 4,4
C.1,1
D.4,1
答案:B
3.若有“int a[6],*p;p=a;”,则不能正确对数组元素进行引用的是()
A.a[0]
B. *p
C. *(p+2)
D. p+2
答案:D
4.下列语句正确的是()
A. char a[]=”dcba”;
B. char a[10];a[]=”dcba”;
C. char *p;*p=”dcba”;
D. char a[10];a=”dcba”;
答案:A
5.若有“char *a[2]={“321”,“654”};”,以下说法正确的是()
A.数组a为2*4的二维数组
B.可以用puts(*a[0]);输出“321”
C.a[0]的值为“321”的首地址
D.定义错误
答案C
6.设有定义:float x,*p= &x;则下列表达式中错误的是()
A.*&p B. *&x C. &*p D. &*x
答案:D
7.若定义short num[][3]={2,4,6,8,10,12};则num[1][1]的值是()
A.8 B.4 C.2 D.10
答案:D
8.设有定义语句“float s[10],*p1=s,*p2=s+9;”,则下列表达式中,不能表示数组s的合法数组元素的是()
A.*(p1--)B.*(++p1)C.*(--p2)D.*(++p2)
答案:D
9.设有:char s[3][8]={“1”,“21”,“321”},*p=s;则正确的语句是()
A.printf(“%s”,*(p+1*8+0))
B.puts(*(*(p+1)+0))
C.scanf(“%s”,*(*(p+1)+0))
D.gets(&s[1][1])
答案:D
10.执行下列程序段后,*(p+5)的值是()
static char s[ ]=”Hello ”;
char *p;
p=s;
A.‘o ’
B.‘\0’
C.‘o ’的地址
D.不确定的值
答案:B
11. 以下程序的输出结果是()
#include “stdio.h ”
void main(void)
{
static int a[]={1,2,3,4,5,6},*p;
p=a;*(p+3)+=2;
printf(“%d,%d\n ”,*p,*(p+3));
}
A.0,5
B.1,5
C.0,6
D.1,6
答案:D
12. 在以下定义中,标识符p ()
int (*p )[3];
A. 定义不合法
B. 是一个指针数组名,每个元素是一个指向整型变量的指针
C. 是一个指针,它指向一个具有三个元素的一维数组
D. 是一个指向整型变量的指针
答案:C
13. 以下程序的输出结果是()
char *s=”ABCD ”,*p;
for(p=s;*p;p++)
printf(“%s\n ”,p);
答案:A
14. 下面程序的输出结果是()
#include <stdio.h>
void main(void)
{ int n=6,*p=&n;
*p=8;
printf(“%d\n ”,n);
}
A.8
B.6
C.7
D.不确定
答案:A
15. 下面程序的输出结果是()
#include <stdio.h>
void main(void)
A. ABCD
BCD
CD
D B. A B C D C. D C B A D. ABCD ABC AB A
{
int a=3,b=6,c=9;
int *pa=&a,*pb=&b,*p;
*(p=&c)=*pa*(*pb);
printf(“%d\n”,c);
}
A.8
B.18
C.27
D.9
答案:B
16.下面程序的输出结果是()
#include <stdio.h>
void main( void )
{
char a[]={0,1,2,3,4,5,6,7,8,9},*p=a;
printf(“%d,%d\n”,*p+3,*(p+6));
}
A.2,2
B.3,5
C.3,6
D.3,7
答案:C
17.下面程序的输出结果是()
#include <stdio.h>
void main(void)
{ int a[]={2, 4,6,8,10};
int *p=&a[4];
printf(“%d\n“,*--p);
}
A. 10
B.9
C.7
D.8
答案:D
18.若char s[10];s=“abcd”;printf(“%s”,s);程序的输出结果是()
A.abcd B.a C.dcba D.编译错误
答案:D
二、填空题
1.若定义int a[][3]={{1,2,3},{4,5,6}},(*p)[3]=a;则表达式*(*p+1)的值是 2 。

2.若定义char s[5][10],*p=s;则使用p来表示数组元素s[2][3]的表达式是*(p+2*10+3)。

3.数组名代表地址常量。

指针代表地址变量。

4.设有char s[]=“123456”,*p=s+1;则表达式“*p+1”值对应的字符是 3 。

5.对于数组x[5][5],*(x+2)+3表示&x[2][3] ,*(x[3]+2)表示x[3][2] 。

6.设有char *s=“ABCD”,则printf(“%s”,s)的输出是ABCD ;而printf(“%c”,*s)的输出是 A 。

7.将字符数组s1中的字符复制到字符数组s2中。

#include <stdio.h>
main()
{
char s1[80],s2[80],*p1,*p2;
gets s1 ;p1=s1;p2=s2;
while(*p2++=*p1++);
printf(“s2=%s”, s2 );
}
8.将输入的字符串按逆序打印出来。

例如,输入abcd,则按dcba顺序打印出来。

#include <string.h>
#include <stdio.h>
main()
{
char *str,s[20]; int n ;
str= s ;
scanf(“%s”,str);
n=strlen(str);
while(--n>=0)
{
str=&s[ n ];
printf(“%c”,*str);
}
}。

相关文档
最新文档