c++基础例题100道.doc_第1页
c++基础例题100道.doc_第2页
c++基础例题100道.doc_第3页
c++基础例题100道.doc_第4页
c++基础例题100道.doc_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、/* 1、打印出所有的 水仙花数 。所谓 水仙花数 是指一个三位数,其各位数字立方和等于该数本身。例如,153 是一水仙花数,因为153 = 13 + 53 + 33。 */#includevoid main()int i, a=0, b=0, c=0;for(i=100;i1000;i+)a=i%10;b=i/10%10;c=i/100%10;if(a*a*a+b*b*b+c*c*c=i)couti=iendl;/* 2、一个数如果恰好等于它的因子之和,这个数就称为 完数 。例如, 6 的因子为1、2、3,而 6=1+2+3,因此 6 是 完数 。编程序找出1000 之内的所有完数,并按下面

2、的格式输出其因子:6 - 1,2,3 */#includevoid main()int i,j,sum=0,a50,k,t;for(i=1;i=1000;i+)sum=0;for(j=1;ji;j+)if(i%j=0)sum+=j;ak+=j;t=k;if(sum=i)couti;for(k=0;kt;k+)coutak;if(kt-1)cout,;coutendl;k=0;/* 3、求 Sn=a+aa+aaa+aa a之值,其中a 是一个数字。例如:2+22+222+22222(此时 n=5 ), n 由键盘输入。 */#includevoid main()double a,sn=0.0,s

3、um=0.0;int n,i;couta;coutn;sn=a;sum=a;for(i=2;i=n;i+)sum=sum*10+a;sn+=sum;coutSn=snendl;/* 4、一球从 100 米高度自由落下,每次落地后反跳回原高度的一半,再落下。求它在第10 次落地时,共经过了多少米?第10 次反弹多高?*/#includevoid main()double h1=100,h2=100,sum=0.0;int i;for(i=1;i=10;i+)sum+=h2;h1=h1/2.0;h2=h1*2;coutsum=sum h1=h1endl;/* 5、猴子吃桃问题。猴子第一天摘下若干个

4、桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉了一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第 10 天早上想再吃时,见只剩一个桃子了。求第一天共摘了多少桃子。*/#includevoid main()int number,i;number=1;for(i=10;i1;i-)number=(number+1)*2;coutnumber=numberendl;第 4章 函数/* 1、写一函数用 气泡法 对输入的 10 个字符按由小到大的顺序排列。 */#includevoid main()int i,j,temp,a10;coutplease inp

5、ut ten numbers:n;for(i=0;iai;for(i=0;i10;i+) /每循环一次确定数组中一个数的位置for(j=i+1;jaj)temp=aj;aj=ai;ai=temp;coutresort result=;for(i=0;i10;i+)coutai 1) */#includedouble fun (double,double);void main()double n,x,sum;coutinput n and xnx;sum=fun(n,x);coutPn(x)=sum1)return (2*n1-1)*x1*fun(n1-1,x1)-(n1-1)*fun(n1-2

6、,x1)/n1;/* 3、编写一函数,由实参传来一字符串,统计此字符串中字母、数字、空格、和其它字符的个数,并在主函数中输入字符串以及输出上述结果。*/#includevoid judge(char a);void main()const int size=100;char asize;cin.getline(a,size);judge(a);void judge(char a100)/判断字符类型int letter=0,number=0,others=0,i=0;while(ai!=0)if (ai=a&ai=A&ai=0 & ai=9) number+;/统计数字个数else other

7、s+;/统计其他数个数i+;coutletter=letter number=numberothers=othersendl;/* 4、给出年、月、日,计算该日是该年的第几天。*/#includeint lead(int);void main()int ly,year,month,date,i,sum=0;coutyearmonthdate;int a12=31,0,31,30,31,30,31,31,30,31,30,31;ly=lead(year);if (ly=1)a1=29;/366天else a1=28;/365天for(i=0;imonth-1;i+) /当前月之前所有月天数累加和

8、sum+=ai;sum+=date; /加上当前月天数cout你输入的日期是当年的第sum天 ;int lead(int y)/判断闰年if(y%4=0&y%100!=0)|(y%400=0) return 1;/是闰年else return 0;/不是闰年/* 5、写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果,两个整数由键盘输入。*/#includeint cdivisor(int,int);int cmultiple(int,int,int);void main()int x,y,d,m;coutxy;d=cdivisor(x,y);m=cmult

9、iple(x,y,d);coutcommon divisor is dendlcommon multiple is mendl;int cdivisor(int x1,int y1)/最大公约数int r,temp;if (x1y1)temp=x1;x1=y1;y1=temp;while(x1%y1)/当较大数除以较小数余数等于0 时,较小数为最大公约数r=x1%y1;x1=y1;y1=r;return y1;int cmultiple(int x2,int y2,int d1)/最小公倍数return x2*y2/d1;/两数相乘结果除以它们的最大公约数为最小公倍数/* 6、写一函数,将两个

10、字符串连接。*/#include#includevoid main()const int size=100;char asize,bsize;coutinput two string:endl;cin.getline(a,size);cin.getline(b,size);strcat(a,b);couta=aendl;/* 7、写一函数,将一个字符串的元音字母复制到另一个字符串,然后输出。*/#include#includevoid scpy(char *,char *);void main()const int size=100;char asize=Hello world;char bs

11、ize=Net;couta= ab= bendl;scpy(a,b);couta= aendl;void scpy(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、写一函数,输入一个四位数字,要求输出这格。如输入1990 ,应输出 1 9 9 0。 */4 个数字字符,但每两个数字间空一空#include#includevoid outs(char a);void main()const int size=10;char asize;cin.getli

12、ne(a,size);outs(a);void outs(char a10)int i;if(strlen(a)=4)for(i=0;i4;i+)coutai ;else coutinput error.endl;第 5/* 1章数组、将一个数组中的值按逆序重新存放,例如,原来顺序为:a 、b 、 c、 d 。要求改为:d 、 c 、 b 、 a 。 */#includevoid back(char *);void main()char a50=abcdefg;couta=aendl;back(a);#includevoid back(char *p)int i=0;while(*p!=0)p

13、+;/把指针定位到字符串末尾i+;/统计字符个数cout0;i-)/逆序输出p-;cout*p;coutendl;/* 2 、打印出杨辉三角形(要求打印出前15 行)。 ( 杨辉三角最本质的特征是,它的两条斜边都是由数字 1 组成的,而其余的数则是等于它肩上的两个数之和。) */#includevoid tri(int a15);void main()int i,j,a1515;tri (a);couta= ;for(i=0;i15;i+)/遍历整个数组for(j=0;j=i;j+)cout=1&aij=9)/当输出个位数之后输出 4 个空格保持整齐cout=10&aij=99)/当输个空格保

14、持整齐cout=100&aij=999)/当输出百位数之后输出2 个空格保持整齐cout;else cout ;/当输出百位数之后输出1 个空格保持整齐coutendl;/每行输出结束后换行void tri(int a1515)int i,j;for(i=0;i15;i+)for(j=0;j=i;j+)if(j=0|j=i)/三角形第一列和对角线被赋值为1aij=1;else aij=ai-1j-1+ai-1j;/算出其余的数组元素/* 3、编一程序,将两个字符串连接起来,不要用strcat函数。 */#include#includevoid scat(char *,char *);void

15、main()const int size=100;char asize=Hello;char bsize=Bye;couta=ab=bendl;scat(a,b);couta=a after link a and bendl;void scat(char *p,char *q)while(*p!=0)/确定数组 a 的插入位置p+;while(*q!=0)*p=*q;p+;q+;/* 4 、打印 魔方阵 。所谓魔方阵是指这样的方阵,它的每一行、每一列和对角线之和均相等。例如:三阶魔方阵:8 1 63 5 74 9 2要求打印由1 到 n2 的自然数构成的所有魔方阵。*/ 方法一:输出 N 介魔

16、方阵,但每介只输出一种。#includevoid square(int a10,int k,int n); void main()int n,i,j,k,a1010=0;coutinput an odd number:n;k=n/2;/ 确定第一个数列数 square(a,k,n);for(i=0;in;i+)for(j=0;jn;j+)couttaij;coutendl;void square(int a10,int k,int n)int i,j;for(i=1,j=0;i=n*n;i+,j-,k+)/n为阶数,从 1 开始给数组赋值if(j=n)/当数组行列都越出范围时候,确定数组正确位

17、置j+=2;k-=1;else if(j=n)/当数组列越出范围时候,确定数组正确位置k-=n;else if(ajk!=0)/当数组原位置有数时候,确定数组位置j+=2;k-=1;ajk=i;/ 方法二:输出 N 介魔方阵所有魔方阵。#include #include #include using namespace std;void printA(int *p,int n)/输出这个n 阶魔方阵coutendl下面是一个n阶魔方阵:endl;int i,j;for(i = 0;i n;i+)for(j = 0;j n;j+)coutsetw(4)pij;coutendl;coutendle

18、ndl;bool Judge(int *p,int n)/判断是否为n 阶魔方阵int i,j,sum = 0,NowSum = 0;bool YesOrNo = true;for(j = 0;j n;j+)/第一行总和sum += p0j;for(i = 1;i n;i+)/判断每行总和是否相等NowSum = 0;for(j = 0;j n;j+)NowSum += pij;if(NowSum != sum)YesOrNo = false;goto END;for(i = 0;i n;i+)/每列是否相等NowSum = 0;for(j = 0;j n;j+)NowSum += pji;i

19、f(NowSum != sum)YesOrNo = false;goto END;NowSum = 0;for(i = 0,j = 0;i n,j = 0,j n;i-,j+)/次对角线是否相等NowSum += pij;if(NowSum != sum)YesOrNo = false;goto END;END:return YesOrNo;void combination(int *p,int n,int *a)/求 m = n*n个数 (1,2,3.m)的全排列int m = n*n;static int Num = 0;int *b_val = new intm;int c = 0,k,

20、i,j;b_valc = -1;/一维数组首地址的值赋-1 c0-1while(b_val0 m) /-1if(+b_valc m) /分别从 0 开始累加每个元素值,并限制不超出最大阶数/b00 10 11 20 2122.66.70.77 80.88判断魔方 89 012345678/78 80.87判断魔方 88 89 012345687/67.70.7688 012345768/012345786/012345867 ./ 876543210for(k = 0;k c;k+) /是否与前面数字重复,如有重复元素跳出,否则使K 下标等于C 下标if(b_valk = b_valc)bre

21、ak;if(k = c)/如果没有重复元素,就可以确定当前元素值,并继续排列下一个下标的数组元素if(c+1 m) /1 23.7 8如果不满足条件,则生成了一组排列方式,否则继续排列下一个元素/ 8+c; /1 23.7 8b_valc =-1;/continue;else /生成了一组排列方式k = -1;for(i = 0;i n;i+)for(j= 0;j n;j+)pij = ab_val+k; /a0-a8/ 判断是否为 n 阶魔方阵if(Judge(p,n)printA(p,n);elsec-;delete b_val;void evaluate(int *p,int n)/给

22、n 阶方阵的元素赋值int i;int *AllNum = new int3*3;for(i = 1;i = n*n;i+)AllNumi - 1 = i;combination(p,n,AllNum);delete AllNum;void main()int i,n,*a;string s;do/ 输入 n 阶方阵的阶数 ncouts;if(!strcmp(s.c_str(),e) |!strcmp(s.c_str(),E)break;else if(s.find_first_not_of(0123456789) !=string:npos)cout请输入有效的数字,不能含有非数字的字符。

23、endl;continue;elsen = atoi(s.c_str();if(n1)cout= 1。endl;continue;/ 分配内存a = new int*n;for(i = 0; i n; i+)ai = new intn;cout正在运算,请等待。endl;/ 给 n 阶方阵的元素赋值evaluate(a,n);cout运算结束! endl;for(i = 0; i n; i+)delete ai;delete a;while(1);return;/* 5、求一个 3x3 矩阵对角线元素之和。*/#includeint dia(int a3);void main()int i,j

24、,sum,a33=2,3,5,6,2,3,1,9,0;couta= ;for(i=0;i3;i+)for(j=0;j3;j+)coutaij;coutendl;sum=dia(a);coutnsum=sumendl;int dia(int a33)int i,j,sum=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;return sum;/返回对角线员素之和/* 6 、编写一个程序,将字符数组s2

25、中的全部字符拷贝到字符数组s1 中。不用 strcpy函数。拷贝时, 0也要拷贝过去。0后面的字符不拷贝。*/#includevoid scopy(char a,char b);void main()int i;char a10;char b10=Hello;scopy(a,b);for(i=0;ai!=0;i+)coutai;coutendl;void scopy(char a,char b)int i;for(i=0;bi!=0;i+)ai=bi;ai=0;/* 7、用筛选法求100 之内的素数。(所谓素数就是除了数整除,这种数称作素数( 也称质数 ) 。) */1 和它本身以外,不能再被

26、别的整#includevoid main()int i,j;for(i=1;i=100;i+)for(j=2;ji;j+)/判断素数if(i%j!=0);else break;/不是素数if(i=j)/相等为素数cout i;coutendl;/* 8、用选择法对10 个整数排序。 */#includevoid csort(int a10);void main()int i;int a10=6,4,2,7,9,0,1,6,3,0;for(i=0;i10;i+)/输出原数组数据顺序coutai;coutendl;csort(a);for(i=0;i10;i+)/输出排序后的顺序coutai;co

27、utendl;void csort(int a10)/排序int i,j,k,temp=0;for(i=1;i10;i+)k=i;for(j=k+1;jaj)k=j;if(k!=i)temp=ai;/把数放到正确位置ai=ak;ak=temp;第 6章指针/* 1、在主函数中输入10 个字符串。用另一函数对它们排序。然后在主函数输出这10 个已排好序的字符串。(用指针实现)*/#includevoid psort(int *p);void main()int i,a10;coutplease input ten numbers:n;for(i=0;iai;psort(a);coutresort

28、 result=;for(i=0;i10;i+)coutai ;void psort(int *p)int i,j,temp;for(i=0;i10;i+) /每循环一次确定数组中一个数的位置for(j=i+1;jpj)temp=pj;pj=pi;pi=temp;/* 2 、输入一个字符串,内有数字和非数字字符,如A123x456 1233?8997jhlkll将其中连续的数字作为一个整数,依次存放到一数组a 中,统计共有多少个整数,并输出这些数。 */#include#include#include int charge(int *,char *);void main()int a50,i,

29、numb;char b50;coutplease input a character string:endl;cin.getline(b,50);system(cls);coutyour character string is ;cout.write(b,strlen(b)endl;numb=charge(a,b);for(i=0;inumb;i+)cout ai=ai;coutendltotal numbers=numb=0&*p=0&*p=9)/判断是否有连续字符型整数*q=(*q)*10+(*p)-0);/将连续字符型整数转换成一个整型整数赋值给新数组p+;q+;numb+;/统计整数的

30、个数return numb;/* 3 、用指向指针的指针的方法对 5 个字符串排序并输出。 */ #include #include void sort(char *str);void main()int i;char *string5;cout输入 5 个字符串: endl;for(i=0;i5;i+)stringi = new char10;cin.getline(*(string+i),50);sort(string);for(i=0;i5;i+)delete stringi;void sort(char *str)int i=0,j;char *p=0;for(i=0;i4;i+)fo

31、r(j=i+1;j5;j+)if(strcmp(*(str+i),*(str+j)0)p=*(str+i);*(str+i)=*(str+j);*(str+j)=p;coutafter sort the chars :endl;for(i=0;i5;i+)cout*(str+i)endl;/* 4、统计一字符串在另一个字符串中出现的次数。*/#include#includeint change(char *,char *);void main()int sum;char a10=dog;char b20=sdlkdogsddydodog;cout.write(a,10)endl;cout.wr

32、ite(b,20)endl;sum=change(a,b);coutsum=sumendl;int change(char *p,char *q)int sum=0,i=0;while(*q!=0)while(*p=*q&*p!=0)/对比是否含有相等字符串*p+;*q+;i+;if(*p=0)sum+=1;/含有字符串个数p=p-i;/第一个字符串重新定位q=q-i;/第二个字符串重新定位i=0;/重新累加移动次数q+;return sum;/* 5、有 n 个整数 ,和 m 从键盘输入。 */使其前面各数顺序向后移m 个位置, 最后m 个数变成最前面的m 个数 .n#include#includevoid charge(int a,int,int);void main()int i,n,m,a50;coutn;coutm;cout请输入整数: ;for(i=0;iai;cout您输入的整数为:;for(i=0;in;i+)coutai ;coutendl;charge(a,n,m);cout移动后的整数为:;for(i=0;in;i+)coutai ;coutendl;void charge(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论