}
}
}
3、一个数如果恰好等于它的各因子(该数本身除外)子和,如:
6=3+2+1,则称其为“完数”;若因子之和大于该数,则称其为“盈数”。
求出2到60之间所有“完数”和“盈数”,并以如下形式输出:
E:
e1e2e3......(ei为完数)G:
g1g2g3......(gi为盈数)
#include
usingnamespacestd;
voidmain()
{
cout<<"E:
";
for(inti=2;i<=60;i++)
{
ints=0;
for(intj=1;j
{
if(i%j==0)
{
//s=0;
s+=j;
}
}
if(s==i)
{
cout<
}
}
cout<cout<<"G:
";
for(intk=2;k<=60;k++)
{
ints=0;
for(intj=1;j{
if(k%j==0)
{
s+=j;
}
}
if(s>k)
{
cout<}
}
cout<}
4、从键盘输入4个学生的数据(包括姓名、年龄和成绩),并存放在文件sf1上。
从该文件读出这些数据,按成绩从高到底排序,并输出其中成绩次高者的所有数据。
#include
#include
#include
usingnamespacestd;
structstudent
{
stringname;
intage;
intscore;
};
voidmain()
{
studentst[4];
students;
studentt;
inti=0;
ofstreamout("sf1.txt");
cout<<"请输入4个学生的姓名,年龄,成绩:
"<for(i=0;i<4;i++)
{
cin>>s.name>>s.age>>s.score;
out<}
ifstreamin("sf1.txt");
cout<<"name"<<"age"<<"score"<for(i=0;i<4;i++)
{
in>>st[i].name>>st[i].age>>st[i].score;
cout<}
for(i=0;i<4;i++)
for(intj=i+1;j<4;j++)
if(st[i].score{
t=st[i];
st[i]=st[j];
st[j]=t;
}
cout<<"name"<<"age"<<"score"<for(i=0;i<4;i++)
cout<}
2001年
(1):
1、编写程序,计算下列分段函数y=f(x)的值。
y=-x+2.50<=x<2y=2-1.5(x-3)(x-3)2<=x<4y=x/2-1.54<=x<6
#include
usingnamespacestd;
voidmain()
{
intx;
cout<<"请输入x(0-6):
";
cin>>x;
if(x<0&&x>=6)
cout<<"输入有误!
";
if(x>=0&&x<2)
cout<<"y="<<(-x+2.5)<elseif(x>=2&&x<4)
cout<<"y="<<2-1.5*(x-3)*(x-3)<elseif(x>=4&&x<6)
cout<<"y="<}
2、编写程序,读入一个整数N。
若N为非负数,则计算N到2N之间的整数和;若N为一个负数,则求2N到N之间的整数和。
#include
#include
usingnamespacestd;
voidmain()
{
intN;
cout<<"请输入一个整数:
";
cin>>N;
cout<<((N+2*N)*(abs(N)+1))/2<}
3、设N是一个四位数,它的9倍恰好是其反序数(例如:
1234的反序数是4321),求N的值。
#include
usingnamespacestd;
voidmain()
{
for(inti=1000;i<=9999;i++)
{
inta,b,c,d;
a=i/1000;
b=i/100-a*10;
c=(i/10)%10;
d=i%10;
if(9*i==d*1000+c*100+b*10+a)
cout<
}
}
4、N个人围成一圈顺序编号,从1号开始按1、2、3顺序报数,报3者退出圈外,其余的人再从1、2、3开始报数,报3的人再退出圈外,依次类推。
请按退出顺序输出每个退出人的原序号。
要求使用环行链表编程。
#include
#include
usingnamespacestd;
typedefstructnode
{
intnum;
structnode*next;
}LNode;
voidmain()
{
LNode*head,*p,*q;
intN;
cout<<"输入人数:
";
cin>>N;
p=(LNode*)(malloc(sizeof(LNode)));
p->num=1;
head=p;
for(inti=1;i{
p->next=(LNode*)(malloc(sizeof(LNode)));
p=p->next;
p->num=i+1;
}
p->next=head;
p=head;
cout<<"输出序列为:
"<while(p->next!
=p)
{
q=p->next;
p=q->next;
q->next=p->next;
cout<num<<"";
deletep;
p=q->next;
}
cout<num<deletep;
}
2001年
(2)
1、请输入高度h,输入一个高为h,上底边长为h的等腰梯形(例如h=4,图形如下)。
****
******
********
**********
#include
usingnamespacestd;
voidmain()
{
inth;
cout<<"请输入h:
";
cin>>h;
for(inti=0;i{
for(intj=0;jcout<<"";
for(intk=0;kcout<<"*";
cout<}
}
2、请编写一个程序,从键盘上输入n(n的范围是1~20),求n的阶乘。
#include
usingnamespacestd;
voidmain()
{
intn;
intsum=1;
//intt=0;
cout<<"请输入n(1-20):
";
cin>>n;
for(inti=1;i<=n;i++)
{
sum=sum*i;
}
cout<}
3、从键盘上任意输入一个长度不超过20的字符串,对所输入的字符串,按照ASCII码的大小从小到大进行排序,请输出排序后的结果。
#include
#include
#include
usingnamespacestd;
voidmain()
{
strings;
cout<<"Enterstring:
";
cin>>s;
sort(s.begin(),s.end());
cout<
}
2002年(A)
1、某人有8角的邮票5张,1元的邮票4张,1元8角的邮票6张,用这些邮票中的一张或若干张可以得到多少中不同的邮资?
#include
usingnamespacestd;
voidmain()
{
intsum=0;
for(inti=0;i<=5;i++)
for(intj=0;j<=4;j++)
for(intk=0;k<=6;k++)
{sum++;
cout<<0.8*i+j+1.8*k<<"";
}
cout<cout<}
2、输入n值,使用递归函数,求杨辉三角形中各个位置上的值,按照如下形式打印输出图形。
例如:
当n=6时。
11112113311464115101051
#include
usingnamespacestd;
intfun(intn,intk)//n为行,k为列
{
if(k==0||n==k)
return1;
else
returnfun(n-1,k-1)+fun(n-1,k);
}
voidmain()
{
inti,j,n;
cout<<"请输入n:
";
cin>>n;
for(i=0;i{
for(intk=0;kcout<<"";
for(j=0;j<=i;j++)
cout<cout<}
}
2002年(B)
1、打印所有不超过n(n<256)的,其平方具有对称性质的数。
如11*11=121。
#include
#include
#include
usingnamespacestd;
voidmain()
{
intt,x;
chars[10];
for(inti=1;i<256;i++)
{
intj=0;
x=i*i;
while(x)
{
t=x%10;
s[j++]=t+48;
x/=10;
}
s[j]='\0';
if(i*i==atoi(s))
{
cout<
}
}
cout<}
2、编写一个求菲波那奇数列的递归函数,输入n值,使用该递归函数,输出如下图形。
例如:
当n=6时。
001101123011235801123581321011235813213455
#include
usingnamespacestd;
intfun(intn)
{
if(n==0)
return0;
elseif(n==1)
return1;
else
returnfun(n-1)+fun(n-2);
}
voidmain()
{
intn;
cout<<"请输入n:
";
cin>>n;
//cout<<"";
for(inti=0;i{
for(intj=0;j<(2*n-1)-(2*i+1);j++)
cout<<"";
for(intk=0;k<2*i+1;k++)
cout<cout<}
}
2003年
1、输入球的中心点和球上某一点的坐标,计算球的半径和体积。
#include]
#include
usingnamespacestd;
doubleconstPI=3.14156;
voidmain()
{
intx1,x2,y1,y2,z1,z2;
doubler;
cout<<"请输入中心点坐标:
";
cin>>x1>>y1>>z1;
cout<<"请输入球上某一点的坐标:
";
cin>>x2>>y2>>z2;
r=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)+(z1-z2)*(z1-z2));
cout<<"半径为:
"<cout<<"体积为:
"<<4*PI*r*r*r/3<}
2、手工建立一个文件,文件种每行包括学号、姓名、性别和年龄。
每一个属性使用空格分开。
文件如下:
01李江男2102刘唐男2303张军男1904王娜女19根据输入的学号,查找文件,输出学生的信息。
#include
#include
#include
usingnamespacestd;
structstudent
{
intnum;
stringname;
stringsex;
intage;
};
voidmain()
{
studentt[10];
studentst;
strings;
intNO;
intn;
ofstreamout("student.txt");
cout<<"请输入学生人数:
";
cin>>n;
cout<<"请输入学生信息:
"<for(inti=0;i{
cin>>st.num>>st.name>>st.sex>>st.age;
out<}
cout<<"请输入您要查找学生的学号:
";
cin>>NO;
cout<<"学号"<<"姓名"<<"性别"<<"年龄"<ifstreamin("student.txt");
for(intj=0;j{
in>>t[j].num>>t[j].name>>t[j].sex>>t[j].age;
if(t[j].num==NO)
cout<}
cout<}
真确算法:
#include
#include
#include
usingnamespacestd;
intmain()
{
charstr[80];
intst_no;
ifstreamfile("student.txt");
if(!
file)
{
cout<<"error!
";
return0;
}
cout<<"输入你要查找的学生的学号:
";
cin>>st_no;
while(!
file.eof())
{
file.getline(str,80);
if(st_no==atoi(str))
{
cout<<"学号"<<"姓名"<<"性别"<<"年龄"<cout<}
}
return0;
}
3、输入年月日,计算该填是本年的第几天。
例如1990年9月20日是1990年的第263天,2000年5月1日是2000年第122天。
(闰年:
能被400正除,或能被4整除但不能被100整除。
每年1、3、5、7、8、10为大月)
#include
usingnamespacestd;
intmonth[12]={31,28,31,30,31,30,31,31,30,31,30,31};
voidmain()
{
inty,m,d;
intsum=0;
cout<<"输人年月日:
";
cin>>y>>m>>d;
for(inti=1;i{
sum=sum+month[i-1];
}
if(m>2&&(y%400==0)||(y%4==0&&y%100!
=0))
{
sum=sum+1;
}
sum=sum+d;
cout<}
2004年
第一题是建立一个角类,在这个类中重载减号运算符,并实现求出角度的正弦值的函数。
#include
#include
usingnamespacestd;
doubleconstPI=3.14159;
classangle
{
intX;
public:
voidxsin();
angle(){};
angle(intx){X=x;}
angleoperator-(anglec);
};
angleangle:
:
operator-(anglec)
{
returnangle(X-c.X);
}
voidangle:
:
xsin()
{
doublex=X*PI/180;
cout<<"正弦值为:
"<}
voidmain()
{
anglea(30),b(60),d;
a.xsin();
b.xsin();
d=b-a;
d.xsin();
}
第二题是建立一个求一元二次方程解的类(a*x^2+b*x+c=0),输入系数a,b,c的值后打印出这个方程的解来,也比较简单。
需要注意的是系数a不能为零以及方程有无解,单解还是双解的情况。
#include
#include
usingnamespacestd;
classRoot
{
inta,b,c;
public:
Root(intaa,intbb,intcc):
a(aa),b(bb),c(cc){}
Root(){}
voidresult();
//voidprint();
};
voidRoot:
:
result()
{
if(a==0)
cout<<"error!
";
doubledelta=b*b-4*a*c;
if(delta==0)
cout<<"单根:
"<<"x="<<-b/2*a<elseif(delta<0)
cout<<"无解!
"<else
cout<<"双跟:
"<<"x1="<<-b/2*a+sqrt(delta)/2*a<<""<<"x2="<<-b/2*a-sqrt(delta)/2*a<}
voidmain()
{
intaa,bb,cc;
cout<<"请输入系数:
";
cin>>aa>>bb>>cc;
Rootx(aa,bb,cc);
//x.a=aa;x.b=bb;x.c=cc;
x.result();
}
第三道题是实现一个多项式的类(a+b*x+c*x^2+d*x^3+...+),要求输入该多项式的系数和x的值后打印出这个多项式的值。
这道题本身并不难,但他要求用好的算法(实际上就是递归)。
#include
usingnamespacestd;
intconstsize=60;
intfun(floatnum[],intx,intn,intN)
{
if(n==0)
returnnum[n];
else
returnx*fun(num,x,n-1,N)+num[N-n];
}
voidmain()
{
intn,x;
floatnum[size];
cout<<"请输入最高项次数:
";
cin>>n;
cout<<"请输入各项系数:
";
for(inti=0;i<=n;i++)
cin>>num[i];
cout<<"请输入