1. 用类的成员函数求下列函数的值:
在main函数中重复输入x(x的值必须通过对象初始化得到),多次求y的值。
#include<iostream>
#include<math.h>
using namespace std;
class function{
private:
double x;
public:
function(int a)
{
x=a;
}
void put()
{
if(x<-3)
cout<<"y="<<x+10<<endl;
if(x>=-3&&x<5)
cout<<"y="<<sqrt(x+3)+x<<endl;
if(x>=5)
cout<<"y="<<exp(x)<<endl;
//cout<<"还要继续计算吗?(1-YES,0-NO)"<<c<<endl;
}
};
int main()
{
while(1)
{
int x;
cout<<"请输入x的值:";
cin>>x;
functiont(x);
t.put();
cout<<"还要继续计算吗?(1-YES,0-NO)";
int c;
cin>>c;
if(c==0)
break;
}
return 0;
}
2. 建立一个对象数组,内放5个学生的数据(学号、成绩),设计一个函数max,用指向对象的指针做为参数,在max函数(普通函数)中找出5个学号中成绩最高者,并输出其学号。
#include<iostream>
usingnamespace std;
classstudent{
public:
student(int a=1,int b=1):
num(a),score(b){}
int s()
{return score;}
int n()
{ return num;}
private:
int num;
int score;
};
intmax(student* a,int n)
{
int i,j=0,maxnum=0;
for(i=0;i<n;i++)
{
int z=a[i].s();
if(z>maxnum)
{ maxnum=a[i].s();
j=i;
}
}
return a[j].n();
}
intmain()
{
student a[5];
for(int i=0;i<5;i++)
{cout<<"请输入学号和成绩";
int m,n;
cin>>m>>n;
a[i]=student(m,n);
}
cout<<"最好成绩的学号"<<max(a,5)<<endl;
system("pause");
return 0;
}
3.声明一个表示数组的类Array。一个Array对象可以包含多个整型元素。Array的成员说明如下:
(1) 数据成员a表示实际用于存储数据的整型数组;
(2) 整型变量num表示当前数组中的含有效数据的元素个数;
(3) 数据成员size表示数组的容量,数组中的元素个数最多不能超过size;
(4) 成员函数add用于向数组的末尾添加一个元素;
(5) 成员函数get用于获取数组中指定位置的元素;
(6) 成员函数get_size用于获知数组的最多存放元素个数。
(7) 成员函数get_num用于获知数组当前已存放多少数据。
在main函数中创建数组类Array的对象,完成各成员函数功能的测试。
代码提示:
#include<iostream>
#define MAX 20
using namespacestd;
class Array{
private:
int a[MAX], size,num;
public:
Array(int a=0,int b=0):size(a),num(b){}
void add()
{ if(num<=size-1)
{ cout<<"请输入第"<<num+1<<"整数:";
cin>>a[num];
num++;
}
else
cout<<"数组满了"<<endl;
}
void get()
{
int t;
cout<<"请输入你要找出的数据所在位置:";
cin>>t;
if(t>num)
cout<<"该位置还没数据"<<endl;
else
cout<<"所查数据是:"<<a[t-1]<<endl;
}
void get_size()
{
cout<<"数组最多可存放数据:"<<size<<endl;
}
void get_num()
{
cout<<"数组已经存放的数据"<<num<<" "<<"还可以存放数据"<<size-num<<endl;
}
};
int main()
{
Array x1(5,0);//只测试5个的数据
for(int i=0;i<=5;i++)
{
x1.add();
}
x1.get();
x1.get_num();
x1.get_size();
system("pause");
return 0;
}
测试(数组长度为5)执行结果一:
测试(数组长度为20)执行结果二:
4. 定义一个String类:
classString{
public :
String(char []); //有参构造函数
String();//默认构造函数
String(String &);//复制构造函数
~String(){ delete p; } //析构函数
void setstring(char []); //为对象赋值字符串
char *Substring(int,int); //求字符串从第n个位置到m个位置的子串;
int length(); //返回字符串的长度
void print(); //输出字符串
private:
char *p; //指针存放字符串首地址
};
在main主函数中实现该类的应用。
#include<iostream>
#include<string>
usingnamespace std;
class String{
public :
String(char* a=NULL);//有参构造函数
//String(){};//默认构造函数
//String(String &a);//复制构造函数
~String(){ delete p; } //析构函数
void setstring(char* a); //为对象赋值字符串
char *Substring(int n,int m); //求字符串从第n个位置到m个位置的子串;
int length(); //返回字符串的长度
void print(); //输出字符串
private:
char *p; //指针存放字符串首地址
};
String::String(char*a)
{
if(a==NULL)
{
p=new char[1];
*p='\0';
}
else
{
int length=strlen(a);
p=new char[length+1];
strcpy_s(p,length+1,a);
}
}
/*String::String(String &a)
{
int len=strlen(a.p);
p=newchar[len+1];
strcpy_s(p,len+1,a.p);
} */
voidString::setstring(char* a)
{
int len=strlen(a);
p=new char[len+1] ;
strcpy_s(p,len+1,a);
}
char*String::Substring(int n,int m)
{
char* d;
d=new char[m-n+2];
for(int i=n;i<=m;i++)
{
if(p[i]!='\0')
d[i-n]=p[i];
}
d[m-n+1]='\0';
return d;
}
intString::length()
{
return strlen(p);
}
voidString::print()
{
cout<<p<<endl;
}
intmain()
{
String s1("Chinse"),s2,s3;
s2=s1;
char str[9]="republic";
cout<<"字符串1:";
s1.print();
cout<<"长度:"<< s1.length()<<endl;
cout<<"字符串2:";
s2.print();
cout<<"长度:"<< s2.length()<<endl;
cout<<"字符串3:"<<" "<<"长度"<<s3.length()<<endl;
s3.setstring(str);
cout<<"重置后,字符串3:" ;
s3.print();
cout<<"长度:"<<s3.length()<<endl<<"字符串3从第2位到第7位的子串:"<<s3.Substring(2,7)<<"长度:"<<6<<endl;
system("pause");
return 0; }
5. 定义一个时钟类Time,实现对时间变化进行计算的有关操作。
私有成员:hour,minite , second,分别表示 小时、分、秒,其中小时在0~24之间,分和秒在0~60之间。
构造函数形式为Time((int h , int m , int s )。
要求:
(1) 定义2个成员函数,一个设置时间,一个显示时间;
(2) 定义函数Time Time_plus(Time& int ),实现Time对象与整数值n(n代表秒)的加法运算。注意,小时、分、秒的取值范围。(提示:声明为Time类的友元)
(3) 定义函数TimeTime_pp(Time &); 实现Time对象自增运算(前++),即秒数加1;(提示:声明为Time类的友元)
(4) 在main函数中,创建时钟对象,并完成上述函数调用。
#include<iostream>
#include<string>
usingnamespace std;
classtime
{
private:
int hour,minite,second;
public:
time(int h,int m,ints):hour(h),minite(m),second(s){}
time(){}
void show()
{
cout<<"时间是:"<<hour<<":"<<minite<<":"<<second<<endl;
}
friend time time_plus(time &t,int m);
friend time time_pp(time &t);
};
timetime_plus(time &t,int m)
{
int a,b;
time ans;
a=(t.second+m)/60;
ans.second=(t.second+m)%60;
b=(t.minite+a)/60;
ans.minite=(t.minite+b)%60;
ans.hour=(b+t.hour)%24;
return ans;
}
timetime_pp(time &t)
{ int a,b;
time ans;
a=(t.second+1)/60;
ans.second=(t.second+1)%60;
b=(t.minite+a)/60;
ans.minite=(t.minite+b)%60;
ans.hour=(b+t.hour)%24;
return ans;
}
intmain()
{ timem1(23,59,59),m2,m3;
m2=time_plus(m1 , 10); m3=time_pp(m2) ;
m1.show();
m2.show();
m3.show();
system("pause");
return 0;
}
6. 商店销售某一商品,每天公布统一的折扣(设为95折),同时允许销售人员在销售时灵活掌握售价,在此基础上,一次购10件以上者,还可以享受9.8折优惠。现已知当天3个销货员的销售情况为
销货员(num) 销货件数(quantity) 销售价格(price)
101 5 23.5
102 12 24.56
103 100 21.5
请编写程序,计算出当日商品的总销售款sum以及每件商品的平均价格。要求用静态数据成员和静态成员函数。
#include<iostream>
#include<string>
usingnamespace std;
classProduct
{
public:
Product(int m, int q, floatp):num(m),quantity(q),price(p) {}
Product();
void total(); //所有商品加起来总销售数量和销售款
static float average(); //静态成员函数,求平均价格
static void display(); //静态成员函数,显示总销售款和平均价格
private:
int num; //销售员
int quantity; //销售数量
float price; //销售价格
static float discount; //商店统一折扣
static float sum; //总销售款
static int n; // 总销售数量
};
floatProduct::discount=0.95;
floatProduct::sum=0;
intProduct::n=0;
void Product::total()
{
if(quantity<=10)
sum+=quantity*price*discount;
else
sum+=quantity*price*0.98*discount;
n+=quantity;
}
floatProduct::average()
{
return sum/n;
}
voidProduct::display()
{
cout<<"总销售款"<<sum<<endl;
cout<<"平均价格"<<Product::average()<<endl;
}
intmain()
{
Producta[3]={Product(101,5,23.5),Product(102,12,24.56),Product(103,100,21.5)};
for(int i=0;i<3;i++)
a[i].total();
Product::display();
system("pause");
return 0;
}
7. 编写程序对用户数据进行管理,要求按姓名的字典顺序对用户信息进行排序。试定义表示用户信息的类person和处理用户信息的类compute实现上述功能。具体要求如下:
(1)定义类person,其成员如下:
(a) 私有成员:charname[10],num[10]: 分别保存用户的姓名和电话号码。
(2)定义类compute,类compute必须声明为person的友元类。其成员如下:
(a) 私有成员:personpn[3]: 表示3个用户。
(b)公用成员函数:
l Voidsetdata(): 通过键盘输入3个用户的数据。
l Voidsort(): 将数组pn表示的用户信息按姓名排序。
l Voidprint(): 按照指定格式输出用户信息。
在主函数中定义一个compute对象,再通过键盘输入每个用户的基本信息,调用相关成员函数完成对类compute和person进行测试。
#include<iostream>
#include<string>
using namespace std;
string min_s(string a,string b)
{
if(a<b) return a;
elsereturn b;
}
class compute; //声明compute类
class person //定义person类
{ public:
friend class compute;
private: string name, num;
};
class compute //声明compute类
{public:
void setdata();
void sort();
void print();
private:
person pn[3];
};
void compute::setdata()
{
cout<<"请输入用户的姓名和号码:"<<endl;
for(inti=0;i<3;i++)
{
cin>>pn[i].name>>pn[i].num;
}
}
void compute::sort()
{
for(inti=0;i<2;i++)
for(intj=i+1;j<3;j++)
if(pn[i].name>pn[j].name)
{
persontmp;
tmp=pn[i];
pn[i]=pn[j];
pn[j]=tmp;
}
}
void compute::print()
{
cout<<"排序后的用户信息:"<<endl;
for(inti=0;i<3;i++)
cout<<pn[i].name<<" "<<pn[i].num<<endl;
}
int main()
{
computea;
a.setdata();
a.sort();
a.print();
system("pause");
return0;
}
8. 利用模板类,实现6个整数的比较大小、6个浮点型数据比较大小、6个字符串比较大小,并排序输出。成员函数主要有(1)输入数据的函数input;(2) 排序函数;(3) 输出数据的函数output。
#include<iostream>
#include<string>
using namespace std;
template<class T>
class compare
{
private:
T a[6];
public:
void input()
{
/*if(T==int)
cout<<"请输入6个整数:"<<endl;
if(T==float)
cout<<"请输入6个实数:"<<endl;
if(T==string)
cout<<"请输入6个字符串:"<<endl;*/
for(inti=0;i<6;i++)
cin>>a[i];
}
void sort()
{
for(inti=0;i<5;i++)
for(intj=i+1;j<6;j++)
if(a[i]>a[j])
{
Tt;
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
void output()
{
/*if(T==int)
cout<<"6个整数排序后:"<<endl;
if(T==float)
cout<<"6个实数排序后:"<<endl;
if(T==string)
cout<<"6个字符串排序后:"<<endl;*/
for(inti=0;i<6;i++)
cout<<a[i]<<"";
cout<<endl;
}
};
int main()
{
compare<int>a;
cout<<"请输入6个整数:"<<endl;
a.input();
a.sort();
cout<<"6个整数排序后:"<<endl;
a.output();
compare<float>b;
cout<<"请输入6个实数:"<<endl;
b.input();
b.sort();
cout<<"6个实数排序后:"<<endl;
b.output();
compare<string>c;
cout<<"请输入6个字符串:"<<endl;
c.input();
c.sort();
cout<<"6个字符串排序后:"<<endl;
c.output();
system("pause");
return0;
}