您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 制造加工工艺 > c++指针类练习题及答案
1、利用指针,编写用于交换两个整型变量值的函数。程序运行结果如下:输入:56输出:65#includeiostreamusingnamespacestd;voidswap(int*xp,int*yp){inttmp;tmp=*xp;*xp=*yp;*yp=tmp;}intmain(){inta,b;cinab;swap(&a,&b);coutabendl;return0;}2、编写主程序,将输入字符串反序输出。程序运行结果如下:输入:ABCDEFGHIJK输出:KJIHGFEDCBA#includeiostream#includecstringusingnamespacestd;intmain(){charstr[100];cinstr;intlen;len=strlen(str);char*p=&str[len-1];while(p=str){cout*p;p--;}coutendl;return0;}3、使用指针编写一个用于对整型序列进行排序的函数,排序方法使用简单选择排序法。程序的运行结果如下所示:输入(第一个数是序列的长度):6272231输出:122237#includeiostreamusingnamespacestd;voidselectsort(int*list,intcount){for(inti=0;icount-1;i++){intk=i;for(intj=i+1;jcount;j++)if(*(list+j)*(list+k))k=j;if(k!=i){inttmp=*(list+i);*(list+i)=*(list+k);*(list+k)=tmp;}}}intmain(){intn;cinn;intarray[20];for(intj=0;jn;j++)cinarray[j];selectsort(array,n);for(inti=0;in;i++)coutarray[i];return0;}4、用指针编写一个对整型数组进行冒泡排序函数。冒泡排序是指将相邻的元素进行比较,如果不符合所要求的顺序,则交换这两个元素;对整个数列中所有的元素反复运用上法,直到所有的元素都排好序为止。程序运行结果如下:输入(第一个数是数组的长度):55038751261908输出:6187503512908#includeiostreamusingnamespacestd;voidbubble_up(int*ptr,intcount){for(inti=0;icount;i=i+1)for(intj=count-1;ji;j=j-1)if(*(ptr+j-1)*(ptr+j)){inttmp=*(ptr+j-1);*(ptr+j-1)=*(ptr+j);*(ptr+j)=tmp;}}intmain(){intn;cinn;intlist[100];for(intx=0;xn;x++)cinlist[x];bubble_up(list,n);for(inti=0;in;i++)coutlist[i];return0;}5、编写程序,将某一个输入的位数不确定的正整数按照标准的三位分节格式输出,例如,当用户输入82668634时,程序应该输出82,668,634。程序运行结果如下:输入:82668634输出:82,668,634#includeiostreamusingnamespacestd;intmain(){intn,i=1;chara[20],*ptr;ptr=a;cinn;do{if(i%4){*ptr=n%10+'0';n=n/10;}else*ptr=',';ptr++;i++;}while(n);do{ptr--;i--;cout*ptr;}while(i1);coutendl;return0;}6、编写程序,把10个整数赋予某个int型数组,然后用int型指针输出该数组元素的值。输入参数是待输出元素的个数。输出:12345678910注:数组元素之间空一个空格。#includeiostreamusingnamespacestd;intmain(){inta[]={1,2,3,4,5,6,7,8,9,10},*ptr;ptr=a;for(inti=0;i9;i++){cout*ptr;ptr++;}coutendl;return0;}7、用指针编写一个程序,当输入一个字符串后,要求不仅能够统计其中字符的个数,还能分别指出其中大、小写字母、数字以及其他字符的个数。程序运行结果如下:输入:Iam21yearsold.输出(五个数值依次为大、小写字母、数字、其他字符和总共含有的字符个数):1102518#includeiostreamusingnamespacestd;intmain(){charstr[100];char*ptr=str;inttotal,cap,sma,num,oth;total=cap=sma=num=oth=0;cin.get(ptr,100);while(*ptr!=0){total++;if(*ptr='A'&&*ptr='Z')cap++;elseif(*ptr='a'&&*ptr='z')sma++;elseif(*ptr='0'&&*ptr='9')num++;elseoth++;ptr++;}coutcapendl;coutsmaendl;coutnumendl;coutothendl;couttotalendl;return0;}8、编写一个函数,用于将一个字符串转换为整型数值。其原型为:intmyatoi(char*string);其中参数string为待转换的字符串(其中包括正、负号和数字),返回值为转换结果。程序运行结果如下:输入:-529输出:-529#includeiostreamusingnamespacestd;intatoi(char*string){intnum=0;ints=1;if(*string=='-'){s=-1;string++;}if(*string=='+'){s=1;string++;}while(*string!=0&&*string='0'&&*string='9'){num=num*10+*string-'0';string++;}returns*num;}intmain(){charstr[50];cinstr;coutatoi(str)endl;return0;}9、改善模拟梵塔问题的递归程序,打印移动过程的同时,再打印每一移动后个针上的金箔的数量。初始金箔的数量由用户输入。提示:其中关于步数和状态可用静态变量。程序的运行结果如下所示:输入:3输出:Step0A:3B:0C:0)Step1:FromAtoC,(A:2B:0C:1)Step2:FromAtoB,(A:1B:1C:1)Step3:FromCtoB,(A:1B:2C:0)Step4:FromAtoC,(A:0B:2C:1)Step5:FromBtoA,(A:1B:1C:1)Step6:FromBtoC,(A:1B:0C:2)Step7:FromAtoC,(A:0B:0C:3)注意:冒号、逗号为英文符号,冒号、逗号后无空格。#includeiostreamusingnamespacestd;intstep,x,y,z;voidmove(charfrom,charto){if(from=='A')x=x-1;if(from=='B')y=y-1;if(from=='C')z=z-1;if(to=='A')x=x+1;if(to=='B')y=y+1;if(to=='C')z=z+1;coutStepstep:Fromfromtoto,(A:xB:yC:z)endl;}voidhannoi(intn,chara,charb,charc){if(n==1){move(a,c);step++;}else{hannoi(n-1,a,c,b);move(a,c);step++;hannoi(n-1,b,a,c);}}intmain(){intn;cinn;step=1;x=n;y=0;z=0;coutStep0:(A:nB:0C:0)endl;hannoi(n,'A','B','C');return0;}10、重载求数组中最大元素的函数(两个函数,一个求整数的最大值,另一个求双精度的最大值),函数名为:max_element。测试数据如下:数组A为整型,数值为{19,33,69,55,77,12,52};数组B为实数,数值为{10.1,21.3,12.4,321.42,5.2,7.1,8.3,12.31,70.0};程序运行结果如下:输出:77321.42#includeiostreamusingnamespacestd;intmax(inta[],intn){intmax=a[0];for(inti=0;in;i++)max=a[i]max?a[i]:max;returnmax;}doublemax(doublea[],intn){doublemax=a[0];for(inti=0;in;i++)max=a[i]max?a[i]:max;returnmax;}intmain(){inta[7]={19,33,69,55,77,12,52};doubleb[9]={10.1,21.3,12.4,321.42,5.2,7.1,8.3,12.31,70.0};coutmax(a,7)endl;coutmax(b,9)endl;return0;}11、编写一个用于在字符串中查找某字符的函数。查找成功,函数返回该字符的地址(指针),查找失败,返回的指针为NULL。编写主函数测试该函数,在主函数中输入源字符串和要查找的字符,如果找到,显示字符在源字符串中的序号;如果找不到,显示“未找到”。能找到时,程序运行结果如下:输入(第一个参数是待查找的字符串,第二个是要查找的字符):ABCDEFGHIJKLMND输出:4查找不成功的情形:输入:ABCDEFGS输出:未找到#includeiostreamusingnamespacestd;char*s(char*q,charb){while(*q!=b&&*q!=0)q++;if(*q==b)returnq;elsereturnNULL;}intmain(){chara[15],b;char*k=a;cina;cinb;if(*s(a,b)==b)couts(a,b)-k+1endl;elsecoutδÕÒµ½endl;return0;}12、用递归算法编写如下程序:对于任意给定的实数X和整数k0,计算X的K次方。递归函数的名称必须为power。程序运行结果如下:输入(依次为X和K):12.64输出:25204.7#includeiostreamusingnamespacestd;doublepower(doublex,intk){if(x==0)return0;elseif(k==0)return1;elsereturnx*power(x,k-1);}intmain(){doublea,b;cinab;coutpower(a,b)endl;return0;}13、使用递归算法编写求斐波那契数列的第n项的函数,函数名必须为fib,并编出主函数进行验证。程序运行结果如下:输入:10输出:55#includeiostreamusingnamespacestd;intfib(intn){if(n==0)return0;elseif(n==1)return1;elser
本文标题:c++指针类练习题及答案
链接地址:https://www.777doc.com/doc-3972275 .html