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