C++面向对象程序设计的一些作业.docx
《C++面向对象程序设计的一些作业.docx》由会员分享,可在线阅读,更多相关《C++面向对象程序设计的一些作业.docx(76页珍藏版)》请在冰豆网上搜索。
C++面向对象程序设计的一些作业
实验题目(共4题,第1题)
标题:
1、编写输出“HelloC++!
”的C++程序
时限:
1000ms
内存限制:
10000K
总时限:
3000ms
描述:
编写一个简单的控制台应用程序,输出“HelloC++!
”。
输入:
无
输出:
“HelloC++!
”。
输入样例:
无
输出样例:
Hello
C++!
提示:
1、注意使用usingnamespacestd;明确名字空间;
2、使用cout对象,利用<<流操作符进行输出。
来源:
#include
usingnamespacestd;
intmain()
{
cout<<"HelloC++!
"<return0;
}
试题查看
标题:
2、求3个数的平均值
时限:
1000ms
内存限制:
10000K
总时限:
3000ms
描述:
从键盘上输入3个浮点数,求这3个数的平均值。
输入:
3个浮点数
输出:
3个数的平均值
输入样例:
1.51.61.3
输出样例:
1.46667
提示:
1、用usingnamespacestd;明确名字空间
2、用cin对象,采用>>运算符输入数据
3、用cout对象,采用<<运算符输出数据
#include
usingnamespacestd;
intmain()
{
doublea,b,c,d;
cin>>a>>b>>c;
d=(a+b+c)/3;
cout<return0;
}
标题:
3、求鞍点
时限:
1000ms
内存限制:
10000K
总时限:
3000ms
描述:
输入一个二维矩阵。
找出其中所有的鞍点,如果一个矩阵没有鞍点,输出“Notfound!
”。
所谓“鞍点”,是指满足以下条件的矩阵中的一个数,它在它所在的行上最小、所在列上最大。
该题中假设矩阵中任意两个数互不相等。
输入:
输入数据有多行:
第一行是矩阵的行数m和列数n
从第二行起共包含m行,每行包含n个数,为矩阵的一行数据
输出:
如果矩阵有鞍点,输出鞍点的信息,包括:
所在行、所在列、值
如果没有鞍点,输出Notfound!
输入样例:
34
11235647
12456690
16773418
输出样例:
2
0
16
提示:
1、要求用动态内存分配来完成,可用new和delete实现;
2、屏幕输出只有2016(加回车换行),不能有其它信息。
来源:
#include
usingnamespacestd;
intmain()
{
intm,n,i,j,k;
int**x;
introwmin,linkmax,codr=0,codl=0;
cin>>m>>n;
x=newint*[m];
for(i=0;ix[i]=newint[n];
for(i=0;i{
for(j=0;jcin>>x[i][j];
}
rowmin=x[0][0];
for(i=0;i{
rowmin=x[i][0];
codl=0;
for(j=0;j{
codr=i;
//codl=0;
if(x[i][j]{
rowmin=x[i][j];
codr=i;
codl=j;
}
}
//cout<//cout<for(k=0;k{
if(x[k][codl]>rowmin)
{
//cout<codl=-1;
break;
}
//elsecout<}
if(codl!
=-1)
break;
}
if(codl!
=-1)
{
cout<}
elsecout<<"Notfound!
"<return0;
}
标题:
4、链表操作
时限:
1000ms
内存限制:
10000K
总时限:
3000ms
描述:
建立一个链表,每个节点包括学生的学号、姓名、性别、年龄。
先输入5个学生的数据,再输入一个年龄,如果链表中有年龄等于此年龄的记录,则删除所有年龄等于此年龄的记录,否则在链表的最后增加一个新节点,学号为180姓名为"aaa",性别为"male"。
。
输入:
创建链表时输入5个职工的职工号和工资,学号为大于100且小于200的整数,姓名为长度小于20的字符串,性别为长度小于10的字符串,年龄为大于等于0且小于200的整数。
输出:
按顺序输出链表中的所有数据,每个数据占一行。
输入样例:
101zhangsanmale30
103lisifemale18
105wangwumale25
107maliumale28
109niuqifemale22
28
输出样例:
101
zhangsan
male
30
103
lisi
female
18
105
wangwu
male
25
109
niuqi
female
22
提示:
要求用动态内存分配实现,注意new和delete的使用。
来源:
#include
#include
#include
usingnamespacestd;
typedefstructData
{
int_number;
string_name;
string_sex;
int_age;
}Data;
typedefstructNode
{
Data_data;
structNode*next;
}Node,*LinkList;
//类的声明
classLinkListed
{
private:
LinkListList;
public:
LinkListed()
{
List=newNode();
List->next=NULL;
}
~LinkListed()
{
if(List==NULL)
return;
else
{
while(List!
=NULL)
{
LinkListp=List;
List=List->next;
deletep;
}
}
}
voidCreate()
{
List=newNode();
LinkListp,q;
q=List;
List->next=NULL;
for(inti=0;i<5;i++)
{
p=newNode();
cin>>p->_data._number>>p->_data._name>>p->_data._sex>>p->_data._age;
q->next=p;
q=p;
}
q->next=NULL;
}
voidIns(intnum,stringname,stringsex,intage)
{
LinkListp,q;
p=List->next;
while(p->next)
p=p->next;
q=newNode();
q->_data._number=num;
q->_data._name=name;
q->_data._sex=sex;
q->_data._age=age;
p->next=q;
q->next=NULL;
}
voidSearch(inta)
{
LinkListp=List,q;
intn=0;
while(p)
{
if(p->_data._age==a)
n++;
p=p->next;
}
if(n==0)
{
charname[20]="aaa";
chargender[10]="male";
Ins(180,name,gender,a);
}
else
{
p=List->next;
while(p)
{
if(p->_data._age==a)
{
for(q=List;q->next!
=p;q=q->next){}
q->next=p->next;
deletep;
p=q;
}
p=p->next;
}
}
}
voiddisplay()
{
LinkListp=List->next;
while(p)
{
cout<_data._number<_data._name<_data._sex<_data._age<p=p->next;
}
}
};
intmain()
{
inta;
LinkListedL;
L.Create();
cin>>a;
L.Search(a);
L.display();
return0;
}
实验二
标题:
1.函数重载
时限:
1000ms
内存限制:
10000K
总时限:
3000ms
描述:
设计一菜单程序,利用函数重载实现员工月工资的计算,计算方法如下:
(1)管理人员的月工资=月薪-缺勤天数×月薪÷22;
(2)销售人员的月工资=底薪+销售金额×提成比例;
(3)计件工人的月工资=产品件数×每件报酬;
(4)计时工人的月工资=工作小时×小时报酬;
输入:
职工类别。
管理人员输入月薪和缺勤天数;销售人员输入底薪、销售金额和提成比例;计件工人输入产品件数和每件报酬;计时工人输入工作小时和小时报酬。
输出:
员工月工资。
输入样例:
1〈--职工类别
5000.01〈--月薪和缺勤天数
输出样例:
4772.73
提示:
1.计算管理人员、销售人员、计件工人、计时工人的月工资的函数原型可以分别设计如下:
doublegetEarning(doublesalary,intabsenceDays);
doublegetEarning(doublebaseSalary,doublesalesSum,doublerate);
doublegetEarning(intworkPieces,doublewagePerPiece);
doublegetEarning(doublehours,doublewagePerHour);
2.菜单程序设计如下:
intmain()
{
...
cout<<"Pleaseselect..."<cout<<"1:
Manager."<cout<<"2:
SalesMan."<cout<<"3:
PiecesWorker."<cout<<"4:
Hour-Worker."<cout<<"Others:
Quit"<cin>>sel;
switch(sel)
{
case1:
cin>>...;
cout<break;
case2:
cin>>...;
cout<break;
case3:
cin>>...;
cout<break;
case4:
cin>>...;
cout<break;
default:
break;
}
return0;
}
#include
usingnamespacestd;
doublegetEarning(doublesalary,intabsenceDays)
{
return(salary-salary*absenceDays/22);
}
doublegetEarning(doublebaseSalary,doublesalesSum,doublerate)
{
return(baseSalary+salesSum*rate);
}
doublegetEarning(intworkPieces,doublewagePerPiece)
{
return(workPieces*wagePerPiece);
}
doublegetEarning(doublehours,doublewagePerHour)
{
return(hours*wagePerHour);
}
intmain()
{
intsel,workPieces,absenceDays;
doublesalary,baseSalary,salesSum,rate,wagePerPiece,hours,wagePerHour;
cout<<"Pleaseselect..."<cout<<"1:
Manager."<cout<<"2:
SalesMan."<cout<<"3:
PiecesWorker."<cout<<"4:
Hour-Worker."<cout<<"Others:
Quit"<cin>>sel;
switch(sel)
{
case1:
cin>>salary>>absenceDays;
cout<break;
case2:
cin>>baseSalary>>salesSum>>rate;
cout<break;
case3:
cin>>workPieces>>wagePerPiece;
cout<break;
case4:
cin>>hours>>wagePerHour;
cout<break;
default:
break;
}
return0;
}
标题:
2.引用传递
时限:
1000ms
内存限制:
10000K
总时限:
3000ms
描述:
设计一个函数,将两个浮点数传入,然后通过引用把其和、差、积传出。
函数原型如下:
voidMath(floata,floatb,float&sum,float&sub,float&pro);
输入:
输入两个浮点数
输出:
输出两个浮点数的和、差、积。
输入样例:
6.52.3
输出样例:
8.84.214.95
提示:
#include
#include
#include
usingnamespacestd;
typedefstructData
{
int_number;
string_name;
string_sex;
int_age;
}Data;
typedefstructNode
{
Data_data;
structNode*next;
}Node,*LinkList;
//类的声明
classLinkListed
{
private:
LinkListList;
public:
LinkListed()
{
List=newNode();
List->next=NULL;
}
~LinkListed()
{
if(List==NULL)
return;
else
{
while(List!
=NULL)
{
LinkListp=List;
List=List->next;
deletep;
}
}
}
voidCreate()
{
List=newNode();
LinkListp,q;
q=List;
List->next=NULL;
for(inti=0;i<5;i++)
{
p=newNode();
cin>>p->_data._number>>p->_data._name>>p->_data._sex>>p->_data._age;
q->next=p;
q=p;
}
q->next=NULL;
}
voidIns(intnum,stringname,stringsex,intage)
{
LinkListp,q;
p=List->next;
while(p->next)
p=p->next;
q=newNode();
q->_data._number=num;
q->_data._name=name;
q->_data._sex=sex;
q->_data._age=age;
p->next=q;
q->next=NULL;
}
voidSearch(inta)
{
LinkListp=List,q;
intn=0;
while(p)
{
if(p->_data._age==a)
n++;
p=p->next;
}
if(n==0)
{
charname[20]="aaa";
chargender[10]="male";
Ins(180,name,gender,a);
}
else
{
p=List->next;
while(p)
{
if(p->_data._age==a)
{
for(q=List;q->next!
=p;q=q->next){}
q->next=p->next;
deletep;
p=q;
}
p=p->next;
}
}
}
voiddisplay()
{
LinkListp=List->next;
while(p)
{
cout<_data._number<_data._name<_data._sex<_data._age<p=p->next;
}
}
};
intmain()
{
inta;
LinkListedL;
L.Create();
cin>>a;
L.Search(a);
L.display();
return0;
}
法二:
#include
usingnamespacestd;
voidMath(floata,floatb,float&sum,float&sub,float&pro)
{
sum=a+b;
sub=a-b;
pro=a*b;
}
intmain()
{
floata,b,sum,sub,pro;
sum=sub=pro=0;
cin>>a>>b;
Math(a,b,sum,sub,pro);
cout<return0;
}
标题:
3.函数模板
时限:
1000ms
内存限制:
10000K
总时限:
3000ms
描述:
设计一个函数模板,实现两个同类型数据的交换。
将设计好的函数模板分别实例化为两个整型数交换、两个字符交换的模板函数,调用这些函数并输出运行结果。
输入:
分别输入两个整型数和两个字符
输出:
分别输出两个整型数和两个字符交换的结果
输入样例:
59
输出样例:
95
#include
#include
#include
usingnamespacestd;
templateTypechange(Typea,Typeb)
{
Typec;
c=a;
a=b;
b=c;
cout<return0;
}
intmain()
{
inta,b;
stringc,d;
cin>>a>>b;
cin>>c>>d;
change(a,b);
change(c,d);
return0;
}
标题:
4.默认形参值
时限:
1000ms
内存限制:
10000K
总时限:
3000ms
描述:
设计一个求空间两点距离的函数,要求第2个点的默认值为坐标原点。
输入:
两个点的坐标。
输出:
输出第一个点与原点之间的距离及输入的两个点之间的距离。
输入样例:
111
555
输出样例:
1.73205
6.9282
提示:
函数原型可设计如下:
floatdistance(floatx1,floaty1,floatz1,floatx2=0,floaty2=0,floatz2=0);
来源:
#include
usingnamespacestd;
#include
classpoint
{
private:
floatx,x1;
floaty,y1;
floatz,z1;
public:
floatdistance1()//类的