西电机电院自动化专业软件技术基础上机报告Word文档下载推荐.docx
- 文档编号:22362275
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:42
- 大小:167.84KB
西电机电院自动化专业软件技术基础上机报告Word文档下载推荐.docx
《西电机电院自动化专业软件技术基础上机报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《西电机电院自动化专业软件技术基础上机报告Word文档下载推荐.docx(42页珍藏版)》请在冰豆网上搜索。
首先定义局部结点变量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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电机 自动化 专业 软件技术 基础 上机 报告