实验七、数组(2)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验七数组(2)
【实验目的】:
1、掌握一维数组的定义、赋值和输入输出的方法;
2、掌握与数组有关的算法(例如排序算法);
3、熟悉循环语句与数组处理语句结合的方法。
【实验时数】:2学时
【实验内容】:
一、新建文件夹
首先在各自对应的计算机wks盘上新建一个文件夹,文件夹的名字为“班级+学号的后两位+姓名”,如食品1081班、学号后两位是02的、姓名为“张三”的同学,则其对应的文件夹名字是:食品108102张三。然后在刚才建好的文件夹里面再建立一个文件夹,文件夹为“第12次”。
以下实验内容的运行结果需保存在所建的“第12次”文件夹内,并按题目的要求完成。希望同学们在做以下实验之前,先认真分析程序的运行结果,后再上机验证。
二、实验内容:
[程序一]:有15个数按由大到小顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则打印出“无此数”。将编写好的程序以文件名search.c保存在你刚才新建好的文件夹里。
【分析】:从表列中查一个数最简单的方法是从第1个数开始顺序查找,将要找的数与表列中的数一一比较,直到找到为止(如果表列中无此数,则应找到最后一个数,然后判定“找不到”)。但这种“顺序查找法”效率低。如果表列中有1000个数,且要找的数恰恰是第1000个数,则要进行1000次比较才能得到结果。平均比较次数为500次。
折半查找法是效率较高的一种方法。基本思路如下:
假如有已按由小到大排好序的9个数,a[1]~a[9],其值分别为1、3、5、7、9、11、13、15、17。
若输入一个数3,想查3是否在此数列中,先找出表列中居中的数,即a[5],将要找的数3与a[5]比较,a[5]的值是9,发现a[5]>3,显然3应当在a[1]到a[5]范围内,而不会在
a[6] 到a[9]范围内。这样就可以缩小查找范围,甩掉a[6]到a[9]这一部分,即将查找范围缩小为一半。再找a[1]到a[5]范围内的居中的数,即a[3],将要找的数3与a[3]比较,a[3]的值是5,发现a[3]>3,显然3应当在a[1]到a[3]范围内。这样又将查找范围缩小一半。再将3与a[1]到a[3]范围内的居中的数a[2]比较,发现要找的数3等于a[2],查找结束。一共比较了3次。如果表列中有n 个数,则最多比较的次数为int(log=n)+1。 建立有序数组a[N],flag=1,sign=1
显示a[N]
While(flag==1)
输入要查找的数据number
loca=0;top=0;bott=N-1
number 超出范围loca=-1
While(sign=1&&top<=bott)
mid=(bott+top)/2
number==a[mid)loca=mid
找到,显示结果
sign=0
bott=mid-1top=mid+1sign==1||loca==-1number 不在数组中
是否继续
T
F T F T F T
F T