计算机软件实验报告.docx
《计算机软件实验报告.docx》由会员分享,可在线阅读,更多相关《计算机软件实验报告.docx(28页珍藏版)》请在冰豆网上搜索。
计算机软件实验报告
(此文档为word格式,下载后您可任意编辑修改!
)
CENTRALSOUTHUNIVERSITY
实验一线性表的基本操作
一、实验目的与基本要求
1.掌握数据结构中的一些基本概念。
数据、数据项、数据元素、数据类型和数据结构,以及它们之间的关系。
2.了解数据的逻辑结构和数据的存储结构之间的区别与联系;数据的运算与数据的逻辑结构的关系。
3.掌握线性表的基本操作:
插入、删除、查找以及线性表的合并等运算。
4.掌握运用C语言上机调试线性表的基本方法。
二、实验条件
1.硬件:
一台微机
2.软件:
操作系统和C语言系统
三、实验方法
确定存储结构后,上机调试实现线性表的基本运算。
四、实验内容
1.试编写在无头结点的单链表上实现线性表基本运算LOCATE(L,X),INSERT(L,X,1)和DELETE(L,1)的算法。
2.假设有两个按数据元素值递增有序排列的线性表A和B,均以单链表作为存储结构。
编写算法将A表和B表归并成一个按元素值递减有序(即非递增有序,允许值相同)排列的线性表C,并要求利用原表(即A表和B表)结点空间存放表C。
3.将一个线性表中的值就地逆置。
4.在线性表的顺序存储结构的第一个位置上插入一个元素。
(注意区分链表和顺序表)
五、实验提示
编写一个可运行的程序,建立链表与顺序表,并由用户输入递增有序排列的链表A、链表B、顺序表的内容。
最好有一定的容错功能和友好的界面。
实现实验内容的各项操作并输出操作后的表的内容。
选做:
链表的排序,以实现输入非有序表也可进行内容2的要求。
六、报告要求
1、实验目的
2、实验内容
3、代码
4、调试过程中遇到的问题与解决方法
以打印稿形式于考试时上交。
七、参考代码
*ElemType替换为需要的变量名*
#include}
**********求线性表中第i个元素运算**********
SLink*GetElem(SLink*sq,inti)
{
intj=1;
SLink*p=sq->next;
if(iGetLength(sq))
returnNULL;
while(j
{
p=p->next;
j++;
}
returnp;
}
**********按值查找运算**********
SLink*Locate(SLink*sq,ElemTypex,inti)
{
SLink*p=sq->next;
if(i<1||i>GetLength(sq))
returnNULL;
while(p!
=NULL&&p->data!
=x)
p=p->next;
returnp;
}
**********插入结点运算**********
intInsElem(SLink*sq,ElemTypex,inti)
{
intj=1;
SLink*p=sq,*s;
s=(SLink*)malloc(sizeof(SLink));
s->data=x;
s->next=NULL;
if(i<1||i>GetLength(sq)+1)
return0;
while(j
{
p=p->next;
j++;
}
s->next=p->next;
p->next=s;
return1;
}
**********删除结点运算**********
intDelElem(SLink*sq,inti)
{
intj=1;
SLink*p=sq,*q;
if(i<1||i>GetLength(sq))
return0;
while(j
{
p=p->next;
j++;
}
q=p->next;
p->next=q->next;
free(q);
return1;
}
**********输出元素值运算**********
voidDispList(SLink*sq)
{
SLink*p=sq->next;
while(p!
=NULL)
{
printf("%d\n",p->data);
p=p->next;
}
return;
}
*()
{
intn,i,j,k;
SLink*L;
*在主函数中添加内容调用自定义函数,并添加适当的函数以完成功能。
*
}
实验2栈和队列的基本操作
一、实验目的与基本要求
1.掌握栈和队列的顺序存储和链式存储结构
1.掌握栈和队列的特点。
2.掌握栈和队列的基本运算。
二、实验条件
5.硬件:
一台微型计算机
6.软件:
操作系统和C语言系统。
三、实验方法
确定存储结构后,上机调试实现栈和队列的基本运算。
四、实验内容
1.写出栈的入栈和出栈的算法
2.写出队列的入队和出队算法。
五、实验提示
编写一个可运行的程序,建立栈与队列,实现入栈、出栈,入队、出队的算法,并由用户选择操作,输出栈与队列的内容。
六、报告要求
1、实验目的
2、实验内容
3、代码
4、调试过程中遇到的问题与解决方法
以打印稿形式于考试时上交。
七、参考代码
**********建栈**********
int*init_stack(s,m,top)
int*s;intm,*top;
{
if(s!
=NULL)
free(s);
s=malloc(m*sizeof(int));
*top=0;
flag1=1;
returns;
}
**********入栈**********
voidpush(s,m,top,x)
ints[],x;intm,*top;
{
if(flag1==0)
{
printf("尚未建栈\n");
return;
}
if(*top==m)
{
printf("栈满\n");
return;
}
*top=*top+1;
s[*top-1]=x;
return;
}
**********退栈**********
voidpop(s,m,top,y)
ints[],*y;intm,*top;
{
if(flag1==0)
{
printf("尚未建栈\n");
return;
}
if(*top==0)
{
printf("**********栈空\n**********\n");
return;
}
*y=s[*top-1];
*top=*top-1;
return;
}
**********读栈顶**********
voidtop(s,m,top,y)
ints[],*y;intm,*top;
{
if(flag1==0)
{
printf("尚未建栈\n");
return;
}
if(*top==0)
{
printf("空栈\n");
return;
}
*y=s[*top-1];
return;
}
**********建队**********
int*init_queue(q,m,front,rear,s)
int*q;intm,*front,*rear,*s;
{
if(q!
=NULL)
free(q);
q=malloc(m*sizeof(int));
*front=m;
*rear=m;
*s=0;
flag2=1;
returnq;
}
**********入队**********
voidaddcq(q,m,rear,front,s,x)
intq[],x;intm,*rear,*front,*s;
{
if((*s==1)&&(*rear==*front))
{
printf("队满\n");
return;
}
*rear=*rear+1;
if(*rear==m+1)
*rear=1;
q[*rear-1]=x;
*s=1;
return;
}
**********退队**********
voiddelcq(q,m,rear,front,s,y)
intq[],*y;intm,*rear,*front,*s;
{
if(flag2==0)
{
printf("尚未建队\n");
return;
}
if(*s==0)
{
printf("队空\n");
return;
}
*front=*front+1;
if(*front==m+1)
*front=1;
*y=q[*front-1];
if(*front==*rear)
*s=0;
return;
}
运行结果:
实验3二叉树的构造
一、实验目的与基本要求
1.熟练掌握二叉树的构造方法。
二、实验条件
3.硬件:
一台微机
4.软件:
操作系统和C语言系统
三、实验方法
确定存储结构后,上机调试二叉树的构造方法。
四、实验内容
设计一个读入一串整数构成一棵二叉树的程序。
(深度至少为2)
五、实验提示
编写一个可运行的程序,建立二叉树,由用户输入二叉树的数据。
选做:
输出前、中、后序遍历。
六、报告要求
1、实验目的
2、实验内容
3、代码
4、调试过程中遇到的问题与解决方法
以打印稿形式于考试时上交。
七、参考代码
#include}
pretrav(bt)
structbtnode*bt;
{
if(bt!
=NULL)
{
printf("%d\n",bt->d);
pretrav(bt->lchild);
pretrav(bt->rchild);
}
return;
}
intrav(bt)
structbtnode*bt;
{
if(bt!
=NULL)
{
intrav(bt->lchild);
printf("%d\n",bt->d);
intrav(bt->rchild);
}
return;
}
postrav(bt)
structbtnode*bt;
{
if(bt!
=NULL)
{
postrav(bt->lchild);
postrav(bt->rchild);
printf("%d\n",bt->d);
}
return;
}
intmain()
{
structbtnode*t;
ints;
while
(1)
{
printf("请选择\n1、建立二叉树\n2、前序遍历\n3、中序遍历\n4、后序遍历\n5、退出\n");
scanf("%d",&s);
switch(s)
{
case1:
t=creatbt(t,0);break;
case2:
pretrav(t);break;
case3:
intrav(t);break;
case4:
postrav(t);break;
default:
return;
}
}
}
运行结果:
实验4排序的基本操作
一、实验目的与基本要求
7.掌握常用的排序方法,并用高级语言实现排序算法。
8.理解排序的定义和各种排序的特点。
9.了解排序过程以及依据的原则,并了解各种排序方法的时间复杂度分析。
二、实验条件
5.硬件:
一台微机
6.软件:
操作系统和C语言系统
三、实验方法
确定存储结构后,上机调试不同的排序方法。
四、实验内容
1.设计一待排序的线性表以顺序存储结构存储,试写出冒泡排序算法。
2.给出n个学生的考试成绩表,每条信息由姓名与分数组成,试设计一个算法:
(1)按分数高低次序,打印出每个学生在考试中获得的名次,分数相同的为同一名次。
(2)按名次列出每个学生的姓名与分数。
五、实验提示
编写一个可运行的程序,建立一个顺序表,由用户输入数据。
建立一个学生成绩表(用结构体储存学生姓名、成绩、名次),由用户输入数据。
输出相应内容。
六、报告要求
1、实验目的
2、实验内容
3、代码
4、调试过程中遇到的问题与解决方法
以打印稿形式于考试时上交。
7、参考代码
参考核心代码:
#include
Usingnamespacestd;
template
voidbub(Tp[],intn)
{intm,k,j,i;
Td;
k=0;m-n-1;
while(k{j=m-1;m=0;
for(i=k;i<=j;i++)
if(p[i]>p[i+1])
{d=p[i];>p[i]=p[i+1];p[i+1]=d;k=i;}
}
return;
}
运行结果:
实验心得
《计算机软件技术基础》是以C语言为基础的大学里一门重要的基础课程,因为经过了大一对C语言学习的理解,再加上考计算机二级时候的复习,这学期学习新选的这门《计算机软件技术基础》接触起来也就更容易,虽然部分知识已经学过,但是我把这当做一个很好的复习以前所学知识的过程,而且里边新的知识也有很多,所以使我对于C语言这一部分有了更进一步的深入学习和研究。
在科技高度发展的今天,计算机在人们生活、工作等各个方面的作用越来越显著。
即使是非计算机专业的学生,对于计算机语言等各方面的了解也是非常重要的。
在这门课中,我学习到了有关算法、基本数据及结构、常用的查找和排序技术、资源管理技术及应用软件设计与开发技术等相关知识,而这些过程现今有大部分以C语言为基础来编码而成,所以学习好C语言对于我们来说是非常之重要的。
因为时间比较紧迫的关系,我们的这次去做实验的时候老师并没有给我们做一定的详细的介绍,只是给我们简单的介绍了几个比较重要的实际操作。
包括了程序模块处理、简单界面程序、高级界面程序、程序的添加修改。
用程序做一元线性回归处理以及用C语言程序来画粒度分布图等这几样比较重要的时间操作这些基本的应用型操作,更重要的目的是希望我们通过结合课堂上的范例等来进行自我编译几个程序。
在C语言这门课程中,学会自我独立编译和寻找错误这个实验过程是很有必要的。
对于程序设计语言的学习目的,可以概括为学习语法规定、掌握程序设计方法、提高程序开发能力,这些都必须通过充分的实际上机操作才能完成。
学习计算机软件基础除了课堂讲授以外,必须保证有不少于课堂讲授学时的上机时间。
因为实验时间有限,老师对我们的提出了如下要求:
1、加深对课程内容的理解。
课堂上要讲授许多关于栈、队列等的编译,听起来十分枯燥无味,也不容易记住,死记硬背是不可取的。
然而要使用C语言这个工具解决实际问题,又必须掌握它。
通过多次上机练习,对于语法知识有了感性的认识,加深对它的理解,在理解的基础上就会自然而然地掌握了软件中的语法规定。
对于一些内容自己认为在课堂上听懂了,但上机实践中会发现原来理解的偏差,这是由于大部分学生是初次接触程序设计,缺乏程序设计的实践所致。
学习计算机软件不能停留在学习它的语法规则,而是利用学到的知识编写C语言程序,解决实际问题。
即把C语言作为工具,描述解决实际问题的步骤,由计算机帮助我们解题。
只有通过上机才能检验自己是否掌握C语言、自己编写的程序是否能够正确地解题。
通过上机实验来验证自己编制的程序是否正确,恐怕是大多数同学在完成老师作业时的心态。
但是在程序设计领域里这是一定要克服的传统的、错误的想法。
因为在这种思想支配下,可能你会想办法去"掩盖"程序中的错误,而不是尽可能多地发现程序中存在的问题。
自己编好程序上机调试运行时,可能有很多你想不到的情况发生,通过解决这些问题,可以逐步提高自己计算机软件的理解和程序开发能力。
2、熟悉程序开发环境、学习计算机系统的操作方法
一个C语言程序从编辑、编译、连接到运行,都要在一定的外部操作环境下才能进行。
所谓"环境"就是所用的计算机系统硬件、软件条件,只有学会使用这些环境,才能进行程序开发工作。
通过上机实验,熟练地掌握C语言开发环境,为以后真正编写计算机程序解决实际问题打下基础。
同时,在今后遇到其它开发环境时就会触类旁通,很快掌握新系统的使用。
3、学习上机调试程序
完成程序的编写,决不意味着万事大吉。
你认为万无一失的程序,实际上机运行时可能不断出现麻烦。
如编译程序检测出一大堆错误。
有时程序本身不存在语法错误,也能够顺利运行,但是运行结果显然是错误的。
开发环境所提供的编译系统无法发现这种程序逻辑错误,只能靠自己的上机经验分析判断错误所在。
程序的调试是一个技巧性很强的工作,对于初学者来说,尽快掌握程序调试方法是非常重要的。
有时候一个消耗你几个小时时间的小小错误,调试高手一眼就看出错误所在。
虽然这次实验上机实践学习只有几天的时间,但是我从中学到了很多只有通过时间才能学到的东西。
从中我不仅了解到了一些关于计算机软件的知识,而且还理解并巩固了C语言的理论知识,这对我拓展知识甚至于以后寻找工作都有一定的帮助,同时也让我学习到了做事情工作中的一些必须有的态度,以及做实事才能学到真东西。
蔡云
测控0802班