1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,*,第七章,数组,回顾,2-1,for,循环与,while,循环类似,属于先判断后执行,for,语句中有三个表达式:表达式,1,通常用来给循环变量赋初值;表达式,2,通常是循环条件;表达式,3,用来更新循环变量的值,for,语句中的各个表达式都可以省略,但要注意分号分隔符不能省略,如果省略表达式,2,和表达式,3,需要在循环体内设法结束循环,否则会导致死循环,2,回顾,2-2,break,语句用在循环中时,可以直接终止循环,将控制转向循环后面的语句,continue,语句的作用是跳过循环体中剩余的语句而执行下一次循环,嵌套循环
2、时,必须将被嵌套的循环语句完整地包含在外层循环的循环体内,3,目标,理解为什么要使用数组,理解,C,语言中数组,熟练掌握一维数组的使用,掌握二维数组的使用,熟悉用数组实现常用的算法,4,为什么要使用数组,3-1,唉,有这么多不同主题的书。在哪里才能找到有关中国音乐的书呢?,5,为什么要使用数组,3-2,文学类,计算机类,西方音乐类,中国音乐类,6,为什么要使用数组,3-3,数组,内存,120,65,98,4,数组的元素,容器中保,存的物品,日常生活中的容器,程序中的数组,7,C,语言中的数组,Rate,1.5,3.2,0.09,45.3987,3,2,1,0,Rate,4,数组名,下标,标明了
3、元素在数组中的位置,数组元素,下标,数组大小,数组,是可以在内存中,连续存储,多个元素的结构,数组中的所有元素必须属于,相同的数据类型,8,数组类型,2-1,一维数组,多维数组,89,90,77,示例:学员单门课程的成绩,2-D,3-D,4-D,73,90,33,45,80,87,学号,科目,0,1,0,1,2,示例:学员两门课程的成绩,9,数组类型,2-2,10,声明一维数组,datatype,arrayName,size,;,类型说明符,int,、,char,、,float ,数组名,常量表达式:,数组大小,int,num50;,char list_of_initials20;,doubl
4、e pressure_level6;,#define LIMIT 20,.,int,emp_codesLIMIT,;,11,内存,emp_code0,emp_code1,emp_code2,emp_code3,emp_code4,1299,1499,1699,1899,2099,初始化一维数组,int,emp_code5=1299,1499,1699,1899,2099;,emp_code,其他的初始化情况:,int,arr10=10,9,8,7,6,5,4,3,2,1,0;/,错误!越界了,int,arr10=9,8,7,5;/,正确,后面的,6,个元素未初始化,int,arr,=9,8,7
5、/,正确:元素个数为,3,int,arr,=;/,错误,到底是几个元素?,12,内存,为一维数组动态赋值,float,price4,;,printf(“Enter prices of 4 booksn”);,for(i=0;i=3;i+),scanf(“%f”,&,pricei,);,price0,price1,price2,price3,price,12.34,1002.10,17.5,11.12,13,一维数组,示例,#include,void main(),int,i;,float item_rate5,total=0;,printf(n,请输入商品价格:,);,for(i,=0;i5
6、i+),scanf(%f,&item_ratei,);,total=,total+item_ratei,;,printf(“n,所有商品的合计费用:,%,fn,,,total);,内存,循环执行,5,次,请输入商品价格:,35.50 45.8 23 40.7 80,i,total,0,0,Item_rate,35.50,35.50,45.8,23,40.7,80,6,225.0,所有商品的合计费用:,225.000000,14,二维数组,3-1,datatype,arrayName,rowsize,colsize,;,int num,4,2,;,内存,num,num,0,0,num,0,1,
7、num,1,0,num,1,1,num,2,0,num,2,1,num,3,0,num,3,1,4 X 2=8,8*,sizeof(int,),字节,num,0,0,num,0,1,num,1,0,num,1,1,num,2,0,num,2,1,num,3,0,num,3,1,num,为了便于理解,二维数组一般理解为几行几列的矩阵,15,二维数组,3-2,int books42=11,1294,22,450,33,4000,44,79;,int,arr,3=1,2,3,4,5,6;,int,arr2 =1,2,3,4,5,6;,错误,16,二维数组,3-3,int i,j,num42;,for
8、i=0;i=3;i+),for(j=0;j=1;j+),scanf(%d,&numij,);,i,j,numij,0,0,100,0,1,200,1,0,300,1,1,400,2,0,500,2,1,600,3,0,700,3,1,800,第一行,第二行,第三行,第四行,第一列,第二列,(3,1),800,(3,0),700,(2,1),600,(1,1),400,(0,1),200,(2,0),500,(1,0),300,(0,0),100,行下标,列下标,num0 0,17,二维数组示例,int,i,j,student32;,for(i,=0;i 3;i+),printf(n,输入学号
9、d,两个学期的成绩:,i+1);,for(j,=0;j 2;j+),scanf(%d,&studentij,);,printf(n,学员的学号及其两个学期的成绩为:,n);,printf(n,t,学号,t,第一学期,t,第二学期,);,for(i,=0;i 3;i+),printf(nt,);,printf(%dt,i+1);,for(j,=0;j 2;j+),printf(%dtt,studentij,);,printf(n,);,i=,0,i=1,i=,2,j,=0,65,78,89,j,=1,56,80,66,内层循环执行,6,次,读入,6,个值,输出数组元素的值,输入学号,1,两个
10、学期的成绩:,65 56,输入学号,2,两个学期的成绩:,78 80,输入学号,3,两个学期的成绩:,89 66,学员的学号及其两个学期的成绩为:,学号 第一学期 第二学期,1 65 56,2 78 80,3 89 66,Press any key to continue,18,问题描述:,求一组数中的最大值和最小值。,数组应用,1,void main(),int,num5,max,min,i;,printf,(,请输入,5,个数,:n);,for(i,=0;i5;i+),scanf(%d,&numi,);,max=num0;,min=num0;,for(i,=1;i5;i+),if(max,
11、numi,),min=,numi,;,printf(n,最大值为,:,%,d,max,);,printf(n,最小值为:,%,dn,min,);,读入,5,个值保存在数组中,求最大值和最小值,演示学生用书示例,3,19,问题描述:,输入,10,个数,保存在一个数组中,在数组中查找某个数,给出是否找到的信息。如果找到了,要求输出该数在数组中所处的位置;如果找不到,输出“没有找到!”。,数组应用,2,#define N 10,for(i,=0;i,N;i,+),scanf(%d,&numi,);,printf(n,请输入要查找的数:,);,scanf(%d,&search,);,for(i=0;i
12、N;i,+),if(,numi,=search),break;,if(i,N),printf(n,在数组的第,%d,个位置找到了数字,%d!n,i+1,search);,else,printf(n,没有找到,!,n);,读入,10,个值保存在数组中,在数组中查找,一旦找到,通过,break,语句跳出循环,演示学生用书示例,4,20,问题描述:,编写,C,程序实现冒泡排序算法,按照降序排列一组数。,数组应用,3,#define N 5,int,gradeN,temp,;,for(i,=0;i,N;i,+),scanf(%d,&gradei,);,for(i,=0;i,N;i,+),for(j,
13、0;jN-i-1;j+),if(gradej,gradej+1),temp=gradej+1;,gradej+1=,gradej,;,gradej,=temp;,读入,5,个值保存在数组中,演示学生用书示例,5,16,25,9,90,23,16,25,90,9,9,23,16,90,16,23,25,90,21,问题描述:,如果一个数组中保存的元素是有序的(由大到小),向这个数组中插入一个数,使得插入后的数组元素依然保持有序。,数组应用,4,#define N 5,int,num,N+1,=23,45,60,67,88,in;,printf(n,请输入一个要插入的数:,);,scanf(%d
14、in,);,for(i,=0;iin),break;,for(j,=,N;j,i;j,-),numj,=numj-1;,numi,=in;,printf(n,插入后的数组元素:,n);,for(i,=0;iN+1;i+),printf(%d,numi,);,printf(n,);,演示学生用书示例,6,查找第一个大于要插入数的位置,为要插入的数留出位置,将要插入的数保存到该位置,22,总结,数组是可以在内存中连续存储多个元素的结构数组中的所有元素必须属于相同的数据类型,数组必须先声明,然后才能使用。声明一个数组只是为该数组留出内存空间,并不会为其赋任何值,数组的元素通过数组下标访问,一维数组可用一个循环动态初始化,而二维数组可用嵌套循环动态初始化,二维数组可以看作是由一维数组的嵌套而构成的,23,






