皮德常c++全套答案_第1页
皮德常c++全套答案_第2页
皮德常c++全套答案_第3页
皮德常c++全套答案_第4页
皮德常c++全套答案_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第 2 章习题2-5、计算一个人一段时期的薪水,第1 天 1 分钱,第2天 2分钱,每天翻倍。要求用户输入天数(输入检验),列表显示每天的薪水,及薪水总和(输出人民币的单位:“元”)。#include<iostream>using namespace std;void main()int daynum;float daypay, paysum=0;docout<<" 请输入天数(>1 整数 ): "cin>>daynum;while(daynum<=1); #include<iostream>using names

2、pace std;void newstr(char str1,char str2);static int m=0;void main()char str1100;char str2100;cout<<" 请输入一个字符串:"<<endl;(str1,100);newstr(str1,str2);cout<<" 新字符串为:"<<endl;cout<<str2<<endl;void newstr(char str1,char str2)char *p,*q;q=str1;p=str2;

3、int i=0;for(i=0;i<100;i+)if(*(q+i)='0')*(p+i/2)+1)='0' break;else if(i%2!=0) *(p+i/2)=*(q+i);5-8、编写一个函数palin() 用来检查一个字符串是否是正向拼写与反向拼写都一样的“迪I文” (palindromia ).如“MADAM是一个迪I文。若放宽要求,即忽 略大小写字母的区别、忽略空格及标点符号等,则像“ Madamjm AdaM'之类 的短语也可视为迪文。编程要求:1) 在主函数中输入字符串。2)将字符串首指针作为函数参数传递到函数palin()

4、中。当字符串是迪I文时,要求函数palin()返回true,否则返回false。3)若是迪文,在主函数中输出yes。若不是迪文,在主函数中输出no.#include <iostream>using namespace std;bool palin(char a); int main()char a100;cout<<" 请输入一个字符串:"<<endl;cin>>a;if(palin(a)cout<<"yes"<<endl; elsecout<<"no"

5、;<<endl;return 0;bool palin(char a)char *p1=a,*p2;int n,i;for(i=0,n=0;i<100;i+)if(ai>='a'&&ai<='Z')*(p1+n)=ai;n+;for(p2=p1+n;p1<p2;)if(*p1=*p2) p1+;p2-;if(p2-p1=1|p2-p1=0)return true;elsereturn false;5-10、有n个人围成一圈,顺序排号,顺序号是 1、2、3、.、n。从第1个 人开始报号,凡报到m的人退出圈子,问最

6、后留下的人是第几号。要求在主函数输入n和 将数组a以及n、m作为参数传递给函数count(),在 该函数中依次输出退出圈子的人的序号,最后输出的就是留下者的序号。#include<iostream>using namespace std;void count(int n,int m,int a);int main()int n,m;cout<<" 输入n:"<<endl;cin>>n;cout<<" 输入m:"<<endl;cin>>m;int a100;for(int

7、i=0;i<n;i+)ai=i+1;count(n,m,a);return 0;void count(int n,int m,int a)int i,k=0,t=0,*p=a;for(i=0;i<n;i+)pi=i+1;while (t<n-1)for(p=a;p<a+n;p+)if(*p!=0)k+;if(k=m)k=0;cout<<*p<<" "*p=0;t+;p=a;while(*p=0)p+;cout<<*p<<endl;106-1 、假设每个学生信息包括学号、姓名和3 门课程的考试分数。从键盘

8、输入个学生的数据,采用结构体数组数据的存储,程序实现如下功能:1) 输出三门课的平均成绩。2) 输出三门功课分数分别最高的学生的信息。3) 按总分对这10 个学生从高到低排序,并输出排序结果。4) 输出平均分高于80 分那些学生的信息。#include <iostream>#include <iomanip>#include <cstdlib>using namespace std;struct studentint ID;char name20;double score3;void input(student*,int n);double average(

9、student*,int n);void print(student*,int n);void sort(student*,int n);const int studentNumber=10;int main() student stud10;input(stud,studentNumber);print(stud,studentNumber);.n"p2=head=initlist();cout<<"Please input a number(if(-1) stop):"cin>>a;while(a!=-1)p1=(NODE *)mall

10、oc(sizeof(NODE);p1->data=a;p2->next=p1;p2=p1;cin>>a;p2->next=NULL;return(head);void print(NODE *head) NODE *p;p=head->next;if(p!=NULL)cout<<"Output list:"while(p!=NULL)cout<<setw(5)<<p->data;p=p->next;cout<<"n"void sort(NODE *head)

11、NODE *p,*n;int i;for(n=head->next;n->next!=NULL;n=n->next) for(p=head->next;p->next!=NULL;p=p->next) if(p->data)>(p->next->data)i=(p->next->data);p->next->data=p->data; p->data=i;int main()NODE *L1=NULL;cout<<"nt Creat a list:n"L1=creat

12、e();cout<<" 排序前为:"print(L1);cout<<" 排序后为:"sort(L1);print(L1);return 0;6-6、编写函数merge()将两个非递减序链表合并成一个新的非递减序链表,合并后两个原链表将不存在。函数原型为: NODE *merge(NODE*headA,NODE*headB);#include <iostream>#include <iomanip>#include <cstdlib>using namespace std;#define LEN

13、sizeof(NODE)typedef struct nodeint data;node *next;NODE;.n"head=initlist();cout<<"Please input a number(if(-1) exit):"cin>>a;while(a!=-1)p=(NODE *)malloc(sizeof(NODE);p->data=a;insert(head,p);cin>>a;return head;void print(NODE *head) NODE *p;p=head->next;if(p!=

14、NULL)cout<<"Output list:"while(p!=NULL) cout<<setw(5)<<p->data;p=p->next;cout<<"n"void free_list(NODE *head) NODE *p;while(head)p=head;head=head->next;free(p);NODE *merge(NODE *headA,NODE *headB) NODE *p1=headB->next,*p2=p1->next;while(p2!=N

15、ULL)insert(headA,p1);p1=p2;p2=p1->next;insert(headA,p1);return headA;int main()NODE *p1=NULL,*p2=NULL,*p=NULL;cout<<"nt Creat a list:n"p1=create_sort();print(p1);p2=create_sort();print(p2);p=merge(p1,p2);print(p);return 0;6-7 、编写函数isSubset() 用于判断链表L1 中的每个数据元素是否都在链表L2中出现过,若是,则返回真,否

16、则假。函数原型均为:bool isSubset(NODE*L1,NODE *L2);#include <iostream>#include <iomanip>#include <cstdlib>using namespace std;#define LEN sizeof(NODE)typedef struct nodeint data;node *next;NODE;.n"p2=head=initlist();cout<<"Please input a number(if(-1) stop):"cin>>

17、a;while(a!=-1)p1=(NODE *)malloc(sizeof(NODE);p1->data=a;p2->next=p1;p2=p1;cin>>a;p2->next=NULL;return(head);bool search(NODE *head,int x)NODE *p;int n=0;p=head->next;while(p!=NULL)if(p->data=x)n+=1;p=p->next;elsep=p->next;if(n!=0)return true;elsereturn false;bool isSubset(

18、NODE *L1,NODE *L2)NODE *p;int n=0;p=L1->next;while(p!=NULL)if(search(L2,p->data) p=p->next;elsen+=1; p=p->next;if(n=0)return true;elsereturn false;int main()NODE *L1=NULL,*L2=NULL; cout<<"nt Creat a list:n"L1=create();L2=create();if(isSubset(L1,L2)cout<<"L1 is

19、in L2!n"elsecout<<"L1 is not in L2!n" return 0;第 7 章习题:7-4、在屏幕上显示文件的内容并显示行号。#include <iostream>#include <fstream>#include <iomanip>#include <>#include <cstdlib> using namespace std;void main(void) fstream inFile; ." getch();();7-5、在文件中查找指定的字符串。

20、#include <iostream>#include <fstream>#include <cctype>#include <cstdlib>#include <cstring>#include <>using namespace std;int find(char s ,char t );flg=0;cout<<str;if(flg=2)(str);else(tolower(str);();();7-7 、文件加密程序。#include <iostream >#include <fstre

21、am >#include < >#include <cstdlib >using namespace std;#define CODING 2void main(void) fstream inFile;fstream outFile;char FileName128='0' 写一个程序, 将下面的同学信息储存到文件中name:具有21个空间的字符数组.age: 一个整型变量.address: 具有 51 个空间的字符数组.phone:具有14个空间的字符数组.email: 具有 51 个空间的字符数组.该程序具有一个菜单, 便于用户完成如下操作:

22、1) 向文件中增加记录.2) 显示文件中的所有记录.3) 修改任意一个记录.4) 按照姓名查找一个同学的记录.5) 删除某个同学的记录输入有效性的检验: 输入的年龄不能为负数, 也不能大于200.#include <iostream>#include <fstream>#include <string>#include <cstdlib>#include <>using namespace std;struct StudInforchar name21;int age;char address51;char phone14;char

23、email51;typedef StudInfor infor;void add_the_infor (fstream &);void show_the_infor (fstream &);void change_the_infor(fstream &);void search_the_infor(fstream &);void delete_the_infor(fstream &);int main() int select1;char select2='y'infor student="",0,"&quo

24、t;,"",""fstream file ("",ios:out|ios:in|ios:binary);while ('Y'=toupper(select2)cout<<"n向文件中增加记录 (1)n"<<"显示文件中的所有记录(2)n"<<"修改任意一个记录 (3)n"<<"按照姓名查找一个同学的记录(4)n"<<"删除某个同学的记录 (5)n"cout<

25、;<" 请输入你的选择(1-5) : n"cin>>select1;();switch(select1)case 1: add_the_infor (file); break;case 2:show_the_infor (file);break;case 3:change_the_infor(file);break;case 4:search_the_infor(file);break;case 5:delete_the_infor(file);break;cout<<" 还要继续进行操作吗(Y/N):"cin>>

26、;select2;();return 0;void add_the_infor(fstream &file)infor student;cout<<" 请输入学生数据:n"cout<<" 姓名:",21);cout<<" 年龄:"cin>>();cout<<" 地址:",51);cout<<" 电话:",14);cout<<"email : ",51);(char*)&stud

27、ent,sizeof(student);cout<<" 写入完毕!"<<endl;();();void show_the_infor(fstream &file)infor student;char ch;H.cout<<"以下显示所有学生信息(0L,ios:beg);while(!()(char*)&student,sizeof(student);if() cout<<"2errorn"break;cout<<" 姓名:"<<<&

28、lt;endl;cout<<" 年龄:"<<<<endl;cout<<" 地址:"<<<<endl;cout<<" 电话:"<<<<endl;cout<<"email : "<<<<endl;cout<<"按任意键继续 "(ch);cout<<" 显示完毕!"();void change_the_infor(f

29、stream &file)string name;infor student;bool flg=0;long recNum=0L;cout<<" 请输入你所需要修改人的姓名:getline (cin,name);(0L,ios:beg);(0L,ios:beg);while (!()( (char*)&student,sizeof(student); if() cout<<"3errorn"break;)if (name=(cout<<"原信息为 n"<<endl;cout<

30、<" 姓名:"<<<<endl;cout<<" 年龄:"<<<<endl;cout<<"地址:"<<<<endl;cout<<"电话:"<<<<endl;cout<<"email : "<<<<endl;cout<<”请输入信息:n"<<endl;();cout<<"姓

31、名:",21);cout<<"年龄:"cin>>();cout<<"地址:",51);cout<<"电话:",14);cout<<"email :",51);(recNum*sizeof(student),ios:beg);(char*)&student,sizeof(student);cout<<"修改完毕!"();flg=1;break;)recNum+;)if(0=flg)H.cout<<

32、" 找不到该记录!();void search_the_infor(fstream &file)string name;infor student;bool flg=0;cout<<" 请输入需要查找的姓名:getline (cin,name);(0L,ios:beg);while (!()( (char*)&student,sizeof(student); if() cout<<"4errorn"break;if (name=cout<<" 姓名:"<<<<

33、endl;cout<<" 年龄:"<<<<endl;cout<<" 地址:"<<<<endl;cout<<" 电话:"<<<<endl;cout<<"email : "<<<<endl;flg=1;break;if(0=flg)cout<<" 找不到该学生记录!"();void delete_the_infor(fstream &fi

34、le)string name;bool flg=0;infor student,newstud=" ",0," "," "," "long recNum=0;cout<<" 请输入需要删除人的姓名:"getline (cin,name);(0L,ios:beg);while (!()( (char*)&student,sizeof(student);if() cout<<"5errorn"break;if (name=cout<<&

35、quot; 原信息为:n"cout<<" 姓名:"<<<<endl;cout<<" 年龄:"<<<<endl;cout<<" 地址:"<<<<endl;cout<<" 电话:"<<<<endl;cout<<"email : "<<<<endl;(recNum*sizeof(student),ios:beg);

36、( (char*)&newstud,sizeof (newstud);cout<<" 删除完毕!"();flg=1;break;recNum+;if(0=flg)cout<<" 找不到该学生记录!"();第 8 章习题:8-1 、设计 Date 类,输出合法日期。#include <iostream>using namespace std;."<<endl;if(count>0) length=count;fltData=new floatlength;else length=1;f

37、ltData=new floatlength;for(int i=0;i<length;i+)fltDatai=0;."<<endl;delete fltData;length=0;."<<endl;DataArray Obj(3);cout<<" 给 DataArray 对象赋值:"<<endl;for(int i=0;i<3;i+) etHours(tHour)break;elsecout<<" 您输入的数据不正确,请重新输入!"<<endl;et

38、Payment()<<" 元 "<<endl;8-5、设计 InvoiceItem 类和商品销售类,完成如下功能:1)询问客户购买的商品名称和数量;2)从InvoiceItem 对象获得每个商品的成本价;3)在成本价基础上加上30利润,得到每个商品的单价;4)将商品单价与购买数量相乘,得到商品小计;5)将商品小计乘以6,得到商品的零售税;6)将商品小计加上零售税得到该商品的销售额;7)显示客户本次交易购买商品的小计、零售税和销售额。有效性检验:商品数量不能为负数。#include <iostream>using namespace std

39、;class InvoiceItem char *desc;int units;float cost;public:InvoiceItem(char *d, int u=0, float c=0) desc = new char strlen(d)+1;strcpy(desc, d);units = u;cost = c;cost = 0; InvoiceItem( ) delete desc; units = 0;char *getDesc( ) return desc; int getUnits( ) return units; float getCost( ) return cost;

40、;class Sale float price, salesum, saletax, totalsum;int buynum;public:bool setnum(int, int);void calcSale(float p) price=p;etDesc( )<<"t 数量: "cout << Inventoryi.getUnits( )<<"t成本价:"cout << Inventoryi.getCost( )<<" 元 "<<endl;etDesc(),n

41、ame)=0)index=i;if(index!=-1) break;else cout<<" 您输入的商品不存在,请重新输入!"<<endl;cout<<" 请输入购买数量: "while(true) int num;cin>>num;if(num,Inventoryindex.getUnits()break;else cout<<" 您输入的数量不正确,请重新输入!"<<endl;etCost()*;etDesc()<<endl;cout<&

42、lt;" 本次购买的商品数量:"<<()<<endl;cout<<" 本次购买的商品单价:"<<()<<" 元 "<<endl;cout<<" 本次购买的商品小计:"<<()<<" 元 "<<endl;cout<<" 本次购买的零售税:"<<()<<" 元 "<<endl;cout<&

43、lt;" 本次购买的销售额:"<<()<<" 元 "<<endl;第 9 章习题:9-1、定义NumDay绫,功能是将以小时(hour)为单位的工作时间转换为天数 (day)。构造函数具有一个代表工作小时的参数,其他函数成员实现小时和天的存储和检索。同时,该类需重载+、+ +、一一运算符。9-2、设计 TimeOff 类,用于计算雇员生病、休假和不支付报酬的时间。9-3 、采用 TimeOff 类定义一个对象。要求用户输入某雇员已经工作的月数(months),然后采用TimeOff类对象计算并显示雇员因病休假和正常休假

44、的最多天数。注意:雇员每月可以有12 小时的带薪休假和8 小时的生病休假。etHours()cout<<" 该月超过标准的生病休假小时数:"<<().getHours()<<" 小时! n"(hours);(offObj);cout<<" 请输入第"<<i<<" 个月带薪休假的累计小时数:n"cin>>hours;if(hours>().getHours()cout<<" 该月超过标准的带薪休假小时数:&

45、quot;<<().getHours()<<" 小时! n"(hours);(offObj);cout<<" 请输入第 "<<i<<" 个月不带薪休假的累计小时数:n"cin>>hours;if(hours>().getHours()cout<<" 该月超过标准的不带薪休假小时数:"<<().getHours()<<" 小时! n"(hours);(offObj);cout<&

46、lt;()<<" 的休假天数统计如下:n"cout<<" 因病休假的天数为:t"<<().getDays()<<endl;cout<<" 带薪休假的天数为:t"<<().getDays()<<endl;cout<<" 不带薪休假的天数为:t"<<().getDays()<<endl;第 10 章习题:10-2、设计Employee类,其数据成员能保存如下信息:雇员姓名:char * 指针;雇员编号

47、:格式为XXX-L X是09之间的数字,L是AM之间的字母;受雇日期:向该类增加构造函数、析构函数和其他相关函数成员。设计Employee类的子类EmployeePay,其具有如下数据成员:月工资:double 型变量;部门号:int 型变量;编写完整的程序,要求用户从键盘输入雇员信息,然后在屏幕上显示这些信息。."<<endl;Circle myCircle(0,0,;cout<<"centerX="<<()<<endl;cout<<"centerY="<<()<&

48、lt;endl;cout<<"radius="<<endl;cout<<"Area="<<()<<endl<<endl; ."<<endl;Rectangle myRectangle(12,15); cout<<"width="<<()<<endl; cout<<"length="<<()<<endl;cout<<"Area=&q

49、uot;<<()<<endl<<endl;10-9、 编写具有排序功能的类模板SortableArray , 其是 FreewillArray 类模板的子类,具有一个函数成员,实现对数组元素的升序排列。编写一个完整的程序测试该模板。template < class T >FreewillArray <T>:FreewillArray( int s )arraySize = s;aptr = new T s;if (aptr = 0) memError();for (int count = 0; count < arraySize

50、; count+) *(aptr + count) = 0;template <class T>FreewillArray<T>:FreewillArray (const FreewillArray &obj )arraySize = ;aptr = new T arraySize;if (aptr = 0) memError();for(int count = 0; count < arraySize; count+) *(aptr + count) = * + count);template <class T>FreewillArray&l

51、t;T>:FreewillArray( ) if (arraySize > 0)delete aptr;template <class T>void FreewillArray<T>:memError( ) cout << "ERROR: allocate memory.n"exit(0);template <class T>void FreewillArray<T>:subError(void) cout << "ERROR: Subscript out of range.n&q

52、uot; exit(0);template <class T>T &FreewillArray<T>:operator (const int &sub) if (sub < 0 | sub > arraySize)subError();return aptrsub;#endif/#include""template < class T >class SortableArray : public FreewillArray<T>public:SortableArray(int s) : Freewil

53、lArray < T > ( s ) SortableArray(FreewillArray <T> &obj) : FreewillArray<T>(obj) void SelectionSort();template < class T >/ 选择排序void SortableArray<T>:SelectionSort() int i, j, t, minIndex;for(i=0; i<arraySize-1; i+) minIndex=i;for(j=i+1; j<arraySize; j+)if(apt

54、rj<aptrminIndex) minIndex=j;if( minIndex != i ) t=aptrminIndex;aptrminIndex=aptri;aptri=t;/#include<iostream>using namespace std;#include""void main(void) FreewillArray <int> intTable(10);SortableArray <int> sortTable(intTable);int i,x;for (i = 0; i < 10; i+) cout&l

55、t;<" 请输入第"<<i+1<<" 个整数: n"cin>>x;sortTablei = x;cout<<" 排序前:n"for (i = 0; i < 10; i+)cout << sortTablei << " "cout << endl;cout<<" 排序后:n"();for (i = 0; i < 10; i+)cout << sortTablei << " "第 11 章习题:11-1 、 Date 类异常。#include <iostream>using namespace std;class Datepublic:bool setDate(const int,const int,const int);void display(void);char * getMonth(const int);cla

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论