实验七、数组(2)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

F number

top,bott :查找区间两端点的下标;loca :查找成功与否的开关变量。

[程序二]:有一篇文章,共有3行文字,每行有80个字符。要求统计出其中英文大写字母、小写字母、数字、空格以及其他字符的个数。将编写好的程序以文件名count.c 保存在你刚才新建好的文件夹里。 for(i=0;i<3;i++)

输入文章第i 行

for(j=0;j<80&&text[i][j]!=’\0';j++)

‘A ’--’Z ’‘a ’--‘z ’‘0’--‘9’大写字母个数加1小写

字母个数加1数字

个数

加1

空格个数加1其他字符个数加1

输出大写字母、小写字母、数字、空格及其他字符的个数T F

T F

T F ‘ ’T F

[程序三]:打印出以下的杨辉三角形(要求打印出10行)。将编写好的程序以文件名triangle.c 保存在你刚才新建好的文件夹里。

1

1 1

1 2 1

1 3 3 1

1 4 6 4 1

1 5 10 10 5 1

………………

【分析】:杨辉三角形是(a+b)n展开后各项的系数。例如:

(a+b)0展开后为1 系数为1

(a+b)1展开后为a+b 系数为1,1

(a+b)2展开后为a2+2ab+b2系数为1,2,1

(a+b)3展开后为a3+3a2b+3ab2+b3系数为1,3,3,1

(a+b)4展开后为a4+4a3b+6a2b2+4ab3+b4系数为1,4,6,4,1

以上就是杨辉三角形的前5行,杨辉三角形各行的系数有以下的规律:

(1)各行第一个数都是1;

(2)各行最后一个数都是1;

(3)从第3行起,除上面指出的第一个数和最后一个数外,其余各数是上一行同列和前一列两个数之后。例如第4行第2个数“3”是第3行第2

个数和第3行第1个数之后。可以这样表示:a[i][j]=a[i-1][j]+a[i-1][j-1],

其中i为行数,j为列数。

使数组第一列和对角线元素为1

其他各元素为a[i-1][j-1]+a[i-1][j](用双重for循环)

输出二维数组的内容

[程序四]:编写一个程序:将用户从键盘上输入的一个不大于256的十进制正整数(应对输入的整数进行合法性的检查)转换成对应的八位二进制数输出。将编写好的程序以文件名为DtoB.c保存在你刚才新建好的文件夹里。

【要求】:定义一个长度为8的一维数组来存放相应的二进制数,并且初始化初值为0。将键盘输入的数n不断的除2(n%2)将余数保存在这个定义的数组里。

相关文档
最新文档