C++练习题源代码.docx
《C++练习题源代码.docx》由会员分享,可在线阅读,更多相关《C++练习题源代码.docx(68页珍藏版)》请在冰豆网上搜索。
![C++练习题源代码.docx](https://file1.bdocx.com/fileroot1/2023-1/21/4626366c-dde8-482c-9dbe-300596d830db/4626366c-dde8-482c-9dbe-300596d830db1.gif)
C++练习题源代码
C++练习题源代码
标题:
1、字符串输入输出
时 限:
3000 ms
内存限制:
10000 K
总时限:
3000 ms
描述:
编写一个简单的控制台应用程序,先输入姓名,如“John”,再输出问候语,如“Hello, John!
”。
输入:
John
输出:
Hello,John!
输入样例:
John
输出样例:
Hello,
John!
提示:
1、使用string类定义字符串对象,需包含头文件;
2、使用cin和提取符>>从键盘输入数据,使用cout和插入符<<输出结果到屏幕,需包含头文件;
3、注意使用名称空间std。
#include
#include
usingnamespacestd;
intmain()
{
stringszName;
cin>>szName;
cout<<"Hello,"<"<return0;
}
标题:
2、求3个数的平均值
时 限:
3000 ms
内存限制:
10000 K
总时限:
3000 ms
描述:
从键盘上输入3个浮点数,求这3个数的平均值。
输入:
3个浮点数
输出:
3个数的平均值
输入样例:
1.51.61.3
输出样例:
1.46667
提示:
1、用usingnamespacestd;明确名字空间
2、用cin对象,采用>>运算符输入数据
3、用cout对象,采用<<运算符输出数据
#include
usingnamespacestd;
intmain()
{
floatx1,x2,x3;
cin>>x1>>x2>>x3;
cout<<(x1+x2+x3)/3<return0;
}
标题:
3、求鞍点
时 限:
3000 ms
内存限制:
10000 K
总时限:
3000 ms
描述:
输入一个二维矩阵,找出其中所有鞍点。
如果矩阵有鞍点,则输出鞍点的信息:
行号、列号、值;
如果没有鞍点,则输出“Notfound!
”。
所谓“鞍点”,是指满足以下条件的矩阵中的一个数:
在它所在的行上最小、所在列上最大。
该题中假设矩阵中任意两个数互不相等。
输入:
输入数据有多行:
第一行是矩阵的行数m和列数n
从第二行起共包含m行,每行包含n个数,为矩阵的一行数据
输出:
如果矩阵有鞍点,输出鞍点的信息,包括:
所在行、所在列、值
如果没有鞍点,输出Notfound!
输入样例:
34
11235647
12456690
16773418
输出样例:
2
0
16
提示:
1、要求用动态内存分配来完成,可用new和delete实现;
2、屏幕输出只有2016(加回车换行),不能有其它信息。
//SaddlePoint.cpp:
定义控制台应用程序的入口点。
//
#include
usingnamespacestd;
intmain()
{
int**mat;
int*matRow,*matCol;
intnMaxRow=0,nMaxCol=0;
boolbFind=false;
intnTargetRow=0,nTargetCol=0,nSaddlePoint=0;
inti,j;
//cout<<"Pleaseinputthenumberofrowsandthenumberofcolumns:
"<cin>>nMaxRow>>nMaxCol;
//Allocatememoriesforthetwodimensionalmatrices
mat=newint*[nMaxRow];
for(i=0;imat[i]=newint[nMaxCol];
matRow=newint[nMaxRow];//Bufferstosavetheminimumelementineachrow
matCol=newint[nMaxCol];//Bufferstosavethemaximumelementineachcolumn
//Inputtheelements
//cout<<"Pleaseinputtheelements:
"<for(i=0;ifor(j=0;jcin>>mat[i][j];
//Findtheminimumelementineachrow
for(i=0;i{
intnMin=mat[i][0];
for(j=1;j{
if(mat[i][j]}
matRow[i]=nMin;
}
//Findthemaximumelementineachcolumn
for(j=0;j{
intnMax=mat[0][j];
for(i=1;i{
if(mat[i][j]>nMax)nMax=mat[i][j];
}
matCol[j]=nMax;
}
//Findthesaddlepoint
for(i=0;ibFind;i++)
{
for(j=0;j{
if(mat[i][j]==matRow[i]&&mat[i][j]==matCol[j])
{
nTargetRow=i;
nTargetCol=j;
nSaddlePoint=mat[i][j];
bFind=true;
break;
}
}
}
//Outputthesearchedrowandcolumnandthecorrespondingsaddlepoint
if(!
bFind)
cout<<"Notfound!
"<else
cout<//Releasememories
delete[]matCol;
delete[]matRow;
for(i=0;idelete[]mat[i];
delete[]mat;
return0;
}
标题:
4、链表操作
时 限:
3000 ms
内存限制:
10000 K
总时限:
3000 ms
描述:
建立一个链表,每个节点包括学生的学号、姓名、性别、年龄。
先输入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的使用。
标题:
1.函数重载
时 限:
3000 ms
内存限制:
10000 K
总时限:
3000 ms
描述:
设计一菜单程序,利用函数重载实现员工月工资的计算,计算方法如下:
(1)管理人员的月工资=月薪-缺勤天数 ×月薪 ÷22;
(2)销售人员的月工资=底薪+销售金额×提成比例;
(3)计件工人的月工资=产品件数 ×每件报酬;
(4)计时工人的月工资=工作小时×小时报酬;
输入:
职工类别及相关信息。
职工类别:
1表示管理人员;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);
}//admin
doublegetEarning(doublebaseSalary,doublesalesSum,doublerate)
{
return(baseSalary+salesSum*rate);
}
doublegetEarning(intworkPieces,doublewagePerPiece)
{
return(workPieces*wagePerPiece);
}
doublegetEarning(doublehours,doublewagePerHour)
{
return(hours*wagePerHour);
}
intmain()
{
intkind=0;
cout<<"Pleaseselect..."<cout<<"1:
Manager."<cout<<"2:
SalesMan."<cout<<"3:
PiecesWorker."<cout<<"4:
Hour-Worker."<cout<<"Others:
Quit"<cin>>kind;
switch(kind)
{
case1:
{
doublesalary;
intabDays;
cin>>salary>>abDays;
cout<break;
}
case2:
{
doublebase;
doublesalesSum;
doublerate;
cin>>base>>salesSum>>rate;
cout<break;
}
case3:
{
intworkPieces;
doublewagePerPiece;
cin>>workPieces>>wagePerPiece;
cout<break;
}
case4:
{
doublehours;
doublewagePerHour;
cin>>hours>>wagePerHour;
cout<break;
}
default:
break;
}
//cout<//cout<//cout<//cout<return0;
}
标题:
2.引用传递
时 限:
3000 ms
内存限制:
10000 K
总时限:
3000 ms
描述:
设计一个函数,将两个浮点数传入,然后通过引用把其和、差、积传出。
函数原型如下:
voidMath(floata,floatb,float&sum,float&sub,float&pro);
输入:
输入两个浮点数
输出:
输出两个浮点数的和、差、积。
输入样例:
6.52.3
输出样例:
8.84.214.95
#include
usingnamespacestd;
voidMath(floata,floatb,float&sum,float&sub,float&pro)
{
sum=a+b;
sub=a-b;
pro=a*b;
}
intmain()
{
floatsum=0;
floatsub=0;
floatpro=0;
floata=0;
floatb=0;
cin>>a>>b;
Math(a,b,sum,sub,pro);
cout<return0;
}
标题:
3.函数模板
时 限:
3000 ms
内存限制:
10000 K
总时限:
3000 ms
描述:
设计一个函数模板,实现两个同类型数据的交换。
将设计好的函数模板分别实例化为两个整型数交换、两个字符交换的模板函数,调用这些函数并输出运行结果。
输入:
分别输入两个整型数和两个字符
输出:
分别输出两个整型数和两个字符交换的结果
输入样例:
59
输出样例:
95
#include
usingnamespacestd;
template
Tcg(T&a,T&b)
{
Tc;
c=a;
a=b;
b=c;
}
intmain()
{
inta=0;
intb=0;
charc=0;
chard=0;
cin>>a>>b>>c>>d;
cg(a,b);
cg(c,d);
cout<return0;
}
标题:
4.默认形参值
时 限:
3000 ms
内存限制:
10000 K
总时限:
3000 ms
描述:
设计一个求空间两点距离的函数,要求第2个点的默认值为坐标原点。
输入:
两个点的坐标。
输出:
输出第一个点与原点之间的距离及输入的两个点之间的距离。
输入样例:
111
555
输出样例:
1.73205
6.9282
提示:
函数原型可设计如下:
float distance(floatx1,floaty1,floatz1,floatx2=0,floaty2=0,floatz2=0);
#include
#include
usingnamespacestd;
floatdistance(floatx1,floaty1,floatz1,floatx2=0,floaty2=0,floatz2=0)
{
returnsqrt(pow(x1-x2,2)+pow(y1-y2,2)+pow(z1-z2,2));
}
intmain()
{
floatx1=0;
floatx2=0;
floaty1=0;
floaty2=0;
floatz1=0;
floatz2=0;
cin>>x1>>y1>>z1>>x2>>y2>>z2;
cout<cout<return0;
}
标题:
类的定义_静态常量
时 限:
3000 ms
内存限制:
10000 K
总时限:
3000 ms
描述:
设计并实现一个圆柱类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
输出样例:
pi=3.14159,height=2,radius=1:
volume=6.28319,area=18.8496
#include
usingnamespacestd;
classCylinder
{
public:
Cylinder(doubleh,doubler):
height(h),radius(r)
{
}
doubleVolume()
{
returnpi*radius*radius*height;
}
doubleArea()
{
return2.0*pi*radius*(radius+height);
}
staticdoubleGetPI()
{
returnpi;
}
doubleGetHeight()
{
returnheight;
}
doubleGetRadius()
{
returnradius;
}
voidSetHeight(doubleh)
{
height=h;
}
voidSetRadius(doubler)
{
radius=r;
}
private:
doubleheight;
doubleradius;
staticconstdoublepi;
};
constdoubleCylinder:
:
pi=3.1415926;
intmain()
{
doubleh,r;
cin>>h>>r;
Cylindercl(h,r);
cout<<"pi="<:
GetPI()<<",height="<";
cout<<"volume="<return0;
}
标题:
类