您所在位置:网站首页 > 海量文档
 > 计算机 > C/C++资料

c语言作业(数组&折半查找法).doc8页
本文档一共被下载:
次,您可全文免费在线阅读后下载本文档。





下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
C语言程序设计实验报告
实验名称数组学 院材冶学院专业班级成型1101姓 名李xx学 号2011任课教师徐彬实验时间2012年11月2日星期五
实验目的
熟练掌握一维数组、二维数组的定义、初始化和输入/输出方法;
熟练掌握字符数组和字符串函数的使用;
掌握与数组有关的常用方法(如查找、排序等)。
实验内容
编程实现“折半查找”的过程。
要求
设定一个整型数组存放20个元素,采用直接赋值的方法在程序之初始化该数组;
用scanf函数输入一个要找的数值;
对查找的结果给出相应的说明,如果找到该数值,则输出“Found”信息,并给出该数是数组中的第几个元素。如果该数值不在数组中,则输出“Not found”信息;
修改程序,设定输入的数据是无序的,则先要对这些无序的数据进行排序,然后在采用“半折查找”。
算法描述流程图
Y
Y
Y
Y
Y
Y
源程序
#include
main()
{
int a[20],i,t,j,b,q,d,c,min=0,max=19,p=10,s=10;
for(i=0;i<20;i++)
scanf("%d",&a[i]);
printf("\n");
for(i=0;i<19;i++)
{
for(j=0;j<19;j++)
if(a[j]>a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
for(i=0;i<20;i++)
printf("%d",a[i]);
printf("请输入要查找的数");
scanf ("%d",&b);
for (q=1;q<=10;q++)
{
if (max-min!=0)
{
if(b==a[s])
{
d=1;
break;
}
else
{
if(b>a[s])
{
c=s;
s=max-(max-min)/2;
min=c;
d=0;
}
else
c=s;
s=(max-min)/2+min;
max=c;
d=0;
}
}
}
if(d==1)
{
s=s+1;
printf("Found 在第%d\n位",s);
}
else
printf("not found\n");
}
5测试数据
20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1
运行结果
出现问题及解决方法
这个实验太难了,出现各种问题,最后大家齐心协力完成了任务,主要是冒泡法的应用及折半查找法的应用比较困难。
实验心得
1.通过实验我对c语言的编程语言更加熟悉,加快编程输入语言的速度。
2.掌握一维数组、二维数组的定义、初始化和输入/输出方法;掌握字符数组和字符串函数的使用;掌握与数组有关的常用算法(如查找、排序)。
3.再次让我明白做实验时要细心,认真检查。
开始
a[20],i,t,j,b,q,d,c,min=0,max=19,p=10,s=10
j<=19
i<=19
a[j]>a[i]
将最小的数赋给a[j]
q<9
输出Not found
q=q+1
输出Found 位置在第num=s+1 位
B是要找的数吗
b在后面c=s; s=max-(max-min)/2
min=c;
将区间小,取中点
b在前面c=s; s=(max-min)/2+min;
max=c;
将区间缩小,取中点
b>a[s]
结束
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名:
验证码:

匿名?
发表评论
这篇实验报告详细介绍了使用C语言实现折半查找法的过程,包括数组的初始化、输入/输出操作以及冒泡排序。实验中,首先对一个无序数组进行冒泡排序,然后采用折半查找法寻找指定数值。如果找到目标值,输出其在数组中的位置;否则显示未找到。实验者通过这个过程加深了对C语言编程的理解,特别是数组操作和查找算法的运用。
1945

被折叠的 条评论
为什么被折叠?



