c++编程初学者练习题以及解析代码Word格式文档下载.docx
- 文档编号:20884226
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:51
- 大小:26.95KB
c++编程初学者练习题以及解析代码Word格式文档下载.docx
《c++编程初学者练习题以及解析代码Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《c++编程初学者练习题以及解析代码Word格式文档下载.docx(51页珍藏版)》请在冰豆网上搜索。
有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个数,求最大数。
#include<
iostream.h>
voidmain()
{
inta,b,c,max;
cout<
"
请输入三个整数。
;
cin>
>
a>
b>
c;
if(a>
b)
max=a;
else
if(b>
c)
max=b;
else
max=c;
cout<
a<
"
b<
c<
三个数中"
max<
最大!
\n"
}
*/
//将百分制成绩转换成五级制成绩。
while
(1)
floatscore;
请输入学生成绩"
score;
if(score>
100)
输入有误\n"
endl;
else
if(score>
90)
优\n"
80)
良\n"
70)
中\n"
if(score>
=60)
及格\n"
不及格,要努力!
//韩信点兵:
intx,a;
for(x=0;
x<
100;
x++)
if
((x%3==2)&
&
(x%5==3)&
(x%7==2))
{
x;
break;
}
//求1+2+3+…+100
intx,sum=0;
for(x=1;
=100;
sum+=x;
sum;
}*/
//另一种方法
intsum;
sum=(1+100)*(100/2);
sum<
*/
//求1-2+3-4+…-100
intx,sum=0,sum1=0,sum2=0;
x++,x++)
sum1+=x;
for(x=-2;
x>
=-100;
x--,x--)
sum2+=x;
sum=sum1+sum2;
1+3+5…+98="
sum1<
//正数之和
-2-4-6…-100="
sum2<
//负数之和
1-2+3-4…-100="
//总和
//求1+1/2+1/3+…+1/100
floatn,m,sum=0;
for(n=1;
n<
n++)
m=1/n;
1/"
="
'
\t'
m<
sum+=m;
1/1+…+"
*****************************************\n"
1/1+…+1/100="
//求输入n,求n!
longfact(intn)//例用递归调用求n的阶乘。
if(n==0)
return1;
return
fact(n-1)*n;
intx,y,n;
请输入一个整数:
fact(x);
//求1!
longdoublefact(intn)
if(n==0)return1;
returnfact(n-1)*n;
intx,y,sum=0;
=10;
fact(x);
y=fact(x);
sum+=y;
x!
y<
1!
+…10!
//求1+1/2!
longdoublex,y,m,n,sum1=0,sum2=0;
//x控制循环,y接收阶乘值,m接收1/n!
值,n待求阶乘的数,
//sum1接收阶乘之和,sum2接收阶乘分之一的和。
//该数为n,即最大数。
n;
=n;
m=1/y;
!
*"
sum1+=y;
sum2+=m;
****************************************************\n"
+…+"
1/1!
****************************************************\n\n"
//if(m<
1E-5)break;
//控制结束。
//若将此句移动for()语句前呢?
//用公式求ex=1+x+x2/2!
//假定f1=1,f2=1;
fn=f(n-1)+f(n-2)。
//此程序运算速度非常慢,效率太低,应想法改进。
longfibo(intn);
inta;
longf;
a;
//用a来接受50的输入。
intn;
for(n=1;
=a;
fibo(n);
f=fibo(n);
f("
)="
f<
if(n%5==0)
longfibo(intn)
if(n==1)
elseif(n==2)
elsereturnfibo(n-1)+fibo(n-2);
//判断一个数是否为素数。
math.h>
intm,i,k;
请输入一个数:
cin>
m;
k=sqrt(m);
for(i=2;
i<
=k;
i++)
if(m%i==0)break;
if(i>
k)cout<
是一个素数\n"
**********\n"
elsecout<
不是一个素数\n**********\n"
//输出2-1000中的素数及个数。
intm,n,i,j=0,k;
1到"
之间的素数有:
for(n=1;
=m;
k=sqrt(n);
if(n%i==0)break;
k)
j++;
if(j%8==0){cout<
一共有"
j;
个。
\n********************\n"
//输入两个整数,求最大公约数和最小公倍数。
intx,y,a,b;
请输入两个整数:
y;
for(a=x;
0;
a--)//通过循环求最大公约数。
((x%a==0)&
(y%a==0))
和"
的最大公约数是:
\t"
b=(x*y)/a;
//两数的最小公倍数等于两数的乘积除以两数的最大公约数。
的最小公倍数是:
//输入一个非0的////一位////整数x,输入一个整数n。
intm,n=0,i,j=1;
请输入数字的位数:
if(m>
=10)
{cout<
else{
for(i=1;
n+=m*j;
j*=10;
//输入n、a。
intn,a,i,j=0,k=1,sn=0;
请输入基数:
请输入最大数的位数:
for(i=1;
j+=k*a;
k*=10;
sn+=j;
sn;
//输入任意的正整数,将其各位分离出来;
intm,n,i,j=1,k=0,a[20],x,y;
请输入一个整数:
y=m;
n=m/j;
a[i]=n;
k++;
if(n<
1)
intb=1,c,d=0;
b*=10;
//cout<
你输入的数字各位分别是:
for(i=k;
i>
i--)
{b=b/10;
c=m/b;
m=m-c*b;
d+=c;
你输入的数字是"
k<
位数\n"
各位上的数字之和为:
d<
x=0;
do{
x=x*10+y%10;
y=y/10;
while(y!
=0);
逆序输出为:
//**********************************************************************************
//以下全是编外题!
!
//将一个输入的整数各位逆序输出。
intn=0,num;
num;
do
{n=n*10+num%10;
num=num/10;
}while(num!
//输入一个5位数的整数,将其分离成单独的数字,
//分离结果之间用3个空格分开(提示:
应用整型除和模数运算符)。
//例如输入的数为:
56349,则程序输出结果为
//56349
#include<
stdio.h>
intmain()
intn,t=10000;
scanf("
%d"
&
n);
while(t)
printf("
%d"
n/t);
n%=t;
t/=10;
return0;
}
//给一个多于5位的正整数,要求:
1求出它是几位数;
2分别打印出每一位数字;
3按逆序打印出各位数字
iostream>
#include"
stdlib.h"
usingnamespacestd;
{
charcBufBit[33];
//intiInteger;
doubleiInteger;
//这样可以多输几位,:
-),不过这样也就只能20位
intiBitNum=0;
inti,j;
请输入一个正整数:
iInteger;
sprintf(cBufBit,"
%0.0f"
iInteger);
for(i=0;
i++)
if(cBufBit[i]!
='
\0'
)
iBitNum++;
endl<
您所输入的整数位数为:
iBitNum<
正序输出您所输入的整数各位:
for(j=0;
j<
i;
j++)
cBufBit[j];
倒序输出您所输入的整数各位:
for(j=i-1;
j>
=0;
j--)
cBufBit[j];
//用c++编写程序:
从键盘上任意输20个1-99之间的整数,分别统计其个位数0-9的数字各有多少
intmain()
inta[20],b[10],
for(i=0;
10;
b[i]=0;
输入20个(1-99)的整数:
20;
do
a[i];
}while(a[i]<
1&
a[i]>
99);
intn=a[i]%10;
switch(n)
case0:
b[0]++;
break;
case1:
b[1]++;
case2:
b[2]++;
case3:
b[3]++;
case4:
b[4]++;
case5:
b[5]++;
case6:
b[6]++;
case7:
b[7]++;
case8:
b[8]++;
case9:
b[9]++;
default:
:
b[i]<
return0;
//以上全是编外题!
//一个正整数如果恰好等于它的因子之和,
//这个数称为"
完数"
,如6=1+2+3。
//求1000以内所有的完数,每行5个。
//#include"
stdafx.h"
intmain()
inti=0,Num,j;
for(Num=1;
Num<
=1000;
Num++)
i=0;
for(j=1;
j<
Num;
j++)
if((Num%j)==0)
i=i+j;
if(Num==i)
/*
//用迭代法求x=a的平方根。
//求平方根的迭代公式为xn+1=0.5(xn+a/xn)。
//要求前后两次求出的x的差的绝对值小于1e-5为止。
intmain()//为什么要用带命令行参数的main呢....还有stdafx.h..用不到
doublex1,x2,a,b;
//定义为double,不然float做除法会有warning
x2=0;
x1=1.0;
b=1.0;
//一定要初始化
while(b>
=1e-5)
x2=(x1+a/x1)/2;
b=fabs(x2-x1);
x1=x2;
x2<
//用牛顿迭代法求方程在1.5附近的根2x3-4x2+3x-6=0
//*****************************************
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c+ 编程 初学者 练习题 以及 解析 代码