一维数组应用.docx
- 文档编号:23590079
- 上传时间:2023-05-18
- 格式:DOCX
- 页数:11
- 大小:17.89KB
一维数组应用.docx
《一维数组应用.docx》由会员分享,可在线阅读,更多相关《一维数组应用.docx(11页珍藏版)》请在冰豆网上搜索。
一维数组应用
一维数组的相关应用
1.数组的定义:
定义格式:
数据类型数组名[数组的长度]
其中:
数据类型就是前面讲到的int、float、long、double、char等基本类型,当然也可以是我们后面还要介绍的其他类型(此处暂不考虑)。
数组名与普通变量的起名规则是一样的。
但不能与同一函数中的其他任何变量起一样的名字。
数组的长度定义是数组的长度只能是常量或常量表达式,否则就会出现编译错误。
例如:
我们要定义一个整型数组,它里面能够存放10个元素,则应该定义成如下形式:
inta[10];
其他类型的数组与此类似,如:
floatf1[5],f2[10];
longlong1[10],long2[50];
charch1[30],ch2[10];
也可以采用常量表达式来定义:
如
#defineN100
main(){
floatnum[N];//定义了具有N个浮点型数据元素的数组,其中N为常量
…
}
以下列举一些关于数组的应用,记住一点,数组的操作跟循环是息息相关的。
一维数组对应单重循环,后面要讲的二维数组对应的是二重循环。
2.给一维数组元素赋值:
程序如下
#include
main(){myfunc();}
myfunc(){
inta[10],i;
printf(“inputtenintnumber:
\n”);
/*下面的for循环将给数组a的每个元素赋值(从键盘上输入的)*/
for(i=0;i<10;i++)
scanf(“%d”,&a[i]);
}
3.一维数组元素的输出:
程序如下
#include
main(){myfunc();}
myfunc()
{
inta[10],i;
printf(“inputtenintnumber:
\n”);
/*下面的for循环将给数组a的每个元素赋值(从键盘上输入的)*/
for(i=0;i<10;i++)
scanf(“%d”,&a[i]);
/*下面的代码,将已经赋值的数组各元素输出到屏幕上*/
for(i=0;i<10;i++)
printf(“%d“,a[i]);
}
4.对一维数组元素进行相应处理后再输出。
例如:
将一个数组中的元素逆序存储后,再输出到屏幕上。
程序如下:
#include
main(){myfunc();}
myfunc()
{
inta[10],i;
printf(“inputtenintnumber:
\n”);
/*下面的for循环将给数组a的每个元素赋值(从键盘上输入的)*/
for(i=0;i<10;i++)
scanf(“%d”,&a[i]);
/*下面循环用来输出处理以前的数组的各个元素*/
for(i=0;i<10;i++)
printf(“%d“,a[i]);
printf(“\n”);
/*下面的循环用来将数组的元素逆序存储*/
/******************************************
逆序存储的方法:
将第0个元素与第9个元素交换;再将第1个元素与第8个元素交换;依此类推,直到第4个元素与第5个元素交换后结束。
**********************************************/
for(i=0;i<5;i++)
{
t=a[i];
a[i]=a[9-i];
a[9-i]=t;
}
/*下面的代码,将已经处理过的数组各元素输出到屏幕上*/
for(i=0;i<10;i++)
printf(“%d“,a[i]);
printf(“\n”);
}
小结:
通过上面这个程序,我们知道,对于数组的处理,通常按顺序分为4步:
第一步:
给数组的各个元素赋值;(上面程序中的蓝色部分代码)
第二步:
输出处理以前的数组;(上面程序中的紫黑色部分代码)
第三步:
对数组的各个元素按题目要求进行相应处理;(上面程序中的浅绿色部分代码)
第四步:
对处理结果进行输出,与处理之前的输出相比较;(上面程序中红色部分代码)
5.数组元素的排序
(1)冒泡排序(将数组元素按照从小到大的顺序排序)
程序如下:
#include
main(){myfunc();}
myfunc()
{
inta[10],i;
printf(“inputtenintnumber:
\n”);
/*下面的for循环将给数组a的每个元素赋值(从键盘上输入的)*/
for(i=0;i<10;i++)
scanf(“%d”,&a[i]);
/*下面循环用来输出处理以前的数组的各个元素*/
for(i=0;i<10;i++)
printf(“%d“,a[i]);
printf(“\n”);
/*下面的循环用来将数组的元素按从小到大的顺序进行排序*/
/******************************************
冒泡排序法原理:
对N个数(这里N为10)进行排序。
采用两两比较交换的方法,不断将大数交换到数组的后端。
第一轮将10个数中最大的数交换到a[9]中(需要通过9次比较),第二轮将剩余的9个数中最大的数交换到a[8]中(需要通过8次比较),…,第9轮将剩余的两个数中的最大数交换到a[1]中,也就意味着剩下的那个数就是最小的数,并且放在了a[0]中。
至此,已经将10个数排好序了。
总结一下规律:
外循环表示轮次:
最大的轮次应为N-1(N是数组中数的个数)
内循环表示每轮比较交换的次数:
最大交换次数应为N-当前的轮次
**********************************************/
for(i=1;i<=9;i++)/*这个9即是N-1得来的(本题中N==10)*/
for(bj=0;bj<10–i;bj++)/*bj表示每轮的比较次数*/
if(a[bj]>a[bj+1])
{
t=a[i];
a[i]=a[9-i];
a[9-i]=t;
}
/*下面的代码,将排好序的数组各元素输出到屏幕上*/
for(i=0;i<10;i++)
printf(“%d“,a[i]);
printf(“\n”);
}
(2)选择法排序(将数组元素按照从小到大的顺序排序)
#include
main(){myfunc();}
myfunc()
{
inti,j,k,temp,a[10];
printf(“inputtenintnumber:
\n”);
/*下面的for循环将给数组a的每个元素赋值(从键盘上输入的)*/
for(i=0;i<10;i++)
scanf(“%d”,&a[i]);
/*下面循环用来输出处理以前的数组的各个元素*/
for(i=0;i<10;i++)
printf(“%d“,a[i]);
printf(“\n”);
/*下面的循环用来将数组的元素按从小到大的顺序进行排序*/
/******************************************
选择排序法原理:
从10个元素中选择出最小的一个与第0个元素对调,再从剩下的9个元素中选择最小的数与第1个元素对调,再从剩下的8个元素中选择最小的数与第2个元素对调,…,直到从最后的2个元素中选择最小数与第8个元素对调,则第9个元素自然就是最大的数了。
(注意:
数组是从0开始计算元素个数的。
)
**********************************************/
for(i=0;i<9;i++)
{
k=i;
for(j=k+1;j<10;j++)
if(a[k]>a[j])k=j;//这个for循环在剩下的k个数中找出一个最小数所在的位置
//下面三条语句将剩下元素中的最小数与第i个元素进行对调
temp=a[i];
a[i]=a[k];
a[k]=temp;
}
/*下面循环用来输出处理以后的数组的各个元素*/
for(i=0;i<10;i++)
printf(“%d“,a[i]);
printf(“\n”);
}
6.数组的插入操作
例如:
已知有一个已经按从小到大的顺序排好序的整型数组(假设为10个元素),现在从键盘上输入一个新的整数,将其插入到数组中,并且要保持该数组仍是有序的。
程序如下:
#include
main(){myfunc();}
myfunc()
{
inta[11],i,j,x;/*数组本来有10个元素,因要多插入一个元素,故定义为11*/
printf(“inputtenintnumber:
\n”);
/*下面的for循环将给数组a的每个元素赋值(从键盘上输入的)*/
for(i=0;i<10;i++)
scanf(“%d”,&a[i]);
/*下面循环用来输出处理以前的数组的各个元素*/
for(i=0;i<10;i++)
printf(“%d“,a[i]);
printf(“\n”);
printf(“inputanewintnumberforinsert:
”);
scanf(“%d”,&x);
/*下面的循环将一个新的整数插入到这个排好序的数组中*/
/******************************************
插入操作的原理:
假定新输入的数为x,用x依次去和数组中的每个元素进行比较,直到找到第一个比x大的元素为止,此时说明已经找到了x应该插入的位置了。
然后从数组的末尾开始到找到的位置处止的这一段数据元素依次向后移一个位置,以腾出空位来插入x的值。
**********************************************/
for(i=0;i<10;i++)/*如果某个元素大于x了,则说明找到x的插入位置了,则应该退出循环*/
if(a[i]>x)break;
/*从数组末尾开始,移动数组的元素*/
for(j=9;j>i;j--)
a[j+1]=a[j];
a[i]=x;/*将x插入到数组中*/
/*下面的代码,将插入x后的数组各元素输出到屏幕上*/
for(i=0;i<11;i++)
printf(“%d“,a[i]);
printf(“\n”);
}
7.数组元素的删除操作
例如:
已知有一个已经按从小到大的顺序排好序的整型数组(假设为10个元素),现在从键盘上输入一个新的整数,将数组中的该数删除,如果数组中不存在此数,则提示相应的错误信息。
程序如下:
#include
main(){myfunc();}
myfunc()
{
inta[10],i,j,x;
printf(“inputtenintnumber:
\n”);
/*下面的for循环将给数组a的每个元素赋值(从键盘上输入的)*/
for(i=0;i<10;i++)
scanf(“%d”,&a[i]);
/*下面循环用来输出处理以前的数组的各个元素*/
for(i=0;i<10;i++)
printf(“%d“,a[i]);
printf(“\n”);
printf(“inputanewintnumberfordelete:
”);
scanf(“%d”,&x);
/*下面的循环将一个新的整数从这个排好序的数组中删除*/
/******************************************
删除操作的原理:
假定新输入的数为x,用x依次去和数组中的每个元素进行比较,如果数组中某个元素和x的值是一样的,则表示找到了要删除的位置。
然后将数组的该位置上的元素到数组末尾的元素依次往前移一个位置。
如果比较到数组的末尾,仍未找到一个与x一样的数,则说明数组中不存在此数,故给出一个错误提示信息。
**********************************************/
for(i=0;i<10;i++)/*如果某个元素等于x了,则说明找到要删除数据的位置了,则应该退出循环*/
if(a[i]==x)break;
/*从当前位置开始到数组末尾的每个元素都向前移动一个位置*/
for(j=i;j<10;j++)a[j]=a[j+1];
/*在查找的过程中,如果i==10,则说明找到数组末尾仍未能找到与x一样的数,故提示错误信息*/
if(i==10)
printf(“没找到您要删除的数.\n”);
else/*否则说明找到了x,则将删除x后的数组各元素输出到屏幕上*/
for(i=0;i<9;i++)/*因为已经删除掉了一个元素,所以应该少输出一个元素*/
printf(“%d“,a[i]);
printf(“\n”);
}
8.根据以上叙述,自己组织编码,实现下列功能(要求在一个程序中实现,可以用多个函数,如每种功能用一个函数)。
(1)定义一个数组arr(假定可以存放20个数)
(2)给数组arr赋值;(可以用随机函数来赋值,参考教材P138页例5.15)
(3)输出该数组的各个元素;
(4)用冒泡法或选择法对该数组进行排序(按从大到小的顺序);
(5)输出排序后的数组;
(6)从键盘输入一个新值x,将此数插入到排好序的数组中,并且要保持数组原来的顺序不改变(即还要是从大小到的顺序);
(7)输出插入x后的数组;
(8)再从键盘输入一个新值y,在数组中查找此数,如果存在,则将其从数组中删除,如果不存在,则提示出错信息;
(9)输出删除y后的数组。
(10)特殊要求(选做):
上述功能都实现以后,修饰一下输出界面,让用户使用起来方便一些。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数组 应用