实验3指针与一维数组

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

13.3 实验指导

13.3.1 使用指针输入10个实数

1.题目要求

使用指针输入10个实数存入一维数组中,计算并输出它们的和与平均值。要求输入、计算和输出均使用指针。

2.分析

输入的10个数可以保存在数组中。根据题目要求,定义一个具有10个元素的实型数组和一个实型指针,初始化指针指向数组。可以使用一个循环输入数据并输出数据,然后再用一个循环统计并输出统计结果。

设数组为a,指针为p,则循环:

for(i=0,p=a;i<10;i++)sum+= *p++;

for(i=0,p=a;i<10;i++)sum+= *(p+i);

for (p=a;p

均可以统计出数组元素的和。

本题比较简单,不需要再多的分析,请读者给出程序代码。

3.思考

本题使用指针并不比使用下标直接操作数组元素更方便。但是在复杂的题目中,使

用指针就能体现出优越性,尤其是在字符串处理方面。

本题也可以不使用数组而直接使用指针,请读者考虑这种方案的程序。

13.3.2 求两集合的交集

1.题目要求

整数集合是由多个不同的整数构成的,可将其存放在一个一维整型数组中。两个集合的交集由同时属于两个集合的元素构成。例如,集合a[]={1,3,5,7,9},集合b[ ]={1,2,3,4},它们的交集是c[ ]={1,3}。要求使用4个函数,一个输入数据(两个数组的数据),一个计算交集,另一个输出数组(三个数组),主函数的作用是定义数组和调用函数。

2.分析

本题需要三个数组a、b、c,a、b的数据来自键盘输入,数组c的数据则是a、b的交集,需要计算。求交集的算法是:依次判断数组a中的元素a[i]是否属于数组b,如果属于,则将a[i]放入交集数组c中。要求编写一个程序,完成求两个整数集合的交集。

所谓将a[i]]放人数组c中,就是将a[i]赋值给数组c的元素。本题中数组a、b、c需要分别使用不同的下标变量。

测试a[i]是否属于b数组,使用一个循环可以实现,设有指针p1、p2、p3,且p1=&a,则可以:

for(j=0;j

if(*p1== *p2++)break;

if (p2< &a [J] ) //说明在数组b中找到了a[i],即a[i]属于b

*p3++= *p1; //将a[i]放人数组c,修改指针p3,准备放人下一个a[i]

for (j=0;j

if(*p1== *p2++) *p3++= *p1; //找到后直接将a[i]放入集合c中;

3.思考

本题考虑的是求两个集合的交集,运用上述思路,还可以考虑多集合(三个集合以上) 的交集。请读者考虑N个集合交集的求法。

1 3.3.3 构造回文

1.题目要求

—个字符串若正向拼写与反向拼写都一样,则称之为“回文”。如"madam"是一个回文。判断时,忽略大小写字母的区别、空格及标点符号等,即"Madam,I'm Adam"也是回文。

本题要求使用指针输入一个字符串,根据输入的字符串构造出一个回文。

2.分析

字符串是用字符数组存储的,对输入的字符串构造回文,要求字符数组的大小至少为输入字符串长度的两倍。或者说输入字符串的长度最多只能是所定义字符数组大小的一半。

虽然判断一个字符串是否为回文时忽略字母的大小写等,但是构造出来的回文可以是严格对称的,包括字母大小写、空格、标点符号等。

构造的过程如下:对存储在数组中的输入字符串,从最右边字符开始,逐个处理。使用两个指针,一个(p1)初始指向输入字符串最后一个字符,一个(p2)指向p1右边的数组元素,如图13.1所示。设输人的字符串是"abcde",只要循环执行"*p2++=*p--;",即可构造出严格对称的回文。

p1 p2

图13.1 初始指针

注意,这样构造的回文,字符串的末尾需要赋值串结束符'\0'。

3.思考

在分析中使用的构造方法是从输人字符串的右边开始,向左发展的,指针p1和p2背向移动。也可以从输入字符串的左边开始,向右发展,指针p1和p2相向移动。这时p1和p2的初定位与前述不同。请读者考虑这种思路的回文构造算法和程序。

相关文档
最新文档