c++基础例题100道.docx
- 文档编号:30337296
- 上传时间:2023-08-13
- 格式:DOCX
- 页数:72
- 大小:90.49KB
c++基础例题100道.docx
《c++基础例题100道.docx》由会员分享,可在线阅读,更多相关《c++基础例题100道.docx(72页珍藏版)》请在冰豆网上搜索。
c++基础例题100道
/*1、打印出所有的"水仙花数"。
所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。
例如,153是一水仙花数,因为153=13+53+33。
*/#include
{inti,a=0,b=0,c=0;for(i=100;i<1000;i++)
{a=i%10;b=i/10%10;c=i/100%10;if(a*a*a+b*b*b+c*c*c==i)cout<<"i="<
}
}
/*2、一个数如果恰好等于它的因子之和,这个数就称为"完数"。
例如,6的因子为1、2、3,而6=1+2+3,因此6是"完数"。
编程序找出1000之内的所有完数,并按下面的格式输出其因子:
6-〉1,2,3*/#include
{
inti,j,sum=0,a[50],k,t;for(i=1;i<=1000;i++)
{
sum=0;for(j=1;j
{
if(i%j==0)
{
sum+=j;a[k++]=j;
}
}t=k;if(sum==i)
{
cout<";for(k=0;k { cout< } cout< } k=0; } } /*3、求Sn=a+aa+aaa+…+aa…a之值,其中a是一个数字。 例如: 2+22+222+…+22222(此 时n=5),n由键盘输入。 */ #include voidmain() { doublea,sn=0.0,sum=0.0; 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="< } /*4、一球从100米高度自由落下,每次落地后反跳回原高度的一半,再落下。 求它在第10 次落地时,共经过了多少米? 第10次反弹多高? */ #include voidmain() { doubleh1=100,h2=100,sum=0.0; inti; for(i=1;i<=10;i++) { sum+=h2; h1=h1/2.0; h2=h1*2; } cout<<"sum="< } /*5、猴子吃桃问题。 猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。 第二天早上又将剩下的桃子吃掉了一半,又多吃了一个。 以后每天早上都吃了前一天剩下的一半零一个。 到第10天早上想再吃时,见只剩一个桃子了。 求第一天共摘了多少桃子。 */#include { intnumber,i; number=1; for(i=10;i>1;i--) number=(number+1)*2;cout<<"number="< } 第4章函数 /*1、写一函数用"气泡法"对输入的10个字符按由小到大的顺序排列。 */#include voidmain() { inti,j,temp,a[10]; cout<<"pleaseinputtennumbers: \n"; for(i=0;i<10;i++)cin>>a[i]; for(i=0;i<10;i++)//每循环一次确定数组中一个数的位置for(j=i+1;j<10;j++)//每次循环对比一个数的大小{ if(a[i]>a[j]) { temp=a[j];a[j]=a[i];a[i]=temp; }}cout<<"resortresult=";for(i=0;i<10;i++) cout< } /*2、用递归方法求n阶勒让得多项式的值,递归公式为 1(n=0)Pn(x)=x(n=1) ((2n-1)*x*Pn-1(x)-(n-1)*Pn-2(x))/n(n>1)*/#include voidmain() { doublen,x,sum; cout<<"inputnandx"< cin>>n>>x;sum=fun(n,x); cout<<"P"< } doublefun(doublen1,doublex1) { if(n1==0) return1; elseif(n1==1) returnx1; elseif(n1>1) return((2*n1-1)*x1*fun(n1-1,x1)-(n1-1)*fun(n1-2,x1))/n1; } /*3、编写一函数,由实参传来一字符串,统计此字符串中字母、数字、空格、和其它字符 的个数,并在主函数中输入字符串以及输出上述结果。 */ #include voidjudge(chara[]); voidmain() { constintsize=100; chara[size]; cin.getline(a,size); judge(a); } voidjudge(chara[100])//判断字符类型 { intletter=0,number=0,others=0,i=0; while(a[i]! ='\0') { if((a[i]>='a'&&a[i]<='z')||(a[i]>='A'&&a[i]<='z'))letter++;//统计字母个数 elseif(a[i]>='0'&&a[i]<='9')number++;//统计数字个数 elseothers++;//统计其他数个数 i++; } cout<<"letter="< } /*4、给出年、月、日,计算该日是该年的第几天。 */ #include intlead(int); voidmain() { intly,year,month,date,i,sum=0; cout<<"inputyear、month、date: "; cin>>year>>month>>date; inta[12]={31,0,31,30,31,30,31,31,30,31,30,31}; ly=lead(year); if(ly==1)a[1]=29;//366天 elsea[1]=28;//365天for(i=0;i sum+=a[i]; sum+=date;//加上当前月天数 cout<<"你输入的日期是当年的第"< } intlead(inty)//判断闰年 {if((y%4==0&&y%100! =0)||(y%400==0))return1;//是闰年 elsereturn0;//不是闰年 } /*5、写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数, 并输出结果,两个整数由键盘输入。 */ #include intcdivisor(int,int); intcmultiple(int,int,int); voidmain() { intx,y,d,m; cout<<"inputtwonumber: "; cin>>x>>y; d=cdivisor(x,y);m=cmultiple(x,y,d); cout<<"commondivisoris"< } intcdivisor(intx1,inty1)//最大公约数 { intr,temp; if(x1 { temp=x1; x1=y1; y1=temp; } while(x1%y1)//当较大数除以较小数余数等于0时,较小数为最大公约数 { r=x1%y1; x1=y1; y1=r; } returny1; } intcmultiple(intx2,inty2,intd1)//最小公倍数 { returnx2*y2/d1;//两数相乘结果除以它们的最大公约数为最小公倍数 } /*6、写一函数,将两个字符串连接。 */ #include { constintsize=100; chara[size],b[size];cout<<"inputtwostring: "< cin.getline(a,size); cin.getline(b,size); strcat(a,b);cout<<"a="< } /*7、写一函数,将一个字符串的元音字母复制到另一个字符串,然后输出。 */#include #include voidscpy(char*,char*); voidmain() { constintsize=100; chara[size]="Helloworld"; charb[size]="Net"; cout<<"a="< scpy(a,b); cout<<"a="< } voidscpy(char*p,char*q) { while(*q! ='\0') {if (*q=='a'||*q=='A'||*q=='e'||*q=='E'||*q=='i'||*q=='I'||*q=='o'||*q=='O'||*q=='u'||*q=='U') *p++=*q; q++; } } /*8、写一函数,输入一个四位数字,要求输出这4个数字字符,但每两个数字间空一空格。 如输入1990,应输出"1990"。 */ #include #include voidouts(chara[]); voidmain() { constintsize=10; chara[size]; cin.getline(a,size); outs(a); } voidouts(chara[10]) { inti; if(strlen(a)<=4) { for(i=0;i<4;i++) cout< } elsecout<<"inputerror."< } d。 要求改为: d、 第5章数组 /*1、将一个数组中的值按逆序重新存放,例如,原来顺序为: a、b、c、 c、b、a。 */ #include voidback(char*); voidmain() { chara[50]="abcdefg"; cout<<"a="< back(a); } #include voidback(char*p) { inti=0; while(*p! ='\0') { p++;//把指针定位到字符串末尾 i++;//统计字符个数 } cout<<"a="; for(;i>0;i--)//逆序输出 } } voidtri(inta[15][15]) {inti,j;for(i=0;i<15;i++)for(j=0;j<=i;j++){if(j==0||j==i)//三角形第一列和对角线被赋值为1a[i][j]=1; elsea[i][j]=a[i-1][j-1]+a[i-1][j];//算出其余的数组元素} } /*3、编一程序,将两个字符串连接起来,不要用strcat函数。 */ #include #include voidscat(char*,char*); voidmain() { constintsize=100; chara[size]="Hello"; charb[size]="Bye";cout<<"a="< scat(a,b);cout<<"a="< } voidscat(char*p,char*q) { while(*p! ='\0')//确定数组a的插入位置 { p++; }while(*q! ='\0') { *p=*q; p++; q++; } } /*4、打印"魔方阵"。 所谓魔方阵是指这样的方阵,它的每一行、每一列和对角线之和均相等。 例如: 三阶魔方阵: 816 357 492要求打印由1到n2的自然数构成的所有魔方阵。 */ //方法一: 输出N介魔方阵,但每介只输出一种。 #include voidsquare(inta[][10],intk,intn); voidmain() { intn,i,j,k,a[10][10]={0}; cout<<"inputanoddnumber: "< cin>>n; k=n/2;//确定第一个数列数 square(a,k,n); for(i=0;i { for(j=0;j cout<<"\t"< cout< } voidsquare(inta[][10],intk,intn) { inti,j; for(i=1,j=0;i<=n*n;i++,j--,k++)//n为阶数,从1开始给数组赋值 { if(j<0&&k>=n)//当数组行列都越出范围时候,确定数组正确位置{ j+=2;k-=1; } elseif(j<0)//当数组行越出范围时候,确定数组正确位置j+=n; elseif(k>=n)//当数组列越出范围时候,确定数组正确位置k-=n; elseif(a[j][k]! =0)//当数组原位置有数时候,确定数组位置{ j+=2;k-=1; } a[j][k]=i; } } //方法二: 输出N介魔方阵所有魔方阵。 #include #include #include usingnamespacestd; voidprintA(int**p,intn)//输出这个n阶魔方阵 { cout< "< inti,j; for(i=0;i { for(j=0;j {cout< } cout< } cout< } boolJudge(int**p,intn)//判断是否为n阶魔方阵 inti,j,sum=0,NowSum=0; boolYesOrNo=true; for(j=0;j { sum+=p[0][j]; } for(i=1;i { NowSum=0; for(j=0;j { NowSum+=p[i][j]; }if(NowSum! =sum) { YesOrNo=false; gotoEND; } } for(i=0;i { NowSum=0; for(j=0;j { NowSum+=p[j][i]; }if(NowSum! =sum) { YesOrNo=false; gotoEND; } } NowSum=0; for(i=0,j=0;i { NowSum+=p[i][j]; }if(NowSum! =sum) { YesOrNo=false;gotoEND; } NowSum=0; for(i=n-1,j=0;i>=0,j NowSum+=p[i][j]; }if(NowSum! =sum) { YesOrNo=false; gotoEND; } END: returnYesOrNo; }voidcombination(int**p,intn,int*a)//求m=n*n个数(1,2,3m)的全排列 { intm=n*n; staticintNum=0; int*b_val=newint[m]; intc=0,k,i,j;b_val[c]=-1;//一维数组首地址的值赋-1c[0]-1while(b_val[0] { if(++b_val[c] //b[0]0[1]0[1]1[2]0[2]1[2]2...[6]6...[7]0...[7]7[8]0...[8]8 判断魔方[8]9012345678 //[7]8 [8]0...[8]7判断魔方[8]8[8]9012345687 //[6]7...[7]0...[7]6[8]8012345768 //012345786 //012345867... //876543210 { for(k=0;k 下标等于C下标 if(b_val[k]==b_val[c])break; if(k==c)//如果没有重复元素,就可以确定当前元素值,并继续排列下 一个下标的数组元素 {if(c+1 方式,否则继续排列下一个元素 //8{ ++c;//123...78b_val[c]=-1; //continue; } else//生成了一组排列方式 { k=-1; for(i=0;i { for(j=0;j { p[i][j]=a[b_val[++k]];//a[0]-a[8]} } //判断是否为n阶魔方阵 if(Judge(p,n)) { printA(p,n); } } } } else { c--; } } delete[]b_val; } voidevaluate(int**p,intn)//给n阶方阵的元素赋值 { inti; int*AllNum=newint[3*3]; for(i=1;i<=n*n;i++) { AllNum[i-1]=i; } combination(p,n,AllNum); delete[]AllNum; } voidmain() inti,n,**a; strings; do //输入n阶方阵的阶数n cout<<"请输入n阶方阵的阶数n(退出程序按e或E键): cin>>s; if(! strcmp(s.c_str(),"e")||! strcmp(s.c_str(),"E")) { break; } elseif(s.find_first_not_of("0123456789")! =string: : npos) { "< cout<<"请输入有效的数字,不能含有非数字的字符。 continue; } else { n=atoi(s.c_str()); if(n<1) { cout<<"请输入有效的数字,必须>=1。 "< continue; } //分配内存 a=newint*[n]; for(i=0;i { a[i]=newint[n]; } cout<<"正在运算,请等待。 。 。 。 。 。 "< //给n阶方阵的元素赋值 evaluate(a,n);cout<<"运算结束! "< for(i=0;i { delete[]a[i]; } delete[]a; } }while (1); return; } /*5、求一个3x3矩阵对角线元素之和。 */ #include intdia(inta[][3]); voidmain() inti,j,sum,a[3][3]={2,3,5,6,2,3,1,9,0}; cout<<"a="; for(i=0;i<3;i++) { for(j=0;j<3;j++)cout< cout< } sum=dia(a);cout<<"\nsum="< } intdia(inta[3][3]) { inti,j,sum=0; for(i=0;i<3;i++)//主对角线之和 for(j=i;j<=i;j++) sum+=a[i][j]; for(j=0;j<3;j++)//另一个对角线之和for(i=2-j;i<=2-j;i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c+ 基础 例题 100