中国石油大学软件技术基础上机实验报告(满分作业)_第1页
中国石油大学软件技术基础上机实验报告(满分作业)_第2页
中国石油大学软件技术基础上机实验报告(满分作业)_第3页
中国石油大学软件技术基础上机实验报告(满分作业)_第4页
中国石油大学软件技术基础上机实验报告(满分作业)_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

经典word整理文档,仅参考,双击此处可删除页眉页脚。本资料属于网络整理,如有侵权,请联系删除,谢谢!级上机实习报告2012课程名称:上机题目:软件技术基础学生姓名:专业班级:指导教师张培颖实习时间2014年9月10日至11月17日成绩2014年11月17日实验一线性表的应用—顺序表操作[实验日期]2014年11月10日学号:专业年级:姓名:1.熟悉并掌握线性表的逻辑结构定义、特点。2.熟悉并掌握顺序表描述方法。3.熟悉并掌握顺序表的基本操作,包括顺序表的建立与打印,插入与删除数据元素,查找数据元素等。(详细说明顺序表操作的各个函数头的说明)1.硬件:PC机。2DOSWindows9.xWindow2000或以上版本,TurboC2.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<MAX){for(j=1;j<i+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->length;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);}elseprintf("输入错误!\n");}实验二线性表的应用—单链表操作1.熟悉并掌握单链表的逻辑结构定义、特点。2.熟悉并掌握单链表描述方法。3.熟悉并掌握单链表的基本操作,包括单链表的建立,判别表是否为空,求表长,插入与删除数据元素,查找数据元素等。(详细说明单链表操作的各个函数头的说明)1.硬件:PC机。2DOSWindows9.xWindow2000或以上版本,TurboC2.0及以上版本或。#include"stdio.h"#include"stdlib.h"typedef{intstructdata;NodestructNode*next;}LNode,*Linklist;//后插法LNode*CreatList(){LNodeintx,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=S;scanf("%d",&x);l++;}if(l==0){H=NULL;printf("链表为空!\n");}elsereturnH;}//判断链表的长度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;//返回成功}elsereturn0;//返回失败}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.熟悉并掌握栈的基本操作:栈的建立,访问栈顶元素,进栈、出栈等。(详细说明栈操作的各个函数头的说明)1.硬件:PC机。2DOSWindows9.xWindow2000或以上版本,TurboC2.0及以上版本或。#defineMAX100#include"stdio.h"#include"malloc.h"typedefstructstack{intdata[MAX+1];inttop;}SeqStack;SeqStack构造一个空栈{SeqStack*s;s=(SeqStack*)malloc(sizeof(SeqStack));s->top=0;returns;}ntempty(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<x+1;i++){printf("输入第%d个元素:",i);scanf("%d",&a);push(p,a);}for(i=1;i<x+1;i++){printf("即将出栈的栈顶元素是:\n");Pop(p);}return0;}实验四线性表的应用—队列操作1.熟悉并掌握队列的逻辑结构定义、特点。2.熟悉并掌握队列的顺序与链式两种存储方式。3.熟悉并掌握队列的基本操作:队列的建立,入队、出队等。(详细说明队列操作的各个函数头的说明)1.硬件:PC机。2DOSWindows9.xWindow2000或以上版本,TurboC2.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;elsereturn0;}//入队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<stdio.h>#include<stdlib.h>#defineMAX100typedefstruct{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]);elseprintf("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]);elseprintf("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]);elseif(p->a[i]>0)printf("+%f",p->a[i]);elseif(p->a[i]<0)printf("%f",p->a[i]);for(j=1;j<i;j++)//打印xprintf("x");}printf("\n");}//主函数voidmain(){intk;floatx;Lnode*p,*q;printf("输入想要进行的操作:\n");打印多项式;\n");多项式求值;\n");两多项式求和;\n");多项式求导;\n");scanf("%d",&k);if(k==1){p=(Lnode*)malloc(sizeof(Lnode));Create(p);printf("输入的多项式是:");putout(p);}elseif(k==2){p=(Lnode*)malloc(sizeof(Lnode));Create(p);printf("请输入x的值:");scanf("%f",&x);Calculate(p,x);}elseif(k==3){p=(Lnode*)malloc(sizeof(Lnode));q=(Lnode*)malloc(sizeof(Lnode));Create(p);Create(q);sum(p,q);}elseif(k==4){p=(Lnode*)malloc(sizeof(Lnode));Create(p);derivation(p);}else{printf("输入错误!\n");}}}运行结果:(1)输出多项式(2)多项式求值*由图可以看出,无论是0或者负数,同样可以正常的运算。(3)多项式相加*由图可以看出,无论第一个多项式还是第二个多项式的最高次数大,得到的结果是一(4)求导样的(5)输入错误以下程序为课件上所留作业中的程序设计题xC#include<stdio.h>#include<malloc.h>#include<stdlib.h>typedefstructlist{intnum;str

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论