指针编程题

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1.编写一函数,完成一个字符串的拷贝,要求用字符指针实现。在主函数中输入任意字符串,并显示原字符串,调用该函数之后输出拷贝后的字符串。#includestdio.hvoidcopy(char*pa,char*pb);intmain(void){chara[80],b[80];printf(Inputstring:\n);gets(a);printf(\nOldString=%s\n,a);printf(\n);copy(a,b);printf(\nNewString=%s\n,b);return0;}voidcopy(char*pa,char*pb){while(*pa!='\0'){*pb=*pa;pa++;pb++;}*pb='\0';}2.编写一函数,求一个字符串的长度,要求用字符指针实现。在主函数中输入字符串,调用该函数输出其长度。#includestdio.hvoidMyStrlen(char*pa);main(){chara[80];printf(pleaseinputa:);gets(a);MyStrlen(a);rerurn0;}voidMyStrlen(char*pa){intcount=0;while(*pa!='\0'){pa++;//指向下一位字符count++;}printf(实际字符个数为:%d\n,count);}3.从键盘上输入10个数据到一维数组中,然后找出数组中的最大值和该值所在的元素下标。要求调用子函数search(int*pa,intn,int*pmax,int*pflag)完成,数组名作为实参,指针作为形参,最大值和下标在形参中以指针的形式返回。编程素材有printf(Input10numbers:);和printf(Maxis:%d\n,...);以及printf(Maxpositionis:%d\n,...)#includestdio.hintsearch(int*pa,intn,int*pmax,int*pflag);intmain(){inta[10],i,max,flag,pmax;printf(Input10numbers:);for(i=0;i10;i++)scanf(%d,&a[i]);pmax=search(a,10,&max,&flag);printf(Maxis:%d\n,max);printf(Maxpositionis:%d\n,flag);}intsearch(int*pa,intn,int*pmax,int*pflag){inti,*max;max=pmax;*pmax=pa[0];for(i=1;in;i++){if(*pmaxpa[i]){*pmax=pa[i];*pflag=i;}}return*max;}4.从键盘上输入10个整数存放到一维数组中,将其中最小的数与第一个数对换,最大的数与最后一个数对换。要求进行数据交换的处理过程编写成一个函数,函数中对数据的处理要用指针方法实现。编程素材有printf(Input10datas:);和printf(Output10datas:);以及printf(%d,...);输入数据为:35,20,94,-23,39,-56,100,87,49,12.#includestdio.hvoidswap(int*p1,int*p2);voidfun(int*p);intmain(){inta[10],i;printf(Input10datas:);for(i=0;i10;i++)scanf(%d,&a[i]);fun(a);}voidswap(int*p1,int*p2){intt;t=*p1;*p1=*p2;*p2=t;}voidfun(int*pa){intmax,min,i,m,n;max=*pa;min=*pa;for(i=1;i10;i++){if(maxpa[i]){max=pa[i];m=i;}if(minpa[i]){min=pa[i];n=i;}}swap(&pa[0],&pa[n]);swap(&pa[9],&pa[m]);printf(Output10datas:);for(i=0;i10;i++)printf(%d,pa[i]);}5.编写一个函数(参数用指针)将一个3×3矩阵转置。#includestdio.hvoidfun(int(*pa)[3],int(*pb)[3]);intmain(){inta[3][3],i,j,b[3][3]={0};printf(Pleaseinputa:\n);for(i=0;i3;i++)for(j=0;j3;j++)scanf(%d,&a[i][j]);fun(a,b);for(i=0;i3;i++){for(j=0;j3;j++)printf(%d\t,b[i][j]);printf(\n);}return0;}voidfun(int(*pa)[3],int(*pb)[3]){inti,j;for(i=0;i3;i++)for(j=0;j3;j++)pb[j][i]=pa[i][j];}6.利用指向行的指针变量求5×3数组各行元素之和#includestdio.hvoidfun(int(*p)[3]);intmain(){inta[5][3],i,j;printf(请输入5*3矩阵a:\n);for(i=0;i5;i++)for(j=0;j3;j++)scanf(%d,&a[i][j]);fun(a);return0;}voidfun(int(*p)[3]){inti,j,sum=0;for(i=0;i5;i++){printf(第%d行元素之和为:,i+1);for(j=0;j3;j++)sum+=p[i][j];printf(%d\n,sum);sum=0;}}7.从键盘上输入10个整数存放到一维数组中,用函数实现将10个整数按输入时的顺序逆序排列,函数中对数据的处理要用指针方法实现。#includestdio.hvoidfun(int*pa,intt);intmain(){inta[10],i;printf(Input10numbers:);for(i=0;i10;i++)scanf(%d,&a[i]);fun(a,10);return0;}voidfun(int*pa,intt){inti;printf(Output10numbers:);for(i=t-1;i=0;i--)printf(%d,pa[i]);}8.用指针法编程,从键盘上输入多个字符串(每个串不超过5个字符且没有空格),用”*****”作为输入结束的标记。从所输入的若干字符串中,找出一个最大的串,并输出该串。要求串的输入以及最大串的查找通过调用编写的函数实现。编程素材有printf(****Inputstrings****\n);和printf(max=%s\n,...);输入内容为helloapplezoneworld*****。#includestdio.h#includestring.hvoidfind(char*name[],intn,int*p){inti,m=0;char*pmax=name[0];for(i=1;in;i++){if(strcmp(pmax,name[i])0){strcpy(pmax,name[i]);m=i;}}*p=m;}intmain(void){char*str[100];chara[100][6];inti=0,max;printf(****Inputstrings****\n);do{str[i]=a[i];scanf(%s,str[i]);i++;}while(strcmp(str[i-1],*****)!=0);find(str,i,&max);printf(max=%s\n,str[max]);return0;}9.在主函数中输入5个字符串(每个字符串的长度不大于20),并输出这5个字符串。编写一个排序函数,完成对这些字符串按照字典顺序排序。然后在主函数中调用该排序函数,并输出这5个已排好序的字符串。要求用指针数组处理这些字符串。编程素材有printf(*****Input5strings******\n);和printf(\n******SortBefore******\n);以及printf(\n******SortAfter******\n);输入内容为:Followme,BASIC,GreatWall,FORTRAN,Computerdesign。#includestdio.h#includestring.hvoidfun(char*pa[20]);intmain(){chara[5][20],*p[5];inti;printf(*****Input5strings******\n);for(i=0;i5;i++)gets(a[i]);for(i=0;i5;i++)p[i]=a[i];printf(\n******SortBefore******\n);for(i=0;i5;i++)puts(a[i]);printf(\n******SortAfter******\n);fun(p);for(i=0;i5;i++)puts(p[i]);return0;}voidfun(char*pa[20]){inti,j;char*temp=NULL;for(i=0;i4;i++)for(j=i+1;j5;j++){if(strcmp(pa[j],pa[i])0){temp=pa[i];pa[i]=pa[j];pa[j]=temp;}}}10.找出一个2×3的矩阵中的最大值及其行下标和列下标,要求调用子函数FindMax(intp[][3],intm,intn,int*pRow,int*pCol)实现,最大值以函数的返回值得到,行下标和列下标在形参中以指针的形式返回。编程素材有printf(Input6datas:);printf(\n****array****\n);和printf(%4d,...);以及printf(\nMax=%d,Row=%d,Col=%d\n,...);输入内容为:12,23,10,11,19,17.#includestdio.hintFindMax(intp[][3],intm,intn,int*pRow,int*pCol);intmain(){inta[2][3],i,j,row,col,max;printf(Input6datas:);for(i=0;i2;i++)for(j=0;j3;j++)scanf(%d,&a[i][j]);printf(\n****array****\n);for(i=0;i2;i++){for(j=0;j3;j++)printf(%4d,a[i][j]);printf(\n);}max=FindMax(a,2,3,&row,&col);printf(\nMax=%d,Row=%d,Col=%d\n,max,row,col);}intFindMax(intp[][3],intm,intn,int*pRow,int*pCol){int*max,i,j;max=p[0];*pRow=0;*pCol=0;for(i=0;im;i++)for(j=0;jn;j++){if(*maxp[i][j]){*max=p[i][j];*pRow=i;*pCol=j;}}return(*max);}11.从键盘上先后读入两个字符串,假定存储在字符数组s1和s2中。注意,这两个字符串最长均可达到26个字符、最短均可为0个字符。将字符串s2插入字符串s1中,生成一个新的字符串s。插入方法为s2的第i个字符插入到原s1的第i个字符后,如果s2比s1(假定s1的长度为L1)长,则s2的第L1个字符开始到s2结尾的所有字符按在s2中的顺序放在新生成的字符串s之后。用指针完成

1 / 12
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功