您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > C语言指针精选习题和答案
一、用指针方法编写一个程序,输入3个整数,将它们按由小到大的顺序输出#includestdio.hvoidswap(int*pa,int*pb){inttemp;temp=*pa;*pa=*pb;*pb=temp;}voidmain(){inta,b,c,temp;scanf(%d%d%d,&a,&b,&c);if(ab)swap(&a,&b);if(bc)swap(&b,&c);if(ac)swap(&a,&c);printf(%d,%d,%d,a,b,c);}二、C语言用指针方法输入3个字符串按由小到大顺序输出#includestdio.h#includestring.hintmain(intargc,char*argv[]){char*t;char*p1=NULL,*p2=NULL,*p3=NULL;charch1[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);return0;}9.4编程输入一行文字,找出其中的大写字母,小写字母,空格,数字,及其他字符的个数#includestdio.hvoidmain(){inta=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++;elseif(*p='a'&&*p='z')b++;elseif(*p=='')c++;elseif(*p='0'&&*p='9')d++;elsee++;p++;}printf(大写字母%d小写字母%d\n,a,b);printf(空格%d数字%d非字符%d\n,c,d,e);}9.5写一个函数,将33矩阵转置#includestdio.hvoidTranspose(int(*matrix)[3]){inttemp;inti,j;for(i=1;i3;i++)/*转置*/{for(j=0;ji;j++){temp=*(*(matrix+j)+i);*(*(matrix+j)+i)=*(*(matrix+i)+j);*(*(matrix+i)+j)=temp;}}}voidmain(){inta[3][3]={{1,2,3},{4,5,6},{7,8,9}};Transpose(a);for(inti=0;i3;i++){for(intj=0;j3;j++){printf(%d,a[i][j]);}printf(\n);}}}9.6用指向一维数组的指针做函数参数#includestdio.h#includestring.hintmain(){voidsort(char(*s)[6]);//一维数组的指针做函数参数inti;charstr[10][6];char(*p)[6];//定义一维数组的指针做函数参数printf(pleaseinputstring:/n);for(i=0;i10;i++)scanf(%s,&str[i]);p=str;//将str一维数组指针,赋值给p;sort(p);printf(theoutputsequence:/n);for(i=0;i10;i++)printf(%s/n,str[i]);return0;}voidsort(char(*s)[6])//s指向一维数组的指针做函数参数;{inti,j;chartemp[6],*t;t=temp;for(i=0;i9;i++)//i应该小于9;如果小于10,那么就比较了9+1次;按照冒泡法则,for(j=0;j9-i;j++)//第一次比较需要9次就是i=0到i=8共九次;第二次需要比较8次;依次类推;if(strcmp(s[j],s[j+1])0){strcpy(t,s[j]);strcpy(s[j],s[j+1]);strcpy(s[j+1],t);}}9.7编一程序,用指针数组在主函数中输入十个等长的字符串。用另一函数对它们排序,然后在主函数中输出10个已排好序的字符串//用指针数组处理#includestdio.h#includestring.hintmain(){voidsort(char*[]);inti;charstr[10][6],*p[10];printf(pleaseinput10string:/n);for(i=0;i10;i++)//首先将10个str的首地址赋值给10个p[i];p[i]=str[i];//将第i个字符串的首地址赋予指针数组p的第i个元素;for(i=0;i10;i++)scanf(%s,p[i]);//scanf输入到&p[i]sort(p);printf(theoutput10string:/n);for(i=0;i10;i++)printf(%s/n,p[i]);//输出到p[i];}voidsort(char*s[]){char*temp;inti,j;for(i=0;i9;i++)for(j=0;j9-i;j++)if(strcmp(*(s+j),*(s+j+1))0){temp=*(s+j);//*(s+j)指向数组指针,我想应该是字符串的首地址;所以可以直接赋值给temp指针;*(s+j)=*(s+j+1);*(s+j+1)=temp;}}9.8指针将n个数按输入时顺序的逆序排列,用函数实现#includestdio.hvoidreverse(inta[],intn){int*p;for(p=a+n-1;p=a;p--)printf(%4d,*p);printf(\n);}main(){inta[20],n;inti;printf(Inputthelengthofarray:);scanf(%d,&n);printf(Inputthenumberofarray:);for(i=0;in;i++)scanf(%d,&a[i]);reverse(a,n);}9.9写一函数,实现两个字符串的比较。即自己写一个strcmp函数,函数原型为:intstremp(char*p1,char*p2)设p1指向字符串s1,p2指向字符串s2。要求:当s1=s2时,返回值为0。当s1不等于s2时,返回它们二者的第一个不同字符的ASCII码差值(如“BOY”与“BAD”,第二字母不同,“O”与“A”之差为79-65=14);如果s1s2,则输出正值;如果s1s2,则输出负值。#includestdio.hmain(){intstrcmp(char*p1,char*p2);intm;charstr1[20],str2[20],*p1,*p2;printf(Inputtwostrings:\n);scanf(%s,str1);scanf(%s,str2);p1=&str1[0];p2=&str2[0];m=strcmp(p1,p2);printf(result:%d\n,m);}intstrcmp(char*p1,char*p2)/*两个字符串比较的函数*/{inti;i=0;while(*(p1+i)==*(p2+i))if(*(p1+i++)=='\0')return(0);/*相等时返回结果0*/return(*(p1+i)-*(p2+i));/*不等时返回结果为第一个不等字符ASCII码的差值*/}运行情况如下:①Inputtwostrings:CHINA↙Chen↙Result:-32②Inputtwostrings:hello!↙Hello!↙Result:0③Inputtwostings:dog↙cat↙result:19.10编一个程序,打入月份号,输出该月的英文月名。例如,输入“3”,则输出“March”,要求用指针数组处理。#includestdio.hmain(){char*month_name[13]={illegalmonth,January,February,March,April,May,June,July,August,September,October,November,December};intn;printf(Inputmonth:);scanf(%d,&n);if((n=12)&&(n=1))printf(Itis%s.\n,*(month_name+n));elseprintf(Itiswrong.\n);}运行结果:①Inputmonth:2↙ItisFebruary.②Inputmonth:8↙ItisAugust.③Inputmonth:13↙Itiswrong.9.11c语言:将字符串computer赋给一个字符数组,然后从第一个字母开始间隔地输出该串。请用指针实现#includestdio.h#includestring.h#defineMAX_LENGTH32intmain(){charstr[MAX_LENGTH]={0};char*pStr=(char*)&str;//1.将字符串computer赋给一个字符数组strcpy(str,computer);//2.然后从第一个字母开始间隔地输出该串while(*pStr!='\0'){printf(%c\n,*pStr);pStr++;}return1;}9.12从键盘上输入一个字符串,按后按照下面要求输出一个新字符串,新的字符串是在原来字符串中,每两个字符之间插入一个空格,如原来的字符串为“abcd”,新产生的字符串应为“abcd”编写一个程序咯用C就是输出的字符是每两个字符之间有一个空格#includestdio.hvoidmain(){chara[10],b[10],i=0,j=0;printf(输出字符串);scanf(%s,a);//abcdeffor(i=0;a[i]!='\0';i++){b[j++]=a[i];b[j++]='';}b[j]='\0';printf(%s,b);}9.13设有一数列,包含10个数,已按升序排好。现要求编一程序,它能够把从指定位置开始的n个数按逆序重新排列并输出新的完整数列。进行逆序处理时要求使用指针方法(例如:原数列为2,4,6,8,10,12,14,16,18,20,若要求把从第4个数开始的5个数按逆序重新排列,则得到新数列为2,4,6,16,14,12,10,8,18,20。)#includeiostream.hvoidmethod(intn,intm,int*a){int*p=a,*q=newint[m];p=p+n-1;for(inti=0;im;i++){q[i]=*p;p++;}p=p-m;for(i=0;im;i++){*p=q[m-1-i];p++;}}intmain(){inta[10]={2,4,6,8,10,12,14,16,18,20};method(4,5,a);for(inti=0;i10;i++){couta[i]'';}return0;}9.3有一字符串,包含n个字符。写一个函数,将此字符串从第m个字符开始的全部字符复制成为另一个字符串并输出voidstrcpyn(char*s,char*t,intn){char*p=s+n;char*q=t;while(*p){*q=*p;q++;p++;}
本文标题:C语言指针精选习题和答案
链接地址:https://www.777doc.com/doc-6239343 .html