用C语言实现折半查找实验报告,c语言实验报告、折半查找数.doc

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值