1、C+课程实习及答案全解实验题目(共4题, 第1题)标题: 1、字符串输入输出 时 限: 1000 ms 存限制: 10000 K 总时限: 3000 ms 描述: 编写一个简单的控制台应用程序,先输入,如“John”,再输出问候语,如“Hello, John!”。 输入: John输出: Hello, John! 输入样例: John输出样例: Hello,John!提示: 1、使用string类定义字符串对象,需包含头文件;2、使用cin和提取符从键盘输入数据,使用cout和插入符输出结果到屏幕,需包含头文件;3、注意使用名称空间std。来源:#include #include #inclu
2、de using namespace std;int main() char s10; gets(s); cout Hello, s ! endl; return 0; 示例代码-#include #include using namespace std;int main() string szName; cin szName; cout Hello, szName ! 运算符输入数据3、用cout对象,采用运算符输出数据来源:#include using namespace std;int main() float a,b,c,aver=0; cin a; cin b; cin c; ave
3、r=(a+b+c)/3.0; cout aver endl; return 0; 示例代码-#include using namespace std;int main() float x1, x2, x3; cinx1x2x3; cout(x1+x2+x3)/3endl; return 0;-实验题目(共4题, 第3题)标题: 3、求鞍点 时 限: 1000 ms 存限制: 10000 K 总时限: 3000 ms 描述: 输入一个二维矩阵,找出其中所有鞍点。如果矩阵有鞍点,则输出鞍点的信息:行号、列号、值;如果没有鞍点,则输出“Not found!”。所谓“鞍点”,是指满足以下条件的矩阵中的
4、一个数:在它所在的行上最小、所在列上最大。 该题中假设矩阵中任意两个数互不相等。输入: 输入数据有多行:第一行是矩阵的行数m和列数n 从第二行起共包含m行,每行包含n个数,为矩阵的一行数据输出: 如果矩阵有鞍点,输出鞍点的信息,包括:所在行、所在列、值 如果没有鞍点,输出Not found! 输入样例: 3 411 23 56 4712 45 66 9016 77 34 18 输出样例: 2016 提示: 1、要求用动态存分配来完成,可用new和delete实现;2、屏幕输出只有2 0 16(加回车换行),不能有其它信息。来源:#include using namespace std;void
5、 an(int h,int l) int ma,mi,a=0,b=0; int *p; p=new int* h; for(int i=0; ih; i+) pi=new intl; for(int i=0; ih; i+) for(int j=0; jpij; int flag=0; for(int i=0; ih&flag=0; i+) mi=pi0; a=i,b=0; for(int j=0; jl; j+) if(pijmi) mi=pij; a=i,b=j; for(int t=i+1; th; t+) ma=mi; if(maptb)ma=ptb; if(ma=mi) flag=1
6、,couta b maendl; if(flag=0) coutNot found!hl; an(h,l); return 0;示例代码-#include using namespace std;int main() int *mat; int *matRow, *matCol; int nMaxRow=0, nMaxCol=0; bool bFind=false; int nTargetRow=0, nTargetCol=0, nSaddlePoint=0; int i, j; /cout Please input the number of rows and the number of c
7、olumns: nMaxRow nMaxCol; /Allocate memories for the two dimensional matrices mat = new int *nMaxRow; for (i=0; inMaxRow; i+) mati = new intnMaxCol; matRow = new intnMaxRow; /Buffers to save the minimum element in each row matCol = new intnMaxCol; /Buffers to save the maximum element in each column /
8、Input the elements /cout Please input the elements: endl;for (i=0; inMaxRow; i+) for (j=0; j matij; /Find the minimum element in each row for (i=0; inMaxRow; i+) int nMin=mati0; for (j=1; jnMaxCol; j+) if(matijnMin) nMin = matij; matRowi = nMin; /Find the maximum element in each column for (j=0; jnM
9、axCol; j+) int nMax=mat0j; for (i=1; inMax) nMax = matij; matColj = nMax; /Find the saddle point for (i=0; inMaxRow & !bFind; i+) for (j=0; jnMaxCol; j+) if(matij=matRowi & matij=matColj) nTargetRow = i; nTargetCol = j; nSaddlePoint = matij; bFind = true; break; /Output the searched row and column a
10、nd the corresponding saddle point if(!bFind) cout Not found! endl; else cout nTargetRow nTargetCol nSaddlePoint endl; /Release memories delete matCol; delete matRow; for (i=0; inMaxRow; i+) delete mati; delete mat; return 0; -实验题目(共4题, 第4题)标题: 4、链表操作 时 限: 1000 ms 存限制: 10000 K 总时限: 3000 ms 描述: 建立一个链表
11、,每个节点包括学生的学号、性别、年龄。先输入5个学生的数据,再输入一个年龄,如果链表中有年龄等于此年龄的记录,则删除所有年龄等于此年龄的记录,否则在链表的最后增加一个新节点,学号为180为aaa,性别为male。 输入: 创建链表时输入5个职工的职工号和工资,学号为大于100且小于200的整数,为长度小于20的字符串,性别为长度小于10的字符串,年龄为大于等于0且小于200的整数。 输出: 按顺序输出链表中的所有数据,每个数据占一行。 输入样例: 101 zhangsan male 30103 lisi female 18105 wangwu male 25107 maliu male 281
12、09 niuqi female 2228 输出样例: 101zhangsanmale30103lisifemale18105wangwumale25109niuqifemale22提示: 要求用动态存分配实现,注意new和delete的使用。 来源:#include using namespace std;class nodeprivate: int _num,_age; string _name,_sexy;public: node(int num,int age,string name,string sexy) _num=num; _age=age; _name=name; _sexy=s
13、exy; void display(void) cout_numendl; cout_nameendl; cout_sexyendl; cout_agenumnamesexyage; LinkedList head(num,age,name,sexy); LinkedList *p=&head; for(int i=1; inumnamesexyage; p-next=new LinkedList(num,age,name,sexy); p=p-next; cinage; LinkedList *pp=&head; int flag=0; while(pp!=NULL) if(pp-Node-
14、same(age)flag+; else pp-Node-display(); pp=pp-next; if(!flag) node n(180,age,aaa,male); n.display(); return 0;示例代码-#include #include using namespace std;const int MAX_STR_LEN = 32;struct StuNode int ID; char nameMAX_STR_LEN; char genderMAX_STR_LEN; int age; struct StuNode *next;typedef struct StuNod
15、e *StuLink; void CreateHeadNode(StuLink &pHead, StuLink &pTail) pHead = new StuNode; if (pHead = NULL) return; pHead-next = NULL; pTail = pHead;void AddStudent(StuLink &pTail, StuNode data) StuLink p; p = new StuNode; if (p = NULL) return; p-ID = data.ID; strcpy(p-name, data.name); strcpy(p-gender,
16、data.gender); p-age = data.age; p-next = NULL; /Make the current node pointer point to the last added data pTail-next = p; pTail = p;bool RemoveStudent(StuLink &pHead, StuLink &pTail, int age) bool bFind=false; StuLink pCurr, pPre; pPre = pHead; /Skip to the second node because the first node is the
17、 head node without data pCurr = pHead-next; while (pCurr != NULL) if (pCurr-age = age) pPre-next = pCurr-next; delete pCurr; /Recover the current pointer to find the next node that has the same key pCurr = pPre-next; bFind=true; else /Move to the next node pPre = pCurr; pCurr = pCurr-next; /Recover
18、the tail pointer in case the last node is deleted if(bFind & pPre-next=NULL) pTail = pPre; return bFind;void OutputAllStudentsInfo(const StuLink pHead) StuLink p; /Skip to the second node because the first node is the head node without data p = pHead-next; if (p = NULL) return; while (p != NULL) cou
19、t ID endl; cout name endl; cout gender endl; cout age next; void InputStudentInfo(StuNode &Emp) cin Emp.ID Emp.name Emp.gender Emp.age; while ( Emp.ID=200 | Emp.ID=20 | strlen(Emp.gender)=10 | Emp.age=200) cin Emp.ID Emp.name Emp.gender Emp.age; int main() StuLink EmpInstHead, EmpInstTail; StuNode E
20、mpTemp; int i, age; /Create a head node for the linked list CreateHeadNode(EmpInstHead, EmpInstTail); for (i=0; i age; /Remove a head node from the linked list if(!RemoveStudent(EmpInstHead, EmpInstTail, age) EmpTemp.age = age; EmpTemp.ID=180; strcpy(EmpTemp.name, aaa); strcpy(EmpTemp.gender, male);
21、 EmpTemp.next=NULL; AddStudent(EmpInstTail, EmpTemp); OutputAllStudentsInfo(EmpInstHead); return 0;- 实验题目(共4题, 第1题)标题: 1. 函数重载 时 限: 1000 ms 存限制: 10000 K 总时限: 3000 ms 描述: 设计一菜单程序,利用函数重载实现员工月工资的计算,计算方法如下: (1)管理人员的月工资 月薪 缺勤天数 月薪 22; (2)销售人员的月工资 底薪 + 销售金额 提成比例; (3)计件工人的月工资 产品件数 每件报酬; (4)计时工人的月工资 工作小时 小时
22、报酬;输入: 职工类别及相关信息。职工类别:1表示管理人员;2表示销售人员;3表示计件工人;4表示计时工人;其余字符表示退出。相关信息:若为管理人员,则输入月薪和缺勤天数;若为销售人员,则输入底薪、销售金额和提成比例;若为计件工人,则输入产品件数和每件报酬;若为计时工人,则输入工作小时和小时报酬。输出: 员工月工资。 输入样例: 1 职工类别5000.0 1月薪和缺勤天数输出样例: 4772.73提示: 1. 计算管理人员、销售人员、计件工人、计时工人的月工资的函数原型可以分别设计如下: double getEarning(double salary, int absenceDays); do
23、uble getEarning(double baseSalary, double salesSum, double rate); double getEarning(int workPieces, double wagePerPiece); double getEarning(double hours, double wagePerHour);2. 菜单程序设计如下: int main() . cout Please select. endl; cout 1: Manager. endl; cout 2: Sales Man. endl; cout 3: Pieces Worker. endl; cout 4: Hour-Worker. endl; cout