c++编程初学者练习题以及解析代码_第1页
c++编程初学者练习题以及解析代码_第2页
c++编程初学者练习题以及解析代码_第3页
c++编程初学者练习题以及解析代码_第4页
c++编程初学者练习题以及解析代码_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

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

文档简介

1、程序设计基本功练习题输入3个数,求最大数。将百分制成绩转换成五级制成绩。(分别用if、嵌套、switch完成)韩信点兵:有一个数,用3除余2;用5除余3;用7除余2;求满足条件的最小数。求1+2+3+100求1-2+3-4+-100求1+1/2+1/3+1/100求输入n,求n!(需判断n的合法性)求1!+2!+3!+10!求1+1/2!+1/3!+1/n!,直到1/n!1E-5为止用公式求ex=1+x+x2/2!+x3/3!+xn/n!。n取20。假定f1=1,f2=1;fn=fn-1+fn-2。输出前50项的值,且要求每行输出5个值。判断一个数是否为素数输出2-1000中的素数及个数。且要

2、求每行输出8个素数。输入两个整数,求最大公约数和最小公倍数。输入一个非0的一位整数x,输入一个整数n。输出n位整数x x xx。输入n、a。求sn=a+aa+aaa+aa,其中a是一个非0的一位整数。输入任意的正整数,将其各位分离出来;求它是几位数,求各位上数字的和,求其逆值。一个正整数如果恰好等于它的因子之和,这个数称为“完数”,如6=1+2+3。求1000以内所有的完数,每行5个。用迭代法求x=a的平方根。求平方根的迭代公式为xn+1=0.5(xn+a/xn) 。要求前后两次求出的x的差的绝对值小于1e-5为止。用牛顿迭代法求方程在1.5附近的根 2x3-4x2+3x-6=0用二分法求上面

3、的方程在(-10,10)之间的根。打印形状为直角三角形的九九乘法表。百马百担问题。有100匹马,驮100担货,大马驮3担,中马驮2担,两匹小马驮1担,问有大中小马多少匹,共有多少组解?数列1,2,2,3,3,3,4,4,4,4,5,问第100是多少?*1.3求任意一个整数的十位上的数字。1.4 输入三个实数,判断能否构成三角形;若能,再说明是何种类型的三角形。1.5输入任意的a,b,c求一元二次方程ax*x+bx+c=0的根。*1.6 将百分制成绩转换为五级制成绩1.7 输入年月日,判断它是该年的第多少天。*1.8 假定2007年的一月一日是星期三,求2009年的4月20日是星期几。1.9 我

4、国古代著名的孙子定理也称韩信点兵。用现代语言讲是:有一个数,用3除余2,用5除余3,用7除余2,求满足条件的最小数。*2.1 求一个整数的各个数位上的数字之和并反序输出。2.2 求1+2+3+前n项的和。*2.3 求1-3+5-7+的前100项的和。2.4 求1+(1+2)+(1+2+3)+(1+2+3+4)+的前n项的和*2.5 求n!2.6 求1!+2!+3!+n!2.7 求1!-3!+5!-7!+前n项的和*2.8 求1*2+2*3+3*4+前n项的和*2.9 从键盘输入一个整数,判断它是否为素数2.10求3到1000之间的所有素数的和。2.11验证哥德巴赫猜想:一个大于2的偶数总可以分

5、解成两个素数的和。*2.12设s=1+1/2+1/3+1/n,求与8最接近的s的值及与之对应的n值。2.13假定2007年的一月一日是星期三,打印出该年的日历(仿照台历或挂历样式)3.1鸡兔同笼一共有40只脚,求鸡兔各有多少只,总共有多少种组合。*3.2换零钱.把一元钱全兑换成硬币(1分2分5分),有多少种兑换方法/*/输入3个数,求最大数。#includevoid main()int a,b,c,max;coutabc;if(ab) max=a;else if(bc) max=b; else max=c; couta b c 三个数中 max 最大!n; */*/将百分制成绩转换成五级制成绩

6、。(分别用if、嵌套、switch完成)#includevoid main()while(1)float score;coutscore;if(score100) cout输入有误n90) cout优n80) cout70) cout=60) cout及格n; else cout不及格,要努力!n; coutendl; */*/韩信点兵:有一个数,用3除余2;用5除余3;用7除余2;求满足条件的最小数。#includevoid main()int x,a;for(x=0;x100;x+) if (x%3=2)&(x%5=3)&(x%7=2) coutx; coutendl; break; */

7、*/求1+2+3+100#includevoid main()int x,sum=0;for(x=1;x=100;x+) sum+=x;coutsum;coutendl;*/另一种方法/*#includevoid main()int sum;sum=(1+100)*(100/2);coutsumendl;*/*/求1-2+3-4+-100#includevoid main()int x,sum=0,sum1=0,sum2=0;for(x=1;x=-100;x-,x-) sum2+=x;sum=sum1+sum2;cout1+3+5+98=sum1endl;/正数之和cout-2-4-6-100

8、=sum2endl;/负数之和cout1-2+3-4-100=sum;/总和coutendl;*/*/求1+1/2+1/3+1/100#includevoid main()float n,m,sum=0;for(n=1;n=100;n+) m=1/n; cout1/n=ttmendl; sum+=m; cout1/1+1/n=tsumendl;cout*n;cout1/1+1/100=tsumendl;*/*/求输入n,求n!(需判断n的合法性)#includelong fact(int n)/例用递归调用求n的阶乘。if(n=0) return 1;return fact(n-1)*n;vo

9、id main()while(1)int x,y,n;coutx;fact(x);coutfact(x); */*/求1!+2!+3!+10!#includelong double fact(int n)if(n=0) return 1;return fact(n-1)*n;void main()int x,y,sum=0;for(x=1;x=10;x+) fact(x); y=fact(x); sum+=y; coutx!=yendl; cout1!+2!+10!=sumendl;*/ /*/求1+1/2!+1/3!+1/n!,直到1/n!1E-5为止#includelong double

10、fact(int n)if(n=0) return 1;return fact(n-1)*n;void main()while(1)long double x,y,m,n,sum1=0,sum2=0;/x控制循环,y接收阶乘值,m接收1/n!值,n待求阶乘的数, /sum1接收阶乘之和,sum2接收阶乘分之一的和。coutn;for(x=1;x=n;x+) fact(x); y=fact(x); m=1/y; coutx!=tyt*t; cout1/x!=tmendl; sum1+=y; sum2+=m; coutendl;cout*n;cout1!+n!=tsum1endl;cout1/1!

11、+1/n!=tsum2endl;cout*n; cout*nn; /if(m1E-5)break;/控制结束。/若将此句移动for()语句前呢?*/*/用公式求ex=1+x+x2/2!+x3/3!+xn/n!。n取20。 */*/假定f1=1,f2=1;fn=f(n-1)+f(n-2)。输出前50项的值,且要求每行输出5个值。/此程序运算速度非常慢,效率太低,应想法改进。#includelong fibo(int n);void main()int a;long f;cina;/用a来接受50的输入。int n;for (n=1;n=a;n+) fibo(n); f=fibo(n); cout

12、f(n)= f ; if (n%5=0) coutendl; long fibo(int n)if(n=1) return 1;else if(n=2) return 1;else return fibo(n-1)+fibo(n-2);*/*/判断一个数是否为素数。#include#includevoid main()while(1) int m,i,k; coutm; k=sqrt(m); for(i=2;ik) coutm是一个素数n*n; else coutm不是一个素数n*n;*/*/输出2-1000中的素数及个数。且要求每行输出8个素数。#include#includevoid ma

13、in()while(1) int m,n,i,j=0,k; coutm; cout1到m之间的素数有:n; for(n=1;n=m;n+) k=sqrt(n); for(i=2;ik) coutnt; j+; if (j%8=0)coutendl; coutendl; cout一共有; coutj; cout个。n*n; */*/输入两个整数,求最大公约数和最小公倍数。#includevoid main()int x,y,a,b;coutxy;for(a=x;a0;a-)/通过循环求最大公约数。 if ( (x%a=0)&(y%a=0) coutx和y的最大公约数是:t; couta; cou

14、tendl; b=(x*y)/a; /两数的最小公倍数等于两数的乘积除以两数的最大公约数。 coutx和y的最小公倍数是:t; coutbendl; break; */*/输入一个非0的/ 一位 /整数x,输入一个整数n。输出n位整数x x xx。#includevoid main()while(1) int m,n=0,i,j=1; coutm;if(m=10) cout输入有误n; else for(i=1;i=m;i+) n+=m*j; j*=10; coutnendl; */*/输入n、a。求sn=a+aa+aaa+aa,其中a是一个非0的一位整数。#includevoid main(

15、)while(1)int n,a,i,j=0,k=1,sn=0;couta;coutn;for(i=1;i=n;i+) j+=k*a; k*=10; sn+=j;coutsn;coutendl;*/*/输入任意的正整数,将其各位分离出来;求它是几位数,求各位上数字的和,求其逆值。#includevoid main()int m,n,i,j=1,k=0,a20,x,y;coutm;y=m;for(i=1;i+) j*=10; n=m/j; ai=n; k+; if(n1) break; int b=1,c,d=0;for(i=1;i=k;i+) b*=10; /coutbendl; cout0;

16、i-) b=b/10; c=m/b; m=m-c*b; d+=c; coutc ;coutendl;cout你输入的数字是k位数n;cout各位上的数字之和为:dendl;x=0;do x=x*10+y%10; y=y/10;while(y!=0);cout逆序输出为:x;coutendl;*/ */以下全是编外题!/*/将一个输入的整数各位逆序输出。#includevoid main()int n=0,num;cinnum;do n=n*10+num%10; num=num/10; while(num!=0);coutn;*/输入一个5位数的整数,将其分离成单独的数字,/分离结果之间用3个空

17、格分开(提示:应用整型除和模数运算符)。/例如输入的数为:56349,则程序输出结果为/5 6 3 4 9 /*#include int main( ) int n, t = 10000; scanf(%d, &n); while ( t ) printf(%d , n / t ); n %= t; t /= 10; return 0; */*/给一个多于5位的正整数,要求:1求出它是几位数;2分别打印出每一位数字;3按逆序打印出各位数字#include #include stdlib.husing namespace std;void main() char cBufBit33;/int i

18、Integer;double iInteger; /这样可以多输几位,:-),不过这样也就只能20位int iBitNum = 0;int i,j;coutiInteger;sprintf(cBufBit, %0.0f, iInteger);for (i = 0;i +) if (cBufBiti !=0) iBitNum +; else break;coutendl您所输入的整数位数为:iBitNumendl;cout正序输出您所输入的整数各位:;for (j = 0; j i;j +) coutcBufBitj;coutendl= 0; j -) cout cBufBitj;coutend

19、lendl; */*/用c+编写程序:从键盘上任意输20个1-99之间的整数,分别统计其个位数0-9的数字各有多少#includeusing namespace std;int main() int a20,b10, i;for(i=0;i10;i+) bi=0;cout输入20个(1-99)的整数:endl;for(i=0;iai; while(ai99); int n=ai%10; switch(n) case 0:b0+;break; case 1:b1+;break; case 2:b2+;break; case 3:b3+;break; case 4:b4+;break; case

20、5:b5+;break; case 6:b6+;break; case 7:b7+;break; case 8:b8+;break; case 9:b9+;break; default:break; for(i=0;i10;i+) couti:biendl;return 0; */以上全是编外题!/ */*/一个正整数如果恰好等于它的因子之和,/这个数称为完数,如6=1+2+3。/求1000以内所有的完数,每行5个。/#include stdafx.h #include using namespace std; int main()int i=0,Num,j;for(Num=1;Num=100

21、0;Num+) i=0; for(j=1;jNum;j+) if (Num%j)=0) i=i+j; if(Num=i) coutNumendl; return 0;*/* /用迭代法求x=a的平方根。/求平方根的迭代公式为xn+1=0.5(xn+a/xn) 。/要求前后两次求出的x的差的绝对值小于1e-5为止。#include#include #include int main() /为什么要用带命令行参数的main呢.还有stdafx.h.用不到 double x1,x2,a,b; /定义为double,不然float做除法会有warningx2=0;x1=1.0;b=1.0; /一定要初

22、始化cina;while(b=1e-5) x2=(x1+a/x1)/2; b=fabs(x2-x1); x1=x2;coutx2endl;return 0; */用牛顿迭代法求方程在1.5附近的根 2x3-4x2+3x-6=0/*/*/*/*/打印形状为直角三角形的九九乘法表。1*1=11*2=2 2*2=41*3=3 2*3=6 3*3=91*4=4 2*4=8 3*4=12 4*4=16.*/*/只用了三分钟,蛮有成就感的:-)#includevoid main()int m,n,i,j;for(i=1;i=9;i+) for(j=1;j=i;j+) coutj*i=j*it; coute

23、ndl;*/*/百马百担问题。有100匹马,驮100担货,/大马驮3担,中马驮2担,两匹小马驮1担,/问有大中小马多少匹,共有多少组解?#includevoid main()int h1,h2,h3,m=1;/大马,中马,小马。for(h1=1;h150;h1+) for(h2=1;h240;h2+) for(h3=1;h3100;h3+)/若算出小马为单数,则表明至少有一匹小马不驮货物! if(h1+h2+h3=100)&(3*h1+2*h2+h3/2=100) cout第m种方案:t; cout大马:h1中马:h2小马:h3endl; m+; */*/数列1,2,2,3,3,3,4,4,4

24、,4,5, 问第100是多少?#includevoid main()int m,n,i=0;for(m=1;m=100;m+) for(n=1;n=m;n+) i+; if(i=100) coutmendl; */*/编程求下列方程组。/太简单了。y=x(x1)y=2-x/5(1=x=10)*/*#includevoid main()float x,y;/若为int型,则当1=x10时会报错。coutx;if(x1) y=x; couty=yendl;else if(x10) y=2-x/5; couty=yendl; else y=3*x-11; couty=yendl; */编程求解下列方

25、程组:/*y=2+x(x=-10)y=2x(-10x=0)y=x-2(0x10)*/*#include#includevoid main()float x,y;cinx;if(x=-10)y=2+x;coutyendl; else if(x=0)y=pow(2,x);cout(float)yendl; else if(x=10) y=x-2;coutyendl; else y=x/10;cout(float)yendl; */*/*1.3求任意一个整数的十位上的数字。#includevoid main()int m,n;coutm;m/=10;m%=10;n=(m%=10);coutn;*/*

26、/1.4 输入三个实数,判断能否构成三角形;若能,再说明是何种类型的三角形。#includevoid main()int a,b,c;cout请输入三角形的三个边长:n;couta;coutb;coutc;if(a=b&b=c&c=a) cout构成等边三角形n;else if(a+b=c|a+c=b|b+c=a) coutc|b+ca|a+cb) if(a=b|b=c|c=a) cout此三边构成等腰三角形; else cout此三边构成三角形; */*/1.5输入任意的a,b,c求一元二次方程ax*x+bx+c=0的根。#include#includevoid main()int a,b,

27、c;float x1,x2,d;coutabc;d=(float)sqrt(b*b-4*a*c);if(b*b-4*a*c0) cout方程无解;else if(b*b-4*a*c=0) x1=-b/(2*a); cout方程的根是:x1; else x1=(-b+d)/(2*a); x2=(-b-d)/(2*a); cout第一个根是:x1endl; cout第二个根是:x2endl; */*/*1.6 将百分制成绩转换为五级制成绩#includevoid main()int score;coutscore;if(score100) cout输入有误;elseif(score60) cout

28、差;else if(score70) cout中; else if(score80) cout良; else if(score90) cout优; else cout优秀;*/*/1.7 输入年月日,判断它是该年的第多少天。#includevoid main()int year,mouth,day,y,m,d,days=0,x,i;cout请输入年月日:;coutyear; coutmouth;coutday;if(0year10000)&(0mouth13)&(0day32);else goto loop;/此处预留语句用于判断年月日的合法性。if(year%4=0&year%100!=0|

29、year%400=0) for(i=1;imouth;i+) if(i=1|i=3|i=5|i=7|i=8|i=10|i=12) days+=31; else if(i=4|i=6|i=9|i=11) days+=30; else days+=29; else for(i=1;imouth;i+) if(i=1|i=3|i=5|i=7|i=8|i=10|i=12) days+=31; else if(i=4|i=6|i=9|i=11) days+=30; else days+=28; coutdays+day;loop:cout输入日期有误;;*/*/*1.8 假定2007年的一月一日是星期三

30、,求2009年的4月20日是星期几。#includelong alldays(int year,int mouth,int day);int main() int date,i;long x=alldays(2007,1,1);coutendl;long y=alldays(2007,1,4);coutendl;long z=alldays(2007,1,4)-alldays(2007,1,1);coutendl;date=3;cout两年间隔:z天;coutendl;for(i=1;i=z;i+) date+; cout星期date;coutendl;return 0;long allday

31、s(int year,int mouth,int day)int i;long d=0;for(i=1;iyear;i+) if(year%4=0&year%100!=0|year%400=0) d+=366; else d+=365; for(i=1;imouth;i+) if(i=1|i=3|i=5|i=7|i=8|i=10|i=12) d+=31; else if(i=4|i=6|i=9|i=11) d+=30; else if(year%4=0&year%100!=0|year%400=0) d+=29; else d+=28; return d+day;*/*/1.9 我国古代著名的

32、孙子定理也称韩信点兵。/用现代语言讲是:有一个数,用3除余2,/用5除余3,用7除余2,求满足条件的最小数。#includevoid main()int a,b;for(a=1;a+) if(a%3=2&a%5=3&a%7=2) break; else ;couta;coutendl;*/*/*2.1 求一个整数的各个数位上的数字之和并反序输出。#includevoid main()int m,n,i,j=1,k=0,a20,x,y;coutm;y=m;for(i=1;i+) j*=10; n=m/j; a=n; k+; if(n1) break; int b=1,c,d=0;for(i=1;

33、i=k;i+) b*=10; /coutbendl; cout0;i-) b=b/10; c=m/b; m=m-c*b; d+=c; coutc ;coutendl;cout你输入的数字是k位数n;cout各位上的数字之和为:dendl;x=0;do x=x*10+y%10; y=y/10;while(y!=0);cout逆序输出为:x;coutendl;*/*/2.2 求1+2+3+前n项的和。#includevoid main()int n,sum=0;cinn;for(int i=1;i=n;i+) sum+=i;coutsum;coutendl;*/*2.3 求1-3+5-7+的前100项的和。/*#includevoid main()int a=1,b=-1,i,j;int m=1,n=1,sum=0;for(i=1;i=100;i+) a*=b; n=m*a; sum+=n; m+=2;cout-sum;coutendl;*/ /另一种做法:/*#includevoid main()int a;int sum;sum=(100/2)*(-2);coutsum;coutendl;*/*/2.4 求1+(1+2)+(1+2+3)+(1+2+3+4)+的前n项的和/1 3 6 10 15#includevoid main() int a,b

温馨提示

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

评论

0/150

提交评论