1、一个小球,从高为H的地方下落,下落弹地之后弹起高度为下落时的一半,比如第一次弹起高度为H/2,如此反复,计算从小球H高度下落到n次弹地往返的总路程。
要求:(1)用递归的方法实现。(2)输入H和n,输出结果。(3)注意程序的健壮性。(4)可以用C/C++实现。
#include <cstdio>
#include <iostream>
using namespace std;
int Distance(float h,int i,int n)
{
if(i>n)
return 0.0;
if(i==1)
return h+Distance(h,++i,n);
else
return h+Distance(h/2.0,++i,n-1);
}
int main()
{
float h;
int n;
cout<<"请输入高度h:\n";
cin>>h;
cout<<"请输入n"<<endl;
cin>>n;
cout<<Distance(h,1,n);
return 0;
}
2、创建一个CPoint类,代表平面直角坐标系中的点,创建构造函数和运算符重载函数,运算符重载为类重载(非友元重载),可以实现计算两个点之间的距离。可以根据需要加入自己的成员变量或成员函数。
要求:(1)输入两个点的坐标,输出两个点之间的距离。(2)重载运算符为“-”。
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
class CPoint
{
public:
int x;
int y;
CPoint(int a,int b)
{
x=a;
y=b;
}
double operator -(CPoint b)
{
return sqrt((b.x-x)*(b.x-x)+(b.y-y)*(b.y-y));
}
};
int main()
{
int x,y;
cout<<"请输入第一个点的坐标"<<endl;
cin>>x>>y;
CPoint a(x,y);
cout<<"请输入第二个点的坐标"<<endl;
cin>>x>>y;
CPoint b(x,y);
cout<<a-b<<endl;
return 0;
}
3、创建一个CTriangle类,需要用到第二题中创建的类,即用3点来代表一个三角形,输入三个点的坐标,实现判断此三角形是不是直角三角形,并输出此三角形的周长。可以根据需要加入自己的成员变量或成员函数。
要求:(1)输入三个点的坐标,输出周长并给出是否是直角三角形的信息。(2)注意程序的健壮性。
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
class CPoint
{
public:
int x;
int y;
CPoint ()
{
}
CPoint(int a,int b)
{
x=a;
y=b;
}
double operator -(CPoint b)
{
return sqrt((b.x-x)*(b.x-x)+(b.y-y)*(b.y-y));
}
};
class CTriangle
{
public:
CPoint p1,p2,p3;
double length[3];
CTriangle()
{
}
CTriangle(CPoint a,CPoint b,CPoint c)
{
p1=a;
p2=b;
p3=c;
length[0]=p1-p2;
length[1]=p2-p3;
length[2]=p3-p1;
sort(length,length+3);
}
bool Judge()
{
if(length[0]*length[0]+length[1]*length[1]==length[2]*length[2])
return true;
else
return false;
}
double GetC()
{
double C=0;
for(int i=0;i<3;i++)
{
C+=length[i];
}
return C;
}
};
int main()
{
int x,y;
cout<<"请输入第一个点的坐标"<<endl;
cin>>x>>y;
CPoint a(x,y);
cout<<"请输入第二个点的坐标"<<endl;
cin>>x>>y;
CPoint b(x,y);
cout<<"请输入第三个点的坐标"<<endl;
cin>>x>>y;
CPoint c(x,y);
CTriangle Tr(a,b,c);
if(Tr.Judge()==true)
cout<<"该三角形是直角三角形"<<endl;
else
cout<<"该三角形不是直角三角形"<<endl;
cout<<"周长:"<<Tr.GetC()<<endl;
return 0;
}
4、请自定义一个Student类,属性包括,Char name[10],int num。编程实现学生信息的输入、查询、浏览,其中浏览分为:升序和降序两种
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
class CStudent
{
public:
char name[10];
int num;
CStudent()
{
}
CStudent(char na[],int n)
{
strcpy(name,na);
num=n;
}
};
bool cmp1(CStudent s1,CStudent s2)
{
return s1.num<s2.num;
}
bool cmp2(CStudent s1,CStudent s2)
{
return s1.num>s2.num;
}
int main()
{
int n,n1;;
char name[10];
int num;
vector<CStudent> vi;
while(1)
{
cout<<"请输入操作,1,输入学生信息2,查询学生信息3,浏览学生信息,4,退出"<<endl;
cin>>n;
if(n==1)
{
cout<<"请输入学生姓名"<<endl;
cin>>name;
cout<<"请输入学生学号"<<endl;
cin>>num;
CStudent a(name,num);
vi.push_back(a);
}
if(n==2)
{
cout<<"1,以姓名查询,2,以学号查询"<<endl;
cin>>n1;
if(n1==1)
{
cout<<"请输入姓名"<<endl;
cin>>name;
for(vector<CStudent>::iterator it=vi.begin();it!=vi.end();it++)
{
if(strcmp((*it).name,name)==0)
cout<<"学号为:"<<(*it).num<<endl;
}
}
if(n1==2)
{
cout<<"请输入学号"<<endl;
cin>>num;
for(vector<CStudent>::iterator it=vi.begin();it!=vi.end();it++)
{
if(num==(*it).num)
cout<<"姓名为:"<<(*it).name<<endl;
}
}
}
if(n==3)
{
cout<<"1,升序 2,降序\n"<<endl;
cin>>n1;
if(n1==1)
sort(vi.begin(),vi.end(),cmp1);
else
sort(vi.begin(),vi.end(),cmp2);
for(vector<CStudent>::iterator it=vi.begin();it!=vi.end();it++)
{
cout<<(*it).num<<" "<<(*it).name<<endl;
}
}
if(n==4)
break;
}
return 0;
}