北航计软实验报告一_第1页
北航计软实验报告一_第2页
北航计软实验报告一_第3页
北航计软实验报告一_第4页
免费预览已结束,剩余2页可下载查看

下载本文档

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

文档简介

1、本文格式为word版,下载可任意编辑北航计软实验报告一 计算机软件基础 上机试验报告(一) xxxxxx 班 xxx 1. 试验目的 把握线性表在挨次安排下的插入与删除运算;把握线性表的链式存储结构;把握插入排序的方法;并把握一种产生随机数的方法。 2. 试验内容 1 产生 1000 个 0 至 999 间的随机整数,并以产生的次序存入一个数据文件中。 2 编制一个程序,依次实现以下功能: (1) 定义一个有序(非递减)线性表,其最大容量为 1000,初始时为空。 (2) 从由 1 产生的数据文件中依次取前 n 个随机整数,间续插入到此线性表中,并要求在每次插入后保持线性表的有序性。最终将此有

2、序线性表打印输出。 (3) 在由(2)产生的线性表中,依在 1 中产生的次序逐个将元素删除,直至表空为止。 3 以 n=100 及 n=400 分别运行 2 的程序,并比较它们的运行时间。 4 编写一个程序,用插入排序依次将 1 中产生的 1000 个随机整数链接成有序链表(不转变原随机数在存储空间中的挨次)。 3. 源代码与运行结果 #includestdio.h #includestdlib.h #includetime.h /* 1_1 产生 1000 个 0 至 999 间的随机整数,并以产生的次序存入一个数据文件(1_1.txt)中。 */ main() file *fo=fopen

3、(1_1.txt,w); int i,j; srand(unsigned)time(0); for (i=0;i=999;i+) fprintf(fo,%dn,rand()%1000); fclose(fo); printf(1000 个随机数已输出至名目下 1_1.txt 文件n); system(pause); 输出文件 1_1.txt 如下:(因输出文本长度原因,此处只截了一幅图) #includestdio.h #includestdlib.h #includetime.h /* 1_2 从数据文件(1_1.txt)中读取数据,进行插入排序,然后屏幕输出。 再依序删除。 1_3 以 n

4、=100 及 n=400 分别运行 2 的程序,并比较它们的运行时间。 */ #define n 1000 main() int an=0; int i,j,m,w,num=0; file *fi=fopen(1_1.txt,r); clock_t start,finish; double duration; /part 1 : start=clock(); m=0; fscanf(fi,%d,num); a0=num; w=m; for (j=1;j=n-1;j+) w=m; fscanf(fi,%d,num); while (awnum)(w=0) w-; w+; for(i=m;i=w;

5、i-) ai+1=ai; aw=num; m+; finish=clock(); duration=(double)(finish - start)/clocks_per_sec; printf(执行 %d 个数据插入操作完成!用时:%f 秒,得到线性表如下:n,m+1,duration); for (i=0;in;i+) printf(%d ,ai); fclose(fi); /part 2 : start=clock(); for (j=0;j=n-1;j+) w=0; fscanf(fi,%d,num); while (awnum) w+; for(i=m;im;i+) ai=ai+1;

6、 am=0; m-; finish=clock(); duration=(double)(finish - start)/clocks_per_sec; printf(nn 删除操作完成!用时:%f 秒,得到线性表如下:n,duration); for (i=0;in;i+) printf(%d ,ai); printf(n); fclose(fi); system(pause); 程序运行输出结果如下:(因输出文本长度原因,此处只截了两幅图) #includestdio.h #includestdlib.h /* 1_4 编写一个程序,用插入排序依次将 1_1.txt 中的 1000 个随机

7、整数链接成有序链表 (不转变原随机数在存储空间中的挨次) */ #define n 1000 main() struct data int num; struct data *next; ; struct data *n, *head, *temp; file *fi=fopen(1_1.txt,rt); int i,a=0; n=(struct data*)malloc(sizeof(struct data); n-next=null; fscanf(fi,%d,a); n-num=a; head=n; for (i=1;i=n-1;i+) n=(struct data*)malloc(si

8、zeof(struct data);n-next=null; fscanf(fi,%d,a); n-num=a; temp=head; if (n-num)=(temp-num) / n 为目前最小值 n-next=temp; head=n; else while ( (temp-next)!=null) (n-num) (temp-next)-num) ) temp=temp-next; if (temp-next=null) temp-next=n; / n 为目前最大值 else / n 插入链表 n-next=temp-next; temp-next=n; printf(插入排序完成n

9、); printf(数据最小元素:%dn,head-num); printf(完整数据输出:n); temp=head; while (temp-next!=null) printf(%d ,temp-num); temp=temp-next; fclose(fi); system(pause); 程序运行输出结果如下:(因输出文本长度原因,此处只截了一幅图) 4. 试验总结 通过本次试验,我娴熟把握了线性表在挨次安排下的插入与删除运算,还有链表的存储结构、插入排序的方法,并且学习了产生随机数、文件数据输入输出、取得当前系统时间的方法。 Ø srand 函数用来将系统随机种子设定为当前时间(强制转化为 unsigned),否则得到的伪随机数每次都相同,而 rand()%1000 则用来产生 1-999 的伪随机数。 Ø 在添加 time.h 库函数后,可以使用 clock_t 类型变量和 clock()函数猎取当前时间,从而进行程序运行时间计算(但精度貌似较低)。到每过千分之一秒,clock()函数的返回值就会增加 1,而常量clocks_per_sec,它用来表示一秒钟有多少个时钟计时单元,故 duration=(double)(finish - start)/clocks_per_sec 即可得到程序运行的时间(

温馨提示

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

评论

0/150

提交评论