其他分享
首页 > 其他分享> > 北理复试上机题2001年

北理复试上机题2001年

作者:互联网

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。

翻译如下:

float calculate(float x){
	if(x>=0 and x<2){
		return 2.5+x*-1;
	}else if(x>=2 and x<4){
		return 2-1.5*(x-3)*(x-3);
	}else if(x>=4 and x<6){
		return x/2-1.5;
	}else{
		return 0;
	}
}

缺失点: 首先,C++中是int/int=整除,所以这里需要定义x为float单精度或者双精度,这里应该需要定义为双精度浮点数。

其次,上面对x的范围提示不全,如果用户输入超出数据范围的数据x,我们应该提醒用户数输入范围错误,而不是返回0,让用户猜测是怎么回事。如下:

#include<iostream>
#include<cmath>//<math.h>
using namespace std;
 
int main()
{
    double x,y=0;
    cout<<"请输入x的值:"<<endl;
    cin>>x;
    if(x>=0&&x<2) cout<<"函数的值为:"<<-1*x+2.5<<endl;
    if(x>=2&&x<4) cout<<"函数的值为:"<<2-1.5*pow(x-3,2)<<endl;
    if(x>=4&&x<6) cout<<"函数的值为:"<<x/2-1.5<<endl;
    else if(x<0||x>6)
        cout<<"输入的x的范围不正确,函数的定义域为0-6"<<endl;
 
    return 0;
}

2、编写程序,读入一个整数 N。若 N 为非负数,则计算 N 到 2N 之间的整数和;若 N 为一个负数,则求 2N 到 N 之间的整数和。

#include<iostream>
#include<cmath>//<math.h>
using namespace std;

int main()
{
    int x,y=0;
    cout<<"请输入整数 N:"<<endl;
    cin>>x;
    if(x>=0) cout<<"N 到 2N 之间的整数和为:"<<(x+1)*(2*x+x)/2.0<<endl;
    else
        cout<<"2N 到 N 之间的整数和为:"<<(-x+1)*(2*x+x)/2.0<<endl;
    
    return 0;
}

3、设 N 是一个四位数,它的 9 倍恰好是其反序数(例如:1234 的反序数是 4321),求 N 的值。

#include<iostream>
#include<cmath>
using namespace std;

int main()
{
    int n[4], i=1234;
    for(int i=1000;i<10000;i++){
    	//传统方式: 
    	int ge = i % 10;//4
		int qian = i / 1000;//1
		int bai = (i - qian*1000) / 100;//2
		int shi = (i - qian*1000-bai*100) / 10;//3
		if(i*9==ge*1000+shi*100+bai*10+qian)
    		cout<<i<<" ";
	}
	
	
    return 0;
}

 

#include<iostream>
#include<cmath>
using namespace std;
int main()
{
    int n[4], i=1234;
    for(int i=1000;i<10000;i++){
		int j=i,k=0;
		//循环方式 
		while(j){
			n[k]=j%10;//取末位
			j=j/10;//去末位
			k++ ;
		}
    	if(i*9==n[0]*1000+n[1]*100+n[2]*10+n[3])
    		cout<<i;
	}
	
    return 0;
}

4、N 个人围成一圈顺序编号,从 1 号开始按 1、2、 3 顺序报数,报 3 者退出圈外,其余的人再从 1、2、 3 开始报数,报 3 的人再退出圈外,依次类推。请按退出顺序输出每个退出人的原序号。要求使用环形链表编程。

#include<iostream>
#include<cmath>
#include<cstdlib>
using namespace std;

/*
约瑟夫环
*/
typedef struct cir{
	int num;
	struct cir * next;
}cir;
int main()
{
	//成环 
    cir *p,*head;
    head = new cir;//结构体,new没有()
    head->num = 1;
    p = head;
    cout<<"请输入人数:";
    int n;
    cin>>n;
    for(int i=1;i<n;i++){
    	cir* s = new cir;//<==>(cir*)malloc(sizeof(cir));
    	p->next = s;
    	p = s;
    	p->num = i+1;
	}
	p->next = head;
    
    //出
    int k=1,count=n;
    
	while(count){
		if(k%3==0){
			cir* c = head;
			cout<<c->num<<" ";
			p->next = head->next;  //链表删除 
			head = p->next;
			free(c);
			k=1;
			count--;
		}
		k++;
		p = head;    //同步指针 
		head = head->next; 
	} 
    
	
    return 0;
}

注意:head = new cir;结构体指针创建内存空间的写法。

 

 

 

 

标签:北理,head,cout,int,next,复试,cir,2001,include
来源: https://blog.csdn.net/qq_26460841/article/details/88073974