c++基础练习题100道.docx

上传人:李司机 文档编号:6991172 上传时间:2024-04-01 格式:DOCX 页数:43 大小:122.15KB
返回 下载 相关 举报
c++基础练习题100道.docx_第1页
第1页 / 共43页
c++基础练习题100道.docx_第2页
第2页 / 共43页
c++基础练习题100道.docx_第3页
第3页 / 共43页
c++基础练习题100道.docx_第4页
第4页 / 共43页
c++基础练习题100道.docx_第5页
第5页 / 共43页
点击查看更多>>
资源描述

《c++基础练习题100道.docx》由会员分享,可在线阅读,更多相关《c++基础练习题100道.docx(43页珍藏版)》请在三一办公上搜索。

1、*1、打印出所有的“水仙花数“。所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如,153是一水仙花数,因为153=13+53+33o*/#includevoidmain()(inti,a=0,b=0,c=0;for(i=100;i1000;i+)(a=i%10;b=i10%10;c=i100%10;if(a*a*a+b*b*b+c*c*c=i)cout,i=i1,2,3*/#includevoidmain()(inti,j,sum=0za50,k,t;for(i=l;i=1000;i+)(sum=0;for(j=l;ji;j+)(if(i%j=0)(sum+=j;ak+=j;

2、)t=k;if(sum=i)(couti,;for(k=0;kt;k+)(coutak;if(kt-l)cout,;coutendl;)k=0;)*3、求Sn=a+aa+aaa+.+aa.a之值,其中a是一个数字。例如:2+22+222+.+22222(此时n=5),n由键盘输入。*/#includevoidmain()(doublearsn=O.O,sum=O.O;intn,i;couta;coutn;sn=a;sum=a;for(i=2;i=n;i+)(sum=sum*10+a;sn+=sum;)cout,Sn=snendl;)*4、一球从100米高度自由落下,每次落地后反跳回原高度的一半

3、,再落下。求它在第10次落地时,共经过了多少米第10次反弹多高*/#includevoidmain()(doublehl=100zh2=100,sum=0.0;inti;for(i=l;i=10;i+)(sum+=h2;hl=hl2.0;h2=hl*2;cout,sum=,sum,hl=,hlendl;*5、猴子吃桃问题。猴子第一天摘下假设干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉了一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩一个桃子了。求第一天共摘了多少桃子。*/#includevoidmain()(intnu

4、mber,i;number=l;for(i=10;il;i-)number=(number+1)*2;coutnnumber=,numberendl;)第4章函数*K写一函数用“气泡法”对输入的10个字符按由小到大的顺序排列。*/#includevoidmain()inti,j,temp,a10;cout,pleaseinputtennumbers:n;for(i=0;iai;for(i=0;i10;i+)/每循环一次确定数组中一个数的位置for(j=i+l;jaj)(temp=aj;aj=ai;ai=tem;)cout,resortresult=;for(i=0;i10;i+)coutai1

5、)*/#includedoublefun(double,double);voidmain()(doublen,rsum;cout,inputnandx,nx;sm=fun(n,x);cout,P,nn(,x,*),=,suml)return(2*nl-l)*xl*fun(nl-lzxl)-(nl-l)*fun(nl-2,xl)nl;)*3、编写一函数,由实参传来一字符串,统计此字符串中字母、数字、空格、和其它字符的个数,并在主函数中输入字符串以及输出上述结果。*/#includevoidjudge(chara);voidmain()(constintsize=100;charasize;cin

6、.getline(azsize);judge(a);)voidjudge(chara100)判断字符类型(intIetter=Oznumber=0zOthers=Ozi=0;while(ai!=0,)(if(ai=,a,ai=,A,&ai=,O&ai=,9,)number+;统计数字个数elseOtherS+;统计其他数个数i+;coutletter=letternumber=number,others=,othersendl;)*4、给出年、月、日,计算该日是该年的第几天。*/#includeintlead(int);voidmain()(intly,yearzmonth,date,i,su

7、m=0;coutyearmonthdate;inta12=31,0,31,30,31z30,31,31,30,31,30,31);Iy=Iead(year);if(Iy=I)al=29;/366天elseal=28;/365天for(i=0;imonth-l;i+)/当前月之前所有月天数累加和sum+=ai;sum+=date;加上当前月天数COUt”你输入的日期是当年的第”sum”天,)intlead(inty)/判断闰年(if(y%4=0&y%100!=0)(y%400=0)return1;/是闰年elsereturn0;不是闰年)/*5、写两个函数,分别求两个整数的最大公约数和最小公倍数

8、,用主函数调用这两个函数,并输出结果,两个整数由键盘输入。*/#includeintCdivisor(int,int);intCmultiple(intzint,int);voidmain()(intx,y,d,m;coutxy;d=cdivisor(x,y);m=cmultiple(x,y,d);coutcommondivisoris,dendlucommonmultipleis,mendl;)intCdivisor(intxlzintyl)最大公约数(intr,temp;if(xlyl)(tem=xl;xl=yl;yl=temp;)WhiIe(x:Uyl)/当较大数除以较小数余数等于O时,

9、较小数为最大公约数(r=xl%yl;xl=yl;yl=r;)returnyl;intCmultiple(intx2,inty2zintdl)最小公倍数(returnx2*y2dl;/两数相乘结果除以它们的酿大公约数为最小公倍数)/*6、写一函数,将两个字符串连接。*/#include#includevoidmain()(constintsize=100;charasize,bsize;coutinputtwostring:endl;cin.getline(a,size);cin.getline(bzsize);strcat(a,b);cout,a=,aendl;)*7、写一函数,将一个字符串的

10、元音字母复制到另一个字符串,然后输出。*/#include#includevoidscy(char*,char*);voidmain()constintsize=100;charasize=nHelloworld,;charbsize=Net,;cout,a=,ab=,bendl;scpy(a,b);cout,a=,aendl;)voidscpy(char*p,char*q)(while(*q!=f0,)if(*q=,a,II*q=A,*q=,e,*q=,E,I*q=,i,II*q=,I,II*q=,o*q=,0,II*q=,u,II*q=U,)*p+=*q;q+;)*8、写一函数,输入一个四

11、位数字,要求输出这4个数字字符,但每两个数字间空一空格。如输入1990,应输出“199Omo*/#include#includevoidouts(chara);voidmain()constintsize=10;charasize;cin.getline(azsize);outs(a);)voidouts(chara10)(inti;if(strlen(a)=4)for(i=0;i4;i+)coutai,;elsecout,inpterror.endl;)第5章数组*1、将一个数组中的值按逆序重新存放,例如,原来顺序为:a、b、c.do要求改为:d、c、b、ao*/#includevoidba

12、ck(char*);voidmain()(chara50=abcdefg;cout,a=,aendl;back(a);)#includevoidback(char*p)inti=0;while(*p!=,0,)(P+;/把指针定位到字符串末尾i+;/统计字符个数cout0;i-)/逆序输出P;cout*p;coutendl;)/*2、打印出杨辉三角形(要求打印出前15行)。(杨辉三角最本质的特征是,它的两条斜边都是由数字1组成的,而其余的数那么是等于它肩上的两个数之和。)*/#includevoidtri(inta15);voidmain()(inti,j,a1515;tri(a);coutn

13、a=,;for(i=0;i15;i+)/遍历整个数组for(j=0;j=i;j+)(coutaij;if(aij=9)/当输出个位数之后输出4个空格保持整齐cout=10&aiHj=99)当输出十位数之后输出3个空格保持整齐cout=100&aiHj=999)当输出百位数之后输出2个空格保持整齐coutn;elseCOUte”;/当输出百位数之后输出1个空格保持整齐)cotendl,每行输出完毕后换行)voidtri(inta1515)inti,j;for(i=0;i15;i+)for(j=0;j=i;j+)(if(j=0IIj=i)/三角形第一列和对角线被赋值为1aij=l;elseaij=

14、ai-lj-l+ai-lj;/W出其余的数组元素)/*3、编一程序,将两个字符串连接起来,不要用StrCat函数。*/#include#includevoidscat(char*,char*);voidmain()(constintsize=100;charasize=nHellou;charbsize=Bye,;cout,a=,a,b=bendl;scat(a,b);couta=,aafterlinkaandb,endl;)voidscat(char*p,char*q)(While(*p!=,0,)/确定数组a的插入位置P+;)while(*q!=,0,)*p=*q;p+;q+;)*4、打印

15、“魔方阵”。所谓魔方阵是指这样的方阵,它的每一行、每一列和对角线之和均相等。例如:三阶魔方阵:816357492要求打印由1到n2的自然数构成的所有魔方阵。*/方法一:输出N介魔方阵,但每介只输出一种。#includevoidsquare(inta10,intk,intn);voidmain()intn,i,j,k,a1010=0;cout,inputanOddnumber:,n;k=n2”/确定第一个数列数square(a,k,n);for(i=0;in;i+)for(j=0;jn;j+)cout,t,aij;coutendl;)voidsquare(inta10zintk,intn)(in

16、ti,j;for(i=l,j=0;i=n*n;i+,j,k+)/n为阶数,从1开场给数组赋值(if(jO&k=n)/当数组行列都越出范围时候,确定数组正确位置(j+=2;k-=l;)elseif(j=n)/当数组列越出范围时候,确定数组正确位置k-=n;elseif(ajk!=0)/当数组原位置有数时候,确定数组位置(j+=2;k-=l;)ajk=i;)方法二:输出N介魔方阵所有魔方阵。#:LnClUde#include#includeusingnamespacestd;voidprintA(int*pzintn)/输出这个n阶魔方阵(CoUtendl”下面是一个yn”阶魔方阵:endl;in

17、ti,j;for(i=0;in;i+)(for(j=0;jn;j+)(coutsetw(4)pij;)coutendl;coutendlendl;)boolJudge(int*p,intn)/判断是否为n阶魔方阵inti,j,sum=0,NoWSUm=0;boolYesOrNo=true;for(j=0;jn;j+)/第一行总和(sum+=p0j;for(i=1;in;i+)/判断每行总和是否相等(NowSum=0;for(j=O;jn;j+)(NowSum+=pij;)if(NowSum!=sum)(YesOrNo=false;gotoEND;)for(i=0;in;i+)/每列是否相等(N

18、owSum=O;for(j=O;jn;j+)(NowSum+=pji;)if(NowSum!=sum)(YesOrNo=false;gotoEND;)NowSum=O;for(i=O,j=O;in,j=O,jn;i,j+)次对角线是否相等(NowSum+=pij;if(NowSum!=sum)YesOrNo=false;gotoEND;END:returnYesOrNo;)voidcombination(int*p,intn,int*a)/求m=门*11个数(1/2,3m)的全排列(intm=n*n;staticintNum=O;int*b_val=newintm;intc=O,k,izj;b

19、_valc=-1;/一维数组首地址的值赋-1cO-lwhile(b_valOm)/-1(if(+b_valcm)/分别从O开场累加每个元素值,并限制不超出最大阶数/b00l011202122.66.70.778O.88判断魔方89012345678/7880.87判断魔方8889012345687/67.70.7688012345768/012345786/012345867/876543210(for(k=O;kc;k+)/是否与前面数字重复,如有重复元素跳出,否那么使K下标等于C下标if(b_valk=b_valc)break;if(k=c)/如果没有重复元素,就可以确定当前元素值,并继续

20、排列下一个下标的数组元素(if(c+lm)/123.78如果不满足条件,那么生成了一组排列方式,否那么继续排列下一个元素/8(+c;/123.78bvalc=-1;/continue;else生成了一组排列方k=-1;for(i=0;in;i+)(for(j=0;jn;j+)pij=ab_val+k;/a0-a8/判断是否为n阶魔方阵if(Judge(p,n)printA(pzn);)else)deleteb_val;)一voidevaluate(int*p,intn)给n阶方阵的元素赋值(inti;int*AlINum=newint3*3;for(i=1;i=n*n;i+)(AllNumi-

21、1=i;combination(p,n,AllNum);deleteAllNum;)voidmain()(inti,n,*a;strings;do(/输入n阶方阵的阶数nc。Uts;if(!strcmp(s.c_str()ze)I!strcmp(s.c_str()znE)(break;)elseif(s.find_first_not_of(,0123456789,)!=string:npos)(CoUt”请输入有效的数字,不能含有非数字的字符O,endl;continue;)else(n=atoi(s.c_str();if(nl)(COUt=Io,endl;continue;/分配内存a=ne

22、wint*n;for(i=O;in;i+)(ai=newintn;)COUt正在运算,请等待OOOOOO”endl;给n阶方阵的元素赋值evaluate(a,n);Cemt”运算完毕!endl;for(i=O;in;i+)(deleteai;)deletea;)while(1);return;)*5、求一个3x3矩阵对角线元素之和。*/#includeintdia(inta3);voidmain()(inti,j,sum,a33=2,3,5,6,2,3,1,9,0;cout,a=;for(i=0;i3;i+)(for(j=0;j3;j+)coutaij;cotendlsum=dia(a);co

23、utnsum=,sumendl;)intdia(inta33)inti,jzsum=0;for(i=0;i3;i+)/主对角线之和for(j=i;j=i;j+)sum+=aij;for(j=0;j3;j+)/另一个对角线之和for(i=2-j;i=2-j;i+)if(i!=j)/防止重复累加两个对焦向重合的元素sum+=aij;returnSUm;/返回对角线员素之和/*6、编写一个程序,将字符数组s2中的全部字符拷贝到字符数组Sl中。不用StrCPy函数。拷贝时,也要拷贝过去。0,后面的字符不拷贝。*/#includevoidscopy(chara,charb);voidmain()(int

24、i;chara10;charb10=,Hello;scopy(azb);for(i=0ai!=,0,i+)coutai;coutendl;voidscopy(chara,charb)(inti;for(i=0;bi三,0;i+)ai=bi;ai=,0;)*7、用筛选法求100之内的素数。(所谓素数就是除了1和它本身以外,不能再被别的整数整除,这种数称作素数(也称质数)。)*/#includevoidmain()inti,j;for(i=l;i=100;i+)for(j=2;ji;j+)/判断素数if(i%j!=0);elsebreak;不是素数if(i=j)/相等为素数coutni;coute

25、ndl;)/*8、用选择法对10个整数排序。*/#includevoidcsort(inta10);voidmain()(inti;inta10=6,4,2,7,9,0,l,6,3,0;for(i=0;i10;i+)/输出原数组数据顺序coutai;coutendl;csort(a);for(i=0;i10;i+)输出排序后的顺序coutai;coutendl;)voidcsort(inta10)/排序(inti,jzk,temp=0;for(i=l;i10;i+)(k=i;for(j=k+l;jaj)k=j;if(k!=i)(temp=ai;/把数放到正确位置ai=ak;ak=temp;)第

26、6章指针/*1、在主函数中输入10个字符串。用另一函数对它们排序。然后在主函数输出这10个已排好序的字符串。(用指针实现)*/#includevoidpsort(int*p);voidmain()(inti,a10;cout,pleaseinputtennumbers:n;for(i=0;iai;psort(a);cout,resortresult=1;for(i=0;i10;i+)coutai,*,;)voidpsort(int*p)(inti,jztemp;for(i=0;i10;i+)每循环一次确定数组中一个数的位置for(j=i+l;jpj)(temp=pj;Pj=Pi;pi=temp

27、;)*2、输入一个字符串,内有数字和非数字字符,如A123x456123378997jhlkll将其中连续的数字作为一个整数,依次存放到一数组a中,统计共有多少个整数,并输出这些数。*/#include#include#includeintcharge(int*,char*);voidmain()(inta50,i,numb;charb50;coutpleaseinputacharacterstring:endl;cin.getline(b,50);system(,cls,*);cout,yourcharacterstringis,;cout.write(b,strlen(b)endl;num

28、b=charge(a,b);for(i=0;inumb;i+)couta,i,=,ai;coutendltotalnumbers=,numb=,0,*p=,O,&*p=,9,)/判断是否有连续字符型整数(*q=(*q)*10+(*p)-,(P);将连续字符型整数转换成一个整型整数赋值给新数组P+;)q+;numb+;/统计整数的个数)returnnumb;)*3、用指向指针的指针的方法对5个字符串排序并输出。*/#include#includevoidsort(char*str);voidmain()(inti;char*string5;COUt“输入5个字符串:endl;for(i=0;i5

29、;i+)(stringi=newchar10;cin.getline(*(string+i)z50);sort(string);for(i=0;i5;i+)deletestringi;voidsort(char*str)(inti=0,j;char*p=0;for(i=0;i4;i+)(for(j=i+l;j5;j+)(if(strcmp(*(str+i),*(str+j)0)(p=*(str+i);*(str+i)=*(str+j);*(str+j)=p;cout,aftersortthechars:,endl;for(i=0;i5;i+)(cot*(str+i)endl;)*4、统计一字符

30、串在另一个字符串中出现的次数。*/#include#includeintchange(char*tchar*);voidmain()(intsum;chara10=,dog;charb20=nSdlkdogsddydodogn;cout.write(a,10)endl;cout.write(b,20)endl;sum=change(a,b);cout,sum=,sumendl;)intchange(char*pzchar*q)(intsum=0zi=0;while(*q!三,0,)(while(*p=*q&*p!=,0,)比照是否含有相等字符串(*P+;*q+;i+;)if(*p=,0,)(S

31、Um+=1;/含有字符串个数)p=p-i;/第一个字符串重新定位q=q-i;/第二个字符串重新定位i=0;/重新累加移动次数q+;)returnsum;)*5、有n个整数,使其前面各数顺序向后移In个位置,最后m个数变成最前面的m个数.n和m从键盘输入。*/#include#includevoidcharge(intazint,int);voidmain()inti,n,mza50;CoUtn;CoUtee”请输入移动位数:,cinm;COUt”请输入整数:”;for(i=0;iai;COUt”您输入的整数为:,for(i=0;in;i+)(coutai,;coutendl;charge(az

32、n,m);CoUt”移动后的整数为:for(i=0;in;i+)(coutai;coutendl;)voidcharge(inta,intn,intm)n为整数个数,向右移动m个位置(inti,j;for(j=0;j=0;i)/移动一个位置就要移动每一个数组元素(ai+l=ai;)a0=an;)/*6、有n个人围成一圈,顺序排号。从第1个人开场报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。*/#includevoidchange(intazintn);voidmain()(inti,a50zn;CoUtCC”输入人数:”;cinn;for(i=0;il)直到只剩下

33、1人时if(ai!三0)k+;/报数if(k=3)(a(i=0;/退出圈子的人qnumber+;退出的总人数k=0;/重新开场报数)i+;if(i=n)i=0;/当所有人都报过数之后重新每人再次报数)for(i=0;in;i+)if(ai!=0)coutai,;)*7、写一函数,实现两个字符串的比较。即自己写一个StrCmP函数。*/#include#includeintchange(char,char*);voidmain()(intresult;chara10=,dog;charb20=nSdlkdogsddydodogn;cout.write(a,10)endl;cout.write(b

34、z20)endl;result=change(a,b);cout,result=result*q)(flag=l;/第一个字符串大于第二个字符串返回1break;)if(*p*q)(flag=-1;/第二一个字符串大于第一个字符串返回-break;if(*p=*q)&*(p+l)=O&*(q+l)!=,0,)(39=-1;/第二一个字符串大于第一个字符串返回-1break;)*P+;*q+;returnflag;)*8、将一个5x5的矩阵中最大的元素放在中心,四个角分别放四个最小的元素1顺序为从左到右,从上到下顺序依次从小到大存放),写一函数实现之。用main函数调用。*/#includevoidpsort(inta);voidmain()(inti;inta25=5,3,52,6,2,1,8,0,23,56,7,21,23,4,57,62,15,31,45,6,43,78,12,53,41;for(i=0;i25;i+)(cout,ai;coutendl;psort(a);)voidpsort(inta)(inti,j,k=0,temp,b55;for(i=0;i25;i+)/每循环一次确定数组中一个数的位置for(j=i+l;j25;j+)/每次循环

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号