青岛理工大学c++实验上机实验报告(4)

2018-12-21 11:56

青 岛 理 工 大 学

课程实验报告

课程名称 姓名 实验名称 实 验 目 的 及 要 求 实验环境 实 验 内 容 算 法 描 述 及 实 验 步 骤 C++面向对象程序设计 任师锋 班级 计算112 实验日期 2013.5.21 学号 201107063 实验成绩 实验四--输入输出流程序设计 一、1:正确理解c++输入输出的含义,熟悉流及流类库的作用。 2:掌握流类库中常用的类及其成员函数的使用方法,掌握c++流输入输出 的使用方法。 3:掌握c++格式输入输出的方法,了解常用控制符的使用。 4:学习文本文件和二进制文件的输如输出方法。 5:掌握类模板与函数模板的定义,能够使用类模板和函数模板进行编程 6:理解类模板与模板类以及函数模板和模板函数的区别。 7:了解STL库。 Microsoft visual c++6.0 一、文件数据的读取。 编制一个程序来显示并保存[2,1000]内的所有素数,显示,保存素数的格式 为:每行10个素数,每个素数占7个字符,有点对齐,最后一行不足10 按一行输出。 二、编写一个单向链表的类模板,分别实现增加、删除、查找和打印操作。 一、首先,定义一个文件对象,然后用筛法求素数,其基本思想:对 于不超过n的每个非负整数p,删除2p、3p、4p…..,当处理完 有数之后,还没有被删除的数就是素数,如果用vis[i]表示i已经 被删除,筛法的代码是: Memset(vis,0,sizeof(vis)); For(int i=2;i<=n;i++) For(int j=i*i;j<=n;j+=i)vis[j]=1; 二、定义类模板,然后定义自己的构造函数和插入,删除,查找,打印。插入 函数按尾插法插入关键代码: node *p=new node();//尾插法 p->data=x; p->next=NULL; tmp->next=p; tmp=p;, 删除函数有按数据删除和按位置删除两个,他们是互为重载函数。关键 代码:node* q=p->next; p->next=q->next; delete q;。查找函数关键代码: while(p->data!=x && p!=NULL { t++; p=p->next; }打印函数的代 码:while(p) { cout<data; p=p->next; } 调 试

一:实验结果 1

过 程 及 实 验 结 果 二:实验结果 (1):插入结果 (2):删除结果(按数据删除和按位置删除) 2

(3)打印结果:(插入2,3,4,10,9之后的打印结果) (4)查找结果:() 总 结 这次实验对c++文件的流有了更新的认识,明确了流类的使用,特别是文件流的使用方法:1,定义文件对象。2,打开一个文件。3,对这个对象进行输入输出操作。4,关闭这个文件。另一个收获就是,对模板的编写有了更清晰的认识,包括其中的细节如在模板类外定义成员函数时不能忘记template此类的语句,此外::作用域操作符的右边的类名后不应忘记。 3

附 录 一:#include #include #include using namespace std; int prime[1000]; bool vis[1000]; int main() { } 二:#include #include using namespace std; template int i,j; ofstream ofile(\if(!ofile) { } int c=0; memset(vis,0,sizeof(vis)); memset(prime,0,sizeof(prime)); for(i=2;i<=1000;i++) { } cout< void List::Delete()//按元素删除 { } template void List::Delete(int position)//按位置删除元素 { int tag=0; if(head->next==NULL) { cout<<\对不起,你的链表为空.请你if(head->next==NULL) { } T x; node*p,*first; first=head->next; cout<<\请输入您要删除的数据:\cin>>x; if(first->data==x) { } else for(p=first;p->next;p=p->next)//查找满足 { } cout<<\你要删除的元素不存 if(p->next->data==x)//删除结点 { } node* q=p->next; delete q; cout<<\删除成功!\ break; p->next=q->next; head->next=first->next; free(first); cout<<\对不起,你的链表为空.请你 return ; 更新链表!\p->next指向要删除结点的p ofile<next==NULL) 在!\ 4

class List { public: List() { } void Insert(); void Print(); void Delete(); void Delete(int); void Search(); private: struct node { T data; node *next; }; public: node *head; }; template void List::Insert() { int i,n; T x; node *tmp=head; cout<<\请输入您要插入的结点个数:\ cin>>n; while(tmp->next != NULL) { } for(i=0;i>x; tmp=tmp->next; head=new node; if(head==NULL) { } head->next=NULL; cout<<\空间申请失败!\exit(1); 更新链表!\ return ; }node *q=head,*p=head->next; for(;p!=NULL;p=p->next,q=q->next) { } if(p==NULL) { } cout<<\对不起,你要删除的位置不if(++tag==position ) { } q->next=p->next; delete p; cout<<\删除成功!\return ; 存在!\}template void List::Search()//查找所输入数据在链表中出现的第一个位置 { int t=1; T x; node *p=head->next; cout<<\请输入您要查找的数据:\ cin>>x; while(p->data!=x && p!=NULL) { t++; p=p->next; } if(p==NULL) { cout<<\你查找的数据不存在!\ return ; } cout<<\您查找的数据在链表的第\个位置\{ List s; int t; while(t) { cout<<\、插入 2、删除 3、查找 4、打印 \ cout<<\请输入您要进行的操作(按0结 cout<<\请输入\个数据域:\}void main() 5

node *p=new node();//尾插法 p->data=x; } } template void List::Print() { node *p; p=head->next; while(p) { cout<data; p=p->next; } cout<next=NULL; tmp->next=p; tmp=p; 束):\ cin>>t; switch(t) { case 1: s.Insert(); break; case 2: cout<<\按元素删除请按1,按位 int choose,pos; cin>>choose; switch(choose) { case 1: s.Delete();break; case 2: cout<<\请输入你要删除 } break; 置删除请按2\的位置\ case 3: s.Search(); break; case 4: s.Print(); break; }

6


青岛理工大学c++实验上机实验报告(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:黎曼积分与勒贝格积分的区别与联系

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: