实习1:
标题:1、字符串输入输出
时限:3000ms
内存限制:10000K
总时限:3000ms
描述:编写一个简单的控制台应用程序,先输入姓名,如“John”,再输出问候语,如“Hello,John!”。
输入:
John
输出:
Hello,John!
输入样例:
John
输出样例:
Hello,John!
提示:
使用string类定义字符串对象,需包含头文件<string>;
使用cin和提取符>>从键盘输入数据,使用cout和插入符<<输出结果到屏幕,需包含头文件<iostream>;
注意使用名称空间std。
----------------------------------------------------------------------------------------------------------------------
#include<iostream>
#include<string>
usingnamespacestd;
intmain()
{
stringname;
getline(cin,name);
cout<<"Hello,"<<name<<"!"<<endl;
return0;
}
----------------------------------------------------------------------------------------------------------------------
2.标题:2、求3个数的平均值
时限:3000ms
内存限制:10000K
总时限:3000ms
描述:从键盘上输入3个浮点数,求这3个数的平均值。输入:
3个浮点数
输出:3个数的平均值
输入样例:
1.51.61.3
输出样例:
1.46667
提示:
用usingnamespacestd;明确名字空间
用cin对象,采用>>运算符输入数据
用cout对象,采用<<运算符输出数据
---------------------------------------------------------------------------------------------------------------------
#include<iostream>
#include<string>
usingnamespacestd;
intmain()
{
floatnum1=0,num2=0,num3=0;
cin>>num1>>num2>>num3;
cout<<(num1+num2+num3)/3<<endl;
return0;
}
---------------------------------------------------------------------------------------------------------------------
标题:3、求鞍点
时限:3000ms
内存限制:10000K
总时限:3000ms
描述:
输入一个二维矩阵,找出其中所有鞍点。如果矩阵有鞍点,则输出鞍点的信息:行号、列号、值;
如果没有鞍点,则输出“Notfound!”。
所谓“鞍点”,是指满足以下条件的矩阵中的一个数:在它所在的行上最小、所在列上最大。该题中假设矩阵中任意两个数互不相等。输入:
输入数据有多行:
第一行是矩阵的行数m和列数n
从第二行起共包含m行,每行包含n个数,为矩阵的一行数据
输出:如果矩阵有鞍点,输出鞍点的信息,包括:所在行、所在列、值
如果没有鞍点,输出Notfound!
输入样例:
34
11235647
12456690
16773418
输出样例:
2016
提示:
要求用动态内存分配来完成,可用new和delete实现;
屏幕输出只有2016(加回车换行),不能有其它信息。
----------------------------------------------------------------------------------------------------------------------
#include<iostream>
#include<string>
usingnamespacestd;
intmain()
{
intm=0,n=0,cnt=0,i=0,j=0,k=0;
cin>>m>>n;
if(m<=0||n<=0)
{
return0;
}
int**arr=newint*[m];
for(i=0;i<m;i++)
{
arr[i]=newint[n];
}
for(i=0;i<m;i++)
for(j=0;j<n;j++)
cin>>arr[i][j];
int*Max=newint[n];
int*Min=newint[m];
for(k=0;k<m;k++)//该循环的功能是找出第k行的最小值并存储在Min[i]中
{//k控制行
Min[k]=arr[k][0];
for(i=0;i<n;i++)
{//i控制当前列
for(j=0;j<n;j++)
{//j用来和i对应的元素对比
if(arr[k][j]<Min[k])
Min[k]=arr[k][j];
}
}
}
for(k=0;k<n;k++)//该循环的功能是找出第k列的最大值并存储在Max[k]中
{
Max[k]=arr[0][k];
for(i=0;i<m;i++)
{
for(j=0;j<m;j++)
{
if(arr[j][k]>Max[k])
Max[k]=arr[j][k];
}
}
}
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
if(Min[i]==Max[j])
{
cout<<i<<""<<j<<""<<Min[i]<<endl;
cnt++;
}
}
}
if(cnt==0)
cout<<"Notfound!"<<endl;
for(i=0;i<m;i++)
delete[]arr[i];
delete[]arr;
delete[]Min;
delete[]Max;
return0;
}
----------------------------------------------------------------------------------------------------------------------
标题:4、链表操作
时限:3000ms
内存限制:10000K
总时限:3000ms
描述:建立一个链表,每个节点包括学生的学号、姓名、性别、年龄。先输入5个学生的数据,再输入一个年龄,如果链表中有年龄等于此年龄的记录,则删除所有年龄等于此年龄的记录,否则在链表的最后增加一个新节点,学号为180姓名为"aaa",性别为"male"。。
输入:创建链表时输入5个职工的职工号和工资,学号为大于100且小于200的整数,姓名为长度小于20的字符串,性别为长度小于10的字符串,年龄为大于等于0且小于200的整数。
输出:按顺序输出链表中的所有数据,每个数据占一行。输入样例:
101zhangsanmale30
103lisifemale18
105wangwumale22
107maliumale21
109niuqifemale26
21
输出样例:
101
zhangsan
male
30
103
lisi
female
18
105
wangwu
male
25
109
niuqi
female
22
提示:要求用动态内存分配实现,注意new和delete的使用。----------------------------------------------------------------------------------------------------------------------
#include<iostream>
#include<string>
usingnamespacestd;
structstudent
{
intnum;
stringname;
stringgender;
intage;
structstudent*pNext;
};
voidinput(student*pP)
{
cin>>pP->num>>pP->name>>pP->gender>>pP->age;}
voidprint(student*pP)
{
cout<<pP->num<<endl;
cout<<pP->name<<endl;
cout<<pP->gender<<endl;
cout<<pP->age<<endl;
}
intmain()
{
intnew_age=0,count=0;
student*head,*newp,*p,*q,*cur,*newnode;head=newstudent;
newp=head;
head->pNext=NULL;
for(inti=0;i<5;i++)
{
p=newstudent;
input(p);
newp->pNext=p;
newp=newp->pNext;
}
newp->pNext=NULL;
p=head;
cin>>new_age;
while(p->pNext)
{
if(p->pNext->age==new_age)
{
count++;
q=p->pNext;
p->pNext=q->pNext;deleteq;}
else
p=p->pNext;}
if(count){
cur=head->pNext;
while(cur){
print(cur);
cur=cur->pNext;}
}
else
{
cur=head->pNext;while(cur->pNext){
cur=cur->pNext;}
newnode=newstudent;newnode->num=180;newnode->name="aaa";newnode->gender="male";newnode->age=new_age;cur->pNext=newnode;newnode->pNext=NULL;cur=head->pNext;while(cur)
{
print(cur);
cur=cur->pNext;}
}
cur=head;
while(cur->pNext){
q=cur;
cur=cur->pNext;deleteq;
}
cur=NULL;
return0;
}
----------------------------------------------------------------------------------------------------------------------
实习2:
标题:1.函数重载
时限:3000ms
内存限制:10000K
总时限:3000ms
描述:设计一菜单程序,利用函数重载实现员工月工资的计算,计算方法如下:
(1)管理人员的月工资=月薪-缺勤天数×月薪÷22;
(2)销售人员的月工资=底薪+销售金额×提成比例;
(3)计件工人的月工资=产品件数×每件报酬;
(4)计时工人的月工资=工作小时×小时报酬;
输入:职工类别及相关信息。
职工类别:1表示管理人员;2表示销售人员;3表示计件工人;4表示计时工人;其余字符表示退出。
相关信息:若为管理人员,则输入月薪和缺勤天数;若为销售人员,则输入底薪、销售金额和提成比例;若为计件工人,则输入产品件数和每件报酬;若为计时工人,则输入工作小时和小时报酬。输出:员工月工资。
输入样例:1〈--职工类别
5000.01〈--月薪和缺勤天数
输出样例:4772.73
提示:计算管理人员、销售人员、计件工人、计时工人的月工资的函数原型可以分别设计如下:
doublegetEarning(doublesalary,intabsenceDays);
doublegetEarning(doublebaseSalary,doublesalesSum,doublerate);
doublegetEarning(intworkPieces,doublewagePerPiece);doublegetEarning(doublehours,doublewagePerHour);菜单程序设计如下:
intmain()
{
...
cout<<"Pleaseselect..."<<endl;
cout<<"1:Manager."<<endl;
cout<<"2:SalesMan."<<endl;
cout<<"3:PiecesWorker."<<endl;
cout<<"4:Hour-Worker."<<endl;
cout<<"Others:Quit"<<endl;
cin>>sel;
switch(sel)
{
case1:
cin>>...;
cout<<getEarning(...);break;
case2:
cin>>...;
cout<<getEarning(...);break;
case3:
cin>>...;
cout<<getEarning(...);break;
case4:
cin>>...;
cout<<getEarning(...);break;
default:
break;
}
return0;
}
---------------------------------------------------------------------
#include<iostream>
usingnamespacestd;
doublegetEarning(doublesalary,intabsenceDays)
{
returnsalary-absenceDays*salary/22;
}
doublegetEarning(doublebaseSalary,doublesalesSum,doublerate){
returnbaseSalary+salesSum*rate;
}
doublegetEarning(intworkPieces,doublewagePerPiece){
returnworkPieces*wagePerPiece;
}
doublegetEarning(doublehours,doublewagePerHour)
{
returnhours*wagePerHour;
}
intmain()
{
unsignedshortsel;
double
Salary,BaseSalary,SalesSum,Rate,WagePerPiece,Hours,WagePerHour;
unsignedshortAbsenceDays,WorkPieces;
cout<<"Pleaseselect..."<<endl;
cout<<"1:Manager."<<endl;
cout<<"2:SalesMan."<<endl;
cout<<"3:PiecesWorker."<<endl;
cout<<"4:Hour-Worker."<<endl;
cout<<"Others:Quit"<<endl;
cin>>sel;
switch(sel)
{
case1:
cin>>Salary>>AbsenceDays;
cout<<getEarning(Salary,AbsenceDays);
break;
case2:
cin>>BaseSalary>>SalesSum>>Rate;
cout<<getEarning(BaseSalary,SalesSum,Rate);
break;
case3:
cin>>WorkPieces>>WagePerPiece;
cout<<getEarning(WorkPieces,WagePerPiece);break;
case4:
cin>>Hours>>WagePerHour;
cout<<getEarning(Hours,WagePerHour);
break;
default:
break;
}
return0;
}
------------------------------------------------------------------------标题:2.引用传递
时限:3000ms
内存限制:10000K
总时限:3000ms
描述:设计一个函数,将两个浮点数传入,然后通过引用把其和、差、积传出。
函数原型如下:voidMath(floata,floatb,float&sum,float&sub,float&pro);
输入:输入两个浮点数
输出:输出两个浮点数的和、差、积。
输入样例:6.52.3
输出样例:8.84.214.95
----------------------------------------------------------------------------------------------------------------------
#include<iostream>
usingnamespacestd;
voidMath(floata,floatb,float&sum,float&sub,float&pro)
{
sum=a+b;
sub=a-b;
pro=a*b;
}
intmain()
{
floatnum1,num2,Sum,Sub,Pro;
cin>>num1>>num2;
Math(num1,num2,Sum,Sub,Pro);
cout<<Sum<<""<<Sub<<""<<Pro<<endl;
return0;
}
---------------------------------------------------------------------------------------------------------------------
标题:3.函数模板
时限:3000ms
内存限制:10000K
总时限:3000ms
描述:设计一个函数模板,实现两个同类型数据的交换。
将设计好的函数模板分别实例化为两个整型数交换、两个字符交
换的模板函数,调用这些函数并输出运行结果。
输入:分别输入两个整型数和两个字符
输出:分别输出两个整型数和两个字符交换的结果
输入样例:59
输出样例:95
----------------------------------------------------------------------------------------------------------------------
#include<iostream>
usingnamespacestd;
template<typenameT>//函数模板的声明,T为类型名
voidSwap(T&x,T&y)
{
Ttemp;
temp=x;
x=y;
y=temp;
}
intmain()
{
inta,b;
charch1,ch2;
cin>>a>>b;
Swap<int>(a,b);//相当于voidSwap(int&x,int&y)
cout<<a<<""<<b<<endl;
cin>>ch1>>ch2;
Swap<char>(ch1,ch2);//这个是模板的实例化,相当于voidSwap(char&x,char&y)
cout<<ch1<<""<<ch2<<endl;
return0;
}
----------------------------------------------------------------------------------------------------------------------
标题:4.默认形参值
时限:3000ms
内存限制:10000K
总时限:3000ms
描述:设计一个求空间两点距离的函数,要求第2个点的默认值为坐标原点。
输入:两个点的坐标。
输出:输出第一个点与原点之间的距离及输入的两个点之间的距离。输入样例:111
555
输出样例:1.73205
6.9282
提示:函数原型可设计如下:
floatdistance(floatx1,floaty1,floatz1,floatx2=0,floaty2=0,floatz2=0);----------------------------------------------------------------------------------------------------------------------
#include<iostream>
#include<cmath>
usingnamespacestd;
floatdistance(floatx1,floaty1,floatz1,floatx2=0,floaty2=0,floatz2=0){
floatdx=x1-x2;
floatdy=y1-y2;
floatdz=z1-z2;
returnsqrt(dx*dx+dy*dy+dz*dz);
}
intmain()
{
float
x_start_pos,y_start_pos,z_start_pos,x_end_pos,y_end_pos,z_end_pos;cin>>x_start_pos>>y_start_pos>>z_start_pos>>x_end_pos>>y_end_pos>>z_end_pos;
cout<<distance(x_start_pos,y_start_pos,z_start_pos)<<endl;
cout<<distance(x_start_pos,y_start_pos,z_start_pos,x_end_pos,y_end_pos,z_end_pos)<<endl;
return0;
}
----------------------------------------------------------------------------------------------------------------------
实习3:
标题1:类的定义_静态常量
时限:3000ms
内存限制:10000K
总时限:3000ms
描述:设计并实现一个圆柱类Cylinder,要求:
(1)设计两个double型的私有数据成员:高度height和底圆半径radius。
(2)设计一个double型的公有静态常量数据成员pi(其值初始化为
3.1415926),以及一个获取该常量的公有静态成员函数GetPI。
(3)在构造函数的初始化列表中初始化高度height和底圆半径radius。
(4)设计用于获取半径的成员函数GetRadius、获取高度的成员函数GetHeight、设置半径的成员函数SetRadius、设置高度的成员函数SetHeight。
(5)设计用于计算圆柱体积的成员函数Volume()、计算圆柱表面积的成员函数Area。
在main函数中:
根据输入的高度和半径构造圆柱对象,并输出圆柱的基本信息、体积和表面积。
输入:圆柱的高度和底圆半径
输出:圆周率pi、圆柱高度、底圆半径、圆柱的体积和表面积输入样例:2.01.0
输出样例:
area=18.8496
----------------------------------------------------------------------------------------------------------------------
#include<iostream>pi=3.14159,height=2,radius=1:volume=6.28319,
usingnamespacestd;
classCylinder
{
private:
doubleheight,radius;
staticdoublepi;
public:
Cylinder(double,double);
staticdoubleGetPI();
doubleGetRadius();
doubleGetHeight();
voidSetRadius(double);
voidSetHeight(double);
doubleVolume();
doubleArea();
~Cylinder();
};
Cylinder::Cylinder(doubleh,doubler):height(h),radius(r){
}
doubleCylinder::GetPI()
{
returnpi;
}
doubleCylinder::GetRadius()
{
returnthis->radius;
}
doubleCylinder::GetHeight()
{
returnthis->height;
}
voidCylinder::SetRadius(doubler){
this->radius=r;
}
voidCylinder::SetHeight(doubleh){
this->height=h;
}
doubleCylinder::Volume()
{
returnpi*radius*radius*height;
}
doubleCylinder::Area()
{
return2*pi*radius*radius+2*pi*radius*height;}
Cylinder::~Cylinder()
{
}
doubleCylinder::pi=3.1415926;
intmain()
{
doubleh=0,r=0;
cin>>h>>r;
if(h<=0||r<=0)return0;
Cylinderstick(h,r);
cout<<"pi="<<Cylinder::GetPI()<<",
"<<"height="<<stick.GetHeight()<<","
<<"radius="<<stick.GetRadius()<<":"<<"volume="<<stick.Volume()<<","
<<"area="<<stick.Area()<<endl;
return0;
}
----------------------------------------------------------------------------------------------------------------------
标题2:类的定义_深拷贝
时限:3000ms
内存限制:10000K
总时限:3000ms
描述:设计并实现一个动态整型数组类Vect,要求:
(1)实现构造函数重载,可以根据指定的元素个数动态创建初始值为0的整型数组,或根据指定的内置整型数组动态创建整型数组。
(2)设计拷贝构造函数和析构函数,注意使用深拷贝。
(3)设计存取指定位置的数组元素的公有成员函数,并进行下标越界,若越界则输出“outofboundary”。
(4)设计获取数组元素个数的公有成员函数。
(5)设计用于输出数组元素的公有成员函数,元素之间以空格分隔,最后以换行符结束。
在main函数中按以下顺序操作:
(1)根据内置的静态整型数组{1,2,3,4,5}构造数组对象v1,根据输入的整型数构造数组对象v2。
(2)调用Vect的成员函数依次输出v1和v2的所有元素。
(3)输入指定的下标及对应的整型数,设置数组对象v1的指定元素。
(4)根据数组对象v1拷贝构造数组对象v3。
(5)调用Vect的成员函数依次输出v1和v3的所有元素。输入:用于构建数组对象v2的元素个数
用于设置数组对象v1的指定下标及元素值
输出:数组对象v1和v2的所有元素
数组对象v1和v3的所有元素
输入样例:10
66
输出样例:12345
0000000000
outofboundary
12345
12345
------------------------------------------------------------------------------------------------------------------
#include<iostream>
#include<cassert>
usingnamespacestd;
classVect
{
private:
intsize;
int*integer;
public:
Vect();
Vect(int);
Vect(Vect&p);
intGetElem(int);
voidSetElem(int,int);voiddisp();
~Vect();
};
Vect::Vect()
{
inti;
this->integer=newint[5];for(i=0;i<5;i++)this->integer[i]=i+1;this->size=5;
}
Vect::Vect(intsize){
inti;
assert(size>0);
this->integer=newint[size];for(i=0;i<size;i++)this->integer[i]=0;this->size=size;}
Vect::Vect(Vect&ref)
{
inti;
this->integer=newint[ref.size];
this->size=ref.size;
for(i=0;i<this->size;i++)
{
this->integer[i]=ref.integer[i];
}
}
intVect::GetElem(intnum)
{
returnthis->integer[num];
}
voidVect::SetElem(intnum,intSettingValue){
if(num<0||num>this->size-1)
{
cout<<"outofboundary"<<endl;}
else
this->integer[num]=SettingValue;
}
voidVect::disp()
{
inti=0;
for(;i<=this->size-1;i++){
if(i==size-1)
cout<<this->GetElem(size-1);else
cout<<this->GetElem(i)<<"";}
cout<<endl;
}
Vect::~Vect()
{
delete[]integer;
integer=NULL;
}
intmain()
{
Vectv1;
intzero_size,pos,value;
cin>>zero_size;
cin>>pos>>value;
v1.disp();
Vectv2(zero_size);
v2.disp();
v1.SetElem(pos,value);
Vectv3(v1);
v1.disp();
v3.disp();
return0;
}
----------------------------------------------------------------------------------------------------------------------
亲,一定要改变量名哦!
百度搜索“爱华网”,专业资料,生活学习,尽在爱华网