sum=i%10+i%100/10+i%1000/100+i%10000/1000;
if(sum==5&&i%5==0)cout<
}
return0;
}
1-6(5分)
思路分析:
先取一个求阶乘的函数Factorial,其中分是否为0两种,再在主函数中用循环体进行筛选,取出个,十,百位数,进行阶乘运算,再进行相加判断。
#include
usingnamespacestd;
intFactorial(intx){
intj,Product=1;
if(x!
=0){
for(j=1;j<=x;j++)
Product=Product*j;
returnProduct;
}
elsereturn1;
}
intmain(){
inti,a=0,b=0,c=0,sum=0;
for(i=100;i<1000;i++){
a=i/100;
b=i%100/10;
c=i%10;
if(i==Factorial(a)+Factorial(b)+Factorial(c))
cout<
}
return0;
}
1-9(5分)
思路分析:
用循环体筛选4位数,表示出ARA和PEA,再进行判断。
#include
usingnamespacestd;
intmain(){
inti,P=0,E=0,A=0,R=0,m=0,n=0;
for(i=1000;i<10000;i++){
P=i/1000;
E=i/100%10;
A=i%100/10;
R=i%10;
m=A*100+R*10+A;
n=P*100+E*10+A;
if(m+n==i)
cout<<"P="<
}
return0;
}
1-10(5分)
思路分析:
做一个阶乘函数为后面做准备,然后用m,n分别表示当前项的分子分母,结合s表示出当前项,判断循环体循环与否的标准是当前项是否小于输入的指定值。
最后输出。
#include
#include
#include
usingnamespacestd;
intFactorial(intk){
intj,Product=1;
if(k!
=0){
for(j=1;j<=k;j++)
Product=Product*j;
returnProduct;
}
elsereturn1;
}
intmain(){
doublei=1,sum=0,t,m,n=1,x,epsilon;
ints=-1;
cout<<"输入的x值"<<"\n输入指定值"<cin>>x>>epsilon;
t=x;m=x;
while(fabs(t)>=epsilon){
sum+=t;
m=m*pow(x,2);
n=(i*2+1)*Factorial(i);
s=-s;
t=-s*m/n;
i++;
}
cout<return0;
}
1-11(5分)
思路分析:
三个部分分别用循环体算出,第一第二部分为整型,第三部分为浮点型,再分别转成浮点型相加。
#include
#include
usingnamespacestd;
intmain(){
intk,y=0,sum1=0,sum2=0;
doublez=0,sum3=0;
for(k=1;k<=100;k++)
sum1+=k;
for(k=1;k<=50;k++){
y=pow(k,2);
sum2+=y;
}
for(k=1;k<=10;k++){
z=1/(double)k;
sum3+=z;
}
cout<<(double)sum1+(double)sum2+sum3<return0;
}
2-15(10分)
思路分析:
先进行初始化,数组前两个元素在定义时均初始化为0,后面的从a[2]到a[N]用循环体逐个初始化为1。
最后是筛选,从每个元素开始进行,所以用双层循环,N/2+1后面的元素因为没有了倍数,故不再需要进行筛选它们,因此第一层的筛选条件是i#include
usingnamespacestd;
intmain(){
inti,N=0;
cout<<"输入所求范围的N值"<cin>>N;
int*a=newint[N];
if(a==0){cout<<"没有分配到动态内存";exit
(2);}
for(i=0;iif(i<2)a[i]=0;
elsea[i]=1;}
for(i=2;ifor(intj=i*2;ja[j]=0;}
for(i=0;iif(a[i]==1)cout<
delete[N]a;
return0;
}
2-20(10分)
思路分析:
首先建立一个类Fraction,放入分数需要的分子,分母。
然后再类中重载函数,加,减,乘,除,大于,小于,输入,输出。
最先是输出,最重要的是约分,找出公因式。
然后是加减,分母相乘,分子交叉相乘相加,其后是乘除,乘是,分子分母分别相乘,除是交叉相乘,大于小于是看减的差与0的关系。
#include
usingnamespacestd;
classFraction{
intzi,mu;
public:
Fraction(int=0,int=1);
Fractionoperator+(Fraction&);
Fractionoperator-(Fraction&);
Fractionoperator*(Fraction&);
Fractionoperator/(Fraction&);
intoperator>(Fraction&);
intoperator<(Fraction&);
voidprint(){
if(mu>=zi){
for(inti=2;i<=zi;i++)
if(zi%i==0&&mu%i==0){
zi=zi/i;
mu=mu/i;}
}
elseif(zi>mu){
for(inti=2;i<=mu;i++)
if(zi%i==0&&mu%i==0){
zi=zi/i;
mu=mu/i;}
}
cout<};
Fraction:
:
Fraction(intx,inty){
zi=x;
mu=y;
}
FractionFraction:
:
operator+(Fraction&r){
intx=zi*r.mu+mu*r.zi;
inty=mu*r.mu;
returnFraction(x,y);
}
FractionFraction:
:
operator-(Fraction&r){
intx=zi*r.mu-mu*r.zi;
inty=mu*r.mu;
returnFraction(x,y);
}
FractionFraction:
:
operator*(Fraction&r){
intx=zi*r.zi;
inty=mu*r.mu;
returnFraction(x,y);
}
FractionFraction:
:
operator/(Fraction&r){
intx=zi*r.mu;
inty=mu*r.zi;
returnFraction(x,y);
}
intFraction:
:
operator>(Fraction&r){
intzi=zi*r.mu-mu*r.zi;
if(zi>0)
returnzi>r.zi;
}
intFraction:
:
operator<(Fraction&r){
intzi=zi*r.mu-mu*r.zi;
if(zi<=0)
returnzi}
voidmain(){
cout<<"输入两组分子,分母\n";
inta1,b1,a2,b2;
cin>>a1>>b1>>a2>>b2;
Fractionr1(a1,b1),r2(a2,b2),r3;
r1.print();
r2.print();
r3=r1+r2;
r3.print();
r3=r1-r2;
r3.print();
r3=r1*r2;
r3.print();
r3=r1/r2;
r3.print();
(r1if((r1cout<<"分子1大于分子2";
elsecout<<"分子1小于分子2";
}
3-25(10分)
思路分析:
先把文件里的数取出来放在2维数组里,再提前算好公式把数值往里带,求出的值再用定点形式输出。
当然,最后释放文件。
#include
#include
#include
#include
usingnamespacestd;
intmain(){
intb[5][2];
floatdelta,max,min;
ifstreamin("hezi.txt");
if(!
in){cout<<"不能打开输入文件:
\n";return1;}
for(inta,i=1;in>>a;i++)
for(intn=0;n<2;n++)
b[i-1][n]=a;
for(intj=0;j<5;j++){
delta=16*pow((b[j][0]+b[j][1]),2)-48*b[j][0]*b[j][1];
max=(b[j][0]+b[j][1]+sqrt(delta))/6.0;
min=(b[j][0]+b[j][1]-sqrt(delta))/6.0;
cout<}
in.close();
return0;
}
4-28(40分)
思路分析:
用一个函数算出一个数的“水仙花数”,再在主函数中应用其进行判断。
第一,建函数Daffodil,因对每位数都要n次方,所以要用循环体,首先取出每位数,用整除取出当前项,用取余取出除首位数外剩下的,再依次循环取。
另外就是算出“水仙花数”。
第二,
就是判断范围内的数了,因此用循环体,且在其中用Daffodil判断。
#include
#include
usingnamespacestd;
longintDaffodil(longintx,intn){
longinti,s,k=0,m=0,product=0,sum=0;
for(i=0,s=n-1;im=pow(10,s);
k=x/m;
x=x%m;
product=pow(k,n);
s--;
sum+=product;
}
returnsum;
}
intmain(){
cout<<"输入所需花朵数的位数"<intN;
cin>>N;
longintj=pow(10,N-1),s=pow(10,N);
for(;j
if(j==Daffodil(j,N))
cout<return0;
}
第三单元(每题10分)
21.思路分析:
定义一个结构体,定义结构体里的各个成员名。
定义输入函数,输入数据;定义高度和体重函数,利用冒泡排序和绝对值将高度和体重排序;
当身高差值相同时,根据体重继续排序;最后根据字符串的排序输出名字;定义输出函数,调用各个函数输出名字
#include
#include
#include
usingnamespacestd;
structShenshi{
charname[8];
charlastname[8];
intheight;
intweight;
};
voidinput(Shenshi*a,intn)
{
for(inti=0;icin>>a->name>>a->lastname>>a->height>>a->weight;
}
voidheight(Shenshi*a,intn)
{
Shenshim;
for(inti=0;ifor(intj=i+1;j{
if(fabs(a[i].height-180)>fabs(a[j].height-180))
{m=a[i];a[i]=a[j];a[j]=m;}
}
}
voidweight(Shenshi*a,intn)
{
Shenshix;
for(inti=0;ifor(intj=i+1;j{
if(fabs(a[i].height-180)==fabs(a[j].height-180))
{
{
if(a[i].weight>75&&a[j].weight<75)
{x=a[i];a[i]=a[j];a[j]=x;}
}
if(a[i].weight<75&&a[j].weight<75)
{
if(fabs(a[i].weight-75)>fabs(a[j].weight-75))
{x=a[i];a[i]=a[j];a[j]=x;}
}
if(a[i].weight>75&&a[j].weight>75)
{
if(fabs(a[i].weight-75)>fabs(a[j].weight-75))
{x=a[i];a[i]=a[j];a[j]=x;}
}
}
}
}
voidlastname(Shenshi*a,intn)
{
Shenshie;
for(inti=0;ifor(intj=i+1;j{
if(a[i].height==a[j].height&&a[i].weight==a[j].weight)
{
if(strcmp(a[i].lastname,a[j].lastname)>0)
{e=a[i];a[i]=a[j];a[j]=e;}
}
}
}
voidname(Shenshi*a,intn)
{
Shenshik;
for(inti=0;i{
if(strcmp(a[i].lastname,a[i+1].lastname)==0)
{
if(strcmp(a[i].name,a[i+1].name)>0)
{k=a[i];a[i]=a[i+1];a[i+1]=k;}
}
}
}
voidoutput(Shenshi*a,intn)
{
cout<<"输出排名为"<for(inti=0;i{
cout<lastname<<'\t'<name<}
}
intmain(void)
{
intn;
Shenshi*p;
cout<<"输入人数为";
cin>>n;
p=newShenshi[n];
input(p,n);
height(p,n);
weight(p,n);
lastname(p,n);
name(p,n);
output(p,n);
delete[]p;
return0;
}
22.思路分析:
先定义两个函数,把每一位数的顺序反过来与本身相加,把和作为新的数重复运算,直到得到一个回文数,利用动态数组输入数据,使结果输出
#include
#include
usingnamespacestd;
voidf1(inta,intb,intc)
{
cout<}
voidf2(intn,inte,intsum)
{
sum=0;
intx=0,y,z,p,m=0;
y=n;
z=n;
e++;
while(y!
=0)
{
y=y/10;m++;
}
p=m;
int*a=newint[m];
for(inti=0;i{
a[i]=z%10;z=z/10;
}
for(i=0;isum+=a[i]*(pow(10,p-1));
if(sum==n)f1(n,e,sum);
elsef2(n+sum,e,sum);
}
intmain(void)
{
intn,sum=0,e=0;
cout<<"输入数的个数n"<cin>>n;
int*a=newint[n];
for(inti=0;icin>>a[i];
cout<for(i=0;i{
f2(a[i],e,sum);
}
return0;
}