- 1、本文档共5页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
c语言程序设计实验汇报
实验报告
专业班级: 学号: 姓名:
课程名称:C语言程序设计
1.实验内容:
编写函数,在一个元素已按由小到大的次序排列的整型数组中插入一个整数,要求插入后的数组元素仍是有序的。
2.实验方案(程序设计说明)
编写的函数中,利用二分检索法,找到元素应该被插入的位置并插入元素,再在主函数中调用该函数
流程图见第4、5页
3.实验步骤或程序(经调试正确的源程序
#include stdio.h
#define N 50
void fun(int* a,int n,int x) /*参数为数组、元素个数和插入的值*/
{
if(x=a[n-1]) /*要插入的元素大于数组中所有元素*/
{
a[n]=x;
return;
}
if(x=a[0]) /*要插入的元素小于数组中所有元素*/
{
for(int j=n-1;j=0;--j) /*把要插入元素后的所有元素向后移动一位,在插入要插入的元素*/
{
a[j+1]=a[j];
}
a[0]=x;
return;
}
/*要插入的元素在数组之中的情况,用二分检索法*/
int k=0,m=n-1,mid;
while(k=m)
{
mid=(k+m)/2;
if(x=a[mid-1]x=a[mid])
{
for(int i=n-1;i=mid;--i)
{
a[i+1]=a[i];
}
a[mid]=x;
return;
}
else
if(x=a[mid]x=a[mid+1])
{
for(int i=n-1;i=a[mid+1];--i)
{
a[i+1]=a[i];
}
a[mid+1]=x;
return;
}
if(a[mid]x)
m=mid-1;
else
k=mid+1;
}
}
void main()
{
int a[N],u,v,P;
printf(输入一个按有小到大顺序排列的数组的元素个数);
scanf(%d,u);
printf(输入要插入的值);
scanf(%d,v);
printf(按由小到大的顺序输入数组元素);
for(int i=0;iu;++i)
{
scanf(%d,a+i);
}
printf(输入的数组为:);
for(int j=0;ju;++j)
{
printf( %d,a[j]);
}
fun(a,u,v);
printf(\n插入v后的数组为:);
for(int k=0;ku+1;++k)
{
printf( %d,a[k]);
}
}
4.程序运行
5.出现的问题及解决方法
,更有条理。在本实验中,我采用了二分检索法在数组中查找被插入的元素的位置,二分检索法是一个非常典型的计算机算法,需要我们熟练掌握。还有在本试验中,插入一个元素后,仍保持数组有序的算法需要注意,我们需要把需要插入元素位置之后的所有元素都向后移动一位,以空出一个位置来插入需要被插入的元素。
1
Y
a[mid]=v
N
Y
Y
N
Y
N
Y
N
Y
N
Y
N
Y
N
N
Y
a[u]=v
N
Y
定义数组a[N]和变量u,v,p
开始
int i=0
iu
++i
v=a[u-1]
输入u
输入v
v=a[0]
int j=u-1
j=0
a[j+1]=a[j]
--j
a[0]=v
int k=0
ku+1
++k
输出a[k]
int p=0,q=u-1,mid
p=q
mid=(p+q)/2
v=a[mid-1]v=a[mid]
int i=u-1
i=mid
a[i+1]=a[i], --i
结束
输入a[i]
int k=0
ku+1
++k
输出a[k]
结束
结束
Y
N
Y
N
Y
N
N
Y
a
文档评论(0)