北京理工大学计算机学院复试上机题目
由于编者水平有限,如有错误,请多多包涵。欢迎各位指正,如有交流请加QQ1585583870,转载请注明,谢谢合作!
A部分
1. 编写程序,计算下列分段函数 y=f(x)的值。
y= -x+2.5,0<= x <2
y=2-1.5(x-3)(x-3),2<= x<4
y=x/2-1.5,4<= x <6。
2. 编写程序,读入一个整数 N。若 N 为非负数,则计算 N 到 2N 之间的整数和;若 N 为一个负数,则求 2N 到 N 之间的整数和。
3. 设 N 是一个四位数,它的 9 倍恰好是其反序数(例如:1234的反序数是 4321),求 N 的值。
4. N 个人围成一圈顺序编号,从 1 号开始按 1、2、 3 顺序报数,报 3 者退出圈外,其余的人再从1、2、 3 开始报数,报 3 的人再退出圈外,依次类推。请按退出顺序输出每个退出人的原序号。要求使用环形链表编程。
#include<iostream>
using namespace std;
struct Node{
int number;
Node *next;
};
int main(){
int n;
cout<<"请输入人数n:";
cin>>n;
// 判错
if(n<=0){
cout<<"输入不合法!"<<endl;
return 0;
}
// 构造循环链表
Node *l,*p;
l=(Node *)malloc(sizeof(Node));
l->number=1;
l->next=l;
p=l;
for(int i=2;i<=n;i++){
Node *q;
q=(Node *)malloc(sizeof(Node));
q->number=i;
q->next=p->next;
p->next=q;
p=q;
}
// 当前人数
int k=n;
// 现在,p结点指向l
p=l;
while(k>0){
p=p->next;
p=p->next;
// 输出现在退出的位置
cout<<p->number<<" ";
// 删除结点
if(p->next!=p){
p->number=p->next->number;
// 释放空间
Node *q;
q=p->next;
p->next=q->next;
free(q);
}
else
free(p);
k--;
}
return 0;
}
补充使用顺序表(数组)的做法:
#include<iostream>
using namespace std;
int main(){
int n,count=1,i=0;
int p[100]={0};
cout<<"请输入人数n:";
cin>>n;
// count记录退出的序号,i记录当前报数的位置,n是总人数
while(count<=n){
// 当遇到值为0,表明此位置还未退出,i++;否则,该位置已退出,忽略该位置
for(int flag=1;flag<=3;i=(i+1)%n)
if(p[i]==0)
flag++;
// 回退最后一次无效的i++;加n的作用是补正
i=(i+n-1)%n;
// 在数组当前位置上,记录退出的序号
p[i]=count++;
}
// 按退出的顺序,输出位置
for(int k=1;k<=n;k++)
for(int j=0;j<n;j++)
if(p[j]==k)
cout<<j+1<<" ";
cout<<endl;
return 0;
}
B部分
1. 请输入高度 h,输入一个高为 h,上底边长为 h的等腰梯形(例如 h=4,图形如下)。
****
******
********
**********
#include<iostream>
using namespace std;
int main(){
int h;
cout<<"请输入h的值:";
cin>>h;
for(int i=0;i<h;i++){
for(int j=0;j<h-i-1;j++)
cout<<" ";
for(int k=0;k<h+i*2;k++)
cout<<"*";
cout<<endl;
}
return 0;
}
2. 请编写一个程序,从键盘上输入 n(n 的范围是1~20),求 n 的阶乘。
#include<iostream>
using namespace std;
int f(int k){
if(k==0)
return 1;
return k*f(k-1);
}
int main(){
int n;
cin>>n;
cout<<f(n)<<endl;
return 0;
}
3. 从键盘上任意输入一个长度不超过 20 的字符串,对所输入的字符串,按照 ASCII 码的大小从小到大进行排序,请输出排序后的结果。
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main(){
string str;
cout<<"请输入字符串:";
cin>>str;
sort(str.begin(),str.end());
cout<<"排序后的结果为:"<<str<<endl;
return 0;
}