1、c+基础例题100道/* 1 、打印出所有的 水仙花数 。所谓 水仙花数 是指一个三位数,其各位数字立方和等于 该数本身。例如, 153 是一水仙花数,因为 153 = 13 + 53 + 33 。 */ #include void 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 ,
2、因此 6 是完数 。编程序找出 1000 之内的所有完数,并按下面的格式输 出其因子:6 - 1,2,3 */ #include void 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+aaa之值,其中 a是一个数字。例如: 2+22+222+22222 (此时 n=5), n 由键盘
3、输入。 */#includevoid main()double a,sn=0.0,sum=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;
4、coutsum=sum h1=h1endl;/* 5 、猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一 个。第二天早上又将剩下的桃子吃掉了一半,又多吃了一个。以后每天早上都吃了前一天剩 下的一半零一个。到第 10 天早上想再吃时,见只剩一个桃子了。求第一天共摘了多少桃子。*/ #include void main()int number,i;number=1;for(i=10;i1;i-)number=(number+1)*2; coutnumber=numberendl;第 4 章 函数/* 1 、写一函数用 气泡法 对输入的 10个字符按由小到大的顺序排列。 *
5、/ #includevoid main()int i,j,temp,a10;coutplease input 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) */ #include double fun (double,double);void main()double n,x,sum;coutinput n and xnx; sum=fun(n,x);c
6、outPn(x)=sum1)return (2*n1-1)*x1*fun(n1-1,x1)-(n1-1)*fun(n1-2,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;
7、while(ai!=0)if (ai=a&ai=A&ai=0 & ai=9) number+;/ 统计数字个数else others+;/ 统计其他数个数i+;coutletter=letter number=number others=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
8、 (ly=1) a1=29;/366 天else a1=28;/365 天 for(i=0;imonth-1;i+) / 当前月之前所有月天数累加和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,i
9、nt);int cmultiple(int,int,int);void main()int x,y,d,m;coutxy;d=cdivisor(x,y); m=cmultiple(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 c
10、multiple(int x2,int y2,int d1)/ 最小公倍数return x2*y2/d1;/ 两数相乘结果除以它们的最大公约数为最小公倍数/* 6 、写一函数,将两个字符串连接。 */#include #include void 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 、写一函数,将一个字符串的元音字母复制到另一个字符串,然后输出。 */ #i
11、nclude#includevoid scpy(char *,char *);void main()const int size=100;char asize=Hello world;char bsize=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、写一函数, 输入一个四位数字, 要求输出这 4 个数字字符, 但每两个数字间空一空格。 如
12、输入 1990,应输出 1 9 9 0 。 */#include#includevoid outs(char a);void main()const int size=10;char asize;cin.getline(a,size);outs(a);void outs(char a10)int i;if(strlen(a)=4)for(i=0;i4;i+)coutai ;else coutinput error.endl;d。要求改为:d、第 5 章 数组/* 1 、将一个数组中的值按逆序重新存放,例如,原来顺序为: a、b、c、c、 b、a。 */#includevoid back(cha
13、r *);void main()char a50=abcdefg;couta=aendl;back(a);#includevoid back(char *p)int i=0;while(*p!=0)p+;/ 把指针定位到字符串末尾i+;/ 统计字符个数cout0;i-)/ 逆序输出void tri(int a1515) int i,j; for(i=0;i15;i+) for(j=0;j=i;j+) if(j=0|j=i)/ 三角形第一列和对角线被赋值为 1 aij=1;else aij=ai-1j-1+ai-1j;/ 算出其余的数组元素 /* 3 、编一程序,将两个字符串连接起来,不要用 s
14、trcat 函数。 */#include#includevoid scat(char *,char *);void main()const int size=100;char asize=Hello;char bsize=Bye; couta=a b=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 、打印 魔方阵 。所谓魔方阵是指这样的方阵,它的每一行、每一列和对角线之和均相 等
15、。例如:三阶魔方阵:8 1 63 5 74 9 2 要求打印由 1 到 n2 的自然数构成的所有魔方阵。 */ 方法一:输出 N 介魔方阵,但每介只输出一种。#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
16、,j=0;i=n*n;i+,j-,k+)/n 为阶数,从 1 开始给数组赋值if(j=n)/ 当数组行列都越出范围时候,确定数组正确位置 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 阶魔方阵 :en
17、dl;int i,j;for(i = 0;i n;i+)for(j = 0;j n;j+) coutsetw(4)pij;coutendl;coutendlendl;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
18、= false;goto END;for(i = 0;i n;i+)/ 每列是否相等NowSum = 0;for(j = 0;j n;j+)NowSum += pji; if(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)/
19、 求 m = n*n 个数 (1,2,3 m) 的全排列int m = n*n;static int Num = 0;int *b_val = new intm;int c = 0,k,i,j; b_valc = -1;/ 一维数组首地址的值赋 -1 c0-1 while(b_val0 m) /-1if(+b_valc m) / 分别从 0 开始累加每个元素值,并限制不超出最大阶数/b00 10 11 20 21 22.66.70.77 80.88判断魔方 89 012345678/ 7880.87 判断魔方 88 89 012345687/ 67.70.76 88 012345768/ 01
20、2345786/ 012345867 ./ 876543210for(k = 0;k c;k+) / 是否与前面数字重复,如有重复元素跳出,否则使 K下标等于 C 下标if(b_valk = b_valc) break;if(k = c)/ 如果没有重复元素,就可以确定当前元素值,并继续排列下一个下标的数组元素 if(c+1 m) /1 2 3.7 8 如果不满足条件,则生成了一组排列方式,否则继续排列下一个元素/ 8 +c; /1 2 3.7 8 b_valc = -1;/ continue;else / 生成了一组排列方式k = -1;for(i = 0;i n;i+)for(j = 0;
21、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)/ 给 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
22、(s.c_str(),e) | !strcmp(s.c_str(),E)break;else if(s.find_first_not_of(0123456789) != string:npos)endl;cout 请输入有效的数字,不能含有非数字的字符。 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 运算结束
23、! 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,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
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1