资源描述
程序设计基本功练习题输入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中的素数及个数。且要求每行输出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用二分法求上面的方程在(-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 我国古代著名的孙子定理也称韩信点兵。用现代语言讲是:有一个数,用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的偶数总可以分解成两个素数的和。*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; */*/将百分制成绩转换成五级制成绩。(分别用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; */*/求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=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;void 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 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!+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); coutf(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 main()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; coutendl; 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()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;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个空格分开(提示:应用整型除和模数运算符)。/例如输入的数为: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 iInteger;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;coutendlendl; */*/用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 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=1000;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; /一定要初始化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; coutendl;*/*/百马百担问题。有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,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; */编程求解下列方程组:/*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;*/*/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,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差;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|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年的一月一日是星期三,求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 alldays(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 我国古代著名的孙子定理也称韩信点兵。/用现代语言讲是:有一个数,用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;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,m,n,sum=0,total=0; cinn; for(int i=1;i=n;i+) sum+=i; total+=sum; couttotalendl;*/*/*2.5 求n!#includevoid main() int m,n=1; cinm; for(int i=1;i=m;i+) n*=i; coutnendl;*/ /*/2.6 求1!+2!+3!+n!#includevoid main() int m,n=1,sum=0; cinm; for(int i=1;i=m;i+) n*=i; sum+=n; coutsum; coutendl;*/*/2.7 求1!-3!+5!-7!+前n项的和#includevoid main() int m,n=1,x=1,y=-1;double a,b=1,sum=0; cinm; for(int i=1;i=m;i+) n=2*i-1;a=1; for(int j=1;j=n;j+) x*=y; a*=j; b=a*(-x); sum+=b; coutsum endl; */*/*2.8 求1*2+2*3+3*4+前n项的和#includevoid main() int m,n,a=1,sum=0; cinn; for(int i=1;i=n;i+) a=i*(i+1); sum+=a; coutsum; coutendl;*/*/*2.9 从键盘输入一个整数,判断它是否为素数#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.10求3到1000之间的所有素数的和。#include#includevoid main() int m,q,n,i,j=0,k,sum=0; coutq; coutm; coutq到m之间的素数有:n; for(n=q;n=m;n+) k=sqrt(n); for(i=2;ik) coutnt; sum+=n; j+; if (j%8=0)coutendl; coutendl; cout一共有; coutj; cout个。n*n; cout这些素数的和为:; coutsum;coutendl;*/*/2.11验证哥德巴赫猜想:/一个大于2的偶数总可以分解成两个素数的和。#includevoid main() int m,n; coutm; if(m%2!=0) cout输入有误!;*/*/2.11验证哥德巴赫猜想:一个大于2的偶数总可以分解成两个素数的和。/
展开阅读全文