搜档网
当前位置:搜档网 › 数据结构课程设计 实验报告 心得体会 C++

数据结构课程设计 实验报告 心得体会 C++

数据结构课程设计 实验报告 心得体会 C++
数据结构课程设计 实验报告 心得体会 C++

排序算法比较分析专业班级:08软件工程2班

姓名:汪伟

学号: 08010xxxxx

设计时间: 2010-9-15—-2010-9-27

指导教师:杨薇薇

课程设计报告的内容

一、题目:排序算法比较

1、设计目的

1.掌握各种排序的基本思想。

2.掌握各种排序方法的算法实现。

3.掌握各种排序方法的优劣分析及花费的时间的计算。

4.掌握各种排序方法所适应的不同场合。

2、设计内容和要求

利用随机函数产生30000个随机整数,利用插入排序、起泡排序、选择排序、快速排序、堆排序、归并排序等排序方法进行排序,并统计每一种排序上机所花费的时间

二、运行环境(软、硬件环境)

软件环境:Vc6.0编程软件

运行平台: Win32

硬件:普通个人pc机

三、算法设计的思想

1、冒泡排序:bubbleSort()

基本思想: 设待排序的文件为r[1..n]

第1趟(遍):从r[1]开始,依次比较两个相邻记录的关键字

r[i].key和r[i+1].key,若r[i].key>r[i+1].key,则交换记录

r[i]和r[i+1]的位置;否则,不交换。

(i=1,2,...n-1)

第1趟之后,n个关键字中最大的记录移到了r[n]的位置上。

第2趟:从r[1]开始,依次比较两个相邻记录的关键字

r[i].key和r[i+1].key,若r[i].key>r[i+1].key,则交换记录

r[i]和r[i+1]的位置;否则,不交换。

(i=1,2,...n-2)

第2趟之后,前n-1个关键字中最大的记录移到了r[n-1]的位

置上,作完n-1趟,或者不需再交换记录时为止。

2、选择排序:selSort()

每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。

选择排序不像冒泡排序算法那样先并不急于调换位置,第一轮(k=1)先从array[k]开始逐个检查,看哪个数最小就记下该数所在的位置于minlIndex中,等一轮扫描完毕,如果找到比array[k-1]更小的元素,则把array[minlIndex]和a[k-1]对调,这时array[k]到最后一个元素中最小的元素就换到了array[k-1]的位置。如此反复进行第二轮、第三轮…直到循环至最后一元素

3、直接插入排序:insSort()

在已经排好序的序列中查找待插入的元素的插入位置,并将待插入元素插入到有序列表中的过程。

将数组分成两部分,初始化时,前部分数组为只有第一个元素,用来存储已排序元素,我们这里叫arr1 ;后部分数组的元素为除第一个元素的所有元素,为待排序或待插入元素,我们这里叫arr2 。

排序时使用二层循环:第一层对arr2 进行循环,每次取后部分数组(待排序数组)里的第一个元素(我们称为待排序元素或称待插入元素)e1 ,然后在第二层循环中对arr1 (已排好序的数组)从第一个元素往后进行循环,查到第一个大于待插入元素(如果是升序排列)或第一个小于待插入元素(如果是降序排列)e2 ,然后对arr1 从e2 元素开始往后的所有元素向后移,最后把e1 插入到原来e2 所在的位置。这样反复地对arr2 进行循环,直到arr2 中所有的待插入的元素都插入到arr1 中。

4、快序排序:QuickSort()

基本思想:首先在r[1..n]中,确定一个r[i],经过比较和

移动,将r[i]放到"中间"某个位置上,使得r[i]左边所有记录

的关键字小于等于r[i].key,r[i]右边所有记录的关键字大于等

于r[i].key。以r[i]为界,将文件划分为左、右两个子文件。

用同样的方法分别对这两个子文件进行划分, 得到4个更小

的子文件。继续进行下去,使得每个子文件只有一个记录为止,

便得到原文件的有序文件。

例. 给定文件(20,05,37,08,63,12,59,15,44,08),选

用第1个元素20进行划分:

5、归并排序:MegeSort()

假定文件(r[1],r[2],...,r[n])中记录是随机排列的,进行

2-路归并排序,首先把它划分为长度均为1的n个有序子文件,

然后对它们逐步进行2-路归并排序。其步骤如下:

第1趟:从r[1..n]中的第1个和第2个有序子文件开始,调用

算法merge,每次归并两个相邻子文件,归并结果放到y[1..n]中。

在y中形成 n/2 个长度为2的有序子文件。若n为奇数,则y中最

后一个子文件的长度为1。

第2趟:把y[1..n]看作输入文件,将 n/2 个有序子文件两

两归并,归并结果回送到r[1..n]中,在r中形成 n/2 /2 个长度为4的有序子文件。若y中

有奇数个子文件,则r中最后一个子文

件的长度为2。

共计经过 log2n 趟归并,最后得到n个记录的有序文件。

6、堆排序:HeapSort()

堆实质上是满足如下性质的完全二叉树:树中任一非叶结点的关键字均不大于(或不小

于)其左右孩子(若存在)结点的关键字。

1、N(N>1)个节点的的完全二叉树从层次从左自右编号,最后一个分枝节点(非叶子节点)

的编号为 N/2 取整。2、且对于编号 i(1<=i<=N)有:父节点为 i/2 向下取整;若2i>N,

则节点i没有左孩子,否则其左孩子为2i;若2i+1>N,则没有右孩子,否则其右孩子为2i+1。

3、这里使用完全二叉树只是为了好描述算法,它只是一种逻辑结构,真真在实现时我们还

是使用数组来存储这棵二叉树的,因为完全二叉树完全可以使用数组来存储。

堆排序其实最主要的两个过程:第一步,创建初始堆;第二步,交换根节点与最后一个非叶

子节

从最后一个非叶子节点为开始向前循环每个会支节点,比较每个分支节点与他左右子节点,如果其中某个子节点比父节点大,则与父节点交换,交换后原父节点可能还小于原子节点的子节点,所以还需

对原父节点进行调整,使用原父节点继续下沉,直到没有子节点或比左右子节点都大为止,调用过程可通过递归完成。当某个非叶子节点调整完毕后,再处理下一个非叶子节点,直到根节点也调整完成,这里初始堆就创建好了,这里我们创建的是大顶堆,即大的元素向树的根浮,这样排序最后得到的结果为升序,因为最大的

将树中的最后一个元素与堆顶元素进行交换,并从树中去掉最后叶子节点。交换后再按创建初始堆的算法调整根节点,如此下去直到树中只有一个节点为止。

四、算法的流程图

五、算法设计分析

1、冒泡排序:bubbleSort()

冒泡排序算法分析:

(1)最好情况, 待排序的文件已是有序文件:

只需要进行1趟排序,

共计比较关键字的次数为n-1

不交换记录。

(2)最坏情况, 要经过n-1趟排序,

所需总的比较关键字的次数为

(n-1)+(n-2)+...+1=n(n-1)/2 交换记录的次数最多为

(n-1)+(n-2)+...+1=n(n-1)/2

移动记录次数最多为

3n(n-1)/2。

(3)只需要少量中间变量作为辅助空间。

算法是稳定的。

2、选择排序:selSort()

选择排序算法分析:

(1)比较次数,在任何情况下,均为

(2)交换记录的次数

在最好情况下,原n个记录递增有序:不移动记录。

在最坏情况下共交换记录n-1对,移动记录数3(n-1)次。

故,时间复杂度为O(n2)。

(3)只需少量中间变量作为辅助空间。

(4)算法是不稳定的。

3、直接插入排序:insSort()

直接插入排序算法分析:

故,时间复杂度为O(n2)。

(4)只需少量中间变量作为辅助空间。

(5)算法是稳定的。

4、快序排序:QuickSort(d)

快速排序算法分析:

(1)就平均速度而言,

快速排序是已知内部排序方法中最好的一种排序方法,

其时间复杂度为

O(nlog(n))。

(2)在最坏情况下,

快速排序所需的比较次数和冒泡排序的比较次数相同,

其时间复杂度为

O(n2)。

(3)快速排序需要一个栈作辅助空间,用来实现递归处理左、右子文件。

在最坏情况下,递归深度为n,

所需栈的空间大小为

O(n)。

(4)快速排序是不稳定的。

5、归并排序:MegerSort()

归并排序算法分析:

(1)对n个记录的文件进行归并排序,共需

log2n 趟,

(2)每趟所需比较关键字的次数不超过n, 共比较

O(nlog2n)次。

(3)每趟移动n个记录, 共移动记录

O(nlog2n)个

(4)归并排序需要一个大小为n的辅助空间

y[1..n]。

(5)归并排序是稳定的。

6、堆排序:HeapSort()

堆排序算法分析:

(1)堆排序的时间,主要由建立初始堆和反复重建堆这两部分的时间开销构成,

它们均是通过调用Heapify实现的。

(2)堆排序的最坏时间复杂度为

O(nlgn)。

(3)堆排序的平均性能较接近于最坏性能。

由于建初始堆所需的比较次数较多,所以堆排序不适宜于记录数较少的文件。

(4)堆排序是就地排序,辅助空间为

O(1)。

(5)它是不稳定的排序方法

六、源代码

#include

#include

#include

#include

#include

//外部变量定义

int count1=0,bj1=0,yd1=0;

int count2=0,bj2=0,yd2=0;

int count3=0,bj3=0,yd3=0;

int count4=0,bj4=0,yd4=0;

int count5=0,bj5=0,yd5=0;

int count6=0,bj6=0,yd6=0;

clock_t start1,finish1;

clock_t start2,finish2;

clock_t start3,finish3;

clock_t start4,finish4;

clock_t start5,finish5;

clock_t start6,finish6;

int b[6]={finish1-start1,finish2-start2,finish3-start3,finish4-start4,finish5-start5,finish6-start6};

template

class an

{

public:

void selectsort(T A[],int n);//简单选择排序

void insertsort(T A[],int n);//直接插入排序

void shellsort(T A[],int n); //希尔排序

void bubblesort(T A[],int n);//冒泡排序

void quicksort(T A[],int n);//快速排序

void mergesort(T A[],int n);//两路合并排序

private:

void merge(T A[],int i1,int j1,int i2,int j2);

void qsort(T A[],int left,int right);

};

template

void an::selectsort(T A[],int n) //简单选择排序

{

int small;

start3=clock();

for(int i=0;i

{

small=i;

for(int j=i+1;j

{

if(A[j]

{

small=j;

bj3++;

}

swap(A[i],A[small]);

count3++;

yd3+=3;

}

}

cout<<"简单选择排序后的数组是:"<

for(i=0;i

cout<

cout<

finish3=clock();

}

template //直接插入排序void an::insertsort(T A[],int n)

{

start1=clock();

for(int i=1;i

{

int j=i;

T temp=A[i];

while(j>0 && temp

{

bj1++;

A[j]=A[j-1];

j--;

yd1++;

}

A[j]=temp;

}

cout<<"直接插入排序后的数组是:"<

for(i=0;i

cout<

cout<

finish1=clock();

}

template //希尔排序

void an::shellsort(T A[],int n)

{

start2=clock();

int j,tmp,jmp;

jmp=n/2;

while(jmp!=0)

{

for(int i=jmp;i

{

tmp=A[i];

j=i-jmp;

while(tmp=0)

{

bj2++;

A[j+jmp]=A[j];

yd2++;

j=j-tmp;

}

bj2++;

A[jmp+j]=tmp;

yd2++;

}

jmp=jmp/2;

}

cout<<"希尔排序后的数组是:"<

cout<

cout<

finish2=clock();

}

template //冒泡排序void an::bubblesort(T A[],int n) {

start4=clock();

int i=n-1,j,last;

while(i>0)

{

last=0;

for(j=0;j

{

if(A[j+1]

{

bj4++;

swap(A[j],A[j+1]);

count4++;

yd4+=3;

last=j;

}

bj4++;

}

i=last;

}

cout<<"冒泡排序后的数组是:"<

cout<

cout<

finish4=clock();

}

template //快速排序

void an::quicksort(T A[],int n)

{

start5=clock();

qsort(A,0,n-1);

cout<<"快速排序后的数组是:"<

for(int i=0;i

cout<

cout<

finish5=clock();

}

template

void an::qsort(T A[],int left,int right) {

int i,j;

if(left

{

i=left;

j=right+1;

do{

do{

i++;

bj5++;

}while(A[i]

do {

j--;

bj5++;

}while(A[j]>A[left]);

if(i

{

swap(A[i],A[j]);count5++;yd5+=3;

}

}while(i

swap(A[left],A[j]);

yd5+=3;

count5++;

qsort(A,left,j-1);

qsort(A,j+1,right);

}

}

template //两路合并排序

void an::merge(T A[],int i1,int j1,int i2,int j2) {

T *temp=new T[j2-i1+1];

int i=i1,j=i2,k=0;

while(i<=j1&&j<=j2)

if(A[i]<=A[j])

{

temp[k++]=A[i++];bj6++;yd6++;

}

else

{

temp[k++]=A[j++];bj6++;yd6++;

}

while(i<=j1)

{

temp[k++]=A[i++];bj6++;yd6++;

}

while(j<=j2)

{

temp[k++]=A[j++];yd6++;

}

for(i=0;i

{

A[i1++]=temp[i];yd6++;

}

delete []temp;

}

template

void an::mergesort(T A[],int n)

{

start6=clock();

int i1,j1,i2,j2;

int size=1;

while(size

{

i1=0;

while(i1+size

{

i2=i1+size;

j1=i2-1;

if(i2+size-1>n-1)

j2=n-1;

else j2=i2+size-1;

merge(A,i1,j1,i2,j2);

i1=j2+1;

}

size*=2;

}

cout<<"两路合并排序后的数组是:"<

for(int i=0;i

cout<

cout<

finish6=clock();

}

template

void swap(T &a,T &b)

{

int c;

c=a;

a=b;

b=c;

}

void main()

{

an p;

int rand( void ); //生成函数rand 播种子的srand

int n,ch,x=78;

int *array;

cout<

cout<

cout<<" * 欢 * 迎 * 进 * 入 * 内 * 排 * 序 * 比 * k较 * 系 * 统 * "<

cout<<" 请输入排序个数n!!!!"<

cin>>n;

array=new int[n];

for(int i=0;i

cout<<"随机生成的原数组为:"<

for(i=0;i

cout<

do{

cout<<"请选择排序方法或查看各种排序算法的性能比较!!!!"<

cout<<"<0> 退出"<

cout<<"<1> 直接插入排序"<

cout<<"<2> 希尔排序"<

cout<<"<3> 简单选择排序"<

cout<<"<4> 冒泡排序"<

cout<<"<5> 快速排序"<

cout<<"<6> 两路合并排序"<

cout<<"<7> 查看各种排序算法的性能比较"<

cin>>ch;

switch(ch){

case 1:

p.insertsort(array,n);

cout<<"排序算法名称为:直接插入排序! "<

cout<<"时间复杂度o(n^2)为:O("<

cout<<"数据量大小(多少个)为:"<

cout<<"比较次数为:"<

cout<<"平均移动次数为:"<

cout<<"交换次数为:"<

cout<<"实际执行时间为:"<

break;

case 2:

p.shellsort(array,n);

cout<<"排序算法名称为:希尔排序! "<

cout<<"时间复杂度O(n*log(2*n))为:O("<

cout<<"比较次数为:"<

cout<<"平均移动次数为:"<

cout<<"交换次数为:"<

cout<<"实际执行时间为:"<

break;

case 3:

p.selectsort(array,n);

cout<<"排序算法名称为:简单选择排序! "<

cout<<"时间复杂度o(n^2)为:O("<

cout<<"数据量大小(多少个)为:"<

cout<<"比较次数为:"<

cout<<"平均移动次数为:"<

cout<<"交换次数为:"<

cout<<"实际执行时间为:"<

break;

case 4:

p.bubblesort(array,n);

cout<<"排序算法名称为:冒泡排序! "<

cout<<"时间复杂度o(n^2)为:O("<

cout<<"数据量大小(多少个)为:"<

cout<<"比较次数<为:"<

cout<<"平均移动次数为:"<

cout<<"交换次数为:"<

cout<<"实际执行时间为:"<

break;

case 5:

p.quicksort(array,n);

cout<<"排序算法名称为:快速排序! "<

cout<<"时间复杂度O(nlogn)为:O("<

cout<<"数据量大小(多少个)为:"<

cout<<"比较次数为:"<

cout<<"平均移动次数为:"<

cout<<"交换次数为:"<

cout<<"实际执行时间为:"<

break;

case 6:

p.mergesort(array,n);

cout<<"排序算法名称为: 两路合并排序! "<

cout<<"时间复杂度O(nlog2n)为:O("<

cout<<"数据量大小(多少个)为:"<

cout<<"比较次数为:"<

cout<<"平均移动次数为:"<

cout<<"交换次数为:"<

cout<<"实际执行时间为:"<

break;

case 7:

p.insertsort(array,n);

p.shellsort(array,n);

p.selectsort(array,n);

p.bubblesort(array,n);

p.quicksort(array,n);

p.mergesort(array,n);

cout<<" 排序算法名称|"<

cout<

cout<<"<1> 直接插入排序:"<

cout<<"<2> 希尔排序:"<

etw(8)<

cout<<"<3> 简单选择排序:"<

cout<<"<4> 冒泡排序:"<

cout<<"<5> 快速排序:"<

cout<<"<6> 两路合并排序:"<

cout<

break;

case 0:

x=0;

break;

}

}while(x);

}

七、运行结果分析

1、截图显示:

2、结果分析:

排序方法的选用应该根据具体情况而定,一般应该从以下几个方面综合考虑:

1. 时间复杂性

2. 空间复杂性

从空间复杂性看,所有排序方法分为三类:

归并排序单独属于一类,其空间复杂性为O(n);

快速排序单独属于一类,其空涓丛有晕?em>O(log2n) ~ O(n);

其它排序方法归为一类,其空间复杂性为O(1)。

3. 稳定性

所有排序方法可分为两类,一类是稳定的,包括直接插入排序、起泡排序、简单选择排序和归并排序;另一类是不稳定的,包括希尔排序、快速排序和堆排序。

4. 算法简单性

从算法简单性看,一类是简单算法,包括直接插入排序、简单选择排序和起泡排序;

另一类是改进算法,包括希尔排序、堆排序、快速排序和归并排序,这些算法都很复杂。

5. 记录本身信息量的大小

记录本身信息量越大,移动记录所花费的时间就越多,所以对记录的移动次数较多的算法不利。

排序方法

最好情况

最坏情况

平均情况

直接插入排序: O(n)、 O(n2) 、O(n2)

起泡排序: 0、 O(n2)、 O(n2)

简单选择排序 0、 O(n) 、O(n)

6. 关键码的分布情况

当待排序记录序列为正序时,直接插入排序和起泡排序能达到O(n)的时间复杂度;

对于快速排序而言,这是最坏的情况,此时的时间性能蜕化为O(n2);

简单选择排序、堆排序和归并排序的时间性能不随记录序列中关键码的分布而改变。

八、收获及体会

还有一个收获是知道了什么是面向对象的程序设计方法。选择陌生的C++作为实现语言而不是自己学过的也熟悉的C,是想多掌握一门语言,都说C++面向对象,跟C完全不一样,而我刚开始看C++时就觉得它跟C是一回事,只不过把换成了,把printf()换成了cout,换汤不换药,即使引进了类,也只不过把函数移进C的结构体,换了个关键字而已,现在真正要用它编程了,想要设计一个合理的类,却发现无从下手,然后就看书上的例子,看有关知识点的讲解,然后想如果是C,该怎么写,在尝试了C++的运算符重载、函数重载、类模板、函数模板、错误处理机制后,才发现C++真的跟C有本质的不同,以前把C++当C来学是彻底的错了,C++的这些机制对C来说是质的飞跃,类是数据更安全,数据与对应数据的特定的操作关系更紧密、多态性是编译器为程序员分担了很多工作,程序员再不必仅为不同的数据类型浪费精力写冗余的代码、错误处理机制使程序在出错时得到更适当的处理,而不是程序崩溃甚至是粗暴地结束程序……C++对现实的模拟比C进了一大步,对象很像现实世界的物体,代码易理解、易维护、易使用,而且安全性更好,一个没有错误和警告的C程序用C++编译器编译,可能会发现很多隐蔽的错误,这些错误在一定条件下可能会有灾难性后果,从这点就可以看出C++对C的提升。C++相比C的诸多优越之处,真的只有写过程序才会有体会,用了一年多的C,现在觉得还没有才接触不到一个月的C++习惯,可见C++的易用性。

? 其他:

摸索着用C++做完课程设计,增强了自己的自学能力,这应该是最有用的吧,语言会过时,学习的能力却不会过时。

提交文件清单:

? Main.cpp:程序主文件;

? SortList.h:排序表类模板声明及定义;

? Sort.h:排序类模板声明及定义;

? test文件夹:内含data1.txt,data2.txt,……,data15.txt,是15组测试数据。data1.txt至data10.txt用以测试算法性能随数据量的变化规律,data11.txt至data14.txt用以测试各算法在特殊数据下的表现,data15.txt测试排序表元素大小变化时各算法的耗时特性。Sorted.txt存放排序结果。

数据结构课程设计

1.一元稀疏多项式计算器 [问题描述] 设计一个一元稀疏多项式简单计算器。 [基本要求] 输入并建立多项式; 输出多项式,输出形式为整数序列:n, c1, e1, c2, e2,……, cn, en ,其中n是多项式的项数,ci, ei分别是第i项的系数和指数,序列按指数降序排序; 多项式a和b相加,建立多项式a+b; 多项式a和b相减,建立多项式a-b; [测试数据] (2x+5x8-3.1x11)+(7-5x8+11x9)=(-3.1x11+11x9+2x+7) (6x-3-x+4.4x2-1.2x9)-(-6x-3+5.4x2-x2+7.8x15)=(-7.8x15-1.2x9-x+12x-3) (1+x+x2+x3+x4+x5)+(-x3-x4)=(x5+x2+x+1) (x+x3)+(-x-x3)=0 (x+x2+x3)+0=(x3+x2+x) [实现提示] 用带头结点的单链表存储多项式,多项式的项数存放在头结点中。 2.背包问题的求解 [问题描述] 假设有一个能装入总体积为T的背包和n件体积分别为w1, w2, …,wn的物品,能否从n件物品中挑选若干件恰好装满背包,即使w1+w2+…+wn=T,要求找出所有满足上述条件的解。例如:当T=10,各件物品的体积为{1,8,4,3,5,2}时,可找到下列4组解:(1,4,3,2)、(1,4,5)、(8,2)、(3,5,2) [实现提示] 可利用回溯法的设计思想来解决背包问题。首先,将物品排成一列,然后顺序选取物品转入背包,假设已选取了前i件物品之后背包还没有装满,则继续选取第i+1件物品,若该件物品“太大”不能装入,则弃之而继续选取下一件,直至背包装满为止。但如果在剩余的物品中找不到合适的物品以填满背包,则说明“刚刚”装入背包的那件物品“不合适”,应将它取出“弃之一边”,继续再从“它之后”的物品中选取,如此重复,直至求得满足条件的解,或者无解。 由于回溯求解的规则是“后进先出”因此自然要用到栈。 3.完全二叉树判断 用一个二叉链表存储的二叉树,判断其是否是完全二叉树。 4.最小生成树求解(1人) 任意创建一个图,利用克鲁斯卡尔算法,求出该图的最小生成树。 5.最小生成树求解(1人) 任意创建一个图,利用普里姆算法,求出该图的最小生成树。 6.树状显示二叉树 编写函数displaytree(二叉树的根指针,数据值宽度,屏幕的宽度)输出树的直观示意图。输出的二叉树是垂直打印的,同层的节点在同一行上。 [问题描述] 假设数据宽度datawidth=2,而屏幕宽度screenwidth为64=26,假设节点的输出位置用 (层号,须打印的空格数)来界定。 第0层:根在(0,32)处输出;

C语言程序设计实验报告参考答案

长沙理工大学C语言实验报告参考答案 实验一熟悉C语言程序开发环境及数据描述四、程序清单 1.编写程序实现在屏幕上显示以下结果: Thedressislong Theshoesarebig Thetrousersareblack 答案: #include main() { printf("Thedressislong\n"); printf("Theshoesarebig\n"); printf("Thetrousersareblack\n"); } 2.改错题(将正确程序写在指定位置) 正确的程序为: #include main() {

printf("商品名称价格\n"); printf("TCL电视机¥7600\n"); printf("美的空调¥2000\n"); printf("SunRose键盘¥50.5\n"); } 2.编写程序:a=150,b=20,c=45,编写求a/b、a/c(商)和a%b、a%c(余数)的程序。 答案: #include main() { inta,b,c,x,y; a=150; b=20; c=45; x=a/b; y=a/c; printf("a/b的商=%d\n",x);

printf("a/c的商=%d\n",y); x=a%b; y=a%c; printf("a/b的余数=%d\n",x); printf("a/c的余数=%d\n",y); } 4.设变量a的值为0,b的值为-10,编写程序:当a>b时,将b赋给c;当a<=b时,将a赋给c。(提示:用条件运算符) 答案: #include main() { inta,b,c; a=0; b=-10; c=(a>b)?b:a; printf("c=%d\n",c); }

《C语言课程设计》实验报告

《C语言课程设计》报告 学院:信息工程学院 专业:信息管理与信息系统设计题目:通讯录程序设计班级:2016级一班 学号:201601510138 姓名:张进步 指导教师:杨菲菲 时间:12.24

学生通讯管理系统 1.1 设计目的 学习如何实现一个复杂的信息管理系统——学生通讯管理系统,能够实现老师对学生基本信息的记录、查询、修改。 通过本次学习,读者能够掌握: (1)如何设计主菜单和子菜单,以及各级菜单的响应与返回操作; (2)如何合理设计不同的结构体对系统中多个实体进行封装; (3)如何合理设计多个结构体数组管理不同实体对应的数据; (4)如何对复杂的函数过程进行拆分,用多个子函数进行封装; (5)进一步熟悉文件读取的相关操作。 1.2需求分析 本章的学生信息管理系统的主要功能面向老师,能够实现对学生信息进行录入、修改、查询。 学生信息方面的功能需求如下。 (1)新增学生信息,包括姓名、籍贯、电话号码(2)、电子邮箱。 (2)修改学生信息,可以选择对某个学生的某个属性值进行修改。 (3)查找学生信息,即输入要查找的学生学号,实现学生信息查询。 (4)显示所有学生信息,并以列表的形式清晰呈现。 1.3总体设计 系统功能结构图如图所示;学生信息管理系统 学生信息管理模块:包括4个子模块,分别是学生信息的录入,学生信息的修改,学生信息的查询,学生信息的浏览。

1.4详细设计与实现 1.4.1 预处理及数据结构 1.头文件 本项目涉及4个头文件,其中#include使用字符串的函数的时候需要添加此头文件,#include #include /*system使用的函数*/ #include /*getchar、getch函数使用的头文件*/ #include /*strcmp比较2个字符串是否一样*/ 2.宏定义 LEN sizeof(struct student)表示struct student的长度。DATA是按格式输出结构体的各项数据,能够方便输出操作,减少代码量。 #define_CRT_SECURE_NO_W ARNINGS #include #include #include #include #define LEN sizeof(struct student) #define FORMAT "%-8d%-15s%-15s%-15d%-15d%-15s\n" #define DATA stu[i].numb,stu[i].name,stu[i].nat,stu[i].num1,stu[i].num2,stu[i].mail 3.结构体 利用一个结构体struct student struct student/*定义学生信息结构体*/ { int numb;/*学号*/ char name[15];/*姓名*/ char nat[16];/*籍贯*/ int num1;/*电话号码1*/ int num2;/*电话号码2*/ char mail[40];/*邮箱*/ }; 4.全局变量 分别利用全局变量结构体数组struct student stu[50];来记录所有学生的基本信息,避免程序运行过程中多次初始化,方便各个式子函数调用。 struct student stu[50];

数据结构课程设计报告模板

《数据结构I》三级项目报告 大连东软信息学院 电子工程系 ××××年××月

三级项目报告注意事项 1. 按照项目要求书写项目报告,条理清晰,数据准确; 2. 项目报告严禁抄袭,如发现抄袭的情况,则抄袭者与被抄袭者均 以0分计; 3. 课程结束后报告上交教师,并进行考核与存档。 三级项目报告格式规范 1. 正文:宋体,小四号,首行缩进2字符,1.5倍行距,段前段后 各0行; 2. 图表:居中,图名用五号字,中文用宋体,英文用“Times New Roman”,位于图表下方,须全文统一。

目录 一项目设计方案 (3) 二项目设计分析 (4) 三项目设计成果 (4) 四项目创新创业 (5) 五项目展望 (6) 附录一:项目成员 (6) 附录二:相关代码、电路图等 (6)

一项目设计方案 1、项目名称: 垃圾回收 2、项目要求及系统基本功能: 1)利用数据结构的知识独立完成一个应用系统设计 2)程序正常运行,能够实现基本的数据增加、删除、修改、查询等功能3)体现程序实现算法复杂度优化 4)体现程序的健壮性 二项目设计分析 1、系统预期实现基本功能: (结合本系统预期具体实现,描述出对应基本要求(增、删、改、查等)的具体功能) 1. 2. 3. 4. 5. 6. 7. 2、项目模块功能描述 (基本分为组织实施组织、程序功能模块编写、系统说明撰写等。其中程序功能子模块实现) 模块一: 主要任务:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 模块二: 主要任务:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 模块n: 主要任务:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

数据结构课程设计报告模板

课程设计说明书 课程名称:数据结构 专业:班级: 姓名:学号: 指导教师:成绩: 完成日期:年月日

任务书 题目:黑白棋系统 设计内容及要求: 1.课程设计任务内容 通过玩家与电脑双方的交替下棋,在一个8行8列的方格中,进行棋子的相互交替翻转。反复循环下棋,最后让双方的棋子填满整个方格。再根据循环遍历方格程序,判断玩家与电脑双方的棋子数。进行大小判断,最红给出胜负的一方。并根据y/n选项,判断是否要进行下一局的游戏。 2.课程设计要求 实现黑白两色棋子的对峙 开发环境:vc++6.0 实现目标: (1)熟悉的运用c语言程序编写代码。 (2)能够理清整个程序的运行过程并绘画流程图 (3)了解如何定义局部变量和整体变量; (4)学会上机调试程序,发现问题,并解决 (5)学习使用C++程序来了解游戏原理。 (6)学习用文档书写程序说明

摘要 本文的研究工作在于利用计算机模拟人脑进行下黑白棋,计算机下棋是人工智能领域中的一个研究热点,多年以来,随着计算机技术和人工智能技术的不断发展,计算机下棋的水平得到了长足的进步 该程序的最终胜负是由棋盘上岗双方的棋子的个数来判断的,多的一方为胜,少的一方为负。所以该程序主要运用的战术有削弱对手行动战术、四角优先战术、在游戏开局和中局时,程序采用削弱对手行动力战术,即尽量减少对手能够落子的位置;在游戏终局时则采用最大贪吃战术,即尽可能多的吃掉对手的棋子;而四角优先战术则是贯穿游戏的始终,棋盘的四角围稳定角,不会被对手吃掉,所以这里是兵家的必争之地,在阻止对手进角的同时,自己却又要努力的进角。 关键词:黑白棋;编程;设计

C语言程序设计实验报告(实验大纲+过程)

《C程序设计》实验教学大纲 一、适用范围 大纲适用信息管理专业本科教学使用。 二、课程名称 C程序设计 三、学时数与学分 总学时:90 总学分:4 实验学时:28 实验学分:1 四、教学目的和基本要求 目的:通过C程序设计实验,培养学生对学习程序设计的兴趣,加深对讲授内容的理解,尤其是通过上机来掌握语法规则,使学生全面了解 C 语言的特点,熟练掌握 C 语言程序设计的基本方法和编程技巧。 基本要求:了解和熟悉C语言程序开发的环境;学会上机调试程序,善于发现程序中的错误,并且能很快地排除这些错误,使程序能正确运行,达到实验知识和理论知识的融会贯通。上机实验前,学生必须事先根据题目的内容编好程序,然后在实验时输入程序、调试程序、直至运行结果正确为止,上机结束后,应整理出实验报告。 注:带*的实验项目为选做实验项目 六、教材、讲义及参考书 《C程序设计题解与上机指导》谭浩强主编清华大学出版社 七、实验成绩评定办法 实验成绩=平时实验表现+实验报告。实验成绩占总成绩的20%。 实验成绩以等级形式给出,评定等级分优、良、中、及格、不及格五类。 1、平时考核:上机实验前,学生必须事先根据题目的内容编好程序,然后在实验时输入程序、调试程序、直至运行结果正确为止。在实验中,教师可根据学生编程操作能力、观察和分析及运用知识能力、程序编制正确性以及学生的课堂纪律、实验态度、保持实验室卫生等方面的表现进行综合考核。

2、实验报告:学生实验后应按时完成实验报告。 八、实验教学大纲说明 本大纲共安排28学时的实验,其中带*号实验项目为选做实验项目,实际课时为18学时。实验项目多为设计性实验项目,每个设计性实验项目中都包含数个小的设计性题目,其中带*号的题目为选做题目,有时间和有能力的同学可以选做。 九、实验项目 实验一C程序的运行环境和运行一个C程序的方法 一、实验目的 1.了解Visual C++6.0编译系统的基本操作方法,学会独立使用该系统。 2.了解在该系统上如何编辑、编译、连接和运行一个C程序。 3.通过运行简单的C程序,初步了解C源程序的特点。 二、实验内容 1.用编辑程序,输入教材第一章例1.1程序,并进行编译和运行。应了解所用的系统是用什么命令进行编译和连接运行的。编译和连接后所得到的目标程序的后缀是什么形式的? 2.编写一个C程序,输出以下信息: **************************** very good! **************************** 3.输入并运行教材第一章中例1.3,了解如何在运行时向程序变量输入数据。 实验二数据类型、运算符和表达式 一、实验目的 1.掌握C语言数据类型,熟悉如何定义一个整型、字符型、实型变量,以及对它们赋值的方法,了解以上类型数据输出时所用格式转换符。 2.学会使用C的有关算术运算符,以及包含这些运算符的表达式,特别是自加(++)和自减(--)运算符的使用。 二、实验内容 1.输入并运行以下程序: main( ) { char c1,c2; c1=97;c2=98; pr intf(“%c %c\n”,c1,c2); printf(“%d %d\n”,c1,c2); } 在此基础上 ①将第三行、第四行改为: c1=321;c2=353; 再使之运行,分析其运行结果。 ②将第二行改为: int c1,c2; 再使之运行,分析其运行结果。。 2.输入并运行以下程序:

华中科技大学计算机学院C语言课设实验报告

华中科技大学计算机科学与技术学院 《C语言程序设计》课程设计 实验报告 题目:科研项目信息管理系统 专业:计算机 班级: 学号: 姓名: 成绩: 指导教师:李开 完成日期:2009年10 月20 日

科研项目信息管理系统一、系统功能结构模块图 二、数据结构设计及其用法说明 typedef struct lakey{ char name[30];/*团队名称*/ int total;/*自然科学基金的科研项目数*/ float dudu;/*经费数*/ struct lakey *next; }*plakey;/*统计3中用到的数据结构*/ typedef struct emmey{ char name[30];/*团队名称*/ int teacher;/*老师人数*/ int harden;/*项目数*/ float bizhi;/*比值*/ struct emmey *next; }*pemmey;/*统计4中用到的数据结构*/ typedef struct kPro{ char code[15];/*项目编号*/ char sort;/*项目种类*/ int aking1; char time[8];/*项目时间*/ float dudu;/*项目经费*/ int aking2;

char beiler[15];/*负责人*/ int aking3; char keynoName[30];/*所在团队名称*/ struct kPro *next; }harden,*pHarden; typedef struct Komo{ int teacher;/*老师人数*/ char name[20];/*院系名称*/ int student;/*学生人数*/ float bizhi;/*二者比值*/ struct Komo *next; }*pKomo;/*统计1中用到的数据结构,统计结果放在这个数据结构中*/ typedef struct kTea{ char name[30];/*团队名称*/ char beiler[15];/*负责人*/ int stuNum;/*学生人数*/ int aking2; int coco;/*老师人数*/ char colName[20];/*所在院系的名称*/ int aking1; struct kTea *next; pHarden child; }keyno,*pKeyno; typedef struct edward{ char name[20];/*院系名称*/ int totalnum;/*项目总数*/ int num973;/*973项目数*/ int num863;/*863项目数*/ float amount;/*经费数*/ struct edward *next; }*pedward;/*统计2中用到的数据结构*/ typedef struct kCol{ char name[20];/*院系名称*/ int aking; char beiler[15];/*院系负责人*/ struct kCol *next; char call[15];/*负责人电话号码*/ pKeyno child; }kekey,*pKekey;

数据结构课程设计报告

《数据结构与算法》课程设计报告 学号: 班级序号: 姓名: 指导教师: 成绩: 中国地质大学信息工程学院地理信息系统系 2011年12 月

1.需求规格说明 【问题描述】 利用哈夫曼编码进行对已有文件进行重新编码可以大大提高减小文件大小,减少存储空间。但是,这要求在首先对一个现有文件进行编码行成新的文件,也就是压缩。在文件使用时,再对压缩文件进行解压缩,也就是译码,复原原有文件。试为完成此功能,写一个压缩/解压缩软件。 【基本要求】 一个完整的系统应具有以下功能: (1)压缩准备。读取指定被压缩文件,对文件进行分析,建立哈夫曼树,并给出分析结果(包括数据集大小,每个数据的权值,压缩前后文件的大小),在屏幕上输出。 (2)压缩。利用已建好的哈夫曼树,对文件进行编码,并将哈夫曼编码及文件编码后的数据一起写入文件中,形成压缩文件(*.Haf)。 (3)解压缩。打开已有压缩文件(*.Haf),读取其中的哈夫曼编码,构建哈夫曼树,读取其中的数据,进行译码后,写入文件,完成解压缩。 (4)程序使用命令行方式运行 压缩命令:SZip A Test.Haf 1.doc 解压缩命令:SZip X Test.Haf 2.doc或SZip X Test.Haf 用户输入的命令不正确时,给出提示。 (5)使用面向对象的思想编程,压缩/解压缩、哈夫曼构建功能分别构建类实现。 2.总体分析与设计 (1)设计思想: 1、压缩准备:1> 读文件,逐个读取字符,统计频率 2> 建立哈夫曼树 3> 获得哈弗曼编码 2、压缩过程: 1> 建立一个新文件,将储存权值和字符的对象数组取存储在文件头

C语言程序设计实验报告(数组)

C语言程序设计实验报告(数组) 1实验目的 (1)熟练掌握一维数组,二维数组的定义,初始化和输入、输出方法; (2)熟练掌握字符数组和字符串函数的使用; (3)掌握与数组有关的常用算法(查找、排序等)。 2实验内容 编写函数catStr(char str1[],char str2[])用于进行两个字符串的连接,编写函数lenStr(char str[])用于统计一个字符串的长度,并在主函数中调用。 要求: 1、不允许用strcat()和strlen()字符处理库函数; 2、在主函数以直接初始化的方式输入两个字符串str1和str2.调用函数 strlen()计算并返回两个字符串的长度; 3、调用函数catstr()连接两个字符串(将str2连接在str1后面); 4、调用函数lenstr()计算并返回连接后字符串的长度; 5、在主函数中输入两个原始的字符串及几个字符串的长度,以及处理后字 符串及其长度。

3算法描述流程图

4源程序 #include #include void catStr(char str1[],char str2[]) { int i,j; for (i=0;str1[i]!='\0';i++); for(j=0;str2[j]!='\0';j++) str1[i+j]=str2[j]; str1[i+j]='\0'; } lenStr(char m[] ) {int i;

for (i=0;m[i]!='\0';i++); printf("%d",i); } void main() {char s1[50]="forever",s2[50]="more"; printf("s1=%s,s2=%s",s1,s2); printf("\ns1的长度:"); lenStr(s1); printf("\ns2的长度:"); lenStr(s2); catStr(s1,s2); printf("\n连接后的字符:"); printf("%s\n",s1); printf("连接后字符的长度:"); lenStr(s1); printf("\n"); } 5测试数据 s1=forever, s2=more 6运行结果 7出现问题及解决方法 在输入程序时,少写了半边引号,调试时发现存在错误,找到了错误并加以改正。无论什么事,细心都是必不可少的,认真是解决问题的关键。 8实验心得 通过本次实验,对于函数的定义和声明,数组以及循环语句有了进一步的认识,掌握了字符数组和字符串函数的使用,以及与数组有关的常用算法。此次实验不是调用strlen()和strcat()函数,而是通过自己设计程序来进行字符串的连接以及计量字符串的长度,由此我学会了如何去理清自己的思路来设计程序。

数据结构课程设计报告

《数据结构课程设计》报告 题目:课程设计题目2教学计划编制 班级:700 学号:09070026 姓名:尹煜 完成日期:2011年11月7日

一.需求分析 本课设的任务是根据课程之间的先后的顺序,利用拓扑排序算法,设计出教学计划,在七个学期中合理安排所需修的所有课程。 (一)输入形式:文件 文件中存储课程信息,包括课程名称、课程属性、课程学分以及课程之间先修关系。 格式:第一行给出课程数量。大于等于0的整形,无上限。 之后每行按如下格式“高等数学公共基础必修6.0”将每门课程的具体信息存入文件。 课程基本信息存储完毕后,接着给出各门课程之间的关系,把每门课程看成顶点,则关系即为边。 先给出边的数量。大于等于0的整形。 默认课程编号从0开始依次增加。之后每行按如下格式“1 3”存储。此例即为编号为1的课程与编号为3的课程之间有一条边,而1为3的前驱,即修完1课程才能修3课程。 例: (二)输出形式:1.以图形方式显示有向无环图

2.以文本文件形式存储课程安排 (三)课设的功能 1.根据文本文件中存储的课程信息(课程名称、课程属性、课程学分、课程之间关系) 以图形方式输出课程的有向无环图。 拓展:其显示的有向无环图可进行拖拽、拉伸、修改课程名称等操作。 2.对课程进行拓扑排序。 3.根据拓扑排序结果以及课程的学分安排七个学期的课程。 4.安排好的教学计划可以按图形方式显示也可存储在文本文件里供用户查看。 5.点击信息菜单项可显示本人的学好及姓名“09070026 尹煜” (四)测试数据(见六测设结果)

二.概要设计 数据类型的定义: 1.Class Graph即图类采用邻接矩阵的存储结构。类中定义两个二维数组int[][] matrix 和Object[][] adjMat。第一个用来标记两个顶点之间是否有边,为画图服务。第二个 是为了实现核心算法拓扑排序。 2.ArrayList list用来存储课程信息。DrawInfo类是一个辅助画图的类,其中 包括成员变量num、name、shuxing、xuefen分别代表课程的编号、名称、属性、 学分。ArrayList是一个DrawInfo类型的数组,主要用来在ReadFile、DrawG、DrawC、SaveFile、Window这些类之间辅助参数传递,传递课程信息。 3.Class DrawInfo, 包括int num;String name;String shuxing;float xuefen;四个成员变量。 4.Class Edge包括int from;int to;double weight;三个成员变量。 5.Class Vertex包括int value一个成员变量。 主要程序的流程图: //ReadFile.java

C程序设计实验报告

实验1 C程序运行环境、数据类型、运算符和表达式 一、实验目的 1. 掌握Turbo C集成环境的进入与退出、Turbo C集成环境各种窗口的切换,了解Turbo C集成环境的设置。 2. 掌握C语言源程序的建立、编辑、修改、保存及编译和运行等操作。 3. 学会使用C语言的基本运算符(主要是算术运算符、赋值运算符)及其表达式。 4. 掌握C语言源程序的结构特点与书写规范。 二、实验要求 1. 根据题目要求,进行各种程序测试与验证,并记录结果。 2. 上机调试程序。按各个程序输入计算机,并进行编译和连接,如果在编译、连接中有错误信息,则要根 据这些信息找到程序中的错误所在,然后修改程序,直至正确。 3. 详细记录数据的输入、输出信息,按要求写出实验报告。 三、实验内容 1. 开机;进入Turbo C集成工作环境,了解Turbo C集成工作环境及其菜单的使用,输入如下C语言源程序,并以exl.C存盘。 / *ex1.c* / #include main() { printf("Hello!\n"); printf("This is C program!\n"); } 试编译、连接、运行该程序,并按Alt+F5查看运行结果。 运行结果是: 2. 输入并调试运行以下程序,查看运行结果 (由此结果可以了解到在实验用的微型机上,几种数据类型所占的字节数)。 main() { printf("char\t%d bytes\n",sizeof(char)); printf("short\t%d bytes\n",sizeof(short)); printf("int\t%d bytes\n",sizeof(int)); printf("long\t%d bytes\n",sizeof(long)); printf("float\t%d bytes\n",sizeof(float)); printf("double\t%d bytes\n",sizeof(double)); } 运行结果是: 3. 输入并调试运行以下程序。 main() {int i,j,m,n; i=8;j=10;

89C51单片机课程设计之秒表设计实验报告

单片机课程设计报告 单 片 机 秒 表 系 统 课 程 设 计 班级: 课程名称:秒表设计 成员: 实训地点:北校机房 实训时间:6月4日至6月15日

目录 1课程设计的目的和任务 1.1 单片机秒表课程设计的概述 1.2课程设计思路及描述 1.3 课程设计任务和要求 2硬件与软件的设计流程 2.1系统硬件方案设计 2.2所需元器件 3 程序编写流程及课程设计效果 3.1源程序及注释 3.2原理图分析 3.3课程设计效果 4 心得体会

1. 课程设计的目的和任务 1.1单片机秒表课程设计的概述 一、课程设计题目 秒表系统设计——用STC89C51设计一个4位LED数码显示“秒表”,显示时间为000.0~9分59.9秒,每10毫秒自动加一,每1000毫秒自动加一秒。 二、增加功能 增加一个“复位”按键(即清零),一个“暂停”和“开始”按键。 三、课程设计的难点 单片机电子秒表需要解决几个主要问题,一是有关单片机定时器的使用;二是如何实现LED的动态扫描显示;三是如何对键盘输入进行编程;四是如何进行安装调试。 四、课程设计内容提要 本课程利用单片机的定时器/计数器定时和记数的原理,结合集成电路芯片8051、LED数码管以及课程箱上的按键来设计计时器。将软、硬件有机地结合起来,使得系统能够正确地进行计时,数码管能够正确地显示时间。其中本课程设计有三个开关按键:其中key1按键按下去时开始计时,即秒表开始键,key2按键按下去时数码管清零,复位为“00.00”. key3按键按下去时数码管暂停。 五、课程设计的意义 1)通过本次课程设计加深对单片机课程的全面认识复习和掌握,对单片机课程的 应用进一步的了解。 2)掌握定时器、外部中断的设置和编程原理。 3)通过此次课程设计能够将单片机软硬件结合起来,对程序进行编辑,校验。 4)该课程通过单片机的定时器/计数器定时和计数原理,设计简单的计时器系统, 拥有正确的计时、暂停、清零,并同时可以用数码管显示,在现实生活中应用广泛,具有现实意义 1.2课程设计思路及描述

数据结构课程设计报告

编号 课程设计 题目 1、一元稀疏多项式计算器 2、模拟浏览器操作程序 3、背包问题的求解 4、八皇后问题 二级学院计算机科学与工程学院 专业计算机科学与技术 班级 2011级 37-3班 学生姓名 XX 学号 XXXXXXXXXX 指导教师 XXXXX 评阅教师 时间 1、一元稀疏多项式计算器 【实验内容】 一元稀疏多项式计算器。

【问题描述】 设计一个一元稀疏多项式简单计算器。 【需求分析】 其基本功能包括: (1)输入并建立多项式; (2)输出多项式,输出形式为整数序列为:n,c1,e1,c2,e2,……,cn,en,其中n 是多项式的项数,ci,ei分别是第i项的系数和指数,序列按指数降序排序;(3)多项式a和b相减,建立多项a+b; (4)多项式a和b相减,建立多项式a-b; (5)计算多项式在x处的值; (6)计算器的仿真界面(选做); 【概要设计】 -=ADT=- { void input(Jd *ha,Jd *hb); void sort(dnode *h)

dnode *operate(dnode *a,dnode *b) float qiuzhi(int x,dnode *h) f",sum); printf("\n"); } 【运行结果及分析】 (1)输入多项式:

(2)输出多项式(多项式格式为:c1x^e1+c2x^e2+…+cnx^en): (3)实现多项式a和b相加: (4)实现多项式a和b相减: (5)计算多项式在x处的值:

2、模拟浏览器操作程序 【实验内容】 模拟浏览器操作程序 【问题描述】 标准Web浏览器具有在最近访问的网页间后退和前进的功能。实现这些功能的一个方法是:使用两个栈,追踪可以后退和前进而能够到达的网页。在本题中,要求模拟实现这一功能。 【需求分析】 需要支持以下指令: BACK:将当前页推到“前进栈”的顶部。取出“后退栈”中顶端的页面,使它成为当前页。若“后退栈”是空的,忽略该命令。 FORWARD:将当前页推到“后退栈”的顶部。取出“前进栈”中顶部的页面,使它成为当前页。如果“前进栈”是空的,忽略该命令。 VISIT:将当前页推到“后退栈”的顶部。使URL特指当前页。清空“前进栈”。 QUIT:退出浏览器。 假设浏览器首先加载的网页URL是:http:

数据结构课程设计

《数据结构》 课程设计报告 学号 姓名 班级 指导教师 安徽工业大学计算机学院 2010年6月

建立二叉树和线索二叉树 1.问题描述: 分别用以下方法建立二叉树并用图形显示出来: 1)用先序遍历的输入序列 2)用层次遍历的输入序列 3)用先序和中序遍历的结果 2.设计思路: 分三个方式去实现这个程序的功能,第一个实现先序遍历的输入数列建立二叉树;第二个是用层次遍历的方法输入序列;第三个是用先序和后序遍历的结果来建立二叉树;三种方法建立二叉树后都进行输出。关键是将这三个实现功能的函数写出来就行了;最后对所建立的二叉树进行中序线索化,并对此线索树进行中序遍历(不使用栈)。 3.数据结构设计: 该程序的主要目的就是建立二叉树和线索二叉树,所以采用树的存储方式更能完成这个程序; 结点的结构如下: typedef struct bnode { DataType data; int ltag,rtag; struct bnode *lchild, *rchild; } Bnode, *BTree; 4.功能函数设计: BTree CreateBinTree() 用先序遍历的方法讲二叉树建立; BTree CREATREE() 用队列实现层次二叉树的创建; void CreatBT(); 用先序和中序遍历的结果建立二叉树; void InThread(BTree t,BTree pre) 中序线索化; 5.编码实现: #include #include #define max 100 typedef struct bnode { char data; int ltag,rtag; struct bnode *lchild,*rchild; }Bnode,*BTree; BTree Q[max]; BTree CREATREE() { char ch; int front=1,rear=0;

C+程序设计实验报告-2013

C++程序设计 实验报告 专业计算机科学与技术班级 ____________ 学号 ____________ 姓名 ____________ 指导教师 __许加兵_ 信息与电子工程学院2013年9月-12月

C++程序设计实验报告 专业__________班级__________学号__________姓名__________ 成绩____________ 指导教师____________ 日期____________ 实验1 C++集成开发环境与C++函数程序设计 一、实验目的 1、了解和使用Visual Studio 2010的C++集成开发环境; 2、熟悉Visual Studio 2010环境的基本命令、功能键和常用的菜单命令; 3、学会完整的C++程序开发过程; 4、学习并掌握C++函数程序设计; 二、实验内容 1、安装、了解和使用Visual Studio 2010的C++集成开发环境; 2、通过以下的C++函数程序设计,熟悉Visual Studio 2010环境的基本命令、功能键和常用的菜单命令; 3、通过以下的C++函数程序设计,学会完整的C++程序开发过程; 4、完成以下的C++函数程序设计和调试: 1)编写一个函数print(),将一个整型向量输出到cout。此函数接受两个参数:一个字符串(用于“标记”输出)和一个向量。 2) 编写一个函数,接受一个vector 参数,返回一个vector ,其每个元素值是对应字符串的长度。此函数还找出最长和最短的字符串,以及字典序第一个和最后一个字符串。 三、简要说明C++开发环境安装和配置的过程

数据结构课程设计报告

数据结构课程设计 设计说明书 TSP 问题 起止日期:2016 年 6 月27 日至2016 年7 月 1 日 学生姓名 班级 学号 成绩 指导教师( 签字) 2016 年7 月 1 日

目录 第1 章需求分析.................................................................................1... 1.1 简介 (1) 1.2 系统的开发背景 (1) 1.3 研究现状 (1) 第2 章概要设计.................................................................................2... 2.1 系统开发环境和技术介绍 (2) 2.2 系统需求分析 (2) 2.2.1 总体功能分析 (2) 2.2.2 核心功能分析 (3) 第3 章详细设计...................................................................................4... 3.1 系统开发流程 (4) 3.2 系统模块设计 (4) 3.3 系统结构 (6) 3.2 系统流程图 (6) 第4 章调试分析...................................................................................7... 4.1 程序逻辑调试 (7) 4.2 系统界面调试 (8) 第5 章测试结果...................................................................................9... 5.1 测试环境 (9) 5.2 输入输出测试项目 (9) 5.3 测试结果 (10) 结论.....................................................................................................1..1.. 参考文献................................................................................................1..1. 附录.......................................................................................................1..2..

数据结构课程设计

一、高校社团管理 在高校中,为了丰富学生的业余生活,在学校的帮助下,会成立许多社团,少则几个,多则几十个。为了有效管理这些社团,要求编写程序实现以下功能:1.社团招收新成员; 2.修改社团相应信息 3.老成员离开社团 4.查询社团情况; 5.统计社团成员数; 二、简单文本编辑器 设计一个文本编辑器,允许将文件读到内存中,也就是存储在一个缓冲区中。这个缓冲区将作为一个类的内嵌对象实现。缓冲区中的每行文本是一个字符串,将每行存储在一个双向链表的结点中,要求设计在缓冲区中的行上执行操作和在单个行中的字符上执行字符串操作的编辑命令。 基本要求: 包含如下命令列。可用大写或小写字母输入。 R:读取文本文件到缓冲区中,缓冲区中以前的任何内容将丢失,当前行是文件的第一行; W:将缓冲区的内容写入文本文件,当前行或缓冲区均不改变。 I:插入单个新行,用户必须在恰当的提示符的响应中键入新行并提供其行号。 D:删除当前行并移到下一行; F:可以从第1行开始或从当前行开始,查找包含有用户请求的目标串的第一行; C:将用户请求的字符串修改成用户请求的替换文本,可选择是仅在当前行中有效的还是对全文有效的。 Q:退出编辑器,立即结束; H:显示解释所有命令的帮助消息,程序也接受?作为H的替代者。 N:当前行移到下一行,也就是移到缓冲区的下一行; P:当前行移到上一行,也就是移到缓冲区的上一行;

B:当前行移到开始处,也就是移到缓冲区的第一行; E:当前行移到结束处,也就是移到缓冲区的最后一行; G:当前行移到缓冲区中用户指定的行; V:查看缓冲区的全部内容,打印到终端上。 三、电话客户服务模拟 一个模拟时钟提供接听电话服务的时间(以分钟计),然后这个时钟将循环的 自增1(分钟)直到达到指定时间为止。在时钟的每个"时刻",就会执行一次检查来看看对当前电话服务是否已经完成了,如果是,这个电话从电话队列中删除,模 拟服务将从队列中取出下一个电话(如果有的话)继续开始。同时还需要执行一个检查来判断是否有一个新的电话到达。如果是,其到达时间被记录下来,并为其产生一个随机服务时间,这个服务时间也被记录下来,然后这个电话被放入电话队列中,当客户人员空闲时,按照先来先服务的方式处理这个队列。当时钟到达指定时间时,不会再接听新电话,但是服务将继续,直到队列中所偶电话都得到处理为止。 基本要求: (1)程序需要的初始数据包括:客户服务人员的人数,时间限制,电话的到达速率,平均服务时间 (2)程序产生的结果包括:处理的电话数,每个电话的平均等待时间 四、停车场管理 设停车场是一个可停放n辆车的狭长通道,且只有一个大门可供汽车进出。在停车场内,汽车按到达的先后次序,由北向南依次排列(假设大门在最南端)。若停车场内已停满n辆车,则后来的汽车需在门外的便道上等候,当有车开走时,便道上的第一辆车即可开入。当停车场内某辆车要离开时,在它之后进入的车辆必须先退出停车场为它让路,待该辆车开出大门后,其他车辆再按原次序返回车场。每辆车离开停车场时,应按其停留时间的交费(从进入便道开始计时)。在这里假设汽车从便道上开走时不收取任何费用 基本要求: (1)汽车的输入信息格式为(到达/离去的标识,汽车牌照号码,到达/离去的时间)

C程序设计上实验报告(完整版)

C语言程序设计上机实验报告 学院:机械工程学院 班级:机自161213 姓名:刘昊 学号:20162181310 实验时间:2017年3月6号 任课老师:张锐

C语言程序设计上机实验报告 实验一 一、实验名称: C程序的运行环境和运行C程序的方法 二、实验目的:了解在C编译系统上如何编辑、编译、连接和运行一个C 程序 三、实验内容: (1). 输入并运行一个简单的C程序。 (2). 设计程序,对给定的两个数求和。 (3). 设计程序,对给定的两个数进行比较,然后输出其中较大的数。 四、源程序代码: 代码1: 运行结果1:

程序分析1: 该程序用来判断所输入的整数是否为一个素数,如果一个数能被除了1和它本身整除,还能被其它数整除,那么它就不是一个素数,因此,用for 循环来进行整除过程的简写。 代码2: 运行结果2:

程序分析2: 简单的使用printf()和scanf()函数进行简单的数据运算。代码3: 运行结果3:

程序分析3: 使用if语句进行判断。 五.实验总结 C语言程序设计上机实验报告 实验二 一、实验名称:顺序结构程序设计 二、实验目的:正确使用常用运算符(算术运算符、赋值运算符)的用法, 熟练掌握算术运算符及其表达式,逻辑运算符和逻辑表达式。 三、实验内容: (1). 编写程序,实现小写字母转大写。

(2). 编写程序,实现输入两个不同类型数据后,经过适当的运算(加、减、乘、除)后输出。 (3). 编写程序,计算三角形面积、立方体的体积和表面积、圆的面积和周长。 (4). 编写程序,实现单字符getchar和putchar输入输出。 (5). 编写程序,实现十进制、八进制、十六进制不同数制的输出。 四、源程序代码 代码1: 运行结果1: 程序分析1:

相关主题