1、12007 二编写程序或者程序段2、实现描述超市的类 Suppermarket 类,记录系统中现有商品(用链表实现) ,定义:初始化链表的构造函数增加商品的函数 Append;删除商品的函数 Delete;查询商品的函数 Query,并显示查询结果其中,商品具有 Id,名称 Name,价格Price 和数量 Number 等特性。/商品 72#includestruct Goodsdouble Id;char *Name;float Price;int Number;Goods *next;class Supermarketpublic:Goods *L;Supermarket();void
2、Append(double id,char *name,float price,int number);void Delete(double i);Goods *query(double i)Goods *r;r=L-next;while(r)if(r-Id=i)coutIdNamePriceNumbernext;coutnext=NULL;void Supermarket:Append(double id,char *name,float price,int number)Goods *r=L;Goods *p;while(r-next!=NULL)r=r-next;p=new Goods;
3、p-Id=id;p-Name=name;p-Price=price;p-Number=number;p-next=NULL;/将添加的商品放在最后面r-next=p;void Supermarket:Delete(double i)Goods *p,*r;p=L;/头指针r=L-next;while(r!=NULL)if(r-Id=i) break;p=r;r=r-next;if(r=NULL)coutnext=r-next;/删除了商品delete r;void main()Supermarket s;s.Append(1,“apple“,5.7,10);s.Append(2,“meat“,
4、9.8,5);s.Append(3,“milk“,2.7,8);s.query(1);s.query(2);s.query(3);s.Delete(1);s.query(2);运行结果:Goods ID:1Name:applePrice:5.7Number:10Goods ID:2Name:meatPrice:9.8Number:5Goods ID:3Name:milkPrice:2.7Number:8Goods ID:2Name:meatPrice:9.8Number:5Press any key to continue06 二、2假定居民的基本数据包括身份证号,姓名,性别和出生日期,而居民
5、中的成年人又多出两项数据:最高学历和职业,成年中的党员又多出一项数据:党派类别,现要求建立三个类,让成年人继承居民类,党员类继承成年人类,并要求每个类中都提供有数据添加,数据删除,数据输出的功能。/商品 72#includeclass Personpublic:Person()Person(char *id,char *name,char sex,char *birthday)Id=id;Name=name;Sex=sex;Birthday=birthday;void Add(char *id,char *name,char sex,char *birthday)Id=id;Name=name
6、;Sex=sex;Birthday=birthday;void Delete()Id=“;Name=“;Sex=0;Birthday=“;void Show()coutnext;while(p)if(LB-datadata)head=LB-next;temp-next=LA;temp1-next=LB;LB-next=temp-next;else if(LB-data=LA-data) head=LB-next;elsetemp1=LA;LA=LA-next;LB=head;2、定义一个串类,在串上的操作包括:判断串是否为空;求串长;删除串中从 i 开始的第 k 个字符;将串中小写变大写;将串
7、中大写变小写;#include#include#includeclass sstringpublic:sstring()s=NULL;bool isempty()if(*s)!=0)cout=A6struct StackNodetype element;StackNode *previous;StackNode *next;class Stackpublic:enum MaxStack=5;Stack()head=new StackNode;head-element=0;head-previous=NULL;head-next=NULL;top=head;void push(type n)if
8、(isFull()errMsg(“*The Stack is Full!*“);return;StackNode *p;p=top;top=new StackNode;p-next=top;top-element=n;top-previous=p;top-next=NULL;type pop()if(isEmpty()errMsg(“*The Stack is Empty!*“);return dummy_val;type n;StackNode *p;p=top;n=p-element;top=p-previous;delete p;return n;bool isEmpty()return
9、 top=head;bool isFull()return head-elementMaxStack;void prtypeStack()if(isEmpty()errMsg(“*The Stack is Empty!*“);return ;StackNode *p;p=top;coutelementprevious;private:void errMsg(char *msg)coutab;s.push(a);s.push(b);s.prtypeStack();cout /模板 T 表示一个类class stack7private:int top;T stackliststack_size;p
10、ublic:stack(void);void push(const T/入栈T pop(void); /出栈void clearstack(void); /清栈T peek(void) const; /返回栈顶的元素int empty(void); /判断栈空int full(void); /判断栈满;/构造 stack 函数template /对于模板类,在每一个申明和函数定义都得写这句话stack:stack(void):top(-1)/入栈template /对于模板类,在每一个申明和函数定义都得写这句话void stack:push(const Tif(top=-1)cout/对于模板
11、类,在每一个申明和函数定义都得写这句话T stack:peek(void)constif(top=-1)coutint stack:empty(void)return top=-1;/判断栈满template int stack:full(void)return top=stack_size-1;/清空栈template void stack:clearstack(void)top=-1;#endif stack_class/结束定义int main()stack sta(123);return 0;2003 一81、 /* 本程序从键盘读入整数,并将按从大到小的顺序输入整数中互不相等的那些整
12、数。程序一边读入整数,一边构造一个从大到小顺序连接的链表,直至不能从键盘读入整数,然后顺序输出链表上各表元的整数值。主函数每读入一个整数,就调用函数 Insert,函数 Insert 将还未出现在链表上的整数按从大到小的顺序插入到链表中。为了插入方便,链表在表首有一个辅助接点。*/#include“stdio.h“#include“stdlib.h“typedef struct nodeint val;struct node *next;NODE;void Insert(NODE *list, int x)NODE *u,*v,*p;int i=0;u=list;v=u-next;while(
13、vv=v-next;if(v=NULL|xv-val) /位置【2】判断是否要插入新表元p=(NODE *)malloc(sizeof(NODE);p-val=x;p-next=v; /位置【3】u-next=p; /位置【4】i+; /i 是用来观察函数void main()int x;NODE *head,*p;/首先建立只有辅助节点的空链表head=(NODE *)malloc(sizeof(NODE);head-next=NULL; /位置【5】printf(“enter integers:“);while(scanf(“%d“,for(p=head-next;p;p=p-next)p
14、rintf(“%5d“,p-val);printf(“n“);2、计算并求出 K!的阶乘。/计算 k 的阶乘,因为数字太大,所以按位存储在 a 数组中,且按倒序存储 #include“stdio.h“#define MAXN 1000int aMAXN,bMAXN;void pnext(int k,int *cp)int c=*cp,i,m,r;for(i=0;i0) /当数值较大时,如k=100,则累加后高位将有可能是多位溢出ac+=r%10;r=r/10;/输入数值小于 13 的数的阶乘unsigned long jiecheng(int k)int i;unsigned long s=1
15、;9for(i=1;itypedef struct Nodeint data;Node *next;Node *Intersect(Node *LA,Node *LB)Node *p,*q,*LC,*pc,*temp;p=LA-next;q=LB-next;pc=LC=(Node*)malloc(sizeof(Node);LC-next=NULL;while(ptemp-data=p-data;temp-next=NULL;pc-next=temp;pc=temp;p=p-next;q=q-next;else if(p-datadata)p=p-next;else q=q-next;retur
16、n LC;2、已知一组无序的整数用一个链表表示,编写一个函数对该链表表示的整数序列进行排列。/*2003 已知一组无序的整数用一个链表表示,编写一个函数对该链表表示的整数序列进行排列*/假定整数有个,链表 LT,有空头 head#define M 5#define NULL 0struct Nodeint data;struct Node *next;Usort(struct Node *LT)10int i=0;int j=0;struct Node *temp2,*temp1;for(i=0;inext;temp2=LT-next;if(j=M-1)LT-next=NULL;if(LT-d
17、atatemp2-data)temp2-next=LT;temp1-next=temp2;3、定义一个时间类,类成员包括小时,分钟,秒,在该类上的操作包括:(1 )时间初始化,利用构造函数的重载函数按下列情况初始化:只给出小时进行初始化(分,秒为 0) ;只给出小时,分(秒为 0) ;给出小时,分,秒;(2 )设置时间(参数:小时,分,秒)(3 )按上午(am)或者下午(pm)输出时间。class Timeprivate:int hour,minute,second;public:Time();Time(int h);Time(int h,int m);Time(int h,int m,int
18、 s);void SetTime(int h,int m,int s);void PrintTime();Time:Time()hour=0;minute=0;second=0;Time:Time(int h)hour=h;minute=0;second=0;Time:Time(int h,int m)hour=h;minute=m;second=0;Time:Time(int h,int m,int s)hour=h;minute=m;second=s;void Time:SetTime(int h,int m,int s)hour=h;minute=m;second=s;void Time
19、:PrintTime()if(hour24)|(minute60)|(second60)cout=0)cout=12)cout#include“Time.h“void main()Time time1;time1.SetTime(12,2,2);time1.PrintTime();运行结果:pm:12,2,2Press any key to continue4、定义一个队列类(与前面相同)2002 二、 1 编写一个函数,求出集合 A 和集合 B 的交集#includevoid Bubble_ordination(unsigned char *pucTmp,unsigned char ucNu
20、m)/冒泡排序unsigned char i,j;unsigned char ucTmp;unsigned char ucFlag;for(i=0;i*(pucTmp+i+1)/前一个比后一个大,因此要转换顺序ucTmp=*(pucTmp+i);*(pucTmp+i)=*(pucTmp+i+1);*(pucTmp+i+1)=ucTmp;ucFlag=1;if(ucFlag=0)break;/可以提前结束了main()unsigned char i,j,k;/控制循环的变量unsigned char ucNum_Inter=0;/交集中的元素的数量unsigned char uc_GroupA1
21、0=1,2,3,4,5,6,7,8,9,10;/集合Aunsigned char uc_GroupB10=6,6,7,11,12,13,14,18,19,20;/集合 B unsigned char uc_GroupC10;/集合 C unsigned char uc_Inter10;/集合 Cfor(i=0;i1)Bubble_ordination(uc_GroupC,ucNum_Inter);2、定义一个栈类2001、3(2)定义一个链表,并实现节点插入的过程#includetypedef struct Nodeint data;Node *next;Node *Intersect(Nod
22、e *LA,Node *LB)Node *p,*q,*LC,*pc,*temp;p=LA-next;q=LB-next;pc=LC=(Node*)malloc(sizeof(Node);LC-next=NULL;while(ptemp-data=p-data;temp-next=NULL;pc-next=temp;pc=temp;p=p-next;q=q-next;else if(p-datadata)p=p-next;else q=q-next;return LC;(3 )定义一个类 A,其中包括两个构造(重载关系,用于初始化私有成员)以及私有成员,公有成员,受保护成员若干,再定义一个类 B,从 A 类共有派生而来,并且增加自己的一个私有成员和至少一个构造函数。写出完整的类定义过程。class Apublic:A();A(int a1,int b1,int c1,int d1);protected:int a;int b;int c;private:int d;A:A(int a1,int b1,int c1,int d1)a=a1;b=b1;c=c1;d=d1;class B:public Apublic:B(int a1,int b1,int c1,int d1,int e1):A(a1,b1,c1,d1)e=e1;private:int e;13