c++基础练习题100道.docx
*1、打印出所有的“水仙花数“。所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如,153是一水仙花数,因为153=13+53+33o*/#include<iostream.h>voidmain()(inti,a=0,b=0,c=0;for(i=100;i<1000;i+)(a=i%10;b=i10%10;c=i100%10;if(a*a*a+b*b*b+c*c*c=i)cout<<,i=<<i<<endl;)*2、一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如,6的因子为1、2、3,而6=1+2+3,因此6是“完数”。编程序找出1000之内的所有完数,并按下面的格式输出其因子:6->1,2,3*/#include<iostream.h>voidmain()(inti,j,sum=0za50,k,t;for(i=l;i<=1000;i+)(sum=0;for(j=l;j<i;j+)(if(i%j=0)(sum+=j;ak+=j;)t=k;if(sum=i)(cout<<i<<,->,'for(k=0;k<t;k+)(cout<<ak;if(k<t-l)cout<<,;cout<<endl;)k=0;)*3、求Sn=a+aa+aaa+.+aa.a之值,其中a是一个数字。例如:2+22+222+.+22222(此时n=5),n由键盘输入。*/#include<iostream.h>voidmain()(doublearsn=O.O,sum=O.O;intn,i;cout<<,pleaseinputanumber*'cin>>a;cout<<',pleaseinputnnumber,'cin>>n;sn=a;sum=a;for(i=2;i<=n;i+)(sum=sum*10+a;sn+=sum;)cout<<,Sn="<<sn<<endl;)*4、一球从100米高度自由落下,每次落地后反跳回原高度的一半,再落下。求它在第10次落地时,共经过了多少米第10次反弹多高*/#include<iostream.h>voidmain()(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=,<<hl<<endl;*5、猴子吃桃问题。猴子第一天摘下假设干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉了一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩一个桃子了。求第一天共摘了多少桃子。*/#include<iostream.h>voidmain()(intnumber,i;number=l;for(i=10;i>l;i-)number=(number+1)*2;cout<<nnumber=,<<number<<endl;)第4章函数*K写一函数用“气泡法”对输入的10个字符按由小到大的顺序排列。*/#include<iostream.h>voidmain()inti,j,temp,a10;cout<<,pleaseinputtennumbers:n;for(i=0;i<10;i+)cin>>ai;for(i=0;i<10;i+)/每循环一次确定数组中一个数的位置for(j=i+l;j<10;j+)/每次循环比照一个数的大小(if(ai>aj)(temp=aj;aj=ai;ai=tem;)cout<<,resortresult="for(i=0;i<10;i+)cout<<ai<<',;)*2、用递归方法求n阶勒让得多项式的值,递归公式为1.(n=0)Pn(x)=X(n=1)(2n-l)*x*Pn-l(x)-(n-l)*Pn-2(x)/n(n>1)*/#include<iostream.h>doublefun(double,double);voidmain()(doublen,×rsum;cout<<,inputnandx,<<endl;cin>>n>>x;sm=fun(n,x);cout<<,P,<<n<<n(',<<x<<,*),<<,=,<<sum<<endl;)doublefun(doublenl,doublexl)(if(nl=0)return1;elseif(nl=l)returnxl;elseif(nl>l)return(2*nl-l)*xl*fun(nl-lzxl)-(nl-l)*fun(nl-2,xl)nl;)*3、编写一函数,由实参传来一字符串,统计此字符串中字母、数字、空格、和其它字符的个数,并在主函数中输入字符串以及输出上述结果。*/#include<iostream.h>voidjudge(chara);voidmain()(constintsize=100;charasize;cin.getline(azsize);judge(a);)voidjudge(chara100)判断字符类型(intIetter=Oznumber=0zOthers=Ozi=0;while(ai!='0,)(if(ai>=,a,ai<=,z,)(ai>=,A,&&ai<='z,)IetSr+;统计字母个数elseif(ai>=,O'&&ai<=,9,)number+;统计数字个数elseOtherS+;统计其他数个数i+;cout<<letter=<<letter<<number=<<number<<,'others=,<<others<<endl;)*4、给出年、月、日,计算该日是该年的第几天。*/#include<iostream.h>intlead(int);voidmain()(intly,yearzmonth,date,i,sum=0;cout<<,inputyear、month、date:,;cin>>year>>month>>date;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;i<month-l;i+)/当前月之前所有月天数累加和sum+=ai;sum+=date;加上当前月天数COUt<<”你输入的日期是当年的第”<<sum<<”天,)intlead(inty)/判断闰年(if(y%4=0&&y%100!=0)(y%400=0)return1;/是闰年elsereturn0;不是闰年)/*5、写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果,两个整数由键盘输入。*/#include<iostream.h>intCdivisor(int,int);intCmultiple(intzint,int);voidmain()(intx,y,d,m;cout<<,inpttwonumber:,;cin>>x>>y;d=cdivisor(x,y);m=cmultiple(x,y,d);cout<<commondivisoris,<<d<<endl<<ucommonmultipleis,<<m<<endl;)intCdivisor(intxlzintyl)最大公约数(intr,temp;if(xl<yl)(tem=xl;xl=yl;yl=temp;)WhiIe(x:Uyl)/当较大数除以较小数余数等于O时,较小数为最大公约数(r=xl%yl;xl=yl;yl=r;)returnyl;intCmultiple(intx2,inty2zintdl)最小公倍数(returnx2*y2dl;/两数相乘结果除以它们的酿大公约数为最小公倍数)/*6、写一函数,将两个字符串连接。*/#include<iostream.h>#include<string.h>voidmain()(constintsize=100;charasize,bsize;cout<<inputtwostring:<<endl;cin.getline(a,size);cin.getline(bzsize);strcat(a,b);cout<<,a=,<<a<<endl;)*7、写一函数,将一个字符串的元音字母复制到另一个字符串,然后输出。*/#include<iostream.h>#include<string.h>voidscy(char*,char*);voidmain()constintsize=100;charasize=nHelloworld',;charbsize="Net,'cout<<',a=',<<a<<b=',<<b<<endl;scpy(a,b);cout<<,a=,<<a<<endl;)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、写一函数,输入一个四位数字,要求输出这4个数字字符,但每两个数字间空一空格。如输入1990,应输出“199Omo*/#include<iostream.h>#include<string.h>voidouts(chara);voidmain()constintsize=10;charasize;cin.getline(azsize);outs(a);)voidouts(chara10)(inti;if(strlen(a)<=4)for(i=0;i<4;i+)cout<<ai<<',;elsecout<<,inpterror.<<endl;)第5章数组*1、将一个数组中的值按逆序重新存放,例如,原来顺序为:a、b、c.do要求改为:d、c、b、ao*/#include<iostream.h>voidback(char*);voidmain()(chara50=abcdefg;cout<<,a=,<<a<<endl;back(a);)#include<iostream.h>voidback(char*p)inti=0;while(*p!=,0,)(P+;/把指针定位