c++指针类练习题及答案.docx
- 文档编号:30006486
- 上传时间:2023-08-04
- 格式:DOCX
- 页数:19
- 大小:19.65KB
c++指针类练习题及答案.docx
《c++指针类练习题及答案.docx》由会员分享,可在线阅读,更多相关《c++指针类练习题及答案.docx(19页珍藏版)》请在冰豆网上搜索。
c++指针类练习题及答案
1、利用指针,编写用于交换两个整型变量值的函数。
程序运行结果如下:
输入:
56
输出:
65
#include
usingnamespacestd;
voidswap(int*xp,int*yp)
{
inttmp;
tmp=*xp;
*xp=*yp;
*yp=tmp;
}
intmain()
{
inta,b;
cin>>a>>b;
swap(&a,&b);
cout< return0; } 2、编写主程序,将输入字符串反序输出。 程序运行结果如下: 输入: ABCDEFGHIJK 输出: KJIHGFEDCBA #include #include usingnamespacestd; intmain() { charstr[100]; cin>>str; intlen; len=strlen(str); char*p=&str[len-1]; while(p>=str) { cout<<*p; p--; } cout< return0; } 3、使用指针编写一个用于对整型序列进行排序的函数,排序方法使用简单选择排序法。 程序的运行结果如下所示: 输入(第一个数是序列的长度): 6 272231 输出: 122237 #include usingnamespacestd; voidselectsort(int*list,intcount) { for(inti=0;i { intk=i; for(intj=i+1;j if(*(list+j)<*(list+k))k=j; if(k! =i) { inttmp=*(list+i); *(list+i)=*(list+k); *(list+k)=tmp; } } } intmain() { intn; cin>>n; intarray[20]; for(intj=0;j cin>>array[j]; selectsort(array,n); for(inti=0;i cout< return0; } 4、用指针编写一个对整型数组进行冒泡排序函数。 冒泡排序是指将相邻的元素进行比较,如果不符合所要求的顺序,则交换这两个元素;对整个数列中所有的元素反复运用上法,直到所有的元素都排好序为止。 程序运行结果如下: 输入(第一个数是数组的长度): 5 5038751261908 输出: 6187503512908 #include usingnamespacestd; voidbubble_up(int*ptr,intcount) { for(inti=0;i for(intj=count-1;j>i;j=j-1) if(*(ptr+j-1)>*(ptr+j)) { inttmp=*(ptr+j-1); *(ptr+j-1)=*(ptr+j); *(ptr+j)=tmp; } } intmain() { intn; cin>>n; intlist[100]; for(intx=0;x cin>>list[x]; bubble_up(list,n); for(inti=0;i cout< return0; } 5、编写程序,将某一个输入的位数不确定的正整数按照标准的三位分节格式输出,例如,当用户输入82668634时,程序应该输出82,668,634。 程序运行结果如下: 输入: 82668634 输出: 82,668,634 #include usingnamespacestd; intmain() { intn,i=1; chara[20],*ptr; ptr=a; cin>>n; do{ if(i%4) { *ptr=n%10+'0'; n=n/10; } else*ptr=','; ptr++; i++; }while(n); do{ ptr--; i--; cout<<*ptr; }while(i>1); cout< return0; } 6、编写程序,把10个整数赋予某个int型数组,然后用int型指针输出该数组元素的值。 输入参数是待输出元素的个数。 输出: 12345678910 注: 数组元素之间空一个空格。 #include usingnamespacestd; intmain() { inta[]={1,2,3,4,5,6,7,8,9,10},*ptr; ptr=a; for(inti=0;i<9;i++) { cout<<*ptr<<""; ptr++; } cout< return0; } 7、用指针编写一个程序,当输入一个字符串后,要求不仅能够统计其中字符的个数,还能分别指出其中大、小写字母、数字以及其他字符的个数。 程序运行结果如下: 输入: Iam21yearsold. 输出(五个数值依次为大、小写字母、数字、其他字符和总共含有的字符个数): 1 10 2 5 18 #include usingnamespacestd; 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++; } cout< cout< cout< cout< cout< return0; } 8、编写一个函数,用于将一个字符串转换为整型数值。 其原型为: intmyatoi(char*string); 其中参数string为待转换的字符串(其中包括正、负号和数字),返回值为转换结果。 程序运行结果如下: 输入: -529 输出: -529 #include usingnamespacestd; 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]; cin>>str; cout< return0; } 9、改善模拟梵塔问题的递归程序,打印移动过程的同时,再打印每一移动后个针上的金箔的数量。 初始金箔的数量由用户输入。 提示: 其中关于步数和状态可用静态变量。 程序的运行结果如下所示: 输入: 3 输出: Step0 A: 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) 注意: 冒号、逗号为英文符号,冒号、逗号后无空格。 #include usingnamespacestd; 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; cout<<"Step"< From"< "< "< "< } 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; cin>>n; step=1; x=n;y=0;z=0; cout<<"Step0: (A: "< 0C: 0)"< 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}; 程序运行结果如下: 输出: 77 321.42 #include usingnamespacestd; intmax(inta[],intn) { intmax=a[0]; for(inti=0;i max=a[i]>max? a[i]: max; returnmax; } doublemax(doublea[],intn) { doublemax=a[0]; for(inti=0;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}; cout< cout< return0; } 11、编写一个用于在字符串中查找某字符的函数。 查找成功,函数返回该字符的地址(指针),查找失败,返回的指针为NULL。 编写主函数测试该函数,在主函数中输入源字符串和要查找的字符,如果找到,显示字符在源字符串中的序号;如果找不到,显示“未找到”。 能找到时,程序运行结果如下: 输入(第一个参数是待查找的字符串,第二个是要查找的字符): ABCDEFGHIJKLMN D 输出: 4 查找不成功的情形: 输入: ABCDEFG S 输出: 未找到 #include usingnamespacestd; char*s(char*q,charb) { while(*q! =b&&*q! =0) q++; if(*q==b) returnq; else returnNULL; } intmain() { chara[15],b; char*k=a; cin>>a; cin>>b; if(*s(a,b)==b) cout< else cout<<"δÕÒµ½"< return0; } 12、用递归算法编写如下程序: 对于任意给定的实数X和整数k>0,计算X的K次方。 递归函数的名称必须为power。 程序运行结果如下: 输入(依次为X和K): 12.64 输出: 25204.7 #include usingnamespacestd; doublepower(doublex,intk) { if(x==0) return0; elseif(k==0) return1; else returnx*power(x,k-1); } intmain() { doublea,b; cin>>a>>b; cout< return0; } 13、使用递归算法编写求斐波那契数列的第n项的函数,函数名必须为fib,并编出主函数进行验证。 程序运行结果如下: 输入: 10 输出: 55 #include usingnamespacestd; intfib(intn) { if(n==0) return0; elseif(n==1) return1; else returnfib(n-1)+fib(n-2); } intmain() { intk; cin>>k; cout< return0; } 14、编写一个函数,用于去掉字符串尾部的空格符,其原型为: char*mytrim(char*string); 其中参数string为字符串,返回值为指向string的指针。 编写主函数测试,带空格的字符串由用户输入。 提示,输入字符串可以使用cin.getline(str,100); 程序运行结果如下: 输入(尾部带有空格的字符串): Theartofcomputerprogramming 输出(字符串首尾加方括号): [Theartofcomputerprogramming] [Theartofcomputerprogramming] 注意,输出中的方括号是为了看清字符串的边界,例中输入的字符串末尾有5个空格。 #include usingnamespacestd; char*mytrim(char*string) { char*q=string; while(*q! =0) q++; q=q-1; while(*q=='') q--; q=q+1; *q=0; returnstring; } intmain() { chara[100]; cin.getline(a,100); cout<<'['< cout<<'['< return0; } 15、编写一个函数,用于去掉字符串前面的空格,其原型为: char*myltrim(char*string); 其中参数string为字符串,返回值为指向string的指针。 编写主函数测试,开头带空格的字符串由用户输入。 提示,输入字符串可以使用cin.getline(str,100); 程序运行结果如下: 输入: Theartofcomputerprogramming 输出: [Theartofcomputerprogramming] [Theartofcomputerprogramming] #include #include usingnamespacestd; char*myltrim(char*string) { char*q=string; while(*q=='') q++; strcpy(string,q); returnstring; } intmain() { chara[100]; cin.getline(a,100); cout<<'['< cout<<'['< return0; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c+ 指针 练习题 答案