重庆邮电大学-软件技术基础 实验报告(耿道渠)
更新时间:2024-04-21 23:04:01 阅读量: 综合文库 文档下载
- 重庆邮电大学软件技术基础推荐度:
- 相关推荐
《软件技术基础》实验报告
实验名称:顺序表的操作
班 级 学 号 姓 名
第 9 周 星 期 2 、 5,6 节 成 绩
一、实验目的:
1、掌握顺序表结构的实现方式; 2、掌握顺序表常用算法的实现; 3、熟悉利用顺序表解决问题的一般思路;
4、参照给定的顺序表的程序样例,验证给出的顺序表的常见算法,领会顺序表结构的优点和不足。
二、实验内容:
1、设计一个静态数组存储结构的顺序表,要求编程实现如下任务: (1)建立一个顺序表,首先依次输人整数数据元素(个数根据需要键盘给定)。
(2)删除指定位置的数据元素(指定元素位置通过键盘输入),再依次显示删除后的顺序表中的数据元素。
(3)查找指定数据的数据元素(指定数据由键盘输入),若找到则显示位置,若没有找到则显示0。
2、使用顺序表实现一个电话本的管理程序,电话本中的每条记录包括学号、姓名、手机号码和固定电话四项。要求实现菜单、初始化、添加、删除和显示等功能。
三、实验结果:
- 1 -
四、实验中遇到的问题及解决方法:
- 2 -
第一次编写C++,感觉力不从心,回去多看看PPT。
五、实验心得体会:
对顺序表的一些常用语句不熟悉,对顺序表的整体思路理解不深刻以后要加强练习
附:源程序(自行编写或修改的程序。若为修改程序请注明修改部分的功能,若为书上实例则可不附。) #include
string student_number; string name; string tel;
string home_phone; int id; } TEL;
void shuaxin(TEL *); void delet(TEL *);
- 3 -
void find(TEL *); void show(TEL *); int main(void) {
int choose; TEL List[MAXSIZE]; while(1) {
cout << \欢迎来到XXX电话本系统*********************\cout << \初始化并建立\cout << \删除\cout << \查找\
cout << \显示全部\cin >> choose; system(\
while( choose < 1 || choose > 4) {
cout << \输入错误,数字1-4,请重新输入!\cin >> choose; system(\}
- 4 -
}
}
switch(choose) { }
//system(\
case 1: shuaxin(List); break; case 2: delet(List); break; case 3: find(List); break; case 4: show(List); break;
return 0;
void shuaxin(TEL * list) {
int i,j;
for(i = 0; i < MAXSIZE; i++) {
list[i].id = i + 1;
list[i].home_phone = \list[i].name = \
list[i].student_number = \list[i].tel = \
- 5 -
}
system(\
cout << \初始化成功,现在开始建表:\
cout << \请输入需要建立的电话个数:(小于\
< cin >> num; while( num < 1 || num > MAXSIZE ) { } system(\ cout << \请依次输入学生的学号,姓名,移动电话,家庭电话\for(j = 1; j <= num; j++) { cout << j << '.'; cin >> list[j - 1].student_number; cin >> list[j - 1].name; cin >> list[j - 1].tel; cin >> list[j - 1].home_phone; cout << endl; system(\ cout << \输入错误,请重新输入\cin >> num; - 6 - } } if(num == (j - 1) ) { } system(\ cout << \建立表完毕!\ void delet(TEL * list) { int j,i = 0; cout << \请输入你需要删除的序号\cin >> j; while( j < 0 || j > num) { } while(list[i].id != j) i++; cout << \输入错误,请重新输入\cin >> j; for(j = i; j < num - 1; j++) { - 7 - } } list[j].name = list[j + 1].name; list[j].tel = list[j + 1].tel; list[j].student_number = list[j + 1].student_number; list[j].home_phone = list[j + 1].home_phone; list[j].home_phone = \list[j].name = \ list[j].student_number = \list[j].tel = \num--; system(\ cout << \删除完毕\ void find(TEL * list) { string telnum; int i,key = 0; cout << \请输入你需要查找的电话号码\cin >> telnum; - 8 - system(\ for(i = 0; i < MAXSIZE; i++) { if(telnum == list[i].tel || telnum == list[i].home_phone) { if(key == 0) cout << \依次 学号 姓名 移动电话 庭电话 \ cout << list[i].id << '.'; cout << setw(12) << list[i].student_number; cout << setw(10) << list[i].name; cout << setw(14) << list[i].tel; cout << setw(10) << list[i].home_phone; cout << endl; key = 1; } } if( key == 0) cout << \未找到此电话号码\ } - 9 - 家 void show(TEL * list) { int i; cout << \现在有\个电话号码\ cout << \依次 学号 姓名 移动电话 家庭电话 \ for(i = 0; i < num; i++) { cout << list[i].id << '.'; cout << setw(12) << list[i].student_number; cout << setw(10) << list[i].name; cout << setw(14) << list[i].tel; cout << setw(10) << list[i].home_phone; cout << endl; } cout << \输出完毕\ } - 10 - 《软件技术基础》实验报告 实验名称:链表的操作(一) 班 级 学 号 姓 名 第 10 周 星 期 2 、 5,6 节 成 绩 一、实验目的: 1、掌握单链表结构的实现方式; 2、掌握单链表常用算法的实现。 二、实验内容: 1、设计一个链表,要求编程实现如下任务: (1)建立一个链表,首先依次输人整数数据元素(个数根据需要键盘给定)。 (2)删除指定值的结点(指定值通过键盘输入),再依次显示删除后的链表中的数据元素。 (3)查找指定值的结点(指定数据由键盘输入),若找到则显示查找成功,若没有找到则显示查找失败。 (4) 在第i个节点(i由键盘输入,i=0表示插入的结点作为第1个结点)之后插入一个元素为x的节点。 三、实验结果: 四、实验中遇到的问题及解决方法: - 11 - 编写过程中经常把C语言和C++的语句形式搞混乱,课后认真了 解了C++后得以解决。 五、实验心得体会: 对单链表的实现方式和常用算法掌握不足,对C++部分基本概念不熟悉,需课后补强 附:源程序(自行编写或修改的程序。若为修改程序请注明修改部分的功能,若为书上实例则可不附。) #include struct LNode { int data; }; LNode *find(LNode *head,int x) { LNode *p=head->next; while(p!=NULL && p->data!=x) p=p->next; struct LNode *next; - 12 - } return p; void Insert(LNode *head,int i,int x) { if(i<1) cout<<\不存在第\个位置\ else { LNode *p=head; int k=0; while(p!=NULL && k if(p==NULL) cout<next; k++; else { LNode *s=new LNode; s->data=x; - 13 - } } } s->next=p->next; p->next=s; void Delete(LNode *head,int i) { if(i<1) cout<<\不存在第\个元素\ else { LNode *p=head; LNode *q; int k=0; while(p!=NULL && k if(p==NULL) p=p->next; k++; - 14 - } cout< else { q->next=p->next; } } delete p; void main() { LNode *head,*p; head=new LNode; head->next=NULL; int i,x,y; cout<<\请输入5个数,每个书中间空一格:\for(i=1;i<=5;i++) { } i=0; cin>>x; Insert(head,i,x); - 15 - void find_number(TEL * head);//通过号码查找 TEL * revise(TEL * head); void sav(TEL * head);//储存 int main(void) { printf(\head = search(); printf(\ //选择显示界面 printf(\printf(\printf(\printf(\printf(\printf(\printf(\ do //选择项 TEL * head = NULL; int choose; - 21 - } { printf(\scanf(\switch(choose) { } case 1:head = insert(head);break; case 2:head = del(head);break; case 3:showall(head);break; case 4:find_name(head);break; case 5:find_number(head);break; case 6:head = revise(head);break; case 7:sav(head);break; case 8:return 0; default:printf(\printf(\ }while(1); return 0; - 22 - TEL * search(void)//寻找文件是否存在函数 { if( ( fp = fopen(\打开或者新建文件 { } fseek(fp,0L,0);//文件指针倒回到开头 while(!feof(fp)) { if( fread(p1,SIZE,1,fp) != 1 )//需要防止读出错误情况 break; printf(\exit(0); FILE * fp; TEL * head = NULL; TEL * p2,* p1; p1 = p2 = (TEL *)malloc(LEN); if(head == NULL) head = p1; else p2->next = p1; - 23 - } } p2 = p1; n++; p1 = (TEL *)malloc(LEN); free(p1); p2->next = NULL; fclose(fp); return head; TEL * insert(TEL * head)//插入新号码函数 { TEL * p0, * p1, * p2; p0 = (TEL *)malloc(LEN); printf(\scanf(\p1 = head; p2 = p1; if(head == NULL) { - 24 - head = p0; p0->next = NULL; }else { while( strcmp(p0->name,p1->name) > 0 && p1->next != NULL)//比较字符串,找到应该插入位置 } n++; if( strcmp(p0->name,p1->name) <= 0 )//比较字符串,插入新号码 { p2->next = p0; p0->next = p1; { } p2 = p1; p1 = p1->next; }else { } p1->next = p0; p0->next = NULL; - 25 - } return head; TEL * del(TEL * head)//删除函数 { TEL * p1, * p2; p1 = head; long dele; printf(\输入删除 的电话号码 if(head == NULL) printf(\空表情况 else { } while(dele != p1->num && p1 != NULL)//找到位置 { } p2 = p1; p1 = p1->next; scanf(\ - 26 - } void showall(TEL * head)//打印函数 { int i = 0; TEL * p; p = head; if(head == NULL) printf(\空表情况 return head; if(dele == p1->num) { if(dele == head->num)//删除在头部情况 head = head->next; else p2->next = p1->next; //输出删除的数据并用链表架空 printf(\printf(\n--; }else printf(\没找到情况 - 27 - } else { } printf(\ %d number:\\n\ printf(\ name number \\n\do { i++; printf(\ s ld\\n\p = p->next; }while(p != NULL); void find_name(TEL * head)//以名字方式寻找号码 { TEL * p; int dis = 0; char f_name[20]; p = head; printf(\输入名字 scanf(\if(head == NULL) - 28 - } printf(\空表情况 else { } do { if(strcmp(p->name,f_name) == 0)//只要找到同名 均输出 { } p = p->next; dis = 1; printf(\ printf(\ }while(p != NULL); if(dis == 0) printf(\ void find_number(TEL * head)//以号码方式寻找号码 { TEL * p; - 29 - long f_num; int dis = 0;//dis作为判定是否找到变量 p = head; printf(\输入号码 scanf(\if(head == NULL) printf(\空表情况 else { } do { if(f_num == p->num) { } else p = p->next; dis = 1; break; }while(p != NULL); if(dis == 1) { - 30 - } } printf(\ printf(\ else printf(\ TEL * revise(TEL * head)//修改函数 { TEL * p = head; int choose,num,i; printf(\ number\\n\ //find_name(TEL * head); scanf(\for(i = 2; i <= num; i++) p = p->next; printf(\ printf(\scanf(\switch(choose) { case 1:{ - 31 - } printf(\scanf(\break; } case 2:{ } return head; printf(\scanf(\break; } void sav(TEL * head)//储存函数 { FILE * fp; TEL * p; if( ( fp = fopen(\打开或者新建文件 { } printf(\exit(0); - 32 - } p = head; while(p != NULL) { } fclose(fp); if( fwrite(p,SIZE,1,fp) == 1 ) p = p->next; else { } printf(\exit(0); - 33 - 《软件技术基础》实验报告 实验名称:栈的操作 班 级 学 号 姓 名 第 1 2 周 星 期 2 、 5,6 节 成 绩 一、实验目的: 掌握栈的的定义和运算,了解栈的应用。 二、实验内容: 1、堆栈的测试和应用。要求: 设计一个主函数实现对顺序堆栈代码进行测试。测试方法为:依次把数据元素1,3,5,7,9入栈,然后出栈堆栈中的数据元素并在屏幕上显示。 三、实验结果: - 34 - 四、实验中遇到的问题及解决方法: 问题不是太多,但是编写过程还是比较艰辛。 五、实验心得体会: 栈在本书中比较重要,要多多理解书本知识,多问老师,多实践。 附:源程序(自行编写或修改的程序。若为修改程序请注明修改部分的功能,若为书上实例则可不附。) #include - 35 - using namespace std; struct SqStack { }; int InitStack(SqStack *,int); void push(SqStack *,int); void del(SqStack *); int main(void) { int choose,size; int in,i; SqStack p; cout << \cout << \请输入长度:\cin >> size; while(InitStack(&p,size)) int *data; int top; int stacksize; - 36 - { } system(\ cout << \请输入长度:\cin >> size; while(1) { cout << \ cout << \入栈\cout << \出栈\cout << \栈内情况\cout << \清空栈\cout << \退出\cout << \请输入选项\cout << \ cin >> choose; while(choose < 0 || choose > 4) { cout << \请输入一个0-4的常数\ - 37 - } cin >> choose; system(\switch(choose) { } case 1: cout << \输入一个整数\ cin >> in; push(&p,in);break; case 2: del(&p); break; case 3: cout << \栈底\ for(i = 0; i <= p.top; i++) cout << p.data[i] << endl; break; case 4: while(p.top > -1) { } break; cout << p.data[p.top] << endl; p.top--; case 0: return 0; break; - 38 - } } return 0; int InitStack(SqStack *s,int size) { } void push(SqStack *s,int x) { if(s->top < s->stacksize - 1) { s->top++; s->data[s->top] = x; if(size > 0 && size <= MAX_SIZE) { s->stacksize = size; s->top = -1; s->data = new int[size]; return 0; }else cout << \初始化长度错误\return 1; - 39 - } }else cout << \栈满\ void del(SqStack *s) { } int x; if(s->top > -1) { x = s->data[s->top]; s->top--; cout << \出栈数为:\ }else cout << \栈空\ - 40 - 《软件技术基础》实验报告 实验名称:队列的操作 班 级 学 号 姓 名 第 13 周 星 期 2 、 5,6 节 成 绩 一、实验目的: 掌握队列的定义及其运算,了解队列的应用。 二、实验内容: 1、队列测试和应用。要求: 设计一个主函数对循环队列代码进行测试。测试方法为:依次把数据元素2,4,6,8,10入队,然后出队中的数据元素并在屏幕上显示。 三、实验结果: - 41 - - 42 - 四、实验中遇到的问题及解决方法: 队列的方式和栈的方式既有不同也有相同,没有分好两者的编写方式,看书后了解清楚了。 五、实验心得体会: 队列和栈有些相似,可以在两者之间找相同点,互相总结。 附:源程序(自行编写或修改的程序。若为修改程序请注明修改部分的功能,若为书上实例则可不附。) #include struct QNode { }; struct LinkQueue { struct QNode *front; struct QNode *rear; int data; struct QNode *next; - 43 - }; void init(LinkQueue &Q); int Queuelenth(LinkQueue &Q); void EnQueue(LinkQueue &Q,int x); void DeQueue(LinkQueue &Q); int main(void) { LinkQueue Q; int choose,x,e; init(Q); while(1) { cout << \ cout << \ 欢迎来到XXX\cout << \ 1.入队\cout << \ 2.出队\cout << \ 3.队列长度\cout << \ 0.退出\ - 44 - cout << \请选择:\cout << \ switch(choose) { case 1: system(\ cout << \请输入一个数\cin >> x; EnQueue(Q,x); break; cin >> choose; while(choose > 3 || choose < 0) { } cout << \输入错误,请输入0-3\cin >> choose; case 2: system(\ DeQueue(Q); break; case 3: system(\ x = Queuelenth(Q); cout << \队列长度为\ - 45 - break; case 0: return 0; } } return 0; } void init(LinkQueue &Q) { Q.front = new QNode; Q.front->next = NULL; Q.rear = Q.front; } int Queuelenth(LinkQueue &Q) { QNode * p = Q.front; int len = 0; while(p != Q.rear) { len++; - 46 - } } p = p->next; return len; void EnQueue(LinkQueue &Q,int x) { } void DeQueue(LinkQueue &Q) { QNode *q; if(Q.rear->next == Q.front) cout << \队列已满\ else { } q = new QNode; q->next = NULL; q->data = x; Q.rear->next = q; Q.rear = q; - 47 - } int e; if(Q.front == Q.rear) cout << \队列为空\ else { } Q.front = Q.front->next; e = Q.front->data; cout << \出队数为\ - 48 - 《软件技术基础》实验报告 实验名称:二叉树的生成和遍历 班 级 学 号 姓 名 第 14 周 星 期 2 、 5,6 节 成 绩 一、实验目的: 1、熟悉二叉树节点的定义和生成方式; 2、熟悉二叉树链式结构的生成方式; 3、掌握二叉树遍历算法的实现。 二、实验内容: 1.设计实现二叉树的建立及遍历算法,要求: (1)编写创建二叉链式存储结构的二叉树程序并输出。 (2)编写递归实现二叉树的先序、中序、后序遍历算法。 (3)编写主函数测试以上二叉树的创建和遍历函数。 2. 假设二叉树采用链式存储结构进行存储,编写程序实现二叉树的所有叶子结点的统计并输出统计个数。 三、实验结果: - 49 - 四、实验中遇到的问题及解决方法: 对二叉树的查找顺序经常搞错,多看书理解后逐渐错误率降低。 五、实验心得体会: 二叉树的遍历在本书算一个难点,调试过程中经常出错,要对着课本一句句的编写,前方依旧很艰难 附:源程序(自行编写或修改的程序。若为修改程序请注明修改部分的功能,若为书上实例则可不附。) #include typedef struct node{ datatype data; struct node *lchild,*rchild; - 50 -
正在阅读:
新项目方法能力验证报告(水质 石油类和动植物油类的测定HJ637-2006-18
启封密闭墙措施04-18
新人教必修4 Unit5 Theme parks-Grammar08-26
D类3W免滤波音频功率放大器设计04-20
地学词汇对照04-30
人教版高二物理选修3-4第十三章光章节知识点总结过关单元测试10-19
如何制作钢结构楼梯呢11-11
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 重庆
- 邮电
- 软件技术
- 实验
- 基础
- 报告
- 大学
- 耿道渠
- 教师到企业实践总结(2)
- 中小学校长竞聘面试答辩题
- 培训材料
- 熏洗法(全身药浴法)
- 通络化痰汤治疗冠心病心绞痛痰瘀互结证疗效观察
- 把握立案条件和时机的思考
- 生态学试题库(原)
- 人教版电压导学案
- 2017-2022年中国生鲜电商行业市场深度调查研究报告(目录) - 图
- 集装箱运输与多式联运教案
- 2013--2014下学年五年级数学教学计划
- 安全生产专项整治总结3
- 分包单位入场须知 - 图文
- 2018年温州市小学毕业小升初模拟数学试题(共6套)附详细答案附
- 吉林省二级建造师继续教育考试试题答案
- 小学语文S版 六年级上册12《种瓜得豆》优质课公开课教案教师资格
- 电气接地与接零
- Java期末考试参考试题
- 单轨吊技术管理规定(2014年7月23日修订) - 图文
- 园林树木学复习试题10套及答案