赞
踩
c语言实验报告、折半查找数
C语言程序设计实验报告
实验名称数组学 院材料与冶金学院专业班级新能源科学与工程姓 名汪爽学 号任课教师柳秀梅实验时间2012年10月13日
实验目的
熟练掌握一维数组、二维数组的定义、初始化和输入/输出方法;
熟练掌握字符数组和字符串函数的使用;
掌握与数组有关的常用算法(如查找、排序)。
实验内容
编程实现“折半查找”的过程。
要求
设定一个整型数组存放20个元素,采用直接赋值的方法在程序之初始化该数组;
用scanf函数输入一个要找的数值;
对查找的结果给出相应的说明,如果找到该数值,则输出“Found”信息,并给出该数是数组中的第几个元素。如果该数值不在数组中,则输出“Not found”信息;
修改程序,设定输入的数据是无序的,则先要对这些无序的数据进行排序,然后在采用“半折查找”。
算法描述流程图
源程序
#include
#include
void main()
{
int a[20]={ 2,1,4,5,7,3,6,9,10,8,14,15,12,19,20,17,18,11,13,16},b,q,d,i,max=19,min=0,n,m,p=10,c,s=10;
for(n=0;n<=19;n++)
{
for(i=n;i<=19;i++)
{
if(a[n]>a[i])
{
m=a[n];
a[n]=a[i];
a[i]=m;
}
}
printf("%d ",a[n]);
}
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 Num=%d\n",s);
}
else
printf("not found\n");
}
测试数据
测试数据为5,23
运行结果
当输入数值为3时
当输入数值为87时
出现问题及解决方法
本实验需要对数组排序因此采用循环
for(n=0;n<=19;n++)
{
for(i=n;i<=19;i++)
{
if(a[n]>a[i])
{
m=a[n];
a[n]=a[i];
a[i]=m;
}
}
printf("%d ",a[n]);
}
从而将数组排序,并输出顺序数组。
2.实验需要半折找数因此采用循环
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;
}
}
}
从而找到数组中是否有要找的数,是则d=1,不是则d=0.
实验心得
1.通过实验我对c语言的编程语言更加熟悉,加快编程输入语言的速度。
2.掌握一维数组、二维数组的定义、初始化和输入/输出方法;掌握字符数组和字符串函数的使用;掌握与数组有关的常用算法(如查找、排序)。
3.再次让我明白做实验时要细心,认真检查。
to prevent the accumulation of air, both ends of the tube are required the Center to bake. 6.2.5 sets should be at the bottom 200mm lashing cable head is fixed rung, with a similar cable color of plastic lashings. Cable head using "equal-width stacked" layout, or according to
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。