中国石油大学软件技术基础上机实验报告满分作业.docx
- 文档编号:26370557
- 上传时间:2023-06-18
- 格式:DOCX
- 页数:46
- 大小:1.08MB
中国石油大学软件技术基础上机实验报告满分作业.docx
《中国石油大学软件技术基础上机实验报告满分作业.docx》由会员分享,可在线阅读,更多相关《中国石油大学软件技术基础上机实验报告满分作业.docx(46页珍藏版)》请在冰豆网上搜索。
中国石油大学软件技术基础上机实验报告满分作业
中国石油大学(华东)
2012级上机实习报告
课程名称:
软件技术基础
上机题目:
学生姓名:
专业班级:
指导教师张培颖
实习时间2014年9月10日至11月17日
成绩
2014年11月17日
实验一线性表的应用—顺序表操作
[实验日期]2014年11月10日
学号:
专业年级:
姓名:
一、目的和要求
1.熟悉并掌握线性表的逻辑结构定义、特点。
2.熟悉并掌握顺序表描述方法。
3.熟悉并掌握顺序表的基本操作,包括顺序表的建立与打印,插入与删除数据元素,查找数据元素等。
二、实验内容
(详细说明顺序表操作的各个函数头的说明)
三、实验环境
1.硬件:
PC机。
2.软件:
DOS、Windows9.x、Window2000或以上版本,TurboC2.0及以上版本或VC6.0。
四、源程序
#defineMAX100
#include"stdio.h"
#include"stdlib.h"
typedefstruct
{
intnum[MAX];
intlength;
}se;
//输入元素
voidinput(se*p)
{
inti,j;
printf("输入元素的个数:
");
scanf("%d",&i);
if(i>0&&i { for(j=1;j { printf("输入第%d个数字: ",j); scanf("%d",&p->num[j]); } p->length=i; } else { printf("输入长度有错! \n"); } } //查找数据元素 voidsearch(se*p) { intx,i; printf("输入要查找的元素: "); scanf("%d",&x); for(i=0;i<=p->length;i++)//找到要查找的元素 { if(p->num[i]==x) { break; } } printf("要查找的元素位置是: "); printf("%d\n",i); } //插入元素 voidinsert(se*p) { inth,d,s; printf("输入在哪个元素之前插入: "); scanf("%d",&h); printf("输入插入的元素: "); scanf("%d",&s); if(h<0||h>=p->length) { printf("wrong! "); } else { d=p->length+1;//顺序表的长度+1。 for(;d>h;d--) { p->num[d]=p->num[d-1]; } p->num[d]=s; p->length++; } } //删除元素 voiddelete(se*p) { intm; printf("输入要删除第几个元素: "); scanf("%d",&m); intk,z; if(m<0||m>p->length) { printf("输入错误! \n"); } else { for(k=m;k { p->num[k]=p->num[k+1]; } p->length--; } } //输出顺序表 voidoutput(se*p) { inti; if(p->length>0) { for(i=1;i<=p->length;i++) { printf("第%d个数字是%d\n",i,p->num[i]); } } } //主函数 voidmain() { se*q; intn; q=(se*)malloc(sizeof(se)); printf("输入要进行的操作: \n"); printf("1: 打印顺序表。 \n"); printf("2: 查找元素。 \n"); printf("3: 插入元素。 \n"); printf("4: 删除元素。 \n"); scanf("%d",&n); if(n==1) { input(q); output(q); } elseif(n==2) { input(q); search(q); output(q); } elseif(n==3) { input(q); insert(q); output(q); } elseif(n==4) { input(q); delete(q); output(q); } else printf("输入错误! \n"); } 运行结果: (1)顺序表的建立与打印 (2)查找数据元素 (3)插入数据元素 (4)删除数据元素 (5)输入错误 实验二线性表的应用—单链表操作 一、目的和要求 1.熟悉并掌握单链表的逻辑结构定义、特点。 2.熟悉并掌握单链表描述方法。 3.熟悉并掌握单链表的基本操作,包括单链表的建立,判别表是否为空,求表长,插入与删除数据元素,查找数据元素等。 二、实验内容 (详细说明单链表操作的各个函数头的说明) 三、实验环境 1.硬件: PC机。 2.软件: DOS、Windows9.x、Window2000或以上版本,TurboC2.0及以上版本或VC6.0。 四、源程序 #include"stdio.h" #include"stdlib.h" typedefstructNode {intdata; structNode*next; }LNode,*Linklist; //后插法 LNode*CreatList() {LNode*H,*T,*S; intx,l=0,Flag=0; printf("输入链表(以0结束): \n"); H=(LNode*)malloc(sizeof(LNode)); T=H; scanf("%d",&x); while(x! =Flag)//结束标志 { S=(LNode*)malloc(sizeof(LNode)); //插入过程 S->data=x; S->next=NULL; T->next=S; T=S; scanf("%d",&x); l++; } if(l==0) { H=NULL; printf("链表为空! \n"); } else returnH; } //判断链表的长度 intLengthList(LNode*H) {LNode*p=H;inti=0; while(p->next! =NULL) {i++;p=p->next;} returni; } LNode*GetListNode(intx) { LNode*s=(LNode*)malloc(sizeof(LNode)); if(s) { s->data=x; s->next=NULL; } return(s); } //插入一个节点 intInsertList(LNode*H,inta,intx) { LNode*s,*q=H; s=GetListNode(x); if(! s) return0; if(H==NULL) { H=s; return1; } while(q->next! =NULL&&q->next->data! =a)//找到前插节点 { q=q->next; } s->next=q->next; q->next=s; return1; } //删除一个节点 intDeleteList(LNode*head,inta) { LNode*p,*q=head; while(q->next! =NULL&&q->next->data! =a) q=q->next; if(q->next! =NULL)//找到,删除 {p=q->next; q->next=p->next; free(p); return1;//返回成功 } else return0;//返回失败 } LNode*SearchX(LNode*H,intx) { intk=1; LNode*p=H->next; while(p! =NULL&&p->data! =x)//找到节点 { p=p->next; k++; } returnk; } //输出链表 voidprint(LNode*head) { LNode*p; p=head->next; printf("输出链表: \n"); while(p) { printf("%d\n",p->data); p=p->next; } } //主函数 voidmain() { LNode*q; intx,s,l,a,y,b,n; q=(LNode*)malloc(sizeof(LNode)); printf("输入要进行的操作: \n"); printf("1: 建立单链表并判断是否为空。 \n"); printf("2: 求表长\n"); printf("3: 插入节点。 \n"); printf("4: 删除节点。 \n"); printf("5: 查找节点。 \n"); scanf("%d",&n); if(n==1) { q=CreatList(); print(q); } elseif(n==2) { q=CreatList(); printf("链表的长度是: \n"); l=LengthList(q); printf("%d\n",l); } elseif(n==3) { if(q! =NULL) { q=CreatList(); printf("输入要插入的数: "); scanf("%d",&y); printf("在哪个数前插入(按0结束): "); scanf("%d\n",&a); InsertList(q,a,y); print(q); } } elseif(n==4) { if(q! =NULL) { q=CreatList(); printf("输入要删除的数(以0结束): "); scanf("%d\n",&b); DeleteList(q,b); print(q); } } elseif(n==5) { if(q! =NULL) { q=CreatList(); printf("输入要查找的数: \n"); scanf("%d",&x); s=SearchX(q,x); printf("查找的数所在的位置是: %d\n",s); } } else { printf("输入错误! "); } } 运行结果 (1)建立链表并判断是否为空 链表为空 链表不为空: (2)求表长 (3)插入节点 (4)删除节点 (5)查找节点 (6)输入错误 实验三线性表的应用—栈操作 一、目的和要求 1.熟悉并掌握栈的逻辑结构定义、特点。 2.熟悉并掌握栈的顺序与链式两种存储方式。 3.熟悉并掌握栈的基本操作: 栈的建立,访问栈顶元素,进栈、出栈等。 注意: 标明实现的是顺序栈还是链栈。 二、实验内容 (详细说明栈操作的各个函数头的说明) 三、实验环境 1.硬件: PC机。 2.软件: DOS、Windows9.x、Window2000或以上版本,TurboC2.0及以上版本或VC6.0。 四、源程序(实现链栈) #defineMAX100 #include"stdio.h" #include"malloc.h" typedefstructstack { intdata[MAX+1]; inttop; }SeqStack; SeqStack*StackList()//构造一个空栈 {SeqStack*s; s=(SeqStack*)malloc(sizeof(SeqStack)); s->top=0; returns; } intempty(SeqStack*s)//判断栈是否为空 { return(s->top==0); } intfull(SeqStack*s)//判断栈是否满 { return(s->top==MAX); } intpush(SeqStack*s,intdata)//入栈 { if(s->top+1>MAX) { printf("栈溢出! \n"); return0; } else { s->data[++s->top]=data; return1; } } intPop(SeqStack*s)//读取栈顶元素并出栈 { intx; if(empty(s))return0; else { x=s->data[s->top]; s->top--; printf("%d\n",x); return1; } } intmain() { SeqStack*p; intq,a,i,x; printf("输入进栈元素个数: \n"); scanf("%d",&x); p=StackList(); for(i=1;i { printf("输入第%d个元素: ",i); scanf("%d",&a); push(p,a); } for(i=1;i { printf("即将出栈的栈顶元素是: \n"); Pop(p); } return0; } 运行结果: 实验四线性表的应用—队列操作 一、目的和要求 1.熟悉并掌握队列的逻辑结构定义、特点。 2.熟悉并掌握队列的顺序与链式两种存储方式。 3.熟悉并掌握队列的基本操作: 队列的建立,入队、出队等。 注意: 标明实现的是顺序队列还是链队列。 二、实验内容 (详细说明队列操作的各个函数头的说明) 三、实验环境 1.硬件: PC机。 2.软件: DOS、Windows9.x、Window2000或以上版本,TurboC2.0及以上版本或VC6.0。 四、源程序(实现链队列) #include"stdio.h" #include"stdlib.h" typedefstructnode//存储数据的链结点类型 { intdata; structnode*next; }Qnode; typedefstruct//将头尾结点封装在一起的链队列 { Qnode*front; Qnode*rear; }Lqueue; //创建一个队列 Lqueue*CreatLQ() {Qnode*p; p=(Qnode*)malloc(sizeof(Qnode)); p->next=NULL; Lqueue*q=(Lqueue*)malloc(sizeof(Lqueue)); q->front=q->rear=p; returnq; } //判断是否为空 intEmpty_LQ(Lqueue*q) {if(q->front==q->rear) return1; else return0; } //入队 voidInsert_LQ(Lqueue*q,intx) {Qnode*p; p=(Qnode*)malloc(sizeof(Qnode)); p->data=x; p->next=NULL; q->rear->next=p; q->rear=p; } //出队 voidprintqueue(Lqueue*q) { Qnode*p; inti=1; printf("出队: \n"); p=q->front->next; while(p) { printf("第%d个出队的元素是: ",i); printf("%d\n",p->data); i++; p=p->next; } } voidmain() { Lqueue*p; intx,y,i,n; p=CreatLQ(); printf("输入队列长度: \n"); scanf("%d",&n); for(i=1;i<=n;i++) { printf("进入第%d个元素是: \n",i); scanf("%d",&x); Insert_LQ(p,x); } printqueue(p); } 运行结果: 实验五一元多项式的表示及运算 一、实验题目 一元多项式的表示及运算 二、实验目的 加强对线性表等数据结构的理解,锻炼学生使用多种数据结构解决问题的综合能力。 三、实验内容 设计并实现一元多项式的表示及运算,具体要求: (1)在计算机上存储任意输入的一个一元多项式; (2)要有计算功能,对任意输入的一个x值,能够计算出一元多项式的值; (3)要有求和功能,能够实现两个一元多项式的加法运算; (4)要有求导功能,实现一元多项式的一阶导数的运算。 四、实验要求 (1)界面美观、布局合理、操作方便。 (2)要使用软件工程的思想,有完整的文档。 五、说明 本实验是一个综合性实验,务必要求学生独立完成,同时写出相应的实验报告。 源程序: #include #include #defineMAX100 typedefstruct { floata[MAX]; intlength; }Lnode; //一元多项式的创建 voidCreate(Lnode*p) { inti,n; printf("输入一元多项式的最高幂次: "); scanf("%d",&n); printf("按照提示输入数据\n"); printf("常数项: "); scanf("%f",&p->a[0]); for(i=1;i<=n;i++) { printf("%d次项: ",i); scanf("%f",&p->a[i]); } p->length=n; } //输出多项式 voidputout(Lnode*p) { inti,j; if(p->a[0]! =0) printf("y=%f",p->a[0]); else printf("y="); for(i=1;i<=p->length;i++)//打印x { if(p->a[i]>0) printf("+%f",p->a[i]); if(p->a[i]<0) printf("-%f",p->a[i]); for(j=1;j<=i;j++) printf("x"); } printf("\n"); } //一元多项式的求值 voidCalculate(Lnode*p,floatx) { inti,j; floatt,sum=0; for(i=0;i<=p->length;i++) { t=p->a[i]; for(j=i;j>0;j--) { t=t*x; } sum+=t; } printf("一次多项式的值为: "); printf("%f\n",sum); } //一元多项式的相加 voidsum(Lnode*p,Lnode*q) { inti,j; Lnode*s; s=(Lnode*)malloc(sizeof(Lnode)); if(p->length<=q->length) { for(i=0;i<=p->length;i++) s->a[i]=p->a[i]+q->a[i]; for(i=p->length+1;i<=q->length;i++) s->a[i]=q->a[i]; s->length=q->length; } else { for(i=0;i<=q->length;i++) s->a[i]=p->a[i]+q->a[i]; for(i=q->length+1;i<=p->length;i++) s->a[i]=p->a[i]; s->length=p->length; } printf("相加后的多项式为: \n"); if(s->a[0]! =0) printf("y=%f",s->a[0]); else printf("y="); for(i=1;i<=s->length;i++)//打印x { if(s->a[i]>0) printf("+%f",s->a[i]); if(s->a[i]<0) printf("-%f",s->a[i]); for(j=1;j<=i;j++) printf("x"); } printf("\n"); } //一元多项式的求导 voidderivation(Lnode*p) { inti,j; for(i=1;i<=p->length;i++)//将幂与系数相乘 p->a[i]=p->a[i]*i; printf("一元多项式的导数为: \n"); printf("y'="); for(i=1;i<=p->length;i++) { if(i==1) printf("%f",p->a[i]); else if(p->a[i]>0) printf("+%f",p->a[i]); else if(p->a[i]<0) printf("%f",p->a[i]); for(j=1;j printf("x"); } printf("\n"); } //主函数 voidmain() { intk; floatx; Lnode*p,*q; printf("输入想
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 中国 石油大学 软件技术 基础 上机 实验 报告 满分 作业
![提示](https://static.bdocx.com/images/bang_tan.gif)