(6)--C语言课件第06章数组.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《(6)--C语言课件第06章数组.ppt》由会员分享,可在线阅读,更多相关《(6)--C语言课件第06章数组.ppt(77页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第6章章数组数组在前面学习的程序中,所使用的变量均在前面学习的程序中,所使用的变量均为为标量类型标量类型的变量。的变量。但是,当在一个程序中用到大量变量时,但是,当在一个程序中用到大量变量时,使用使用标量类型标量类型的变量则不甚方便。的变量则不甚方便。此时,我们可以在程序中使用一种新的数此时,我们可以在程序中使用一种新的数据类型据类型数组数组。数组的概念数组的概念是一组类型相同的是一组类型相同的有序变量有序变量的集合。的集合。数组中的变量称为数组中的变量称为数组元素数组元素。数组元素的个数称为数组元素的个数称为数组长度数组长度。数组数组属于属于组合类型组合类型。数组的分类数组的分类数组按其数
2、组按其逻辑结构逻辑结构分为:分为:一维数组一维数组二维数组二维数组三维数组三维数组一维数组一维数组相当于数学中的向量,只有相当于数学中的向量,只有一行一行。一维数组的定义一维数组的定义格式:格式:类型名类型名数组名数组名数组长度数组长度;例如:例如:inta10;数组数组a包括包括a0、a1、a9共共10个元素。个元素。一维数组元素的一维数组元素的有序性有序性一维数组的元素,不但一维数组的元素,不但在名称上在名称上是是有序有序的,而且在内存中是的,而且在内存中是连连续有序续有序存储存储的。的。数组元素的有序性特点,使得数数组元素的有序性特点,使得数组元素组元素适合于采用循环处理适合于采用循环处
3、理。a0a1a2a3a4a5a6a7a8a9一维数组元素的引用一维数组元素的引用在程序中,一般在程序中,一般不能不能将一维数将一维数组组作为一个作为一个整体操作整体操作,而而只能只能针对针对一维数一维数组的元素组的元素进行操作。进行操作。一维数组元素的引用一维数组元素的引用例如:例如:inta10;a0=100;scanf(%d,&a0);printf(%d,a0);对数组元素的操作对数组元素的操作方法方法,与与同类型变量同类型变量的的操作方法相同。操作方法相同。两点两点说明说明在在C89标准中,不允许定义标准中,不允许定义变长数组变长数组,即在,即在表示数组长度的表达式中,不能包含变表示数组
4、长度的表达式中,不能包含变量名量名。而而在在C99标准中,则允许定义变长数组。标准中,则允许定义变长数组。例如:例如:intn=10;intan;在在C89标准中是错误的。标准中是错误的。两点两点说明说明错例:错例:inta10;a10=200;下标越界。下标越界。注意:注意:避免出现避免出现下标下标越界越界。(C语言不检查、不报错)语言不检查、不报错)【例例】输入输入10个数存入一维数组中,再按逆个数存入一维数组中,再按逆序输出。序输出。编程思路:编程思路:首先采用首先采用顺序结构顺序结构完成该数组元素的输入与完成该数组元素的输入与输出。输出。#includeintmain(void)int
5、a10,i;i=0;scanf(%d,&ai);i=1;scanf(%d,&ai);i=2;scanf(%d,&ai);i=3;scanf(%d,&ai);i=4;scanf(%d,&ai);i=5;scanf(%d,&ai);i=6;scanf(%d,&ai);i=7;scanf(%d,&ai);i=8;scanf(%d,&ai);i=9;scanf(%d,&ai);上述语句可以归纳为如下循环:上述语句可以归纳为如下循环:for(i=0;i=0;i-)printf(%d,ai);利用利用循环循环实现:实现:#includeintmain(void)inta10,i;for(i=0;i=0;i
6、-)printf(%d,ai);printf(n);return0;练习:练习:从键盘上输入从键盘上输入11个数,存入一维数组中,然个数,存入一维数组中,然后将后将下标为偶数下标为偶数的元素的值的元素的值取倒数取倒数,最后,最后输出所有元素的值。输出所有元素的值。一维数组的初始化一维数组的初始化1.给所有元素赋初值给所有元素赋初值如如inta6=1,3,5,7,9,10;初始化数据项必须是初始化数据项必须是常量常量或或常量表达式常量表达式。2.可以对部分元素赋初值可以对部分元素赋初值如如inta6=1,3;此时,其它元素此时,其它元素自动取自动取0。3.初始化时,可以不指定一维数组的长度。初始
7、化时,可以不指定一维数组的长度。如如inta=1,3,5,8,9,10;则其长度为则其长度为6。不过,不过,inta;是错误的,是错误的,因为无法确定数组的长度。因为无法确定数组的长度。【例例】编写程序实现:从键盘输入年份和月编写程序实现:从键盘输入年份和月份,求出该月份的天数并输出。份,求出该月份的天数并输出。编程思路:编程思路:(1)首先将每个月的天数存入到数组)首先将每个月的天数存入到数组mon中,中,moni存储存储i月份的天数,二月份天数暂月份的天数,二月份天数暂取取28。(2)根据年份判断,若是闰年,则修正二月)根据年份判断,若是闰年,则修正二月份的天数。份的天数。(3)最终根据月
8、份)最终根据月份m的值,输出数组元素的值,输出数组元素monm的值,即对应的月份天数。的值,即对应的月份天数。#includeintmain(void)inty,m;intmon13=0,31,28,31,30,31,30,31,31,30,31,30,31;/*每个月的天数每个月的天数*/printf(请输入年份和月份:请输入年份和月份:);scanf(%d%d,&y,&m);if(y%4=0)&(y%100!=0)|(y%400=0)mon2=29;/*若是闰年则修正二月份的天数若是闰年则修正二月份的天数*/printf(该月份的天数该月份的天数=%dn,monm);return0;【例例
9、】斐波那契数列斐波那契数列的变化规律是:前两项的变化规律是:前两项都是都是1,从第三项开始的每一项,从第三项开始的每一项等于其前等于其前面两项之和面两项之和。用一维数组编程序,求出斐波那契数列的前用一维数组编程序,求出斐波那契数列的前40项。项。算法设计:算法设计:(1)定义一个一维数组定义一个一维数组f40,用于存储数列,用于存储数列的前的前40项。项。(2)将前两项存入到将前两项存入到f0和和f1中。中。即即f0=1,f1=1。(3)按照数列的规律,求得第按照数列的规律,求得第i项并存入到项并存入到fi中。中。即即fi=fi-2+fi-1;其中其中i的取值为的取值为2到到39。(4)最后输
10、出所有的项。最后输出所有的项。#includeintmain(void)longf40=1,1;inti;for(i=2;i=39;i+)fi=fi-2+fi-1;for(i=0;i=39;i+)printf(%16ld,fi);return0;【例例】从键盘输入从键盘输入1010个数,求出其中的最大个数,求出其中的最大数并输出。数并输出。编程思路:编程思路:可采用可采用打擂台打擂台的方法来求最大数。的方法来求最大数。算法设计:算法设计:1定义一个数组定义一个数组a10,用于存储,用于存储10个数;个数;2定义一个变量定义一个变量max,用于存储,用于存储当前最大数当前最大数;3首先将首先将a
11、0赋给赋给max(可以取数组中的任意可以取数组中的任意一个元素,为便于编程通常取一个元素,为便于编程通常取a0);4取数组中的下一个元素取数组中的下一个元素ai与与max相比较。相比较。若若ai大于大于max,则将,则将ai赋给赋给max,否则,否则max保持不变;保持不变;5循环执行第循环执行第4步,直至步,直至9次比较次比较完成,则完成,则max的的值就是值就是10个数中的最大数。个数中的最大数。#includeintmain(void)inta10,max,i;printf(请输入请输入10个整数:个整数:n);for(i=0;i=9;i+)scanf(%d,&ai);max=a0;fo
12、r(i=1;imax)max=ai;printf(最大数最大数=%dn,max);return0;1329561maxa0a1a2a3a4a5【例例】用用选择法选择法对对10个数按降序排序。个数按降序排序。算法分析:算法分析:排序问题可以理解为排序问题可以理解为反复求最大值反复求最大值(或最小值)(或最小值)的问题。的问题。定义一个数组定义一个数组a10,用于存储要排序的用于存储要排序的10个数。个数。首先找出首先找出10个数中的最大数,并置入个数中的最大数,并置入a0中。中。方法是依次将方法是依次将a0与其余与其余9个数比较,并将个数比较,并将较大者置入较大者置入a0中。中。将将a0与与a1
13、相比较,并将较大者置入相比较,并将较大者置入a0中中。if(a0a1)t=a0;a0=a1;a1=t;将将a0与与a2相比较,并将较大者置入相比较,并将较大者置入a0中中。if(a0a2)t=a0;a0=a2;a2=t;将将a0与与a9相比较,并将较大者置入相比较,并将较大者置入a0中中。if(a0a9)t=a0;a0=a9;a9=t;以上以上9次比较,可以归次比较,可以归纳为一个单重循环:纳为一个单重循环:for(j=1;j=9;j+)if(a0aj)t=a0;a0=aj;aj=t;可改写为:可改写为:i=0;for(j=i+1;j=9;j+)if(aiaj)t=ai;ai=aj;aj=t;
14、再找出其余再找出其余9个数中个数中的最大数,并置入的最大数,并置入a1中。中。for(j=2;j=9;j+)if(a1aj)t=a1;a1=aj;aj=t;可改写为:可改写为:i=1;for(j=i+1;j=9;j+)if(aiaj)t=ai;ai=aj;aj=t;以此类推,直至找出以此类推,直至找出其余其余2个数中的最大数,个数中的最大数,并置入并置入a8中,最小数中,最小数置入置入a9中。中。for(j=9;j=9;j+)if(a8aj)t=a8;a8=aj;aj=t;至此,排序完成。至此,排序完成。可改写为:可改写为:i=8;for(j=i+1;j=9;j+)if(aiaj)t=ai;a
15、i=aj;aj=t;i=0;for(j=i+1;j=9;j+)if(aiaj)t=ai;ai=aj;aj=t;i=1;for(j=i+1;j=9;j+)if(aiaj)t=ai;ai=aj;aj=t;i=8;for(j=i+1;j=9;j+)if(aiaj)t=ai;ai=aj;aj=t;上述上述9个单重循环可以合并为一个双重循环。个单重循环可以合并为一个双重循环。for(i=0;i=8;i+)for(j=i+1;j=9;j+)if(aiaj)t=ai;ai=aj;aj=t;完整源程序:完整源程序:#includeintmain(void)inta10,i,j,t;printf(请输入请输入1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课件 06 数组
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内