扬州大学电子实习实验报告Word格式.docx

上传人:b****6 文档编号:15860343 上传时间:2022-11-16 格式:DOCX 页数:16 大小:23.59KB
下载 相关 举报
扬州大学电子实习实验报告Word格式.docx_第1页
第1页 / 共16页
扬州大学电子实习实验报告Word格式.docx_第2页
第2页 / 共16页
扬州大学电子实习实验报告Word格式.docx_第3页
第3页 / 共16页
扬州大学电子实习实验报告Word格式.docx_第4页
第4页 / 共16页
扬州大学电子实习实验报告Word格式.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

扬州大学电子实习实验报告Word格式.docx

《扬州大学电子实习实验报告Word格式.docx》由会员分享,可在线阅读,更多相关《扬州大学电子实习实验报告Word格式.docx(16页珍藏版)》请在冰豆网上搜索。

扬州大学电子实习实验报告Word格式.docx

);

scanf("

%d%d%d"

&

a,&

b,&

c);

if(a>

b)

{t=a,a=b,b=t;

}//交换a,b的值

c)

{t=a,a=c,c=t;

}//交换a,c的值

if(b>

{t=b,b=c,c=t;

}//交换b,c的值

%d,%d,%d\n"

a,b,c);

getch();

}

(2).

{int*p1,*p2,*p3,*p,a,b,c;

p1=&

a;

//把3个整数分别赋给3个指针变量

p2=&

b;

p3=&

c;

if(*p1>

*p2)

{p=p1;

p1=p2;

p2=p;

}//a>

b,交换a和b的值

*p3)

p1=p3;

p3=p;

c,交换a和c的值

if(*p2>

{p=p2;

p2=p3;

}//b>

c,交换b和c的值

a=%d,b=%d,c=%d\n"

//交换前

%d,%d,%d"

*p1,*p2,*p3);

//交换后

调试结果:

(1)输入:

194

输出:

149

(2)输入:

结果分析:

赋地址时,不要求左值原来必须指向某个内存单元。

而赋数据则要求指针必须指向某个内存单元,给其赋值只是填充了该内存单元的内容。

二、

掌握冒泡、选择、插入这三种排序。

输入十个整数,排序后按从小到大在屏幕上打印输出。

(冒泡、选择、插入;

比较这三种算法的优劣)。

1、冒泡法:

#include<

stdio.h>

{ints[10],t,i,j,x;

input10numbers:

\n"

for(t=0;

t<

10;

t++)

%d"

s[t]);

for(i=0;

i<

9;

i++)//外循环控制排序趟数,n个数排n-1趟

for(j=0;

j<

9-i;

j++)//内循环每趟比较的次数

if(s[j]>

s[j+1])

{t=s[j];

s[j]=s[j+1];

s[j+1]=t;

}//相邻两关键字记录若逆序,则交换

theresultis:

\n"

j++)

%-4d"

s[j]);

2、选择

voidsort(inta[],intn)

{inti,j,t,m;

n;

i++)//外循环控制趟数

{t=i;

//假设当前趟的第一个数为最值,记在t中

for(j=i+1;

j++)//从下一个数到最后一个数之间找最值

{if(a[t]>

a[j])//若其后有比最值更大的

{t=j;

}//则将其下标记在t中

}

if(t!

=i)//若t不为最初的i值,说明在其后找到比其更大的数

{m=a[i];

a[i]=a[t];

a[t]=m;

}//则交换最值和当前序列的第一个数

voidmain()

{inta[10],i;

i++)

%3d"

a[i]);

sort(a,10);

i++)

a[i]);

3、插入法:

#include<

{inta[10],i,j,t;

Pleaseinput10numbers:

"

for(i=1;

i++)//外循环控制趟数,n个数从第2个数开始到最后共进行n-1次插入

{t=a[i];

//将待插入数暂存于变量t中

for(j=i-1;

j>

=0&

&

a[j];

j--)//在有序序列中寻找插入位置

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

//若未找到插入位置,则当前元素后移一个位置

a[j+1]=t;

}/找到插入位置,完成插入/

printf("

arrayis:

for(i=0;

getch();

输入:

1876543290

0123456789

冒泡排序基本思想:

对无序表进行扫描,当发现相邻两个关键字逆序时就进行交换,第一次扫描后就将最大关键字记录沉到底部,而关键字较小的记录则像气泡一样逐渐上浮,然后对剩下的记录再进行扫描,直到某次扫描时不再发生交换,则排序完成。

选择排序基本思想:

每趟是选出一个最值确定其在结果序列中的位置,确定元素的位置是从前往后,而每趟最多进行一次交换,其余元素的相对位置不变。

可进行降序排序或升序排序。

算法分析:

定义外部n-1次循环,假设第一个为最值,放在参数中,在从下一个数以后找最值若后面有比前面假设的最值更大的就放在k中,然后在对k进行分析。

若k部位最初的i值。

也就是假设的i不是最值,那么就交换最值和当前序列的第一个数。

插入排序基本思想:

每趟从无序序列中取出第一个数插入到有序序列的合适位置,元素的最终位置在最后一趟插入后才能确定位置。

也可是先用循环查找插入位置(可从前往后或从后往前),再将插入位置之后的元素(有序列中)逐个后移一个位置,最后完成插入。

该算法的特点是在寻找插入位置的同时完成元素的移动。

因为元素的移动必须从后往前,则可将两个操作结合在一起完成,提高算法效率。

仍可进行升序或降序排序。

冒泡排序:

优点:

稳定,比较次数已知;

缺点:

慢,每次只能移动相邻两个数据,移动数据的次数多。

选择排序:

稳定,比较次数与冒泡排序一样,数据移动次数比冒泡排序少;

缺点:

相对之下还是慢。

插入排序:

稳定,快;

比较次数不一定,比较次数越少,插入点后的数据移动越多,特别是当数据总量庞大的时候,但用链表可以解决这个问题。

3、

掌握链表的创建和排序。

创建一个包含十个数值的链表(带头节点或不带头节点),按从小到大的顺序排好(可先创建后排序,或边创建边排序),在屏幕上打印输出。

stdlib.h>

typedefstructnode*link;

structnode

{

intid;

linknext;

};

linknew_node(intid,linknext)

linkt=malloc(sizeoft);

t->

id=id;

next=next;

returnt;

linkmyinsert(intid,linkhead)//插入节点函数

linkx,y,t;

t=new_node(id,NULL);

for(x=y=head;

y;

x=y,y=y->

next)

if(y->

id>

=t->

id)

break;

if(y==head)//在首节点位置

{

next=head;

head=t;

else//在中间位置

x->

next=t;

next=y;

returnhead;

voidmyprintf(linkhead)

linkx;

for(x=head;

x;

x=x->

%d\n"

x->

id);

intmain(void)

inta[10]={99,123,33,5,78,132,38,65,400,23};

inti;

linkhead=NULL;

for(i=0;

i<

10;

++i)

head=myinsert(a[i],head);

myprintf(head);

return0;

5233338657899123132400

链表是一种常用的组织有序数据的数据结构,它通过指针将一系列数据节点连接成一条数据链,是线性表的一种重要实现方式。

链表数据结构至少应包含两个域:

数据域和指针域,数据域用于存储数据,指针域用于建立与下一个节点的联系。

相对于数组,链表具有更好的动态性,建立链表时无需预先知道数据总量,可以随机分配空间,可以高效地在链表中的任意位置实时插入或删除数据。

链表的开销主要是访问的顺序性和组织链的空间损失。

四、

掌握链表的算法思想

创建一个包含十个数值的链表(带头节点或不带头节点),按从小到大的次序,与第一流题中的链表归并后,从屏幕输出结果。

单链表的储存结构为:

#include<

#include<

typedefstructList_Node

{intinfo;

structList_Node*next;

//结点的指针域

}node;

//结点结构体

创建链表

node*Creat_Node()

{

node*head,*pre,*p;

intx;

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

head->

next=NULL;

pre=head;

输入各结点的值,以0结束:

"

while(EOF!

=(scanf("

x))&

x!

=0)

p=(node*)malloc(sizeof(node));

p->

info=x;

next=pre->

next;

pre->

next=p;

pre=pre->

}

returnhead;

}

head=Creat_Node();

//创建链表

Print_Node(head);

//显示链表

Insert_Sort(head);

//直接插入法排序

显示链表的代码:

(2)显示链表的代码:

voidPrint_Node(node*head)

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

当前位置:首页 > 表格模板 > 调查报告

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

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