移动通信软件编程基础-c语言第7章数组.ppt
移动通信软件编程基础 C语言,知识回顾,循环结构,for语句三个表达式,循环变量赋初值,循环条件,循环变量增值,for语句可以完全替换while语句,for语句的三个表达式都可以省略,但不管怎么省略,两个分号不能省略,,而且这三个表达式的功能要在或前或后的其他地方以其他的形式表现出来,break 语句用在循环中时,可以直接终止循环,,将控制转向本层循环后面的语句,continue 语句的作用是跳过循环体中剩余的语句而执行下一次循环,for语句嵌套的用法,可以和while语句、do-while语句可以互相嵌套,7,数组,第,章,本章目标,理解数组的概念及其用法,掌握并能熟练使用一维数组,掌握二维数组的使用,理解数组实现常用的算法,构造类型,迄今为止,我们使用的都是属于基本数据类型(整型,字符型,实型)的数据,C语言还提供了构造类型的数据。构造类型数据是由基本类型数据按照一定规则组成的。,数组程序举例,#include#denfine N 5void main()int i,aN;printf(请输入%d个整数:“,N);for(i=0;i N;i+)scanf(%d,数组的必要性,数组的必要性,一年级,二年级,三年级,四年级,五年级,3,2,2,3,3,程序中的数组,学校中的学生,在程序设计中,为了处理方便,把具有相同类型的数据有序的组织起来,就是数组,C语言一维数组定义,20,25,20,20,15,class,4,3,2,1,0,class4,class3,class2,class1,class0,数组名,数组元素,下标,数组的大小,int class5,数组的定义:数据类型 数组名常量表达式,一维数组,int a10;,数组元素:a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,10个数组元素,定义数组:,内存,一维数组的声明,一维数组声明的一般形式:,类型说明符 数组名常量表达式,例如:int student50定义了一维数组student,数组名为student,数组元素的个数为50,数组元素类 型为整型。,一维数组的声明,类型说明符:指的是数组元素的类型 数组名:符合标示符命名规则 常量表达式:表示数组元素的个数(数组的大小)。可以是整型常量或符号常量,不允许使用变量。常量表达式在说明数组元素的个数时,也确定了数组元素下标的个数。数组元素是变量,所以要占用内存空间。只有命名了数组元素的类型和个数之后编译器才能为数组分 配内存空间,并且所分配的内存空间是连续的。,一维数组的初始化 2-1,对数组所有元素赋初值,可以省略数组声明中数组的长度,例如:int class5=20,30,40,50,60;省略数组长度 int class=20,30,40,50,60;,两种方式赋值后,数组元素的值分别是:class0=20,class1=30,class2=40,class3=50,class4=60,一维数组的初始化 2-2,只给数组中部分元素赋初值,数组长度不能省略,例如:int class5=20,30,40;,此时只对数组的前三个元素赋初值:class0=20,class1=30,class2=40,其余元素为编译系统制定的默认初值0。,对数组的所有元素赋初值0,例如:int class5=0,0,0,0,0;或 int class5=0;,一维数组中元素的访问方式,一维数组中的元素访问的一般形式,数组名 整型表达式,#include void main()int i,iNumber5;for(i=0;i=4;i+)iNumberi=2*i+1;printf(iNumber%d=%dn,i,iNumberi);,一维数组示例,1,3,5,7,9,使用数组时应注意的原则,数组要先声明后使用,数组分配的是连续的内存空间,数组名是数组的首地址,声明数组时,变量后面的内要使用常量表达式;不能使用变量;对数组元素进行引用时,数组名后面的内的整型表达式可以是常数、已经赋值的整型变量或整型表达式。下标都是从零开始,都不能越界。,多维数组,当数组元素的下标在2个或2个以上时,该数组称为多维数组。多维数组的数组元素具有多个下标:数组名下标0 下标1 下标k。多维数组在三维空间中不能用形象的图形表示。,二维数组的声明,二维数组声明的一般形式:,类型说明符 数组名常量表达式 常量表达式,例如:int pew45定义了二维数组pew,数组名为pew,数组元素的个数为20,数组元素类型为整型。,二维数组,float b44;,数组元素:b00,b01,b02,b03,b10,b11,b12,b13b20,b21,b22,b23,b30,b31,b32,b33,16个数组元素,定义数组:,第一行,第二行,第三行,第四行,第一列,第二列,第三列,第四列,b01,b02,b03,b10,b11,b12,b13,b21,b20,b22,b23,b30,b31,b32,b33,b00,二维数组的声明,二维数组定义中的第1个下标表示该数组具有的行数,第2个下标表示该数组具有的列数,两个下标之积是该数组具有的数组元素的个数。二维数组也是按顺序进行存放的,并且是按行存放,即在内存中,先顺序存放第一行的元素,再存放第二行的元素,以后依次存放后几行的元素。二维数组可以看作是一种特殊的一维数组。,二维数组可以看作是特殊的一维数组,int a4;一维数组名下标int b44;二维数组名行下标 列下标,二维数组可以看作是一种特殊的一维数组,pew45,二维数组的初始化 2-1,分行给二维数组所有元素赋初值,int pew33=1,2,3,4,5,6,7,8,9;,按数组排列的顺序将所有元素写在一个花括弧内,int pew33=1,2,3,4,5,6,7,8,9;,给二维数组所有元素赋初值,二维数组第一维的长度可以省略,但不能省略第二维的长度。,int pew 3=1,2,3,4,5,6,7,8,9;,二维数组的初始化 2-2,在定义时也可以只对部分元素赋初值而省略第一维的长度1。分行赋初值,其余元素值自动为0。,int pew 3=1,2,4,7,8;赋值后:pew=1,2,0,4,0,0,7,8,0;,2。元素写在一个花括弧内,其余元素值自动为0。,int pew 3=1,2,3,4,5,6,7;赋值后:pew=1,2,3,4,5,6,7,0,0;,二维数组中元素的访问方式,二维数组中的元素访问的一般形式,数组名 整型表达式 整型表达式,教室共有10排座位、每排有8个座位。座位编号从前向后、自左向右分别为1到10、1到8。,题目:,#include void main()int i,j,iClasspew108;printf(各座位的座位号为:n);for(i=0;i 10;i+)for(j=0;j 8;j+)iClasspewij=(i+1)*10+(j+1);printf(%4d,iClasspewij);printf(n);,过程演示,二维数组示例,在程序设计中,为了处理方便,把具有相同类型的若干数据按有序的形式组织起来,就是数组,它包含以下三个方面的含义:数组就是包含了多个元素的数据集合 数组中的元素在内存中是连续存放的 数组中的元素都属于相同的数据类型,数组特性,类型说明符 数组名常量表达式 常量表达式,说明数据类型,数组的大小,数组的算法,关于数组的基本算法:求最值查找排序插入,求任意6个数中的最大值和最小值。,题目:,#include int i,iMax,iMin,a6;printf(input 6 numbers:n);for(i=0;i iMax)iMax=ai;if(ai iMin)iMin=ai;printf(iMax=%dn iMin=%dn,iMax,iMin);,求最值算法的实现 9-1,#include int i,iMax,iMin,a6;printf(input 6 numbers:n);for(i=0;i iMax)iMax=ai;if(ai iMin)iMin=ai;printf(iMax=%dn iMin=%dn,iMax,iMin);,求最值算法的实现 9-2,12,52,48,0,56,3,#include int i,iMax,iMin,a6;printf(input 6 numbers:n);for(i=0;i iMax)iMax=ai;if(ai iMin)iMin=ai;printf(iMax=%dn iMin=%dn,iMax,iMin);,求最值算法的实现 9-3,12,52,48,0,56,3,iMax=a0=,iMin=a0=,12,12,12,12,#include int i,iMax,iMin,a6;printf(input 6 numbers:n);for(i=0;i iMax)iMax=ai;if(ai iMin)iMin=ai;printf(iMax=%dn iMin=%dn,iMax,iMin);,求最值算法的实现 9-4,12,52,48,0,56,3,12,12,#include int i,iMax,iMin,a6;printf(input 6 numbers:n);for(i=0;i iMax)iMax=ai;if(ai iMin)iMin=ai;printf(iMax=%dn iMin=%dn,iMax,iMin);,求最值算法的实现 9-5,12,52,48,0,56,3,12,12,iMax=12,iMin=12,a1=52,iMax=52,iMin=12,52,#include int i,iMax,iMin,a6;printf(input 6 numbers:n);for(i=0;i iMax)iMax=ai;if(ai iMin)iMin=ai;printf(iMax=%dn iMin=%dn,iMax,iMin);,求最值算法的实现 9-6,12,52,48,0,56,3,52,12,iMax=52,iMin=12,a2=48,iMax=52,iMin=12,#include int i,iMax,iMin,a6;printf(input 6 numbers:n);for(i=0;i iMax)iMax=ai;if(ai iMin)iMin=ai;printf(iMax=%dn iMin=%dn,iMax,iMin);,求最值算法的实现 9-7,12,52,48,0,56,3,52,12,iMax=52,iMin=12,a3=0,iMax=52,iMin=0,0,#include int i,iMax,iMin,a6;printf(input 6 numbers:n);for(i=0;i iMax)iMax=ai;if(ai iMin)iMin=ai;printf(iMax=%dn iMin=%dn,iMax,iMin);,求最值算法的实现 9-8,12,52,48,0,56,3,52,0,iMax=52,iMin=0,a4=56,iMax=56,iMin=12,56,#include int i,iMax,iMin,a6;printf(input 6 numbers:n);for(i=0;i iMax)iMax=ai;if(ai iMin)iMin=ai;printf(“max=%dn min=%dn,iMax,iMin);,求最值算法的实现 9-9,12,52,48,0,56,3,56,0,iMax=56,iMin=0,a5=3,iMax=56,iMin=0,Input 6 number:12 52 48 0 56 3 max=56min=0,求最值的扩展问题,作业:求任意6个数中的最大值和最小值,同时输出最大值和最小值对应的下标。,任意输入5个整数存入到数组中,从这5个数中查找某一个数字的信息,并给出结果。如果找到了,输出该数在数组中的位置;如果没有找到,输出信息“数组中没有找到该数字”。,题目:,#include int i,a5,iNumber;printf(请输入要查找的数字:);scanf(%d,查找算法的实现 6-1,#include int i,a5,iNumber;printf(请输入5个数字:);for(i=0;i 5;i+)scanf(%d,查找算法的实现 6-2,4,3,67,56,90,56,#include int i,a5,iNumber;printf(请输入要查找的数字:);scanf(%d,查找算法的实现 6-3,4,3,67,56,90,56,a0=iNumber,56,4,不相等,#include int i,a5,iNumber;printf(请输入要查找的数字:);scanf(%d,查找算法的实现 6-4,4,3,67,56,90,56,a1=iNumber,56,3,不相等,#include int i,a5,iNumber;printf(请输入要查找的数字:);scanf(%d,查找算法的实现 6-5,4,3,67,56,90,56,a2=iNumber,56,67,不相等,#include int i,a5,iNumber;printf(请输入要查找的数字:);scanf(%d,查找算法的实现 6-6,4,3,67,56,90,56,a3=iNumber,56,56,相等,(i=3)5,在数组的第4个位置找到了数字56!,查找扩展问题,作业:任意输入5个整数存入到数组中,从这5个数中查找某一个数字的信息,并给出结果:如果找到多个,一并输出;如果没有找到,输出信息“数组中没有找到该数字”。,用冒泡法对任意输入的5个数字按照从小到大的顺序排序输出。例如:23 78 6 10 48 排序后:6 10 23 48 78,冒泡法:将相邻两个数比较,将较大的数移到后面题目:,#include int i,j,temp,a5;printf(请任意输入5个整数:);for(i=0;i aj+1)temp=aj;aj=aj+1;aj+1=temp;printf(输出排序后的整数:);for(i=0;i 5;i+)printf(%d,ai);printf(n);,排序算法的实现 11-1,23,78,6,10,48,用冒泡法对任意输入的5个数字按照从小到大的顺序排序输出。,题目:,#include int i,j,temp,a5;printf(请任意输入5个整数:);for(i=0;i aj+1)temp=aj;aj=aj+1;aj+1=temp;printf(输出排序后的整数:);for(i=0;i 5;i+)printf(%d,ai);printf(n);,排序算法的实现 11-2,i=0,j=0,78,23,a0,a1,a2,a3,a4,6,10,48,用冒泡法对任意输入的5个数字按照从小到大的顺序排序输出。,题目:,#include int i,j,temp,a5;printf(请任意输入5个整数:);for(i=0;i aj+1)temp=aj;aj=aj+1;aj+1=temp;printf(输出排序后的整数:);for(i=0;i 5;i+)printf(%d,ai);printf(n);,排序算法的实现 11-3,i=0,j=1,a0,a1,a2,a3,a4,78,23,6,10,48,用冒泡法对任意输入的5个数字按照从小到大的顺序排序输出。,题目:,#include int i,j,temp,a5;printf(请任意输入5个整数:);for(i=0;i aj+1)temp=aj;aj=aj+1;aj+1=temp;printf(输出排序后的整数:);for(i=0;i 5;i+)printf(%d,ai);printf(n);,排序算法的实现 11-4,i=0,j=2,6,23,a0,a1,a2,a3,a4,78,10,48,用冒泡法对任意输入的5个数字按照从小到大的顺序排序输出。,题目:,#include int i,j,temp,a5;printf(请任意输入5个整数:);for(i=0;i aj+1)temp=aj;aj=aj+1;aj+1=temp;printf(输出排序后的整数:);for(i=0;i 5;i+)printf(%d,ai);printf(n);,排序算法的实现 11-5,i=0,j=3,6,23,a0,a1,a2,a3,a4,78,48,10,用冒泡法对任意输入的5个数字按照从小到大的顺序排序输出。,题目:,#include int i,j,temp,a5;printf(请任意输入5个整数:);for(i=0;i aj+1)temp=aj;aj=aj+1;aj+1=temp;printf(输出排序后的整数:);for(i=0;i 5;i+)printf(%d,ai);printf(n);,排序算法的实现 11-6,i=1,j=0,48,a0,a1,a2,a3,a4,23,6,10,78,用冒泡法对任意输入的5个数字按照从小到大的顺序排序输出。,题目:,#include int i,j,temp,a5;printf(请任意输入5个整数:);for(i=0;i aj+1)temp=aj;aj=aj+1;aj+1=temp;printf(输出排序后的整数:);for(i=0;i 5;i+)printf(%d,ai);printf(n);,排序算法的实现 11-7,i=1,j=1,48,a0,a1,a2,a3,a4,23,6,10,78,用冒泡法对任意输入的5个数字按照从小到大的顺序排序输出。,题目:,#include int i,j,temp,a5;printf(请任意输入5个整数:);for(i=0;i aj+1)temp=aj;aj=aj+1;aj+1=temp;printf(输出排序后的整数:);for(i=0;i 5;i+)printf(%d,ai);printf(n);,排序算法的实现 11-8,i=1,j=2,a0,a1,a2,a3,a4,23,48,78,10,6,用冒泡法对任意输入的5个数字按照从小到大的顺序排序输出。,题目:,#include int i,j,temp,a5;printf(请任意输入5个整数:);for(i=0;i aj+1)temp=aj;aj=aj+1;aj+1=temp;printf(输出排序后的整数:);for(i=0;i 5;i+)printf(%d,ai);printf(n);,排序算法的实现 11-9,i=2,j=0,10,6,a0,a1,a2,a3,a4,23,48,78,用冒泡法对任意输入的5个数字按照从小到大的顺序排序输出。,题目:,#include int i,j,temp,a5;printf(请任意输入5个整数:);for(i=0;i aj+1)temp=aj;aj=aj+1;aj+1=temp;printf(输出排序后的整数:);for(i=0;i 5;i+)printf(%d,ai);printf(n);,排序算法的实现 11-10,i=2,j=1,10,6,a0,a1,a2,a3,a4,23,48,78,用冒泡法对任意输入的5个数字按照从小到大的顺序排序输出。,题目:,#include int i,j,temp,a5;printf(请任意输入5个整数:);for(i=0;i aj+1)temp=aj;aj=aj+1;aj+1=temp;printf(输出排序后的整数:);for(i=0;i 5;i+)printf(%d,ai);printf(n);,排序算法的实现 11-11,i=2,j=0,10,6,a0,a1,a2,a3,a4,23,48,78,请任意输入5个整数:23 78 6 10 48 输出排序后的整数:6 10 23 48 78,向一个数组按从小到大的顺序输入5个数,将另外输入的一个数字插入到这个数组中,使得插入后的数组元素依然保持有序。,题目:,#define N 5 int i,j,aN+1,x;printf(请从小到大输入5个整数:);for(i=0;i i;j-)aj=aj-1;ai=x;printf(n 插入后的数组元素:n);for(i=0;i N+1;i+)printf(%d,ai);printf(n);,插入算法的实现,过程演示,五个整数存放到数组中,查找第一个大于要插入数的位置,将要插入的数保存到该位置,总结,习题,作业,