C++程序.docx
《C++程序.docx》由会员分享,可在线阅读,更多相关《C++程序.docx(30页珍藏版)》请在冰豆网上搜索。
C++程序
C++程序设计
班级:
091001
姓名:
张娇
学号:
091001128
【程序9】
题目:
一个数如果恰好等于它的因子之和,这个数就称为"完数"。
例如6=1+2+3.
编程找出1000以内的所有完数。
#include
usingnamespacestd;
classWanShu{
public:
voidfun();
};
voidWanShu:
:
fun(){
for(inti=1;i<=1000;i++){
intt=0;
for(intj=1;j<=i/2;j++){
if(i%j==0)t=t+j;
}
if(t==i)cout<
}
}
intmain(){
WanShua;
a.fun();
return0;
}
【程序10】
题目:
一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,
求它在第10次落地时,共经过多少米?
第10次反弹多高?
#include
usingnamespacestd;
classBallFall{
public:
BallFall(){height=100;distance=100;}
voidfun();
private:
doubleheight;
doubledistance;
};
voidBallFall:
:
fun(){
for(inti=1;i<10;i++){
distance=distance+height;
height/=2;
}
cout<<"路程是:
"<cout<<"高度是:
"<}
intmain(){
BallFalla;
a.fun();
return0;
}
【程序11】
题目:
有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?
都是多少?
程序分析:
可填在百位、十位、个位的数字都是1、2、3、4。
组成所有的排列后再去掉不满足条件的排列。
#include
usingnamespacestd;
classNum{
public:
voidfun();
};
voidNum:
:
fun(){
intcount=0;
for(intx=1;x<5;x++){
for(inty=1;y<5;y++){
for(intz=1;z<5;z++){
if(x!
=y&&y!
=z&&x!
=z){
count++;
cout<if(count%4==0){
cout<<"\n";
}
}
}
}
}
cout<<"共有"<}
intmain(){
Numa;
a.fun();
return0;
}
【程序12】
题目:
企业发放的奖金根据利润提成。
利润(I)低于或等于10万元时,奖金可提10%;
利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;
20万到40万之间时,高于20万元的部分,可提成5%;
40万到60万之间时高于40万元的部分,可提成3%;
60万到100万之间时,高于60万元的部分,可提成1.5%,
高于100万元时,超过100万元的部分按1%提成,
从键盘输入当月利润I,求应发放奖金总数?
程序分析:
请利用数轴来分界,定位。
注意定义时需把奖金定义成长整型。
#include
usingnamespacestd;
classAward{
public:
Award(){i=0;s=0;}
voidset_pro();
voidfun();
private:
inti;
doubles;
};
voidAward:
:
set_pro(){
cin>>i;
}
voidAward:
:
fun(){
if(i<=10){
s=i*0.1;
}
elseif(i>10&&i<=20){
s=10*0.1+(i-10)*0.075;
}
elseif(i>20&&i<=40){
s=10*0.1+10*0.075+(i-20)*0.05;
}
elseif(i>40&&i<=60){
s=10*0.1+10*0.075+20*0.05+(i-40)*0.03;
}
elseif(i>60&&i<=100){
s=10*0.1+10*0.075+20*0.05+20*0.03+(i-60)*0.015;
}
else{
s=10*0.1+10*0.075+20*0.05+20*0.03+40*0.015+(i-100)*0.01;
}
cout<<"本月应发放奖金"<
}
intmain(){
Awarda;
a.set_pro();
a.fun();
return0;
}
【程序13】
题目:
一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
程序分析:
在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,
如果开方后的结果满足如下条件,即是结果。
#include
#include
usingnamespacestd;
classShu{
public:
voidfun();
};
voidShu:
:
fun(){
for(inti=-100;i<=100000;i++){
if(sqrt(i+100)/1==int(sqrt(i+100))){
if(sqrt(i+268)/1==int(sqrt(i+268))){
cout<
}
}
}
}
intmain(){
Shua;
a.fun();
return0;
}
【程序14】
题目:
输入某年某月某日,判断这一天是这一年的第几天?
程序分析:
以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,
特殊情况,闰年且输入月份大于3时需考虑多加一天。
#include
usingnamespacestd;
classDay{
public:
Day(){year=0;month=0;day=0;}
voidset_day();
voidfun();
private:
intyear,month,day;
};
voidDay:
:
set_day(){
cin>>year;
cin>>month;
cin>>day;
}
voidDay:
:
fun(){
intdays=0,d=0;
for(inti=1;iswitch(i){
case1:
case3:
case5:
case7:
case8:
case10:
case12:
days=31;break;
case4:
case6:
case9:
case11:
days=30;break;
case2:
{if(year%400==0||(year%4==0&&year%100!
=0))
days=29;
elsedays=28;
break;}
}
d+=days;
}
cout<<"共有"<}
intmain(){
Daya;
a.set_day();
a.fun();
return0;
}
【程序15】
题目:
输入三个整数x,y,z,请把这三个数由小到大输出。
程序分析:
我们想办法把最大数为x,最小数为z
#include
usingnamespacestd;
classSort{
public:
voidset_num();
voidfun();
private:
intx,y,z;
};
voidSort:
:
set_num(){
cin>>x;
cin>>y;
cin>>z;
}
voidswap(int*a,int*b){intt=*a;*a=*b;*b=t;}
voidSort:
:
fun(){
if(x>y)swap(x,y);
if(x>z)swap(x,z);
if(y>z)swap(y,z);
cout<}
intmain(){
Sorta;
a.set_num();
a.fun();
return0;
}
【程序16】
题目:
输出9*9口诀。
程序分析:
分行与列考虑,共9行9列,i控制行,j控制列。
#include
usingnamespacestd;
classKou{
public:
voidfun();
};
voidKou:
:
fun(){
for(inti=1;i<10;i++){
for(intj=1;j<=i;j++){
cout<
}
cout<<"\n";
}
}
intmain(){
Koua;
a.fun();
return0;
}
【程序17】
题目:
猴子吃桃问题:
猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个,
第二天早上又将剩下的桃子吃掉一半,又多吃了一个。
以后每天早上都吃了前一天剩下的一半零一个。
到第10天早上想再吃时,见只剩下一个桃子了。
求第一天共摘了多少。
程序分析:
采取逆向思维的方法,从后往前推断。
#include
usingnamespacestd;
classMon{
public:
Mon(){lastnumber=1;}
voidfun();
private:
intlastnumber;
};
voidMon:
:
fun(){
for(inti=2;i<=10;i++){
lastnumber=(lastnumber+1)*2;
}
cout<}
intmain(){
Mona;
a.fun();
return0;
}
【程序20】
题目:
有一分数序列:
2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
程序分析:
请抓住分子与分母的变化规律。
#include
usingnamespacestd;
classSum{
public:
Sum(){sum=0;}
voidfun();
private:
doublesum;
};
voidSum:
:
fun(){
intx=2,y=1,t;
for(inti=0;i<20;i++){
sum+=(double)x/y;
t=y;
y=x;
x=y+t;
}
cout<<"前20项之和是:
"<}
intmain(){
Suma;
a.fun();
return0;
}
【程序21】
题目:
求1+2!
+3!
+...+20!
的和
程序分析:
此程序只是把累加变成了累乘。
#include
usingnamespacestd;
classSum{
public:
voidfun();
};
voidSum:
:
fun(){
floatsum=0;
floatfac=1;
for(inti=1;i<=20;i++){
fac=fac*i;
sum+=fac;
}
cout<}
intmain(){
Suma;
a.fun();
return0;
}
【程序22】
题目:
利用递归方法求5!
。
程序分析:
递归公式:
fn=fn_1*4!
#include
usingnamespacestd;
classWu{
public:
longfun(intn);
};
longWu:
:
fun(intn){
if(n==1)return1;
elsereturnn*fun(n-1);
}
intmain(){
Wua;
cout<}
【程序25】
题目:
一个5位数,判断它是不是回文数。
即12321是回文数,个位与万位相同,十位与千位相同。
#include
usingnamespacestd;
classHui{
public:
voidfun();
voidset_n();
private:
longn;
};
voidHui:
:
set_n(){
cin>>n;
}
voidHui:
:
fun(){
if(n/10000==n%10&&n/10%10==n/10/10/10%10)
cout<<"是回文数"<elsecout<<"不是回文数"<}
intmain(){
Huia;
a.set_n();
a.fun();
return0;
}
【程序27】
题目:
求100之内的素数
#include
#include
usingnamespacestd;
classSu{
public:
voidfun();
};
voidSu:
:
fun(){
intj;
for(inti=1;i<=100;i++){
for(j=2;j<=sqrt(i);j++)
if(i%j==0)break;
if(j>sqrt(i))cout<
}
}
intmain(){
Sua;
a.fun();
return0;
}
【程序28】
题目:
对10个数进行排序
程序分析:
可以利用选择法,即从后9个比较过程中,选择一个最小的与第一个元素交换,
下次类推,即用第二个元素与后8个进行比较,并进行交换。
#include
usingnamespacestd;
classSort{
public:
voidfun();
};
voidSort:
:
fun(){
inti;
inta[10];
for(i=0;i<10;i++){cin>>a[i];}
for(i=0;i<10;i++){
for(intj=i+1;j<10;j++){
if(a[i]>a[j]){
intt=a[i];
a[i]=a[j];
a[j]=t;
}
}
}
for(i=0;i<10;i++)cout<}
intmain(){
Sorta;
a.fun();
return0;
}
【程序29】
题目:
求一个3*3矩阵对角线元素之和
程序分析:
利用双重for循环控制输入二维数组,再将a[i][i]累加后输出。
#include
usingnamespacestd;
classCross{
public:
Cross(){sum=0;}
voidfun();
voidset_num();
private:
intsum;
inta[3][3];
};
voidCross:
:
set_num(){
for(inti=0;i<3;i++){
for(intj=0;j<3;j++){cin>>a[i][j];}
}
}
voidCross:
:
fun(){
for(inti=0;i<3;i++){
for(intj=0;j<3;j++){
if(i==j)sum+=a[i][j];
}
}
cout<<"对角线元素之和是"<}
intmain(){
Crossa;
a.set_num();
a.fun();
return0;
}
【程序31】
题目:
将一个数组逆序输出。
程序分析:
用第一个与最后一个交换。
#include
usingnamespacestd;
classInverse{
public:
voidset_array();
voidfun();
private:
inta[10];
};
voidInverse:
:
set_array(){
for(inti=0;i<10;i++)cin>>a[i];
}
voidInverse:
:
fun(){
for(inti=9;i>=0;i--){
cout<}
}
intmain(){
Inversea;
a.set_array();
a.fun();
return0;
}
【程序33】
题目:
打印出杨辉三角形(要求打印出10行如下图)
#include
usingnamespacestd;
classYang{
public:
voidfun();
};
voidYang:
:
fun(){
inta[10][10];
inti;
for(i=0;i<10;i++){
a[i][0]=1;a[i][i]=1;
}
for(i=2;i<10;i++){
for(intj=1;j
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
for(i=0;i<10;i++){
for(intj=0;j<=i;j++)
cout<cout<<"\n";
}
}
intmain(){
Yanga;
a.fun();
return0;
}
【程序34】
题目:
输入3个数a,b,c,按大小顺序输出。
程序分析:
利用指针方法。
#include
usingnamespacestd;
classSort{
public:
voidset_num();
voidfun();
private:
inta,b,c;
};
voidSort:
:
set_num(){
cin>>a;
cin>>b;
cin>>c;
}
voidswap(int*x,int*y){intt=*x;*x=*y;*y=t;}
voidSort:
:
fun(){
if(a>b)swap(a,b);
if(a>c)swap(a,c);
if(b>c)swap(b,c);
cout<}
intmain(){
Sorta;
a.set_num();
a.fun();
return0;
}
【程序38】
题目:
写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。
#include
usingnamespacestd;
classLen{
public:
intfun(char*s);
};
intLen:
:
fun(char*s){
inti=0;
while(*s){i++;s++;}
returni;
}
intmain(){
chara[80];
gets(a);
Lenb;
cout<return0;
}
【程序39】
题目:
编写一个函数,
输入n为偶数时,调用函数求1/2+1/4+...+1/n,
当输入n为奇数时,调用函数1/1+1/3+...+1/n
(利用指针函数)
#include
usingnamespacestd;
classSum{
public:
voidfun(intn);
voidf(intn);
Sum(){sum=0;}
private:
doublesum;
};
voidSum:
:
fun(intn){
for(inti=2;i<=n;i=i+2)
sum+=(double)1/i;
cout<}
voidSum:
:
f(intn){
for(inti=1;i<=n;i=i+2)
sum+=(double)1/i;
cout<}
intmain(){
intn;
cin>>n;
Suma;
if(n%2==0)a.fun(n);
elsea.f(n);
return0;
}
【程序41】
题目:
海滩上有一堆桃子,五只猴子来分。
第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。
第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,
第三、第四、第五只猴子都是这样做的,
问海滩上原来最少有多少个桃子?
#include
usingnamespacestd;
classSum{
public:
voidfun();
};
booltake(intsum){
for(intn=1;n<=5;n++){
if(sum%5==1){
sum=sum-1;
sum=sum-sum/5;
}
else
returnfa