C语言新教材PPT课堂课件-5-数组.pdf
《C语言新教材PPT课堂课件-5-数组.pdf》由会员分享,可在线阅读,更多相关《C语言新教材PPT课堂课件-5-数组.pdf(59页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1第第五五章章 数数组组主主要要内内容容:5.1 5.1 一一维维数数组组5.2 5.2 二二维维数数组组5.3 5.3 数数组组与与循循环环计计算算2用用基基本本数数据据类类型型可可以以解解决决所所有有问问题题吗吗?例例如如:输输入入某某班班50名名学学生生某某课课程程的的成成绩绩,统统计计平平均均成成绩绩及及高高于于平平均均成成绩绩的的人人数数。定定义义50个个独独立立变变量量接接收收50个个成成绩绩?用用1个个变变量量依依次次接接收收各各人人成成绩绩,与与此此同同时时累累计计总总成成绩绩,进进而而求求出出平平均均成成绩绩?数数组组的的引引入入当当统统计计高高于于平平均均成成绩绩的的人人数
2、数时时,需需要要再再次次输输入入50个个成成绩绩吗吗?-不不妥妥!-可可以以!-需需要要!-不不妥妥!解解决决方方法法:用用数数组组!3数数组组是是具具有有一一定定顺顺序序关关系系的的若若干干相相同同类类型型变变量量的的集集合合体体,组组成成数数组组的的变变量量称称为为数数组组元元素素。数数组组属属于于构构造造类类型型。数数组组的的概概念念45.1 5.1 一一维维数数组组l使使用用一一个个下下标标标标识识数数组组元元素素的的数数组组叫叫作作一一维维数数组组。如如:每每个个班班的的学学生生排排成成一一队队,只只需需要要指指出出某某个个学学生生在在队队列列中中的的编编号号,就就可可以以确确定定这
3、这个个学学生生。5一一、一一维维数数组组的的定定义义l格格式式:类类型型名名 数数组组名名 常常量量表表达达式式;int a 10;定定义义a a为为一一维维数数组组,由由1010个个元元素素组组成成,可可独独立立存存放放 1010个个整整型型数数据据。TCTC系系统统为为数数组组a a分分配配1010个个intint型型存存储储单单元元,共共2*10=202*10=20个个字字节节,且且这这些些存存储储单单元元是是连连续续的的。数数组组名名常常量量表表达达式式,数数组组大大小小a1000100210041006100810101012101410161018 地地址址6二二、一一维维数数组组
4、元元素素的的引引用用下下标标法法格格式式:数数组组名名 下下标标 如如有有定定义义:int a 10;a0a1a2a3a4a5a6a7a8a9注注意意:数数组组元元素素的的下下标标从从0开开始始;数数组组元元素素下下标标的的最最大大值值等等于于数数组组的的大大小小减减1。常常量量/变变量量/表表达达式式 如如,a0,a1,am,an,am*n (int m=3,n=2;):下下标标运运算算符符,优优先先级级1 17三三、一一维维数数组组的的初初始始化化l格格式式:类类型型名名 数数组组名名 常常量量表表达达式式=数数据据表表列列 ;例例如如:int a 10 =1,2,3,4,5,6,7,8,
5、9,10 ;全全部部元元素素赋赋初初值值将将花花括括号号中中的的常常量量依依次次赋赋给给a0a0、a1a1、a9 a9 只只能能为为常常量量例例如如:int a 10 =2,3;部部分分元元素素赋赋初初值值将将花花括括号号中中的的常常量量依依次次赋赋给给a0a0、a1a1,其其它它各各数数组组元元素素的的值值均均为为0 0。8一一维维数数组组的的初初始始化化 例例如如:int a =1,2,3,4,5,6,7,8,9,10 ;注注意意:intint a;a;是是不不允允许许的的!对对全全部部元元素素赋赋初初值值时时,可可以以不不指指定定数数组组长长度度,系系统统自自动动按按初初值值个个数数取取
6、长长度度为为10注注意意:若若要要使使数数组组1010个个元元素素具具有有相相同同的的初初值值5,5,intint a=10*5;a=10*5;或或intint a=5*10;a=5*10;都都是是不不允允许许的的!9四四、一一维维数数组组元元素素的的输输入入和和输输出出#include void main()int a10,i;for(i=0;i10;i+)scanf(%d,&ai);printf(n);for(i=0;i10;i+)printf(%3d,ai);printf(n);/*变变量量i作作下下标标,取取值值09*/10举举例例:一一维维数数组组元元素素的的逆逆序序(倒倒序序)输输
7、出出例例5.3#include void main()int a10,i;printf(Please input array a:);for(i=0;i=0;i-)printf(%3d,a i );printf(n);问问题题:如如何何将将数数组组元元素素逆逆序序重重新新存存放放?(例例5.10)115.3(1)一一维维数数组组与与循循环环计计算算l数数组组元元素素逆逆序序重重排排l数数据据查查找找:顺顺序序查查找找法法,折折半半查查找找法法l删删除除/插插入入数数组组元元素素l数数组组元元素素循循环环移移位位l求求数数组组中中最最小小元元素素l求求数数组组中中最最小小元元素素及及其其下下标标
8、l排排序序算算法法:选选择择排排序序法法,直直接接交交换换排排序序法法,冒冒泡泡排排序序法法,改改进进的的冒冒泡泡排排序序法法,插插入入排排序序法法,归归并并排排序序法法12#include void main()int a7=1,2,3,4,11,12,13;int i,temp;for(i=0;i7/2;i+)temp=ai;ai=a6-i;a6-i=temp;for(i=0;i7;i+)printf(%4d,ai);举举例例:数数组组元元素素逆逆序序重重排排P138P138例例5.105.10 将将存存放放在在数数组组中中的的一一组组数数据据按按逆逆序序重重排排。解解1)首首尾尾对对调调
9、 i 6-i 13#include void main()int a7=1,2,3,4,11,12,13;int i,j,temp;for(i=0,j=6;ij;i+,j-)temp=ai;ai=aj;aj=temp;for(i=0;i7;i+)printf(%4d,ai);数数组组元元素素逆逆序序重重排排 例例5.105.10解解1)首首尾尾对对调调程程序序2 i j 14#include void main()int a7=1,2,3,4,11,12,13,b7;int i,j,temp;for(i=0;i7;i+)bi=ai;for(i=0;i7;i+)ai=b6-i;for(i=0;i
10、7;i+)printf(%4d,ai);数数组组元元素素逆逆序序重重排排 例例5.105.10解解2)使使用用辅辅助助数数组组是是否否还还有有其其它它解解法法?-有有!例例如如最最佳佳解解法法是是“首首尾尾对对调调”!15程程序序1:#include void main()int a15=21,13,52,0,-25,6,18,1,36,2,-20,17,9,33,8;int i,x;scanf(%d,&x);for(i=0;i15;i+)if(ai=x)break;if(i15)printf(%4d is found,its at%4d.n,x,i);else printf(Not exis
11、t!n);查查找找举举例例1:顺顺序序查查找找法法P133例例5.6 在在一一组组无无序序且且不不重重复复的的数数据据中中查查找找一一个个数数,若若有有则则显显示示该该数数所所在在位位置置,否否则则输输出出提提示示“Not Exist!”。16#include void main()int a15=21,13,52,0,-25,6,18,1,36,2,-20,17,9,33,8;int i,x,f_at,flag=0;/*flag初初值值为为0,表表示示未未找找到到;f_at记记录录找找到到数数所所在在位位置置*/scanf(%d,&x);for(i=0;i15;i+)if(ai=x)flag
12、=1;f_at=i;break;if(flag=1)printf(%4d is found,its at%4d.n,x,f_at);else printf(Not exist!n);顺顺序序查查找找法法程程序序2 2:引引入入一一标标识识变变量量flag,用用1标标识识找找到到,0标标识识未未找找到到17查查找找举举例例2:折折半半查查找找法法(二二分分查查找找法法)折折半半查查找找法法只只能能对对有有序序数数列列进进行行查查找找,方方法法如如下下:假假设设n个个数数按按由由小小到到大大的的顺顺序序存存放放在在数数组组a中中,top、bot分分别别表表示示查查找找区区间间顶顶部部元元素素和和底
13、底部部元元素素的的下下标标(初初值值为为0和和n-1)。取取查查找找区区间间的的中中间间位位置置mid=(top+bot)/2,将将待待查查找找的的数数x与与amid进进行行比比较较,分分以以下下三三种种情情况况分分别别处处理理:x=amid:已已找找到到,退退出出查查找找;xamid:x只只可可能能落落在在amid+1和和abot之之间间,改改置置top=mid+1。、两两种种情情况况将将查查找找区区间间缩缩小小了了一一半半,然然后后重重复复以以上上比比较较,直直到到找找到到或或者者topbot(表表示示查查找找区区间间已已缩缩小小到到零零),退退出出循循环环。例例5.718折折半半查查找找
14、过过程程示示例例19#include void main()int a10=7,9,12,18,21,25,33,39,45,60;int x,top=0,mid,bot=9,flag=0;/*标标识识是是否否找找到到,0表表示示未未找找到到*/scanf(%d,&x);if(x=atop&x=abot)/*若若x位位于于查查找找区区间间则则开开始始查查找找*/while(!flag&topamid)top=mid+1;else bot=mid-1;if(flag=1)printf(%4d is found,its at%4d.n,x,mid);else printf(Not exist!n)
15、;折折半半查查找找法法程程序序例例5.720举举例例:删删除除数数列列中中指指定定位位置置上上的的数数例例5.8 在在一一组组不不重重复复数数据据中中,删删除除指指定定位位置置的的数数。分分析析:欲欲删删除除数数组组a中中指指定定位位置置为为del_at的的元元素素,只只需需将将del-at位位置置元元素素之之后后的的所所有有元元素素依依次次向向前前移移动动一一个个位位置置,然然后后将将数数组组元元素素实实际际个个数数减减1。21删删除除数数列列中中指指定定位位置置上上的的数数程程序序例例5.8#include void main()int a12=1,3,5,0,-3,6,9,15,7,2,
16、-8,10;int i,del_at;scanf(%d,&del_at);/*待待删删位位置置起起,各各元元素素值值依依次次被被后后续续元元素素值值替替代代*/for(i=del_at;i11;i+)ai=ai+1;/*输输出出数数组组时时不不包包括括最最后后一一个个元元素素*/for(i=0;i11;i+)printf(%4d,ai);printf(n);22举举例例:插插入入数数到到已已排排序序数数列列中中使使仍仍然然有有序序习习题题5.3假假设设n个个由由小小到到大大排排列列的的数数存存放放在在数数组组a中中,待待插插入入数数存存放放在在x中中。解解决决方方法法之之一一:首首先先在在数数
17、组组a中中查查找找插插入入x的的位位置置;找找到到插插入入位位置置p后后,将将ap到到an-1中中的的数数往往后后顺顺移移一一个个位位置置以以腾腾出出ap放放入入x值值。该该如如何何查查找找插插入入的的位位置置p呢呢?方方法法之之一一:顺顺序序查查找找法法,即即从从首首元元素素开开始始往往后后逐逐一一查查找找,直直到到遇遇到到一一个个元元素素大大于于等等于于x。注注意意:插插入入数数的的位位置置有有三三种种情情况况:有有序序数数列列之之中中的的某某个个位位置置、第第1个个数数之之前前和和最最后后一一个个数数之之后后,算算法法应应覆覆盖盖各各情情况况。23插插入入数数到到有有序序数数列列中中示示
18、例例24#include void main()int a9=1,2,3,4,5,6,7,8,9;int i,j,n,temp;printf(Please input times:);scanf(%d,&n);for(i=1;i=n;i+)temp=a0;for(j=0;j=7;j+)aj=aj+1;/*各各元元素素值值依依次次被被后后续续元元素素值值替替代代*/a8=temp;for(i=0;i9;i+)printf(%4d,ai);举举例例:数数组组元元素素循循环环移移位位例例5.9 将将一一维维数数组组中中元元素素向向左左循循环环移移位位,移移位位次次数数由由键键盘盘输输入入。25举举例
19、例:求求出出一一维维数数组组a中中的的最最小小元元素素#include void main()int a10,i;int amin;for(i=0;i 10;i+)scanf(%d,&a i );/*定定义义数数组组a存存放放若若干干个个数数据据*/amin=a 0;/*a 0 作作为为最最小小值值的的初初值值*/*输输入入数数组组a的的值值*/for(i=1;i 10;i+)if(a i amin)amin=a i;printf(最最小小元元素素为为%d n,amin);/*定定义义amin存存放放最最小小值值*/*记记下下新新的的最最小小值值*/26举举例例:求求出出一一维维数数组组a中中
20、的的最最小小元元素素及及其其下下标标#include void main()int a10,i;int amin ;for(i=0;i 10;i+)scanf(%d,&a i );amin=a 0;min_at=0;/*a 0 作作为为最最小小值值的的初初值值*/for(i=1;i 10;i+)if(a i amin)amin=a i;/*记记下下当当前前最最小小值值的的下下标标*/*记记下下新新的的最最小小值值和和下下标标*/printf(最最小小元元素素下下标标是是%dn,min_at);/*定定义义amin存存放放最最小小值值,min_at 存存放放其其下下标标*/,min_at min
21、_at=i;printf(最最小小元元素素为为%d n,amin);27求求出出一一维维数数组组a中中的的最最小小元元素素及及其其下下标标#include void main()int a10,i;int min_at;for(i=0;i 10;i+)scanf(%d,&a i );min_at=0;/*a 0作作为为最最小小值值初初值值,记记下下其其下下标标*/for(i=1;i 10;i+)if(a i a min_at)min_at=i;/*记记下下新新的的最最小小值值的的下下标标*/printf(最最小小元元素素为为%d,下下标标是是%dn,amin_at,min_at);/*定定义义
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 新教材 PPT 课堂 课件 数组
限制150内