C++程序代码.docx

上传人:b****7 文档编号:11224257 上传时间:2023-02-25 格式:DOCX 页数:59 大小:34.13KB
下载 相关 举报
C++程序代码.docx_第1页
第1页 / 共59页
C++程序代码.docx_第2页
第2页 / 共59页
C++程序代码.docx_第3页
第3页 / 共59页
C++程序代码.docx_第4页
第4页 / 共59页
C++程序代码.docx_第5页
第5页 / 共59页
点击查看更多>>
下载资源
资源描述

C++程序代码.docx

《C++程序代码.docx》由会员分享,可在线阅读,更多相关《C++程序代码.docx(59页珍藏版)》请在冰豆网上搜索。

C++程序代码.docx

C++程序代码

1.求鞍点

描述:

输入一个二维矩阵,找出其中所有鞍点。

如果矩阵有鞍点,则输出鞍点的信息:

行号、列号、值;

如果没有鞍点,则输出“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;i

mat[i]=newint[nMaxCol];

matRow=newint[nMaxRow];//Bufferstosavetheminimumelementineachrow

matCol=newint[nMaxCol];//Bufferstosavethemaximumelementineachcolumn

//Inputtheelements

//cout<<"Pleaseinputtheelements:

"<

for(i=0;i

for(j=0;j

cin>>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;i

bFind;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;i

delete[]mat[i];

delete[]mat;

return0;

}

2.链表操作

描述:

   建立一个链表,每个节点包括学生的学号、姓名、性别、年龄。

先输入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的使用。

//Linkedlistusingreference"&",C++style

#include

#include

usingnamespacestd;

constintMAX_STR_LEN=32;

structStuNode

{

intID;

charname[MAX_STR_LEN];

chargender[MAX_STR_LEN];

intage;

structStuNode*next;

};

typedefstructStuNode*StuLink;

voidCreateHeadNode(StuLink&pHead,StuLink&pTail)

{

pHead=newStuNode;

if(pHead==NULL)return;

pHead->next=NULL;

pTail=pHead;

}

voidAddStudent(StuLink&pTail,StuNodedata)

{

StuLinkp;

p=newStuNode;

if(p==NULL)return;

p->ID=data.ID;

strcpy(p->name,data.name);

strcpy(p->gender,data.gender);

p->age=data.age;

p->next=NULL;

//Makethecurrentnodepointerpointtothelastaddeddata

pTail->next=p;

pTail=p;

}

boolRemoveStudent(StuLink&pHead,StuLink&pTail,intage)

{

boolbFind=false;

StuLinkpCurr,pPre;

pPre=pHead;

//Skiptothesecondnodebecausethefirstnodeistheheadnodewithoutdata

pCurr=pHead->next;

while(pCurr!

=NULL)

{

if(pCurr->age==age)

{

pPre->next=pCurr->next;

deletepCurr;

//Recoverthecurrentpointertofindthenextnodethathasthesamekey

pCurr=pPre->next;

bFind=true;

}

else

{

//Movetothenextnode

pPre=pCurr;

pCurr=pCurr->next;

}

}

//Recoverthetailpointerincasethelastnodeisdeleted

if(bFind&&pPre->next==NULL)pTail=pPre;

returnbFind;

}

voidOutputAllStudentsInfo(constStuLinkpHead)

{

StuLinkp;

//Skiptothesecondnodebecausethefirstnodeistheheadnodewithoutdata

p=pHead->next;

if(p==NULL)return;

while(p!

=NULL)

{

cout<ID<

cout<name<

cout<gender<

cout<age<

p=p->next;

}

}

voidInputStudentInfo(StuNode&Emp)

{

cin>>Emp.ID>>Emp.name>>Emp.gender>>Emp.age;

while(Emp.ID>=200||Emp.ID<100||

strlen(Emp.name)>=20||

strlen(Emp.gender)>=10||

Emp.age<0||Emp.age>=200)

{

cin>>Emp.ID>>Emp.name>>Emp.gender>>Emp.age;

}

}

intmain()

{

StuLinkEmpInstHead,EmpInstTail;

StuNodeEmpTemp;

inti,age;

//Createaheadnodeforthelinkedlist

CreateHeadNode(EmpInstHead,EmpInstTail);

for(i=0;i<5;i++)

{

InputStudentInfo(EmpTemp);

AddStudent(EmpInstTail,EmpTemp);

}

cin>>age;

//Removeaheadnodefromthelinkedlist

if(!

RemoveStudent(EmpInstHead,EmpInstTail,age))

{

EmpTemp.age=age;

EmpTemp.ID=180;strcpy(EmpTemp.name,"aaa");strcpy(EmpTemp.gender,"male");EmpTemp.next=NULL;

AddStudent(EmpInstTail,EmpTemp);

}

OutputAllStudentsInfo(EmpInstHead);

return0;

}

3函数模板

描述:

   设计一个函数模板,实现两个同类型数据的交换。

将设计好的函数模板分别实例化为两个整型数交换、两个字符交换的模板函数,调用这些函数并输出运行结果。

输入:

分别输入两个整型数和两个字符

输出:

分别输出两个整型数和两个字符交换的结果

输入样例:

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.类的定义_深拷贝

描述:

设计并实现一个动态整型数组类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

usingnamespacestd;

classVect

{

public:

Vect(intn=0);

Vect(intarr[],intn);

Vect(constVect&v);

~Vect();

intSize(){returnarrSize;}

intGetData(inti)

{

if(i<0||i>=arrSize)

{

cout<<"outofboundary"<

}

ElsereturnarrData[i];

}

voidSetData(inti,intval)

{

if(i<0||i>=arrSize)

{

cout<<"outofboundary"<

}

elsearrData[i]=val;

}

voidPrintData()

{

if(arrSize>0)cout<

for(inti=1;i

{

cout<<""<

}

cout<

}

private:

intarrSize;

int*arrData;

};

Vect:

:

Vect(intn):

arrSize(n)

{

arrData=newint[arrSize];

for(inti=0;i

{

arrData[i]=0;

}

}

Vect:

:

Vect(intarr[],intn):

arrSize(n)

{

arrData=newint[arrSize];

for(inti=0;i

{

arrData[i]=arr[i];

}

}

Vect:

:

Vect(constVect&v):

arrSize(v.arrSize)

{

arrData=newint[arrSize];

for(inti=0;i

{

arrData[i]=v.arrData[i];

}

}

Vect:

:

~Vect()

{

if(arrData)

{

delete[]arrData;

arrSize=0;

}

}

intmain()

{

intarr[]={1,2,3,4,5};

intn,i,data;

cin>>n>>i>>data;;

Vectv1(arr,5),v2(n);

v1.PrintData();

v2.PrintData();

v1.SetData(i,data);

Vectv3(v1);

v1.PrintData();

v3.PrintData();

return0;

}

5.虚基类

描述:

(1)定义人员类Person:

公有成员:

姓名(Name);

保护成员:

性别(Gender),年龄(Age);

构造函数和析构函数

(2)从人员类Person派生学生记录类StudentRecord:

添加公有成员:

学号(Number),班级(ClassName),

添加静态公有成员:

学生总人数(TotalCount);

添加保护成员:

平均成绩(Score);

实现构造函数和析构函数。

(3)从人员类Person派生教师记录类TeacherRecord:

添加公有成员:

学院(CollegeName),系(DepartmentName);

添加保护成员:

教龄(Year);

实现构造函数和析构函数。

(4)从学生记录类StudentRecord和教师记录类TeacherRecord派生学生助教类TeachingAssistant:

添加公有成员:

辅导课程(LectureName);

实现公有函数:

显示人员信息(Show),屏幕打印姓名,性别,年龄,学号,班级,学生总人数,平均成绩,学院,系,教龄,辅导课程。

实现构造函数和析构函数。

为检验类间结构设计是否正确,设计函数voidSetName(Stringname)实现更改一名助教的姓名的功能。

创建一个助教类的对象

助教

姓名性别年龄学号班级平均成绩学院系教龄辅导课程

郑七男222010123软2010189信息软件1数据结构

显示其信息。

调用更改姓名的函数,更改其姓名为“郑八”,并再次显示其信息。

输出样例:

Person郑七constructed

Student郑七constructed

teacher郑七constructed

teachingassistant郑七constructed

Name:

郑七Gender:

男Age:

22Number:

2010123ClassName:

软20101TotalCount:

1Score:

8

9CollegeName:

信息DepartmentName:

软件Year:

1LectureName:

数据结构

Name:

郑八Gender:

男Age:

22Number:

2010123ClassName:

软20101TotalCount:

1Score:

8

9CollegeName:

信息DepartmentName:

软件Year:

1LectureName:

数据结构

teachingassistant郑八destructed

teacher郑八destructed

Student郑八destructed

Person郑八destructed

提示:

各类的构造函数和析构函数都有输出。

调用公有函数Show,以分别显示各个记录的人员信息。

在派生助教类时,使用虚基类。

#include

#include

usingnamespacestd;

classPerson

{

protected:

stringGender;

intAge;

public:

stringName;

Person(stringgender,intage,stringname)

{

Gender=gender;

Age=age;

//Name=newchar[strlen(name)+1];

//strcpy(Name,name);

Name=name;

cout<<"Person"<

}

~Person()

{

cout<<"Person"<

//delete[]Name;

//delete[]Gender;

}

/*voidShow()

{

cout<<"Name:

"<

"<

"<

}*/

};

classStudentRecord:

virtualpublicPerson

{

protected:

intScore;

public:

stringNumber;

stringClassName;

staticintTotalCount;

StudentRecord(stringnumber,stringclassname,intscore,stringgender,intage,stringname):

Person(gender,age,name)

{

//Number=newchar[strlen(number)+1];

//strcpy

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 小升初

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1