程 序 实 践 报 告
(网络程序设计)
姓
班
名
级
学
号
指 导 教 师
程 序 实 践 名 称
程 序 实 践 内 容
网 络 程 序 设 计
网 络 程 序 设 计
开 设 学 期
2 0 1 0 - 2 0 1 1 第 二 学 期
开 设 时 间
第 1 8 周 — — 第 2 0 周
评 定 人 签 字
评 定 日 期
报 告 日 期
评 定 成 绩
一、程序实践概述
1、题目名称:
Linux 编程基础
2、时间进度:
18 周周二和周四,共 8 学时
3、开发环境:
Linux 操作系统
二、问题分析
1、功能说明:
①编程实现快速排序算法;
②实现文本文件拷贝函数 copy(f_source, f_target);即实现如下功能:
0
$ ./copy f1 f2
以上程序执行后当前目录会形成一个新的文件 f2,且其内容与 f1 完全一致。
③编写一个程序,要求:输入 N 个学生的学号和成绩,并保存在 stu.txt 文
本文件中,对学生成绩进行排序并把排序后的结果输出到 score.txt 文件中,同时
在屏幕上输出高于平均成绩的学生的学号和成绩。
④编写一个程序找出串 str1 和串 str2 的所有最长公共子串。
2、解决方案:
(1)、定义一个数组,保存待排序的数据;按照快速排序算法,排序之后输
出;
(2)、将文件中的字符顺序读入另一个文件;
(3)、运行时输入 10 个学生的学号和成绩,然后将其保存到 stu.txt 文本文
件中,然后调用冒泡排序算法,将排好序的结果输出到屏幕和 score.txt 文件
中,同时将平均成绩和高于平均成绩的名单输出。
(4)、依次输入串,分别保存在 str1 和 str2 中,然后依次对应比较,若相
等则输出对应的子串。
三、方案设计
1、模块结构:
(1)、定义快排子函数 QuickSort(),此快速排序算法为通用算法;在 main()
函数中调用。
(2)、依次从 file.in 文本文件中读入字符并判断是否为 EFO,若不是将读
取的元素写入 file.out 文本文件中。
(3)、定义一个结构体数组保存学生的学号和成绩,依次输入 N 个学生的
学号和成绩,并写入到 score.txt 文件中,然后求平均值并进行比较将大于平
均值得学生名单输出,最后排序并将排序好的学生名单写入到 stu.txt 文件中。
(4)、首先读入两个字符串,然后依次比较对应位置字符是否相同,若相
同则将其保存在相应的公共子串中。输出公共子串。
2、数据结构:
第 1 和 4 个程序都定义的数据结构是一个一维数组,分别保存的是待排序的
数据、从文件中读取的字符串。
第三个程序使用的数据结构是:
struct
{
int sum;
//总分
1
3.学生平均成绩
4. 字符串比较
3
第四个实验流程图
4、关键算法:
(1)、快速排序:在待排序的 n 个记录中任取一个记录(一般选取第一个),以
它的关键字 k 为准,将剩余的 n-1 个记录分割成两个子集。第一个集中的每一
个记录关键字均小于 k,第二个子集中的每个记录关键字均大于 k。然后将 k 对
应的记录排在两个子集之间。这是一趟排序。递归调用可以完成快速排序。
void quickSort(SqList *lpt,int low,int high,int key) {
int i,j;
int initLow=low,initHigh=high;
while (lowr[i] > lpt->r[key];i--) {
high--;
}
if(high != key)
lpt->r[0] = lpt->r[high];
lpt->r[high] = lpt->r[key];
lpt->r[key] = lpt->r[0];
key = high;
}
for(j = low; lpt->r[j] < lpt->r[key]; j++) {
low++;
}
if(low != key) {
lpt->r[0] = lpt->r[low];
lpt->r[low] = lpt->r[key];
lpt->r[key] = lpt->r[0];
key = low;
}
}
if(key - initLow > 1) {
4
quickSort(lpt,initLow,key-1,initLow);
}
if(initHigh-key > 1) {
quickSort(lpt,key+1,initHigh,key+1);
}
}
(2)、调用 getc 函数和 putc 函数实现文本文件复制:
for(i=0;;i++)
{ if((k=getc(p1))==EOF)
break;
putc(k,p2);
}
(3)、算法在源程序中给出,主要是排序算法。
(4)、两个串进行最大相同字串的输出。
for (i=1;i<=n;i++)
for (j=0;j
maxlength)
{
maxlength = i;
start = j;
}
}
if (maxlength==0)
printf("No Answer");
else
for (i=0;i四、调试记录
由于粗心大意造成了一些低级错误,如在编辑程序时将变量名写错,或是
忘记了句末分号。
五、创新说明:无
6
一、程序实践概述
1、题目名称:
Socket 编程基础
(1)时间服务器
(2)远程文件备份服务器
2、时间进度:
19 周周一到周三共 12 学时。
3、开发环境:
Linux 操作系统
二、问题分析
1、功能说明:
①编程实现时间服务器
编写一个网络时间服务器 timeserver,该服务器能应具有如下功能:
够为网络上的用户提供时间服务,即为网络用户返回服务器的当前时
间;
记录发出请求的网络用户的 IP 地址(保存到文件中),格式如下:
IP 地址
请求时间
编写时间服务客户端 timeclient,该客户端能够向服务器发送时间服务请
求,并把获得的时间返回给用户。
②编程实现远程文件备份服务器
分别采用 TCP 或 UDP 协议编写一个远程数据备份服务器,运行客户端将本
地文件备份到远程的服务器中。
服务器的功能:接受客户端请求,把客户端的文件进行备份(可以备份
到指定的文件夹)。
客户端的功能:与远程服务器进行连接,在连接后把本地的文件发送给
远程备份服务器。
2、解决方案:
(1)、实现时间服务器
通过面向连接的 TCP 协议实现,TCP 提供可靠的数据传输。服务器端打开
端口并监听连接,有连接到来时就与对方建立连接,将对应的 IP 和时间发送给
客服端。
(2)、实现远程文件备份服务器
7