第一篇:重庆邮电大学-软件技术基础 实验报告(耿道渠)
《软件技术基础》实验报告
实验名称:顺序表的操作
班 级
学 号
姓 名
第周 星 期2、5,6 节
成 绩
一、实验目的:
1、掌握顺序表结构的实现方式;
2、掌握顺序表常用算法的实现;
3、熟悉利用顺序表解决问题的一般思路;
4、参照给定的顺序表的程序样例,验证给出的顺序表的常见算法,领会顺序表结构的优点和不足。
二、实验内容:
1、设计一个静态数组存储结构的顺序表,要求编程实现如下任务:(1)建立一个顺序表,首先依次输人整数数据元素(个数根据需要键盘给定)。
(2)删除指定位置的数据元素(指定元素位置通过键盘输入),再依次显示删除后的顺序表中的数据元素。
(3)查找指定数据的数据元素(指定数据由键盘输入),若找到则显示位置,若没有找到则显示0。
2、使用顺序表实现一个电话本的管理程序,电话本中的每条记录包括学号、姓名、手机号码和固定电话四项。要求实现菜单、初始化、添加、删除和显示等功能。
三、实验结果:
四、实验中遇到的问题及解决方法:
3451].student_number;cin >> list[j1].tel;cin >> list[j61)){
} system(“cls”);cout << “建立表完毕!” << endl;void delet(TEL * list){
int j,i = 0;cout << “请输入你需要删除的序号” << endl;cin >> j;while(j < 0 || j > num){
} while(list[i].id!= j)i++;cout << “输入错误,请重新输入” << endl;cin >> j;for(j = i;j < num789
《软件技术基础》实验报告
实验名称:链表的操作
(一)班 级
学 号
姓 名
第周 星 期2、5,6
节
成 绩
一、实验目的:
1、掌握单链表结构的实现方式;
2、掌握单链表常用算法的实现。
二、实验内容:
1、设计一个链表,要求编程实现如下任务:
(1)建立一个链表,首先依次输人整数数据元素(个数根据需要键盘给定)。
(2)删除指定值的结点(指定值通过键盘输入),再依次显示删除后的链表中的数据元素。
(3)查找指定值的结点(指定数据由键盘输入),若找到则显示查找成功,若没有找到则显示查找失败。
(4)在第i个节点(i由键盘输入,i=0表示插入的结点作为第1个结点)之后插入一个元素为x的节点。
三、实验结果:
四、实验中遇到的问题及解决方法:
112******26272829303***37381){ s->top++;s->data[s->top] = x;if(size > 0 && size <= MAX_SIZE){
s->stacksize = size;s->top =-1;s->data = new int[size];return 0;}else cout << “初始化长度错误” << endl;return 1;} }else cout << “栈满” << endl;void del(SqStack *s){
}
int x;if(s->top >-1){
x = s->data[s->top];s->top--;cout << “出栈数为:” << x << endl;}else cout << “栈空” << endl;
《软件技术基础》实验报告
实验名称:队列的操作
班 级
学 号
姓 名
第周 星 期2、5,6 节
成 绩
一、实验目的:
掌握队列的定义及其运算,了解队列的应用。
二、实验内容:
1、队列测试和应用。要求:
设计一个主函数对循环队列代码进行测试。测试方法为:依次把数据元素2,4,6,8,10入队,然后出队中的数据元素并在屏幕上显示。
三、实验结果:
2434445464748
四、实验中遇到的问题及解决方法:
对二叉树的查找顺序经常搞错,多看书理解后逐渐错误率降低。
五、实验心得体会:
二叉树的遍历在本书算一个难点,调试过程中经常出错,要对着课本一句句的编写,前方依旧很艰难
附:源程序(自行编写或修改的程序。若为修改程序请注明修改部分的功能,若为书上实例则可不附。)#include
typedef struct node{ datatype data;struct node *lchild,*rchild;
第二篇:软件技术基础实验报告
《软件开发技术基础》
实验报告
学院:XX学院
班级:XX
姓名: XX
学号:XX
《软件开发技术基础》实验报告
实验名称:实验一 顺序表的操作
班 级 学 号 姓 名 第 周 星 期 节 成 绩
一、实验目的:
1、掌握顺序表结构的实现方式;
2、掌握顺序表常用算法的实现;
3、熟悉利用顺序表解决问题的一般思路;
4、参照给定的顺序表的程序样例,验证给出的顺序表的常见算法,领会顺序表结构的优点和不足。
二、实验要求:
1、掌握顺序表的特点及常见算法。
2、提交实验报告,报告内容包括:目的、要求、算法描述、程序结构、主要变量说明、程序清单、调试情况、设计技巧、心得体会。
三、实验内容:
1、设计一个静态数组存储结构的顺序表,要求编程实现如下任务:
(1)建立一个顺序表,首先依次输人整数数据元素(个数根据需要键盘给定)。(2)删除指定位置的数据元素(指定元素位置通过键盘输入),再依次显示删除后的顺序表中的数据元素。
(3)查找指定数据的数据元素(指定数据由键盘输入),若找到则显示位置,若没有找到则显示0。
2、使用顺序表实现一个电话本的管理程序,电话本中的每条记录包括学号、姓名、手机号码和固定电话四项。要求实现菜单、初始化、添加、删除和显示等功能。
四、程序要求:
1、采用顺序表实现,假设该顺序表的数据元素个数在最坏情况下不会超过50个。
2、写出完整的程序并能调试运行。
五、实验结果:
1、顺序表的结果:
2、电话簿的结果:
六、实验中遇到的问题及解决方法:
1.在删除数据的时候如果有两个一样的数时要怎样解决? 解决方法:用while进行判断。
2.在删除操作中,删除函数中的l是指针,所以用->指向,而在主函数中l是结构体,用“.”。3.在查找的时候有一个返回值,而这个返回值是指针,所以在写查找函数的时候要把返回值类型写上。
七、实验心得体会:
一开始不知所措,首先应该有一个大的方向,把主程序编号,再逐步求精,落实到每一个函数的编写。对于c语言要熟练掌握,要熟悉循环等得操作,要熟练掌握顺序表中的插入,删除,查找,的基本函数。在此的基础上灵活使用。附:
1、顺序表的程序: #include
struct Seqlist {
};Seqlist *init(){
} void insert(Seqlist *p){
int num=0;printf(“请输入要键入的个数:”);scanf(“%d”,&num);if(num<1)printf(“键入的数据个数错误!n”);Seqlist *p;p=(Seqlist *)malloc(sizeof(Seqlist));p->length=0;return p;int data[MAXSIZE];int length;else {
printf(“键入数据为:n”);for(;num>0;num--){ p->length++;scanf(“%d”,p->data+p->length-1);
}
}
} if(p->length==MAXSIZE){
} printf(“数组已满n”);break;getchar();void deletee(Seqlist *p){
} int find(Seqlist *p){ int i=0;printf(“请输入要删除元素的位置:”);scanf(“%d”,&i);if(i<1||i>p->length)printf(“表中没有第%d个元素!n”,i);else {
} getchar();for(int j=i;j<=p->length-1;j++)p->data[j-1]=p->data[j];p->length--;
} int x;printf(“请输入要查找的数据:”);scanf(“%d”,&x);for(int i=0;i
length;i++){
} if(i>=p->length)printf(“数组中没有此数据!n”);if(p->data[i]==x){
} printf(“此数据位于第%d个位置n”,i+1);return i+1;getchar();return 0;void display(Seqlist *p){
} int main(void){ Seqlist *p;for(int i=0;i
length;i++)printf(“%-5d”,p->data[i]);putchar('n');getchar();
p=init();char flag;printf(“1-插入 2-删除 3-查找 4-显示 0-退出n”);while(1){
printf(“请输入操作:”);switch(flag=getchar()){ case '1':insert(p);putchar('n');break;case '2':deletee(p);printf(“删除后数据为:”);display(p);putchar('n');getchar();break;case '3':find(p);putchar('n');getchar();break;case '4':printf(“显示数据为:”);display(p);putchar('n');break;case '0':free(p);return 0;}
}
}
2、电话簿的程序: #include
string name;string phonenumber;string phone;contact *next;}CNT;class Phonebook { public:
Phonebook();CNT *Input();CNT *Turn_to_end();void Add();void Delete();void Showmenu();CNT *Find();void Show_item(CNT *p);void Display();void Modification();private: };
Phonebook::Phonebook(){ head=new CNT;CNT *head;
} head->next=NULL;void Phonebook::Show_item(CNT *p){ cout<<“|----姓名----|--电话号码--|-------------地址------------|”< } void Phonebook::Display(){ CNT *p;cout<<“|----姓名----|--电话号码--|-------------地址------------|”< } cout<<“|------------------------|”< CNT *Phonebook::Input(){ } CNT *Phonebook::Turn_to_end(){ } CNT *temp=head;while(temp->next!=NULL){ } cout<<“n”;return temp;temp=temp->next;CNT *temp;temp=new CNT;cout<<“请输入姓名:”;cin>>temp->name;cout<<“请输入手机号码:”;cin>>temp->phonenumber;cout<<“请输入固定电话:”;cin>>temp->phone;temp->next=NULL;cout<<“n”;return temp; void Phonebook::Add(){ } void Phonebook::Delete(){ CNT *p,*q;q=p=head;string data;cout<<“请输入要删除联系人的信息:”;cin>>data;for(p=p->next;p!=NULL&&p->name!=data&&p->phonenumber!=data&&p->phone!=data;CNT *temp,*p;temp=Input();p=Turn_to_end();p->next=temp;cout<<“n”;p=p->next) q=p;if(p!=NULL){ q->next=p->next;delete p; } } else cout<<“该信息不存在”< } CNT *Phonebook::Find(){ CNT *p=head;string data;cout<<“请输入要查找或要修改的联系人的信息:”;cin>>data;for(p=p->next;p!=NULL&&p->name!=data&&p->phonenumber!=data&&p->phone!=data;cout<<“ 电话簿”< if(p!=NULL)Show_item(p);else } cout<<“不存在该信息”< } int main(){ int select;Phonebook phbook;CNT *p;p=Find();if(p!=NULL){ } cout<<“n”;cout<<“请输入姓名:”;cin>>p->name;cout<<“请输入手机号码:”;cin>>p->phonenumber;cout<<“请输入固定电话:”;cin>>p->phone; phbook.Showmenu();while(1){ cout<<“n请输入要选择的操作(0~6):”;cin>>select;getchar();switch(select){ case 0: exit(0);break;case 1: phbook.Add();break;case 2: phbook.Display();break;case 3: phbook.Delete();break;case 4: phbook.Find();break;case 5: phbook.Modification();break; } } } return 0; 实验名称:实验二 链表的操作 (一)班 级 学 号 姓 名 第 周 星 期 节 成 绩 一、实验目的: 1、掌握单链表结构的实现方式; 2、掌握单链表常用算法的实现。 二、实验要求: 1、掌握链表的特点及常见算法。 2、提交实验报告,报告内容包括:目的、要求、算法描述、程序结构、主要变量说明、程序清单、调试情况、设计技巧、心得体会。 三、实验内容: 1、设计一个链表,要求编程实现如下任务: (1)建立一个链表,首先依次输人整数数据元素(个数根据需要键盘给定)。(2)删除指定值的结点(指定值通过键盘输入),再依次显示删除后的链表中的数据元素。 (3)查找指定值的结点(指定数据由键盘输入),若找到则显示查找成功,若没有找到则显示查找失败。 (4)在第i个节点(i由键盘输入,i=0表示插入的结点作为第1个结点)之后插入一个元素为x的节点。 四、程序要求: 1、采用链表实现,假设该链表的结点数在最坏情况下不会超过40个。 2、写出完整的程序并能调试运行。 五、实验结果: 六、实验中遇到的问题及解决方法: 问题:在查找数据时显示的是一样的? 解决方法:在查找函数前要标明返回值的类型lnode *find。 七、实验心得体会: 首先要把书上的关于单链表的定义理解,在这个的基础上使用它。单链表通过结点在数据后附加后继元素的指针信息,可以更灵活的添加,删除,查找,插入,元素。要清楚指针的指向。首先要定义一个头结点,并且指针域要为空。将各个操作分别编写函数,有利于分块使用而且可以多次使用。附: #include { cout<<“请输入数组的个数(小于50):”;cin>>leng;cout<<“请输入数据:”;for(int i=0;i } for(int j=i;j { if(a[i]==temp){ x=i+1;cout<<“你要查找的数是数组的第”< } } if(x==0)cout<<“数组中没有你要查找的数”;} 实验名称:实验三 链表的操作 (二)班 级 学 号 姓 名 第 周 星 期 节 成 绩 一、实验目的: 1、熟悉利用线性链表解决问题的一般思路; 2、参照给定的链表的程序样例,验证给出的链表的常见算法,了解单链表结构的优点和不足。 二、实验要求: 1、熟练掌握链表的使用,并能运用其解决些常规问题。 2、提交实验报告,报告内容包括:目的、要求、算法描述、程序结构、主要变量说明、程序清单、调试情况、设计技巧、心得体会。 三、实验内容: 1、使用链表实现一个电话本的管理程序,电话本中的每条记录包括姓名和电话两项。要求实现菜单、初始化、添加、删除和显示等功能。 四、程序要求: 1、采用链表实现,假设该链表的结点数在最坏情况下不会超过40个。 2、写出完整的程序并能调试运行。 五、实验结果: 六、实验中遇到的问题及解决方法: 1.实验结果版面不好看 解决方法:反复调试执行,每次都对自己不满意的地方进行一些改正。2.怎样比较name与s->name? 解决方法:用string.h中的strcmp函数。3.在传递数据时有问题? 解决方法:返回的值要注意数据类型,是指针还是整数等。 七、实验心得体会: 在应用中可以利用while实现选择,并根据选择用switch来完成选择。为了简化编程,结点插入操作可仅仅在头部进行。单链表的方法使添加操作更加简便。不需要事先分配结点空间,而是在需要时动态的申请,节省了空间。、附: #include void show_menu(){ puts(“1添加 2删除 3查找 4插入 5显示 0退出”);} void show_item(STU *p){ printf(“|编号| 学号 | 姓名 | 电话号码 |n”);printf(“|1 |%-12s|%-12s|%-12s|n”,p->stu_number,p->stu_name,p->stu_phone); } STU *init(){ STU *p;p=(STU *)malloc(sizeof(STU));p->next=NULL;return p;} void display(STU *head){ int i;STU *p;p=head->next;printf(“|编号| 学号 | 姓名 | 电话号码 |n”);for(i=1;p!=NULL;i++,p=p->next){ printf(“|%-4d|%-12s|%-12s|%-12s|n”,i,p->stu_number,p->stu_name,p->stu_phone);} } STU *turn_to_end(STU *head){ STU *p;for(p=head;p->next!=NULL;p=p->next);return p;} STU *putin(){ STU *temp;temp=(STU *)malloc(sizeof(STU));printf(“请输入姓名:”);gets(temp->stu_name);printf(“请输入学号:”);gets(temp->stu_number);printf(“请输入电话号码:”);gets(temp->stu_phone);temp->next=NULL;return temp;} void add(STU *head){ STU *temp,*p;p=head;temp=putin();p=turn_to_end(head);p->next=temp;} STU *find(STU *head,int i){ STU *p;if(i<1) puts(“输入错误”);else { for(p=head;p->next!=NULL&&i>0;i--,p=p->next); if(i>0) { puts(“不存在该结点”); return NULL; } } return p;} STU *find_stu(STU *head,char *data){ STU *p,*q;q=p=head;for(p=head->next;p!=NULL&&strcmp(p->stu_name,data)!=0&&strcmp(p->stu_number,data)!=0&&strcmp(p->stu_phone,data)!=0;p=p->next) q=p;if(p!=NULL) return q;else { puts(“不存在该信息”); return p;} } void delet(STU *head,char *data){ STU *p,*q;p=q=head;q=find_stu(head,data);if(q!=NULL){ p=q->next; q->next=p->next; free(p);} } void insert(STU *head,int i) { STU *p,*q,*temp;q=p=head;if(i<0) puts(“输入错误”);else if(i==0){ temp=putin(); temp->next=p->next; q->next=temp; } else if(find(head,i)!=NULL){ q=find(head,i); p=q->next; temp=putin(); q->next=temp; temp->next=p;} else return;} int main(void){ STU *head,*temp;int selct,node;char data[12];head=init();show_menu();while(1){ printf(“请选择操作:”); scanf(“%d”,&selct); getchar(); switch(selct) { case 1: add(head); putchar('n'); break; case 2: display(head); printf(“请输入要删除学生的学号、姓名或电话号码:”); } scanf(“%s”,data); getchar(); delet(head,data); display(head); putchar('n'); break;case 3: puts(“请输入要查找的数据”); scanf(“%s”,data); getchar(); if(temp=find_stu(head,data)) { show_item(temp->next); } else puts(“ 不存在该信息”); putchar('n'); break;case 4: puts(“请输入要插入结点的位置”); scanf(“%d”,&node); getchar(); insert(head,node); putchar('n'); break;case 5: display(head); putchar('n'); break;case 0: exit(0); break;} } return 0; 实验名称:实验四 栈的操作 班 级 学 号 姓 名 第 周 星 期 节 成 绩 一、实验目的: 掌握栈的的定义和运算,了解栈的应用。 二、实验要求: 1、掌握栈的特点及常见算法。 2、参照给定的栈的程序样例,验证给出的栈的常见算法。 3、提交实验报告,报告内容包括:目的、要求、算法描述、程序结构、主要变量说明、程序清单、调试情况、设计技巧、心得体会。 三、实验内容: 1、堆栈的测试和应用。要求: 设计一个主函数实现对顺序堆栈代码进行测试。测试方法为:依次把数据元素1,3,5,7,9入栈,然后出栈堆栈中的数据元素并在屏幕上显示。 四、程序要求: 1、栈的长度自行确定。 2、重点理解栈的算法思想,能够根据实际情况选择合适的存储结构。 3、写出完整的程序并能调试通过。 五、实验结果: 六、实验中遇到的问题及解决方法: 七、实验心得体会: 栈是后进先出表,只允许在栈顶进行插入和删除。要掌握顺序栈初始化,出栈,入栈的基本程序,在理解得基础上加以运用。要清楚栈和单链表的区别。附: #include void Sqstack::push(){ int temp;if(top>=maxsize-1){ cout<<“堆栈已满”< cout<<“请输入要进栈数的值”< cin>>temp; top++; *(data+top)=temp;} } void Sqstack::pop(int &e){ if(top>-1){ e=*(data+top); top--; cout< cout<<“堆栈已空”;} cout< i=top; for(;i>=0;i--) cout<<*(data+i)<<“ ”;} else cout<<“空栈”;cout< void Sqstack::modify(){ int temp;cout<<“请输入栈的长度”< maxsize=temp;else cout<<“输入错误栈的长度必须>0”< int main(){ Sqstack test;int temp,select;cout<<“1.进栈 2.出栈 3.显示 4修改栈长度 0.退出”< cout<<“请选择操作:”; cin>>select; switch(select) { case 1: test.push(); break; case 2: test.pop(temp); break; case 3: test.display(); break; case 4: test.modify(); break; case 0: exit(0); break; default: cout<<“输入错误按任意键重新输入”< getch(); break; } } return 0;} 实验名称:实验五 队列的操作 班 级 学 号 姓 名 第 周 星 期 节 成 绩 一、实验目的: 掌握队列的定义及其运算,了解队列的应用。 二、实验要求: 1、掌握队列的特点及常见算法。 2、参照给定的队列的程序样例,验证给出的队列的常见算法。 3、提交实验报告,报告内容包括:目的、要求、算法描述、程序结构、主要变量说明、程序清单、调试情况、设计技巧、心得体会。 三、实验内容: 1、队列测试和应用。要求: 设计一个主函数对循环队列代码进行测试。测试方法为:依次把数据元素2,4,6,8,10入队,然后出队中的数据元素并在屏幕上显示。 四、程序要求: 1、队列的长度由自行确定。 2、重点理解队列的算法思想,能够根据实际情况选择合适的存储结构。 3、写出完整的程序并能调试通过。 五、实验结果 六、实验中遇到的问题及解决方法: 七、实验心得体会: 队列是只允许在一端进行删除操作的线性表。在操作时会有假溢出的情况出现,可以将存放队列元素的数组守卫相接,形成循环队列。即:rear=(rear+1)%m;Front=(front+1)%m 附: #include typedef struct Temp { int data; struct Temp *next;}T;class Linksqueue { private: T *front,*rear;public: Linksqueue();void Enqueue();void Dequeue(T *);void display();}; Linksqueue::Linksqueue(){ front=rear=new(T);front->next=NULL;} void Linksqueue::Enqueue(){ T *temp;temp=new(T);cout<<“请输入入队元素的值:”< void Linksqueue::Dequeue(T *s){ T *temp;if(front->next!=NULL){ temp=front; front=front->next; *s=*front; cout<<“出队元素的值:n”< delete temp;} else cout<<“队列已空”< void Linksqueue::display(){ T *temp;if(front==rear) cout<<“空队”< cout<<“队列所有元素为 front-> ”; for(temp=front->next;temp->next!=NULL;temp=temp->next) { cout< } cout< cout<<“->rear”< int main(){ Linksqueue temp;T * a;a=new(T);int select;cout<<“1入队 2出队 3显示 0退出”< cout<<“请选择操作:”; cin>>select; switch(select) { case 1: temp.Enqueue(); break; case 2: temp.Dequeue(a); break; case 3: temp.display(); break; case 0: } exit(0); break;default: cout<<“输入错误按任意键重新输入”< getch(); break;} } return 0; 实验名称:实验六 二叉树的生成与遍历 班 级 学 号 姓 名 第 周 星 期 节 成 绩 一、实验目的: 1、熟悉二叉树节点的定义和生成方式; 2、熟悉二叉树链式结构的生成方式; 3、掌握二叉树遍历算法的实现。 二、实验要求: 1、掌握二叉树的常见算法。 2、参照给定的二叉树的程序样例,验证给出的有关二叉树的常见算法,并实现有关的操作。 3、提交实验报告,报告内容包括:目的、要求、算法描述、程序结构、主要变量说明、程序清单、调试情况、设计技巧、心得体会。 三、实验内容: 1.设计实现二叉树的建立及遍历算法,要求: (1)编写创建二叉链式存储结构的二叉树程序并输出。(2)编写递归实现二叉树的先序、中序、后序遍历算法。 (3)编写主函数测试以上二叉树的创建和遍历函数。2.假设二叉树采用链式存储结构进行存储,编写程序实现二叉树的所有叶子结点的统计并输出统计个数。 四、实验结果: 五、实验中遇到的问题及解决方法: 调试的时候显示没有错误但是程序运行不出来? 在if语句中的相等要用“==”。要注意!! 六、实验心得体会: 二叉树的遍历有先序,中序,后序遍历。这三种遍历都是用递归的形式实现的。而二叉树的插入结点的算法与许多因素有关,我们要在理解二叉树结构的基础上根据需要来编写程序。我在实验中使用的二叉排序树可以作为静态查找表使用也可以作为动态查找表。附: #include front=1;rear=0;printf(“请输入二叉树的各节点,@表示虚节点,#表示节点:n”);scanf(“%c”,&ch);while(ch!='#'){ putchar(ch); s=NULL; if(ch!='@') { s=(bitree *)malloc(sizeof(bitree));s->data=ch; s->lchild=NULL; s->rchild=NULL; } rear++; Q[rear]=s; if(rear==1)root=s; else {if(s&&Q[front]) if(rear%2==0) Q[front]->lchild=s; else Q[front]->rchild=s; if(rear%2==1) front++; }scanf(“%c”,&ch);} return root;} void preorder(bitree *p){ if(p!=NULL){ printf(“%c”,p->data); preorder(p->lchild); preorder(p->rchild);} return;} void inorder(bitree *p){ if(p!=NULL){ inorder(p->lchild); printf(“%c”,p->data); inorder(p->rchild);} return;} void postorder(bitree *p){ if(p!=NULL){ postorder(p->lchild); postorder(p->rchild); printf(“%c”,p->data);} return;} int yzjd(bitree *t){ if(t==NULL)return(0);if(t->lchild==NULL&&t->rchild==NULL)return(1); return(yzjd(t->lchild)+yzjd(t->rchild));} void main(){ bitree *root;root=CREATREE(); printf(“n先序遍历结果如下:n”);preorder(root);printf(“n中序遍历结果如下:n”);inorder(root);printf(“n后序遍历结果如下:n”);postorder(root);printf(“n叶子节点的个数为:%dn”,yzjd(root)); printf(“n”);} 实验名称:实验七 查找算法实现 班 级 学 号 姓 名 第 周 星 期 节 成 绩 一、实验目的: 掌握各种查找算法的特点,测试并验证查找常见算法。 二、实验要求: 1、参照各种查找算法程序样例,验证给出的查找常见算法。 2、提交实验报告,报告内容包括:目的、要求、算法描述、程序结构、主要变量说明、程序清单、调试情况、设计技巧、心得体会。 三、实验内容: 1.建立有序表,采用折半查找实现某一已知的关键字的查找。 2.利用折半查找算法在一个有序表中插入一个元素,并保持表的有序性。 四、实验结果: 五、实验中遇到的问题及解决方法: 六、实验心得体会: 本实验使用的是折半法查找,优点是查找效率高,在编程的时候要设置low,high,mid,分别表示区间和中间位置的值。 附: #include }; Seqlist * init()int data[MAXSIZE];int length; { } void insert(Seqlist *p){ int num=0;printf(“请输入要键入的个数:n”);if(num<1){ } int temp;for(int i=1;i length;i++) for(int j=0;j length-i;j++) if(p->data[j]>p->data[j+1]){ } temp=p->data[j];p->data[j]=p->data[j+1];p->data[j+1]=temp;printf(“请输入数据:n”);for(;num>0;num--){ } p->length++;scanf(“%d”,p->data+p->length-1);if(p->length==MAXSIZE){ } printf(“数组已满n”);break;printf(“输入个数有误n”);else Seqlist *p;p=(Seqlist *)malloc(sizeof(Seqlist));p->length=0;return p;scanf(“%d”,&num); } getchar();int binsearch(Seqlist *p){ } void display(Seqlist *p){ } int main(void){ Seqlist *p;char flag;p=init();int i;for(i=0;i length;i++)printf(“%-5d”,p->data[i]);putchar('n');getchar();int low,high,mid,key;low=0;high=p->length-1;printf(“请输入要查找的数据:n”);scanf(“%d”,&key);getchar();while(low<=high){ } return 0;mid=(low+high)/2;if(key==p->data[mid]){ } else if(key data[mid])high=mid-1;else low=mid+1;printf(“此数据位于第%d位置n”,mid+1);return mid+1; } printf(“1-插入 2-折半法查找 3-显示 0-退出n”);while(1){ } return 0;printf(“请输入操作:”);switch(flag=getchar()){ case '1' : insert(p);break;case '2' : binsearch(p);break;case '3' : printf(“所有数据为:”);display(p);break;case '0' : free(p);return 0;} 实验名称:实验八 排序综合实验 班 级 学 号 姓 名 第 周 星 期 节 成 绩 一、实验目的: 参照各种排序算法程序样例,验证给出的排序常见算法。 二、实验要求: 1、掌握各种排序算法的特点,测试并验证排序的常见算法。 2、提交实验报告,报告内容包括:目的、要求、算法描述、程序结构、主要变量说明、程序清单、调试情况、设计技巧、心得体会。 三、实验内容: 输入一组关键字序列分别实现下列排序,并将上述几种排序的算法编写成菜单,根据输入的数字不同执行对应的排序算法(任选两种排序方法实现)。 1、直接插入排序。 2、希尔排序。 3、冒泡排序。 4、直接选择排序。 5、快速排序。 6、堆排序。 7、归并排序。 8、基数排序。 四、实验结果: 五、实验中遇到的问题及解决方法: 怎样实现待排序数据长度从键盘输入? 解决方法:设置一个n,从键盘输入n的值。 六、实验心得体会: 排序的常用方法有直接插入排序,简单选择排序,冒泡排序,快速排序。我在实验中用了冒泡排序和快速排序,冒泡排序的程序比较简单容易理解而快速排序则比较复杂。快速排序要先划分序列然后建立在划分基础上进行排序,这个排序是由递归实现的。但是快速排序的优点是排序比较快。附: #include Seqlist * init(){ Seqlist *p;p=(Seqlist *)malloc(sizeof(Seqlist));p->length=0;return p;} void insert(Seqlist *p){ int num=0;printf(“请输入要键入的个数:n”);scanf(“%d”,&num);if(num<1) printf(“输入个数有误n”);else{ printf(“请输入数据:n”); for(;num>0;num--) { p->length++; scanf(“%d”,p->data+p->length-1); if(p->length==MAXSIZE) printf(“数组已满n”); } } getchar();} void bublesort(Seqlist *p){ int temp;for(int i=1;i length;i++) for(int j=0;j length-i;j++) if(p->data[j]>p->data[j+1]) { temp=p->data[j]; p->data[j]=p->data[j+1]; p->data[j+1]=temp; } } void insertsort(Seqlist *p){ int i,j,temp;for(i=1;i length;i++){ temp=p->data[i]; j=i; while(j>0&&temp data[j-1]) { p->data[j]=p->data[j-1]; j--; } p->data[j]=temp;} } void display(Seqlist *p){ int i;for(i=0;i length;i++) printf(“%-5d”,p->data[i]);putchar('n');getchar();} int main(void){ Seqlist *p,*q;char flag;p=init();q=(Seqlist *)malloc(sizeof(Seqlist));q->length=0;printf(“1-输入数据 2-直接插入排序 3-冒泡排序 4-显示 0-退出n”);while(1){ printf(“请输入操作:”); switch(flag=getchar()) { case '1' : insert(p);break; case '2' : *q=*p;insertsort(q);printf(“直接插入排序后的数据为:”);display(q);break; case '3' : *q=*p;bublesort(q);printf(“冒泡排序后的数据为:”);display(q);break; case '4' : printf(“原数据为:”);display(p);break; case '0' : free(p);return 0; } } return 0;} 计算机软件技术基础 实验报告 自动化0901班 郝万福 学号:20092395 实验1:线性表的排序与查找 目的: 掌握数据结构的基本概念、线性表的基本操作以及查找和排序方法的设计。内容: 键盘输入一组无序数据,添加到线性表中; 排序线性表并输出排序结果; 键盘输入一个数,并插入到排好序的线性表中(要求插入后的表仍为有序表),输出结果; 键盘输入一个数,并从线性表中删除相应的数据,输出结果。要求: 程序清单; 运行过程及运行结果。 实验代码: /* */ #include “stdafx.h” #include “iostream” #include // 程序实现有各种方法,这里给出一个实例。 // 定义一个线性表 const int nMaxSize = 15;// 最大值 int nLen = 0; // 定义操作 void LSort();void LOut();void LInsert(int n);void LDelete(int n); int main(){ // 输入数据并放入线性表中 printf(“Please input datan”);// std::cout << “Please input datan”;int nIn = 0; // 表中元素个数 int nLinearList[nMaxSize];班级:自动化 0901 班 姓名:郝万福 学号:20092395 编译环境: Visual Studio 2011 Windows 7 x86-64 旗舰版 } for(int i = 0;i <= 9;i++){ } LSort();// 排序线性表 LOut();// 输出结果 scanf(“%d”,&nIn);nLen++; // std::cin >> nIn; nLinearList[i] = nIn;printf(“Please input a data to insert n”);scanf(“%d”,&nIn);LInsert(nIn);LOut();printf(“Please input a data to delete n”);scanf(“%d”,&nIn);LDelete(nIn);LOut();char chTmp;printf(“Please input a char to finish this program.”);chTmp = getch();return 0;// 输入一个数字,并从线性表中删除 // 输入一个数字,并插入到线性表中 void LSort(){ } void LOut(){ // 冒泡排序,由大到小 for(int j=0;j<=10;j++){ } for(int i=0;i<11-j;i++) if(nLinearList[i] int temp=nLinearList[i];nLinearList[i]=nLinearList[i+1];nLinearList[i+1]=temp;} printf(“n”);for(int i = 0;i < nLen;i++){ } } printf(“%d, ”, nLinearList[i]);printf(“n”);void LInsert(int n){ nLen++;nLinearList[nLen] = n;for(int k=0;k<=nLen;k++){for(int l=0;l 实验结果: 实验2:栈与队列的应用 目的: 掌握栈与队列的基本概念、基本操作及设计与应用。内容: 键盘输入算数表达式,并放入队列当中; 应用栈的概念设计表达式求值算法; 输出表达式求值结果; 要求: 程序清单; 运行过程及运行结果。 要求: 实现实验内容的SQL语句,以及输出结果 为检验实验内容的有效性而执行的SQL语句,例如向数据表中插入数据; 检验运行结果(例如插入、删除)的SQL语句,以及输出的结果。 实验代码: /* */ #include “stdafx.h” #include const int MAX_LEN = 10; // 定义一个队列的结构 struct QUEUE { int nMaxSize;int nCount;int nFront;// 最大值 // 个数 // 头 // 字符串的长度 const int MAX_SIZE = 30;// 栈或队的最大元素个数 班级:自动化 0901 班 姓名:郝万福 学号:20092395 编译环境: Visual Studio 2011 Windows 7 x86-64 旗舰版 int nRear;// 尾 char szQueue[MAX_SIZE][MAX_LEN];} QQ;//定义一个栈的结构 struct STACK { // 队列的操作 void InitQueue(QUEUE *q,int nMaxSize){ } void InQueue(QUEUE *q, char *pItem){ } void OutQueue(QUEUE *q, char *pItem){ if(q->nCount == 0){ } q->nCount--;int i;printf(“队列已空n”);getch();return 0;if(q->nMaxSize == q->nCount){ } q->nCount++;int i;for(i=0;i<10;i++){ } q->nFront ++;return;q->szQueue[q->nFront][i]= pItem[i];printf(“队列已满n”);getch();return 0;q->nMaxSize=nMaxSize;q->nCount=0;q->nFront=0;q->nRear=0;int nMaxSize;int nTop;// 最大值 // 栈顶 char szStack[MAX_SIZE][MAX_LEN];} ST; } for(i=0;i<10;i++){ } q->nRear ++;return;pItem[i] = q->szQueue[q->nRear][i];//栈的操作 void InitStack(STACK *s,int nMaxSize){ } void PushStack(STACK *s, char *pItem){ } void PopStack(STACK *s, char *pItem){ if(s->nTop == 0){ } printf(“堆栈已空n”);getch();return 0;if(s->nTop == s->nMaxSize-1){ } for(int i=0;i<10;i++){ } s->nTop++;s->szStack[s->nTop][i]= pItem[i];printf(“堆栈已满n”);getch();return 0;s->nMaxSize=nMaxSize;s->nTop=0;// 栈顶 // 最大值 s->nTop--;for(int i=0;i<10;i++){ } void GetTopStack(STACK *s, char *pItem){ pItem[i] = s->szStack[s->nTop][i];} } for(int i=0;i<10;i++)pItem[i] = s->szStack[s->nTop-1][i];{ } int Priority(char *op);式的值 int main(){ int i=0; char c,temp[10]; // 声明一个队列 QUEUE qq; // 声明OS栈和NS栈 STACK ns,os; // 获得操作符的优先级 // 计算表达void Compute(char *num1, char *num2, char *op, char *chResult); InitQueue(&qq,MAX_SIZE);InitStack(&ns,MAX_SIZE);char x[MAX_LEN];char op[MAX_LEN]; // 定义扫描的表达式 // 栈顶运算符 // 运算结果 InitStack(&os,MAX_SIZE);char num1[MAX_LEN], num2[MAX_LEN];// 两个操作数 char chResult[MAX_LEN];printf(“Input expression please:n”);while((c=getchar())!='n'){ InQueue(&qq,temp);temp[0]=c;InQueue(&qq,temp);i=0; if(isdigit(c)){ } else { for(;i<10;i++){ } temp[i]=' ';temp[i++]=c; }; OutQueue(&qq, x);while(true){ if(isdigit(x[0])) // 是数 // 扫描表达式 // ;压栈 PushStack(&os,“;”);// 表达式p求值 } { PushStack(&ns,x);OutQueue(&qq, x); // 认为是运算符,没有考虑空格等 // 获得OS栈顶运算符 // 运算符的优先级〉栈顶运算符 } else { GetTopStack(&os, op);if(Priority(x)> Priority(op)) } else if(x[0]== ';' && op[0] == ';') } else if(Priority(x)<= Priority(op)) // 不大于栈顶运算符 printf(“最终的答案是%s”,chResult);break; // 扫描结束 PushStack(&os,x);OutQueue(&qq, x);{ { { PopStack(&ns,num1);PopStack(&ns,num2);PopStack(&os,op);Compute(num1, num2, op, chResult);PushStack(&ns,chResult);} } } } getch();return 0;int Priority(char *op){ } void Compute(char *num1, char *num2, char *op, char *chResult){ fNum1 = atof(num1);fNum2 = atof(num2);switch(op[0]){ case '^': fResult = pow(fNum2,fNum1);break;fResult = fNum1*fNum2;break;fResult = fNum2/fNum1;break;fResult = fNum1+fNum2;break;double fNum1,fNum2;double fResult = 0;switch(op[0]){ case '^': nPriority = 3;break;int nPriority = 0;case '*': case '/': nPriority = 2;break;case '+': case '-': } return nPriority;nPriority = 1;break;nPriority = 0;case ';': case '*': case '/': case '+': case '-': } } fResult = fNum2-fNum1;break; //把计算的结果转化为字符串 sprintf(chResult,“%.4f”,fResult);return;实验结果: 实验3:关系数据语言的应用 目的: 掌握SQL基本语句,实现数据库、表的创建,以及增删改和查询操作。内容: 创建数据库MyDB; 创建学生表Stu,内容包括:Sno、4个字符、主键,Sname、10个字符,Sex、2个字符,Age、整数,Birthday、日期型,Class、10个字符; 创建课程表Course,内容包括:Cno、2个字符、主键,Cname、10个字符,Chour、整型; 创建成绩表Score,内容包括: Sno、4个字符、主键,Cno、2个字符、主键,Grade、整型; 向各个数据表中插入多条实验数据,并查看操作后的结果; 实验环境: 操作系统: Linux Ubuntu 10.04 数据库: Mysql 5.1.62 使用字符集: utf-8 实验步骤: 1.$>mysql-u root 进入mysql 命令行。2.显示当前数据库 mysql> show databases;+----------------------+ | Database | +----------------------+ | information_schema | | mysql | | new-mato_development | | new-mato_test | +----------------------+ 4 rows in set(0.03 sec) 3.创建数据库 MyDB mysql> create database MyDB;Query OK, 1 row affected(0.02 sec) mysql> show databases;+----------------------+ | Database | +----------------------+ | information_schema | | MyDB | | mysql | | new-mato_development | | new-mato_test | +----------------------+ 5 rows in set(0.00 sec) 成功建立了数据库 MyDB。 4.创建学生表Stu mysql> create table Stu(-> Sno char(4)primary key,-> Sname char(10),-> Sex char(2),-> Age int(4),-> Birthday datetime,-> Class char(10));Query OK, 0 rows affected(0.08 sec) mysql> desc Stu;+----------+----------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+----------+------+-----+---------+-------+ | Sno | char(4)| NO | PRI | NULL | | | Sname | char(10)| YES | | NULL | | | Sex | char(2)| YES | | NULL | | | Age | int(4)| YES | | NULL | | | Birthday | datetime | YES | | NULL | | | Class | char(10)| YES | | NULL | | +----------+----------+------+-----+---------+-------+ 6 rows in set(0.00 sec) 5.创建课程表 Course mysql> create table Course(-> Cno char(2)primary key,-> Cname char(10),-> Chour int(4));Query OK, 0 rows affected(0.06 sec) mysql> desc Course;+-------+----------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+----------+------+-----+---------+-------+ | Cno | char(2)| NO | PRI | NULL | | | Cname | char(10)| YES | | NULL | | | Chour | int(4)| YES | | NULL | | +-------+----------+------+-----+---------+-------+ 3 rows in set(0.00 sec) 6.创建成绩表 Score mysql> create table Score(-> Sno char(4)primary key,-> Cno char(2),-> Grade int);Query OK, 0 rows affected(0.05 sec) mysql> desc Score;+-------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+-------+ | Sno | char(4)| NO | PRI | NULL | | | Cno | char(2)| YES | | NULL | | | Grade | int(11)| YES | | NULL | | +-------+---------+------+-----+---------+-------+ 3 rows in set(0.00 sec) 7.向各个数据表中插入多条实验数据,查看操作结果。 mysql> insert into Stu values('1','Jobs','man',22,'1991-04-13','G2C2');Query OK, 1 row affected, 2 warnings(0.09 sec) mysql> insert into Stu values('2','Susan','feman',23,'1988-02-03','G2C2');Query OK, 1 row affected, 2 warnings(0.00 sec) mysql> insert into Stu values('3','Bob','man',23,'1979-01-03','G2C2');Query OK, 1 row affected, 2 warnings(0.00 sec) mysql> insert into Score values('1','1',23);Query OK, 1 row affected(0.01 sec) mysql> insert into Score values('1','2',43);Query OK, 1 row affected(0.01 sec) mysql> insert into Score values('1','3',63);Query OK, 1 row affected(0.01 sec) mysql> insert into Score values('1','4',93);Query OK, 1 row affected(0.01 sec) mysql> insert into Score values('2','1',56);Query OK, 1 row affected(0.00 sec) mysql> insert into Score values('3','1',66);Query OK, 1 row affected(0.00 sec) mysql> insert into Course values('1','G2C2',22);Query OK, 1 row affected, 1 warning(0.02 sec) 8.查询学生出生日期 mysql> select Birthday from Stu where Sno='2' OR Sname='Jobs';+---------------------+ | Birthday | +---------------------+ | 1991-04-13 00:00:00 | | 1988-02-03 00:00:00 | +---------------------+ 2 rows in set(0.00 sec) 9.按照学号顺序查询一个班级所有学生: +-------+ | Sname | +-------+ | Jobs | | Susan | | Bob | +-------+ 3 rows in set(0.02 sec) 10.列出学生选择各门课程的成绩。 mysql> select r.Grade,s.Sname,c.Cname from Score r inner join Stu s on r.Sno = s.Sno inner join Course c on c.Cname = s.Class; +-------+-------+-------+ | Grade | Sname | Cname | +-------+-------+-------+ | 23 | Jobs | G2C2 | | 56 | Susan | G2C2 | | 66 | Bob | G2C2 | +-------+-------+-------+ 3 rows in set(0.00 sec) 11.列出有过不及格成绩的学生名单 mysql> select r.Grade,s.Sname,c.Cname from Score r inner join Stu s on r.Sno = s.Sno inner join Course c on c.Cname = s.Class where r.Grade < 60;+-------+-------+-------+ | Grade | Sname | Cname | +-------+-------+-------+ | 23 | Jobs | G2C2 | | 56 | Susan | G2C2 | +-------+-------+-------+ 2 rows in set(0.01 sec) 12.求学生的平均成绩和总成绩。 mysql> select t.Sname, SUM(s.Grade)as ZCJ,AVG(s.Grade)as PJCJ from Score s inner join Stu t on t.Sno = s.Sno where Sname = 'Jobs';+-------+------+---------+ | Sname | ZCJ | PJCJ | +-------+------+---------+ | Jobs | 222 | 55.5000 | +-------+------+---------+ 1 row in set(0.00 sec) 13.找到所有成绩都在85以上的学生。mysql> select t.Sname from Stu t inner join Score s on t.Sno = s.Sno having count(s.Grade >85)= 4; Empty set(0.00 sec) 14.将课程号为01的课程改名为“软件技术” mysql> update Course set Cname = '软件技术' where Cno = 1;Query OK, 1 row affected, 1 warning(0.26 sec)Rows matched: 1 Changed: 1 Warnings: 1 +-----+------------+-------+ | Cno | Cname | Chour | +-----+------------+-------+ | 1 | 软件技术 | 22 | +-----+------------+-------+ 1 row in set(0.04 sec) 15.修改一名学生的姓名/性别/年龄 mysql> update Stu set Sname = 'Ruby',sex = 'f',Age = 31 where Sno = 3;Query OK, 1 row affected(0.03 sec)Rows matched: 1 Changed: 1 Warnings: 0 mysql> select * from Stu where Sname ='Ruby';+-----+-------+------+------+---------------------+-------+ | Sno | Sname | Sex | Age | Birthday | Class | +-----+-------+------+------+---------------------+-------+ | 3 | Ruby | f | 31 | 1978-02-03 00:00:00 | G2C2 | +-----+-------+------+------+---------------------+-------+ 1 row in set(0.00 sec) 16.将成绩为 55-59分的男生的成绩修改为60分。 mysql> update Score s inner join Stu t on t.Sno = s.Sno set s.grade = 60 where t.Sex = 'man' AND s.grade BETWEEN 55 AND 59; 17.删除90年以后,80年以前出生的学生的所有信息成绩。 mysql> DELETE FROM Stu WHERE Birthday > '1990-01-01 00:00:00' OR Birthday < '1980-01-01 00:00:00'; 18.删除一个班上的所有学生 mysql> DELETE FROM Stu WHERE Class = 'G2C2'; 19.删除所有数据表和数据库 mysql> drop table Stu;Query OK, 0 rows affected(0.08 sec) mysql> drop table Course;Query OK, 0 rows affected(0.12 sec) mysql> drop table Score;Query OK, 0 rows affected(0.02 sec) mysql> drop database MyDB;Query OK, 0 rows affected(0.27 sec) mysql> show databases;+----------------------+ | Database | +----------------------+ | information_schema | | mysql | | new-mato_development | | new-mato_test | +----------------------+ 4 rows in set(0.03 sec) 20.退出 mysql> quit Bye 课程名称 操作系统 课程编号 A2130330 实验地点 综合实验楼 A511/A A 512 实验时间 2019--06--10 校外指导教师 校内指导教师 常光辉 实验名称 实验 X X 实验名称 评阅人签字 成绩 一、实验目的 二、实验原理 三、使用仪器、材料 四、实验步骤 五、实验过程原始记录((数据、图表、计算等)) 六、实验结果及分析 七、实验心得体会 实验一 网络命令与使用 实验要求: 1、在窗口中显示网络适配器的物理地址、主机的IP地址、子网掩码以及默认网关 2、向一台电脑无限制的发送数据包,此数据包大小为60000byte 3、查看本地计算机或另一台计算机的ARP高速缓存中的当前内容 4、从一台ftp服务器上下载一份文件 实验过程: 1、在窗口中显示网络适配器的物理地址、主机的IP地址、子网掩码以及默认网关 在命令行输入:ipconfig 命令 2、向一台电脑无限制的发送数据包,此数据包大小为60000byte 在命令行格式:ping [-t] [-a] [-n count] [-l length] [-f] [-i ttl] [-v tos] [-r count] [-s count] [[-j computer-list] | [-k computer-list]] [-w timeout] destination-lis 其中-t表示ping指定计算机直到中断,-l定义发送数据包的长度。 3、查看本地计算机或另一台计算机的ARP高速缓存中的当前内容 命令行格式:ARP-a [inet_addr] [-N if_addr] 4、从一台ftp服务器上下载一份文件 命令行格式:ftp [-v] [-n] [-i] [-d] [-g] [-s:filename] [-a] [-w:windowsize] [computer] 实验心得:通过对网络的基本的命令练习,让我对计算机网络的一些信息和原理有了一些粗略的体会,这些基本命令是以后学习经常会用到的,所以很重要。 实验二 网络服务器建立与使用 实验内容 (1)IIS Web服务器的配置 进入Web站点创建向导 设定Web站点说明 设置Web站点IP地址 设置网页所在目录 设置Web站点起始页 创建测试网页 启动Web服务器,测试。(2)Serv-U FTP服务器的配置 安装Serv-U FTP服务器; 创建用户,绑定发布目录; 设定目录权限; 测试。配置好web服务器后,登陆IP后 可以进入配置HTML网页中 FTP配置结果: 实验心得:本次实验让我学会了IIS的配置,和FTP的配置。 实验三 网络协议分析 一,使用Ethereal分析软件捕获一段Ping命令的数据流,并分析其工作过程: 如图所示: 第一行suorce为172.16.38.9为我的主机名,Destination 为172.16.38.10 为我发送的目的地主机名。后面的request表明我请求发送 第二行suorce为172.16.38.10为目的地的主机名,Destination 为172.16.38.9 为我的主机名。后面的replay表明目的地主机名向我发送信息表明收到了我发的数据包。 下图是我同桌的同学向我发送数据包所记录的信息,其具体分析同上: 下面是命令行的截图: 二,登录ftp://172.16.38.100,并下载一个小文件,使用Ethereal分析软件分析其工作过程。如图所示:在本机和主机之间,有多行信息交换的记录,前两行记录的为:我“open”主机的行为。三四行的意义为:我想主机发送get的信息,我请求下载文件aaa.txt。五六行的意义为:我确认文件在本机的文件名,并且主机向我发送文件。七八九十行为:主机向我发送发送的文件的一些信息,并且我收到了。 下图是cmd命令行: 三,设置显示过滤器,以显示所选部分的捕获数据。 心得体会:通过本次实验,我掌握了如何用Ethereal记录发送和接收数据的信息 实验四 网络设备使用与VLAN配置 实验1 交换机基本操作 实验拓扑图如图: 1.基本配置 交换机配置: PC机设置 PC1: PC2: PC3: PC4: 验证测试: 在各PC机上测试与交换机管理IP地址的连通性: 2.继续配置 将交换机的当前配置信息保存到PC1的TFTP服务器,并命名为config.txt: 在PC1上查看已保存的交换机配置文件: 实验2 VLAN基本配置:交换机端口隔离(Port Vlan) 网络拓扑图: 1.交换机配置: 2.PC机设置: PC1: PC2: PC3: PC4: 验证测试:当完成上面这些配置时,VLAN2内的PC1、PC3可相互ping通,VLAN3内的PC2、PC4也可相互ping通,但两个VLAN间的用户无法相互ping通。 实验3 跨交换机实现VLAN(Tag Vlan)1,网络拓扑图: 1.交换机s1配置: 2.交换机s2配置: 3.PC机设置: PC1: PC2: PC3: PC4: 验证测试:当完成上面这些配置时,VLAN1内的PC1、PC3可相互ping通,VLAN2内的PC2、PC4也可相互ping通,但两个VLAN间的用户无法相互ping通(注:该测试在模拟器上常出错)。 实验4 通过路由器实现VLAN间通信(交换机Switch2950) 网络拓扑图如图所示: 1.交换机s1配置: 2.交换机s2配置: 3.PC机设置: PC1: PC2 PC3: PC4: 注意:当完成上面这些配置时,VLAN1内的PC1、PC3可相互ping通,VLAN2内的PC2、PC4也可相互ping通,但两个VLAN间的用户无法相互ping通。 4.路由器配置: 实验结果:当完成路由器的配置后,PC1、PC2、PC3、PC4可相互ping通,其中PC1、PC3在VLAN1内,IP网段为192.168.1.0,PC2、PC4在VLAN2内,IP网段为192.168.2.0。 实验五 静态路由与缺省路由使用 首先按照实验指导书给出的图,在Boson Network Designer里面设计好网络拓扑图: 然后进入Boson NetSim中进行模拟 路由器A的配置如下: 路由器B的配置如下 然后配置PC 1 和 PC 2的ip、子网掩码、默认网关: 查看路由器配置状态: 这里有点好奇的是为什么Protocol是down? 由于实验课时间有限,没有细想。 结果在ping的时候出问题了!于是尝试性的给路由器B也设置了DEC,再ping就通了。虽然课本还没上到路由器那块知识,但是,在后面作业没有双向设置DEC也能行,猜测应该是DEC只有一端控制即可,目测是软件出问题了吧(片面的理解)…第三篇:计算机软件技术基础实验报告
第四篇:重庆邮电大学实验报告(内页),,副本
第五篇:重庆邮电大学计算机网络实验报告