西电机电院自动化专业软件技术基础上机报告Word文档下载推荐.docx

上传人:b****7 文档编号:22362275 上传时间:2023-02-03 格式:DOCX 页数:42 大小:167.84KB
下载 相关 举报
西电机电院自动化专业软件技术基础上机报告Word文档下载推荐.docx_第1页
第1页 / 共42页
西电机电院自动化专业软件技术基础上机报告Word文档下载推荐.docx_第2页
第2页 / 共42页
西电机电院自动化专业软件技术基础上机报告Word文档下载推荐.docx_第3页
第3页 / 共42页
西电机电院自动化专业软件技术基础上机报告Word文档下载推荐.docx_第4页
第4页 / 共42页
西电机电院自动化专业软件技术基础上机报告Word文档下载推荐.docx_第5页
第5页 / 共42页
点击查看更多>>
下载资源
资源描述

西电机电院自动化专业软件技术基础上机报告Word文档下载推荐.docx

《西电机电院自动化专业软件技术基础上机报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《西电机电院自动化专业软件技术基础上机报告Word文档下载推荐.docx(42页珍藏版)》请在冰豆网上搜索。

西电机电院自动化专业软件技术基础上机报告Word文档下载推荐.docx

首先定义局部结点变量p,并且使其指向要打印的链表的头结点,然后将p结点后移,每移动一次就打印当前p的值,直至p的后续结点为NULL。

 

第二题:

因为题目要求数字为1到10,故当数字小于1或者大于10时就停止输入。

(2)打印结点过程:

(3)逆置过程:

首先定义两个结点p、q,p结点指向第一个结点,q结点始终指向p的后续结点然后将p的后续指向q的后续,并且将q的后续指向p,再将头结点指向q,因为p的位置不变,q依次后移,每次移动都将q插在head之后,故可以实现链表的逆置。

第三题:

(1)使用尾插法建立带有头结点的单链表:

当遇到回车符时结束字符的输入。

(2)打印结点过程:

(3)对链表的分类整理:

考虑到分类之后要返回给不同的三个链表,故使用全局变量,在函数调用时直接对全局变量进行操作。

在查找过程中根据ASCII码的不同依次将他们连接在相应的链表之后。

通过将头结点的地址传给PRINT函数就可以将相应的链表打印出来。

第四题:

当遇到price和number均为0时结束输入。

(2)排序过程:

首先定义两个中间结点p、q,p结点指向链表的第一个结点,q结点指向p的后续结点,将q结点的price与p结点的price进行比较,如果p->

price<

q->

price,则将两者进行交换,直至q指向链表的最后一个元素。

然后将p后移,重复以上步骤执行。

(3)插入过程:

在执行插入过程中,要先进行查找操作,即将要插入的元素s的s->

price与原来链表中的元素逐个进行比较,插入到第一个比s->

price大的数据前。

第五题:

方法一:

基本思想:

将字符存入数组,然后对数组进行首尾两端的元素进行比较,若相等,则将前标号后移一位,同时后标号前移一位。

方法二:

采用堆栈的思想:

先将数据存入链表,然后计算链表长度,将链表的前一半压入堆栈,若长度为则需

先将链表当前指向后移一个,在将堆栈数据弹出,与链表后半部分数据进行比较;

若长度为偶数,则直接将链堆、

栈中数据弹出与链表中的后半部分进行比较。

第六题:

(1)树的建立:

树的建立是借用队列先入先出的原则,队尾指向当前输入的结点,对头指向当前在这个结点的双亲结点,当尾结点是偶数时,当前结点作为左孩子与双亲结点链接,当尾结点为奇数时,当前结点作为右孩子与双亲结点进行链接,若当前结点为虚结点(即为‘@’)时,则无须链接。

(2)结点的查找:

只要当前的结点不是虚结点即为有效结点。

(3)叶子结点的查找:

只要当前结点没有左右孩子即可认为该结点是叶子结点。

四、调试分析

在编写程序中使用的集成开发工具:

Code:

blocks12.11

使用的编译器:

GNUGCCcompile

遇见的问题:

(1)Mian函数返回类型在使用void时编译器提示返回类型不正确,在缺省时,main函数默认返回值类型为int,会出现warning信息。

解决办法:

使main函数的返回int类型,然后在最后加上“return1”语句。

(2)在有时括号的配对不正确,导致程序编译时不通过。

养成好的编程习惯,规范的格式有助于查找错误。

(3)在设计算法时经常忽略了特殊元素的处理:

比如在第四题插入新的数据,查找插入位置时,当p指向第一个元素是要进行特殊处理。

在第五题中当字符串的长度是奇数时,将前一半元素压入堆栈以后,要先将p后移一次,在逐个出栈进行比较。

在设计算法之前,应该先将算法进行合理的推演,将所有的情况都要考虑进去,养成严谨的好习惯。

改进之处:

在第一题中,如果链表中的最小值有多个时,只能找到第一个,针对第一个进行处理。

经验与体会:

通过这几次上机,觉得将一个算法设计出来并不是难事,但是能否在计算机上正确运行是最关键的问题,有时编译时并不会报错,但是程序就是不能按照预期的结果运行,这时就需要进行调试,单步调试来观察能够判断算法正误的变量的值,然后对算法进行改进,最终使算法按照预期模式运行。

觉得调试完一个程序之后对算法有了新的认识和更深刻的了解,收获远比编写出一个算法大得多。

五、测试结果

第一题:

当最小值是偶数时:

当最小值是奇数时:

方法二:

当输入为ABCDEFG#时

当输入为ABCD@E

#@六、带注释的源程序

/********************************************************************

设有一个由正整数组成的无序单链表,编写完成下列功能的算法:

********************************************************************/

#include<

stdio.h>

string.h>

malloc.h>

typedefstructnode/*结点声明*/

{

intdata;

structnode*next;

}linklist;

linklist*head,*p;

/*使用尾插法建立单链表,并且以‘0’作为结束符*/

linklist*CREAT()

intdata1;

linklist*head,*s,*r;

head=(linklist*)malloc(sizeof(linklist));

r=head;

printf("

Pleaseinputthenumbers:

\n"

);

scanf("

%d"

&

data1);

while(data1!

=0)

{s=(linklist*)malloc(sizeof(linklist));

s->

data=data1;

r->

next=s;

r=s;

scanf("

}

r->

next=NULL;

returnhead;

/*打印当前链表的所有结点数值*/

voidPRINT(linklist*head)/*打印单链表*/

linklist*p;

intj=0;

p=head->

next;

while(p!

=NULL)

{

j++;

printf("

\nnumber%d=%d"

j,p->

data);

p=p->

/*找到当期单链表中的最小值,并且将该最小值打印出来*/

linklist*SEARCH(linklist*head)

linklist*p,*s;

p=s=head->

while(p->

next!

if((p->

data)<

(s->

data))

s=p;

}

\ntheminimumis:

%d\n"

s->

returns;

/*删除当前结点*/

voidDELETE(linklist*head,linklist*p)/*删除结点p*/

linklist*q;

q=head->

while(q->

=p)

q=q->

q->

next=p->

/*将当前结点和其后面的结点进行交换*/

voidEXCHANG(linklist*p)

intx;

x=p->

data;

p->

data=(p->

next)->

(p->

data=x;

intmain()

linklist*head,*p,*q;

head=CREAT();

//使用尾插法建立链。

TheArrayis:

"

//打印当前链表。

PRINT(head);

p=SEARCH(head);

//查找最小值结点。

q=p->

if(p->

data%2==1)

EXCHANG(p);

//如果最小值为奇数,则将最小值结点与其后继结点交换

else

DELETE(head,q);

//如果最小值为偶数,则删除后继结点。

\n\n\nthefinalnumbersare:

return1;

编一程序:

stdlib.h>

typedefintdatatype;

typedefstructnode

datatypedata;

structnode*next;

//定义结点结构体。

//对结点进行声明。

/*使用尾插法建立带有头结点的链表。

*/

linklist*CREATLSTER()

inta;

linklist*head,*s,*r;

head=(linklist*)malloc(sizeof(linklist));

r=head;

Pleaseinputthenumbersbetween1to10:

a);

while((a>

=1)&

&

(a<

=10))

s=(linklist*)malloc(sizeof(linklist));

data=a;

//最后一个结点的后续结点置空。

returnhead;

/*打印链表:

将元素诸葛打印直至最后一个结点.*/

voidPRINT(linklist*head)

\nnumber%d=%d"

/*将当前链表逆置,并且不开辟新空间,逆置之后将当链表头结点返回*/

linklist*REVERSEL(linklist*head)

linklist*p,*q;

next=q->

next=head->

;

head->

next=q;

linklist*head;

head=CREATLSTER();

//尾插法建立链表。

\n*******************\ntheoriginalnumbersare:

\n"

\n*******************\n"

REVERSEL(head);

//将链表逆置。

\n\n*******************\nthenumbersafterreverselare:

//打印逆置以后的链表。

/******************************************************************************

3.设有一个含有数字、英文字母和其它字符的单链表,试编写一个算法将该单链表拆分为三个单链表,使每个单链

表中只包含同一类的字符,要求利用原表中的结点空间作为这三个表的结点空间,头结点可以另辟空间。

******************************************************************************/

typedefchardatatype;

//定义结点结构体‘

linklist*NUM,*CHAR,*STRING,*head;

//定义全局变量,以便函数调用之后能够将调用结果返回

linklist*CREATLSTER()//创建链表,将数据读入

datatypech;

linklist*head,*r,*s;

head=(linklist*)malloc(sizeof(linklist));

ch=getchar();

while(ch!

='

\n'

s=(linklist*)malloc(sizeof(linklist));

data=ch;

/*删除头结点为head的链表中的结点p*/

linklist*DELETE(linklist*p,linklist*head)

linklist*q=head;

returnp;

/*对链表数据进行查找分类*/

voidFIND(linklist*head)

linklist*s_NUM=NUM,*s_CHAR=CHAR,*s_STRING=STRING;

//定义局部变量,以便将结果传给全局变量

s_NUM->

s_CHAR->

s_STRING->

data>

0'

)&

(p->

9'

))//将数字结点链接在s_NUM之后

next=DELETE(p,head);

s_NUM=s_NUM->

elseif((p->

A'

z'

))

//将字母结点链接在s_CHAR之后

s_CHAR=s_CHAR->

s_STRING=s_STRING->

//将其他字符结点链接在s_STRING之后

/*打印当前链表*/

voidPRINT(linklist*head)

\nVALUE%d=%c"

//为head结点分配空间

NUM=(linklist*)malloc(sizeof(linklist));

//为数字链表的头结点分配空间。

CHAR=(linklist*)malloc(sizeof(linklist));

//为字母链表的头结点分配空间。

STRING=(linklist*)malloc(sizeof(linklist));

//为其他字符链表的头结点分配空间。

\n*********************\nPleaseinputcharacters:

//尾插法建立链表

\n*********************\n"

\n\n*********************\ntheinputare:

//打印当前链表

FIND(head);

//为当前链表整理分类

\n\n*********************\nthenumbersare:

PRINT(NUM);

//打印数字链表

\n\n*********************\nthecharactersare:

PRINT(CHAR);

//打印字母链表

\n\n*********************\ntheothersare:

PRINT(STRING);

//打印其他字符链表

return

(1);

某百货公司仓库中有一批电视机,试按价格从高到低的次序建立一个循环链表,每个结点有价格、数量和指针三个域。

intnumber;

floatprice;

/*************************************************************

用尾插法创建链表

**************************************************************/

intnumber1;

floatprice1;

PleaseInputthenumberAndThePrice:

%d%f"

number1,&

price1);

while((number1!

=0)&

(price1!

=0))

number=number1;

price=pr

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1