}
Node* insert(Node *h,Node *p){ Node *p1=h; if(h==0){ h=new Node ; h->date=p->date; h->next=0; } else { while(p1->next!=0) p1=p1->next; p1->next=new Node; p1=p1->next; p1->date=p->date; p1->next=0; } return h; }
void print(Node *h){ Node *p=h; while(p!=0){ cout< void del(Node *h){ Node *p=h; while(h!=0){ p=h; h=h->next; delete p; } } 第八周上机题目 1. 编写一个类CNums,实现如下功能: 某数列的第一项是0, 第二项是1,从第三项起,凡奇数项是其前两项之和,偶数项是其前两项之差(前项减后项),生成数列的100项存入数组,统计共有多少个-1,0,1; 21 1) 类定义的要求如下: 私有数据成员 ? float num[100] 公有函数成员 ? generate()函数生成的100项数列值存入数组(类的数据成 员); ? show()函数显示出所有项数据,以及-1,0,1三个数值在数列中 的个数; 2) 用以下主函数进行测试: void main(){ CNums num; num.generate( ); num.show( ); } 构成完整程序,即完成该类成员函数的定义和测试程序的设计。 #include class CNums{ private: float num[100]; public: void generate(); void show(); }; void CNums::generate( ){ num[0]=0,num[1]=1; for(int i=2;i<100;i++) if(i%2==0) num[i]=num[i-2]+num[i-1]; else num[i]=num[i-2]-num[i-1]; } void CNums::show(){ int n1=0,n2=0,n3=0; for(int i=0;i<100;i++){ cout< 22 } else if(num[i]==0) n2++; else n3++; cout<<\三个数值在数列中的个数分别为: \ < } void main(){ CNums d; d.generate(); d.show(); } 2. 建立一个student类来实现如下功能: 查找考试成绩在80分以上的学生及其编号,并统计这些学生的总人数。考试成绩在调用input函数时输入,调试程序可用以下10个成绩数据输入: 79 85 92 64 73 91 88 81 66 83 1) 类定义的要求如下: 私有数据成员 int n —存储学生的编号,学生编号最小为1 float *stu ——储存考试成绩,数组要求动态生成 int count ——统计符合条件的总人数 2) 公有函数成员 ? input(int n)函数 ——输入学生成绩,并统计满足条件的人数 存入count变量; ? void stat() 查找符合条件的编号、成绩,并调用成员函数 Show输出对应的编号、成绩 ? void Show() ——输出符合条件的编号、成绩 ? void print() —— 输出符合条件的总人数 构成完整程序,即完成该类成员函数的定义和测试程序的设计。 # include void input(int m=10); void stat(void) ; 23 void Show(void) { cout< void student::input(int m) { count=0;n=m; cout<<\请输入学生的成绩:\ stu=new float[n]; for(int i=0;i void student::stat(){ int i=n; cout<<\超过80分的人有: \\n\ for(n=0;n=80) Show(); } } void main(void){ int n; student student1; cout<<\请输入班级的学生数: \ cin>>n; student1.input(n); student1.stat(); student1.print(); } 附加题: 3. N个人围成一圈,他们的序号依次为1~n,从第一个人开始顺序报数1、 2、3……、m,报到m者退出圈子,并输出退出圈子的人的序号。接着再顺序报数,直到圈子中留下一个人为止。用一个结点的环形链表模拟围成一圈的人。假定有10个人围城一圈,凡报到5者退出圈子,则 退出圈子的人的序号依次为5、10、6、2、9、8、1、4、7,最后留在圈中的人是3号。是单向环形链表的结构,其中head指向第一个人。 struct Node{ int x; 24 Node *next; }; class line{ int m; Node *head; publick: void creat( int n ); //创建环行链 void DelNode( ); //删除结点 ~ del( ); }; 构成完整程序,即完成该类成员函数的定义和测试程序的设计。#include Node *next; }; class line{ private: int m; Node *head; public: void creat(int n,int m); void DelNode(); }; void line::creat(int n,int k){ head=0; m=k; Node *p1,*p2; int i=1; while(i<=n){ p1=new Node; p1->x=i++; if(head==0) head=p2=p1; else{ p2->next=p1; p2=p2->next; } } p2->next=head; } void line::DelNode(){ Node *p1,*p2; int n=2; for(p1=head,p2=head->next; p1!=p2; p1=p2,p2=p2->next,n++){ if(n%m==0){ p1->next=p2->next; cout< 25