#2009-2010网络程序设计实践报告 下载本文

内容发布更新时间 : 2024/12/25 1:18:58星期一 下面是文章的全部内容请认真阅读。

程 序 实 践 报 告 (网络程序设计)

姓 名 班 级 程序实践名称 程序实践内容 开 设 学 期 开 设 时 间 报告日期 评评 定 成 绩 评 定 日 期 学 号 指 导 教 师 网 络 程 序 设 计 网 络 程 序 设 计 2009-2010第二学期 第16周——第18周 2010年7 月 日 定人签字 东北大学软件学院

一、程序实践概述 1、题目名称:

Linux程序设计基础 2、时间进度:

2010年6月14日星期一到2010年6月20日星期日 3、开发环境:

linux 二、问题分析 1、功能说明:

①编程实现快速排序算法;

②实现文本文件拷贝函数copy(f_source, f_target);即实现如下功能: $ ./copy f1 f2

以上程序执行后当前目录会形成一个新的文件f2,且其内容和f1完全一致。

③编写一个程序,要求:输入N个学生的学号和成绩,并保存在stu.txt文本文件中,对学生成绩进行排序并把排序后的结果输出到score.txt文件中,同时在屏幕上输出高于平均成绩的学生的学号和成绩。

④编写一个程序找出串str1和串str2的所有最长公共子串。 2、解决方案: (1)

将原问题分解为若干个规模更小但结构和原问题相似的子问题。递归地解这些子问题,然后将这些子问题的解组合为原问题的解。 (2)

定义文件指针FILE *fp; 表示fp是指向FILE结构的指针变量,通过fp 即可找存放某个文件信息的结构变量,然后按结构变量提供的信息找到该文件, 实施对文件的操作。 (3)

创建一个结构体储存学生的学号和成绩,利用文件操作写入文档。对成绩进行排序,将大于平均成绩的输出到屏幕。 (4)

创建两个数组,搜索字符串,寻找最大的匹配子串。 三、方案设计 1、模块结构:

模块功能图和模块描述 (1)

在R[low..high]中任选一个记录作为基准(Pivot),以此基准将当前无序区划分为左、右两个较小的子区间R[low..pivotpos-1)和R[pivotpos+1..high],并使左边子区间中所有记录的关键字均小于等于基准记录(不妨记为pivot)的关键字pivot.key,右边的子区间中所有记录的关键字均大于等于pivot.key,而基准记录pivot则位于正确的位置(pivotpos)上,它无须参加后续的排序。

划分的关键是要求出基准记录所在的位置pivotpos。划分的结果可以简单地表示为:

R[low..pivotpos-1].keys≤R[pivotpos].key≤R[pivotpos+1..high].keys 其中low≤pivotpos≤high。 (2) fopen函数

用来打开一个文件,其调用的一般形式为: 文件指针名=fopen(文件名,使用文件方式)。 其中,“文件指针名”必须是被说明为FILE 类型的指针变量,“文件名”是被打开文件的文件名。 “使用文件方式”是指文件的类型和操作要求。“文件名”是字符串常量或字符串数组。 fclose函数

调用的一般形式是: fclose(文件指针);正常完成关闭文件操作时,fclose函数返回值为0。如返回非零值则表示有错误发生。文件的读写对文件的读和写是最常用的文件操作。 (3)

创建一个结构体储存学生的学号和成绩,每个学生的信息都储存在一个数组里。 利用文件操作写入文档。

对成绩进行排序,更新数组信息,将大于平均成绩的输出到屏幕。 (4)

将两个字符串储存在数组里,从首地址开始查找相同字符。如果遇到相同字符则开始记录位置,从该位置开始计数,到不匹配位置。重新搜索,如果最大长度超过记录则更新。 2、数据结构: (1)链表,递归 (2)文件操作

(3)文件操作,数组 (4)数组 3、总体流程: 给出流程图 (1)

第一步:(初始化)设置两个指针i和j,它们的初值分别为区间的下界和上界,即i=low,i=high;选取无序区的第一个记录R[i](即R[low])作为基准记录,并将它保存在变量pivot中;

第二步:令j自high起向左扫描,直到找到第1个关键字小于pivot.key的记录R[j],将R[j])移至i所指的位置上,这相当于R[j]和基准R[i](即pivot)进行了交换,使关键字小于基准关键字pivot.key的记录移到了基准的左边,交换后R[j]中相当于是pivot;然后,令i指针自i+1位置开始向右扫描,直至找到第1个关键字大于pivot.key的记录R[i],将R[i]移到i所指的位置上,这相当于交换了R[i]和基准R[j],使关键字大于基准关键字的记录移到了基准的右边,交换后R[i]中又相当于存放了pivot;接着令指针j自位置j-1开始向左扫描,如此交替改变扫描方向,从两端各自往中间靠拢,直至i=j时,i便是基准pivot最终的位置,将pivot放在此位置上就完成了一次划分。 (2) 打开f1文件

打开f2文件,如果没有将创建

打开成功

将f1写入f2

关闭f1,f2文件 (3) 从屏幕获取学生信 息

写入文件

1