软件基础实验报告

更新时间:2024-06-11 14:34:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

XX大学

软件技术基础 实验报告

姓 名:xx

班 级:自动化1105

学 号:xx

成 绩:

2013年 11月 05 日

实验一 vc++6.0基本环境与应用

实验题目:熟悉vc++6.0的实验环境

实验目的:掌握建立vc工程的方法,并学会编写简单的vc程序。 实验内容:

1,熟悉vc++界面。

启动VC++ 6.0中文版以后,屏幕上显示如图所示的开发环境。开发环境界面由标题栏、菜单栏、工具栏、项目工作区窗口、文档窗口、输出窗口及状态栏组成。每个窗口左上角均有最小化、最大化(还原)和关闭按钮。各类窗口相互独立,可进行打开、关闭、移动、极大、极小化控制以及改变窗口大小。

2 建立MFC应用程序

建一个VC++的MFC应用程序的过程可分为5个步骤: (1)创建项目

使用Files菜单下的“New”项,会弹出一个New的对话框,选中Projects选项卡,对话框会列出一系列可以创建的项目类型(见图4.),下列出部分常用类型:

ATL COM AppWizard(创建ATL应用程序) Custom AppWizard(创建自定义的应用程序) Database Project(创建数据库)

DevStudio Add-in Wizard(创建自定义宏)

ISAPI Extension Wizard(创建Internet服务器或过滤器) Makefile(创建Make文件)

MFC AppWizard(dll)(创建MFC动态链接库) MFC AppWizard(exe)(创建MFC可执行程序) MFC AxtiveX ControlWizard(创建MFC控件程序) Win32 Dynamic Link Library(创建Win32动态链接库)

Win32 Application(创建Win32程序)

Win32 Console Application(创建Win32控制台程序)

(2)点选要创建的项目类型,然后在右边的Location框中输入要保存的路径,在Project Name框中输入项目的名字,点击OK,会弹出创建项目向导,可以根据提示选取要创建的项目的细节。最后点Finish按钮。VC++会列出一个将要创建的项目的信息,这时点OK按钮VC++就会自动创建该项目的界面窗口、对话框等的编码文件。

(3) 编制程序

在按需求建立项目之后,应添加资源,设置资源属性,定义类文件,编写函数代码,以及响应事件时所要执行的代码。 编码时可以直接点击项目工作区的相应项目进行编辑。在类视图下可以点击类跳转到源文件相应的行编辑类以及其成员信息。或在资源视图下直接双击相应对象编辑。 (4)保存项目

当创建项目时,VC++会自动生成项目文件。在增加代码时要经常保存项目。保存项目应选File菜单上的Save命令进行保存。有时编码程序时可能会同时改动多个文件这时应注意将改动的文件分别保存或者用File菜单上的Save all命令保存。 (5)建立程序

建立程序包括:编译,链接和运行程序。这行操作可以在快捷栏上用快捷按钮完成。向项目增加代码时,可以建立程序来检查错误和修改代码。

?

编译(Compile)编译是将单个文件生成*.obj文件供链使用同时以

检查程序有无错误。可以单击快捷栏上的编译按钮进行编译。

? 链接(Build)链接是将程序连接生成*.exe文件,以便直接运行。可以单击快捷栏上的链接按钮进行链接。

? 执行(Execute)执行是运行工程查看结果。可以单击快捷栏上的执行按钮执行程序。

visual C++文件后缀名释义

[1] .APS:存放二进制资源的资源辅助中间文件(可加快资源装载速度)。 [2] .BMP:位图资源文件。

[3] .BSC:浏览信息文件。由浏览信息维护工具(BSCMAKE)从原始浏览信息文件(.SBR)中生成,BSC文件可以用来在源代码编辑窗口中进行快速定位。可在project options里去掉Generate Browse Info File,这样可加快编译进度。

[4] .C:用C语言编写的源代码文件。

[5] .CLW:ClassWizard生成的存放类信息的文件。 [6] .CNT:用来定义帮助文件中“Contents”的结构。 [7] .CPP或.CXX:用C++语言编写的源代码文件。 [8] .CUR:光标资源文件。

[9] .DEF:模块定义文件,供生成动态链接库使用。

[10] .DLG:定义对话框资源的独立文件。对于VC工程非必需,因VC一般把对话框资源放在.RC文件中。

[11] .DSP:VC开发环境生成的工程文件,VC4及以前版本使用MAK文件来定义工程。项目文件,文本格式。

[12] .DSW:VC开发环境生成的WorkSpace文件,用来把多个工程组织到一个WorkSpace中,与.dsp相似。

[13] .EXP:由LIB工具从DEF文件生成的输出文件,其中包含了函数和数据项目的输出信息,LINK工具将使用EXP文件来创建动态链接库。只有在编译 DLL时才会生成,记录了DLL文件中的一些信息。

[14] .H、.HPP或.HXX:用C/C++语言编写的头文件,通常用来定义数据类型,声明变量、函数、结构和类。 [15] .HLP:Windows帮助文件。

[16] .HM:在Help工程中,该文件定义了帮助文件与对话框、菜单或其它资源之间ID值的对应关系。

[17] .HPJ:由Help Workshop生成的Help工程文件,用来控制Help文件的生成过程。

[18] .HPG:生成帮助的文件的工程。 [19] .ICO:图标资源文件。

[20] .ILK:连接过程中生成的一种中间文件,只供LINK工具使用。 [21] .INI:配置文件。

[22] .LIB:库文件,LINK工具将使用它来连接各种输入库,以便最终生成EXE文件。

[23] .LIC:用户许可证书文件,使用某些ActiveX控件时需要该文件。 [24] .MAK:即MAKE文件,VC4及以前版本使用的工程文件,用来指定如何建立一个工程。

[25] .MAP:由LINK工具生成的文本文件,包含被连接程序的某些信息,执行文

件的映像信息记录文件。

[26] .MDP:旧版本的项目文件,相当于.dsp。

[27] .NCB:NCB是“No Compile Browser”的缩写,其中存放了供ClassView、 WizardBar和Component Gallery使用的信息,编译工程后会自动生成。当自动完成功能出问题时可删除此文件。

[28] .OBJ:由编译器或汇编工具生成的目标文件,是模块的二进制中间文件。

[29] .ODL:用对象描述语言编写的源代码文件,VC用它来生成TLB文件。 [30] .OLB:带有类型库资源的一种特殊的动态链接库,也叫对象库文件。 [31] .OPT:VC开发环境自动生成的存放WorkSpace中各种选项的文件。工程关于开发环境的参数文件。

[32] .PBI、.PBO和.PBT:由VC的性能分析工具PROFILE生成并使用的三种文件。

[33] .PCH:预编译头文件,较大,由编译器在建立工程时自动生成,其中存放有工程中已经编译的部分代码,在以后建立工程时不再重新编译这些代码,以便加快整个编译过程的速度。

[34] .PDB:程序数据库文件,在建立工程时自动生成,其中存放程序的各种信息,用来加快调试过程的速度。记录了程序有关的一些数据和调试信息。

实验二 线性表的运算

实验题目:线性表的生成、插入和删除等运算

实验目的:掌握线性表的顺序存储结构和链式存储结构及它们在计算机中的实现方法。

实验内容:分别建立一个顺序表和单链表,实现其生成、插入、删除、查找和定位的程序。

(1)按指定长度和输入的相应长度的字符串建立一个顺序表和一个单链表。 (2)在指定位置插入一个元素。例如,设当前链表的顺序为:“ABCD”,则按提示输入所插元素和位置“F,1”,则插入的结构为“FABCD”。

(3)删除指定位置的一个元素。例如,设当前链表的顺序为:“ABCD”,则按提示输入删除位置“1”,则删除的结果为“BCD”。 实验要求:

(1)将程序输入计算机,编译运行。

(2)程序的实际功能与上述所列功能不完全相符,调试程序,找出问题所在,并纠正。 实验报告要求:

(1)将程序输入计算机,编译运行。

(2)程序的实际功能与上述所列功能不完全相符,调试程序,找出问题所在,并纠正。 实验原理:

1、顺序表的生成、插入和删除运算:

顺序表是一种线性表,主要表现形式为一维数组,一旦声明其长度,就不可改变,中间也不允许插入或删除。

2、单链表的生成、插入、和删除运算:

链表有好几种,单链表、循环链表;双向链表。链表能够根据需要变化表的长度,随时插入、删除、添加节点。链表节点由数据域和指针域构成。每一个节点的指针域总是指向下一个节点,如果没有下一个节点,就为空。

1、把附录中的源程序复制到工作空间中,编译出现了一些错误,首先标准化式这样便于检查程序的结构,以及流程。

2、顺序表程序的debug:”for”循环中应该输出10个数,把5改成10 ,此外,加上一些必要的“{}”。

单链表的建立和插入程序,首先要更正单链表的节点结构体(信息域和指针域)。其次最后在屏幕上显示的链表信息总是把最后一个节点漏掉,这是由于“while(q->next!=NULL)”有问题,但是我找不出怎么改,只好在

while(q->next!=NULL)后面添加“cout<data;q=q->next;”把最后一个节点显示出来。

3、总结:C++语言我确实不懂,调一个程序比自己写一个程序要难一些。 正确的程序: 1、顺序表的建立代码

#include #include void main() {

int i;

struct seqlist {

int a[10]; int n; };

typedef struct seqlist *pseqlist; pseqlist p;

p=(pseqlist)malloc(sizeof(struct seqlist)); p->n=0;

for( i=0;i<10;i++) {

}

cin>>p->a[i]; p->n=(p->n)+1; }

for( i=0;i<10;i++) {

cout<a[i]<

cout<<\

运行结果如图

2、单链表的生成、插入、和删除运算: #include #include void main() {

typedef struct node {

int data;

struct node * next; }listnode;

typedef listnode *linklist; listnode * p; linklist head,q;

head=(listnode *)malloc(sizeof(listnode));/*生成头结点*/ head->data=10; head->next=NULL;

p=(listnode *)malloc(sizeof(listnode));/*生成第一个要插入的新结点*/

p->data=20; p->next=NULL; q=head;

while(q->next!=NULL) {

q=q->next; }

q->next=p; p=(listnode *)malloc(sizeof(listnode)); p->data=30; p->next=NULL; q=head;

while(q->next!=NULL) {

q=q->next; }

q->next=p; p=(listnode *)malloc(sizeof(listnode));/* p->data=40; p->next=NULL; q=head;

while(q->next!=NULL) {

q=q->next; }

q->next=p; q=head; do {

cout<data; cout<<\ q=q->next; }

while(q->next!=NULL); cout<data; cout<<\ q=q->next; }

运行结果如图

实验3 查找算法 实验题目:二分查找算法

实验目的:掌握二分查找算法的基本原理,使用vc++6.0语言编写程序。 实验内容:

(1) 查找的概念

查找又称检索,简单讲就是查找表。一个查找过程,就是对于给定的元素K,找出表中关键字值等于的记录。查找成功,确定其关键字值等于K的记录存在;查找失败,确定关键字为K的记录不在表中。

(2)二分查找算法的基本原理

如果顺序查找表的元素按照关键字的值有序存放,那么可利用高效的二分查找来完成查询。条件假定元素按关键字的值升序排列,将给定的数据与有序表中间位置的元素做比较,若两者相等则查找成功;若前者小于后者则在中间位置左边的元素中继续查找;若前者大于后者则在中间位置右边的元素中继续查找。不断重复这一过程直到查找成功,或者直到查找区间缩小为一个元素时却仍未找到目标,则查找失败。

(3)给出一组有序数列,对其中某个数进行二分查找,建立一个.cpp程序。 实验步骤:

① 设置查找区间初值,设下界low = 0,设上界high = length-1。 ② 若low≤high则计算中间位置mid = (low +high)/2。 ③ 若keydata[mid],则设low = mid+1并继续执行步骤②;

若key=data[mid]则查找成功,返回目标元素位置mid+1(位置从1计数)。 ④ 若当low=high时,key!=data[mid]则查找失败,返回0。 实验结果

二分法查找数据源程序:

#include\#include #include int a[10];

int BinSearch(int key,int length) {

int low, high, mid; low = 0;

high =length-1; while (low <= high) {

mid = (low + high) / 2; if(key==a[mid]) {

return mid; } //查找成功 else {

if(key

high = mid-1;

} //继续在前半区间进行查找 else {

low = mid + 1; }

} //继续在后半区间进行查找 }

return 0; //不存在待查元素 }

void main(void) {

int i,k=0,r;

cout<<\请输入一个要查找的数字:\ cin>>k;

for(i=0;i<10;i++) {

a[i]=i; }

r=BinSearch(k,10); if(r!=0) {

cout<

cout<<\查找成功!\ } else {

cout<<\查找失败\ } }

运行结果如图

实验总结和心得:

这次试验,我们简单的了解查找算法,学会了最基本最简单的的查找算法,想要真正掌握查找算法,还需要自己多多练习才行!

实验4 排序算法

实验题目:三种简单排序算法的原理

实验目的:掌握插入排序、选择排序和起泡排序算法的工作原理 实验内容:用vc++6.0建立三个程序,实现三种排序算法。 1.排序的概念

排序是计算机内经常进行的一种操作,其目的是将一组同类型的记录序列调整为按照元素关键字有序的记录序列。例如将学生记录按学号排序,将课程记录按课程编码排序。

排序的形式化定义为:假设含n个记录的序列为{ R1, R2,?,Rn },其相

应的关键字序列为{ K1, K2,?,Kn }。这些关键字相互之间可以进行比较,即在它们之间存在着这样一个关系Kp1≤Kp2≤?≤Kpn,按此固有关系将最初的记录序列重新排列为{ Rp1, Rp2, ?,Rpn }的操作称作排序。 2.插入排序的原理

插入排序方法的基本思想是:将记录分为有序和无序两个序列,假定当插入第k个记录时,前面的R1,R2,?,Rk-1已经排好序,而后面的Rk,Rk+1,?,Rn仍然无序。

这时用Rk的关键字与Rk-1的关键字进行比较,若Rk小于Rk-1则将Rk-1向

后移动一个单元;再用Rk与Rk-2比较,若Rk小于Rk-2则将Rk-2向后移动一个单元,依次比较下去,直到找到插入位置即将Rk插入。初始状态可以认为有序序列为{R1}。 3.选择排序的原理

选择排序的基本思想是:将记录分为有序和无序两个序列,假定第k趟排序时,前面的R1,R2,?,Rk-1已经排好序,而后面的Rk,Rk+1,?,Rn仍然无序,则选择Rk到Rn中的关键字最小的记录与Rk交换,交换后有序序列增加了第k个记录。当第n-1趟选择执行完,待排序记录只剩下1个,就不用再选了。在初始状态可以认为有序序列为空。

4.起泡排序的原理

起泡排序的基本思路是:第一趟排序对全部记录R1,R2,?,Rn自左向右顺次两两比较,若Rk大于Rk+1则交换Rk和Rk+1( k=1, 2,?, n-1)。

第一趟排序完成后Rn成为序列中最大记录。

第二趟排序对序列前n-1个记录采用同样的比较和交换方法,第二趟排序完

成后Rn-1成为序列中仅比Rn小的次大的记录。

第三趟排序对序列前n-2个记录采用同样处理方法。如此做下去,最多做n-1

趟排序,整个序列就排序完成。 实验结果

1、插入法排序代码及结果: #include\#include #include int a[10],b[10]; void insertSort() {

int i,j; int temp; b[0]=a[0];

for(i=1;i<10;i++) {

temp=a[i];

for(j=i;j>0;j--) {

if(temp

b[j]=b[j-1]; b[j-1]=temp; } else {

b[j]=temp; break; } } } }

void main(void)

{

int i;

cout<<\请输入十个数字:\ for(i=0;i<10;i++) {

cin>>a[i]; }

insertSort(); for(i=0;i<10;i++) {

cout<

cout<<\}

运行结果如图

2、选择排序代码及结果:

#include\#include #include int a[10],b[10]; void insertSort() {

int i,j,k; /* 按升序进行选择排序*/ int max;

max=a[0];

for(i=0;i<10;i++) {

for(j=0;j<(10-i);j++) {

if(max>a[i]) {

max=a[i]; k=i; } }

b[i]=max;

for(j=k;j<(9-i);j++) {

a[j]=a[j+1]; } } }

void main(void) {

int i;

cout<<\请输入十个数字:\ for(i=0;i<10;i++) {

cin>>a[i]; }

insertSort(); for(i=0;i<10;i++) {

cout<

cout<<\}

运行结果如图

3、气泡法排序代码及结果:

#include\#include #include int a[10];

void BubleSort(int n) {

int temp;

for(int i=1;i

for(int j=0;ja[j+1])

{ //交换两个相邻元素 temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; }

} //第i大的元素筛选结束 } }

void main(void) {

int i;

cout<<\请输入十个数字:\ for(i=0;i<10;i++) {

cin>>a[i]; }

BubleSort(10); for(i=0;i<10;i++)

{

cout<

cout<<\}

运行结果如图

总结:

排序的方法多种多样,排序问题也是算法中比较常见的。考虑用什么排序算法能把时间复杂度降到最低,或者空间复杂度降到最低,这还需要我们自己更深入的学习。

本文来源:https://www.bwwdw.com/article/tqr6.html

Top