1、东华大学东华大学 通信与电子工程系通信与电子工程系第七章 数组一维数组二维数组及多维数组二维数组及多维数组字符数组和字符串字符数组和字符串数组概念东华大学东华大学 通信与电子工程系通信与电子工程系东华大学东华大学 通信与电子工程系通信与电子工程系东华大学东华大学 通信与电子工程系通信与电子工程系输入输入5个按学号排列的学生某门课的成绩表,要求按与输入次序相个按学号排列的学生某门课的成绩表,要求按与输入次序相反的顺序输出反的顺序输出#includevoid main()float s1,s2,s3,s4,s5;printf(“enter five scores:);scanf(%f,%f,%f,
2、%f,%f,&s1,&s2,&s3,&s4,&s5);printf(nThe score in reverse order are:);printf(%fn,s5);printf(%fn,s4);printf(%fn,s3);printf(%fn,s2);printf(%fn,s1);这些数据具有共同的这些数据具有共同的特点特点:1.由若干分量构成;2.数据的各个分量都是同一类型;3.这些分量是按一定顺序排列的。东华大学东华大学 通信与电子工程系通信与电子工程系数组概念数组概念 构造数据类型之一构造数据类型之一 数组:按序排列的具有相同类型的变量的集合。用数数组:按序排列的具有相同类型的变量的
3、集合。用数组名标识这一组数。组名标识这一组数。元素:属同一数据类型,用数组名和下标确定数组中元素:属同一数据类型,用数组名和下标确定数组中的元素。的元素。数组元素的作用相当于简单变量数组元素的作用相当于简单变量东华大学东华大学 通信与电子工程系通信与电子工程系一维数组的定义一维数组的定义v定义方式:定义方式:数据类型数据类型 数组名数组名 常量常量表达式表达式;合法标识符合法标识符代表数组元素的个数,即数组长度代表数组元素的个数,即数组长度下标从下标从0开始开始7.1 7.1 一维数组一维数组例:例:int a5;表示有表示有5个元素个元素,元素的下标从元素的下标从0开始开始.数组数组a的元素
4、分别为:的元素分别为:a0,a1,a2,a3,a 4例例 int i=15;int datai;(不能用变量定义数组长度不能用变量定义数组长度)例例 define M 20 float y4*M+1;(合法,合法,M是符号常量是符号常量)东华大学东华大学 通信与电子工程系通信与电子工程系一维数组的存储一维数组的存储lC编译程序用连续的内存单元存放各个元素编译程序用连续的内存单元存放各个元素例例 int a6;a00145a1a2a3a4a523a编译时分配连续内存编译时分配连续内存内存总字节数内存总字节数=数组长度数组长度*sizeof(元素数据类型元素数据类型)如:总字节数如:总字节数=6*
5、2=12数组名代表的是数组数组名代表的是数组在内存中的首地址,在内存中的首地址,是是地址常量地址常量东华大学东华大学 通信与电子工程系通信与电子工程系v数组必须数组必须先定义先定义,后使用后使用v数组元素表示形式:数组元素表示形式:数组名数组名 下标下标 其中:下标可以是常量或整型表达式其中:下标可以是常量或整型表达式例例 int a10;printf(“%d”,a);()必须必须 for(j=0;j10;j+)printf(“%dt”,aj);()例例 int t,data5;t=data2;/引用引用data数组中序号为数组中序号为2的元素。的元素。一维数组的引用一维数组的引用注意:注意:
6、只能逐个引用数组元素,不能一次引用整个数组只能逐个引用数组元素,不能一次引用整个数组东华大学东华大学 通信与电子工程系通信与电子工程系用数组实现用数组实现#includevoid main()int i;float s100;printf(Enter the scores:);for(i=0;i=0;i-)/数组元素的输出数组元素的输出 printf(%fn,si);东华大学东华大学 通信与电子工程系通信与电子工程系v初始化方式 在定义数组时,为数组元素赋初值(在编译阶段使之得到初值)int a5=1,2,3,4,5;等价于:a0=1;a1=2;a2=3;a3=4;a4=5;v说明:l数组不初
7、始化,其元素值为随机数 数组不进行初始化时,编译器不为其自动指定初始数组不进行初始化时,编译器不为其自动指定初始值。其初始值为系统分配给数组各元素的内存单元原值。其初始值为系统分配给数组各元素的内存单元原来的值,这个值是不可预知的。来的值,这个值是不可预知的。一维数组的初始化东华大学东华大学 通信与电子工程系通信与电子工程系 对全部元素赋初值。对全部元素赋初值。如:如:int a10=10,11,12,13,14,15,16,17,18,19表示数组元素的值为:a0=10;a1=11;a9=19;在对全部数组元素赋初值时,可不指定数组长度 如:如:int a=1,2,3,4,5,6;/编译系统
8、根据初值个数确定数组长度编译系统根据初值个数确定数组长度东华大学东华大学 通信与电子工程系通信与电子工程系 对部分元素赋初值对部分元素赋初值(前面的连续元素前面的连续元素)。如:在此,只有前5个元素初值确定,后面5个元素的值为0。int b10=0,1,2,3,4;表示数组元素的值为:b0=0;b1=1;b2=2;b3=3;b4=4;东华大学东华大学 通信与电子工程系通信与电子工程系#include void main()int i,b10=0,1,2,3,4;for(i=0;i10;i+)printf(%dn,bi);东华大学东华大学 通信与电子工程系通信与电子工程系注意:注意:不能只对不能
9、只对不连续部分元素不连续部分元素或或后面的连续后面的连续元素元素赋初值。赋初值。语句语句:int a10=,1,2,3,4,5;是错误的int a10=1,3,5,7,9,;是错误的。错误:错误:初始值的个数大于元素的个数初始值的个数大于元素的个数如:int b3=3,6,2,7,3,1,9;是错误的东华大学东华大学 通信与电子工程系通信与电子工程系给一个不多于给一个不多于9位的正整数,要求:位的正整数,要求:1)求出它是几位数;)求出它是几位数;2)分别输出每一位数字;分别输出每一位数字;3)按逆序输出各位数字)按逆序输出各位数字#includevoid main()long int num
10、ber,num;int i,j,d9;printf(请输入一个位数请输入一个位数9)/i的当前值为该数的位数的当前值为该数的位数printf(输入的整数已超出范围!输入的整数已超出范围!n);elseprintf(%ld的位数为:的位数为:%dn,number,i);printf(它的每位数字分别为:它的每位数字分别为:);for(j=i-1;j=0;j-)/分别输出该数的各位数分别输出该数的各位数字字printf(%3d,dj);printf(n);printf(将该数逆序输出为:将该数逆序输出为:);for(j=0;ja1,则交换;然后比较第二个数与第三个数;依次类推,则交换;然后比较第二
11、个数与第三个数;依次类推,直至第直至第n-1个数和第个数和第n个数比较为止个数比较为止第一趟冒泡排第一趟冒泡排序序,结果,结果最大最大的数被安置在最后一个元素位置上的数被安置在最后一个元素位置上(2)对前)对前n-1个数进行第二趟冒泡排序,结果使个数进行第二趟冒泡排序,结果使次大次大的数被安置在第的数被安置在第n-1个元素位置个元素位置(3)重复上述过程,共经过)重复上述过程,共经过n-1趟冒泡排序后,排序趟冒泡排序后,排序结束结束例 用冒泡法对8个数排序东华大学东华大学 通信与电子工程系通信与电子工程系例例38 49 65 76 13 27 30 97 第一趟第一趟38 49 65 13 2
12、7 30 76 第二趟第二趟38 49 13 27 30 65 第三趟第三趟38 13 27 30 49 第四趟第四趟13 27 30 38 第五趟第五趟13 27 30 第六趟第六趟49 38 65 97 76 13 27 30 初始关键字初始关键字n=838497697139797273097137676762730136527653065131349493049273827383038 13 27 第七趟第七趟例例 用冒泡法对用冒泡法对8个数排序(图解)个数排序(图解)东华大学东华大学 通信与电子工程系通信与电子工程系#define N 8#includevoid main()int i
13、,j,t,aN;printf(“Input 8 numbers to be sorted:n);for(i=0;iN;i+)scanf(%d,&ai);for(j=0;jN-1;j+)/外循环外循环j 控制比较的趟数控制比较的趟数N-1for(i=0;iai+1)t=ai;ai=ai+1;ai+1=t;printf(n the sorted numbers:n);for(i=0;iN;i+)printf(%5d,ai);printf(n);东华大学东华大学 通信与电子工程系通信与电子工程系二维数组的定义二维数组的定义v定义方式:定义方式:数据类型数组名数据类型数组名常量表达式常量表达式常量表达
14、式常量表达式;例例 int a34;float b25;int c234;int a3,4;()行数行数列数列数元素个数元素个数=行数行数*列列数数7.2 二维数组及多维数组二维数组及多维数组东华大学东华大学 通信与电子工程系通信与电子工程系例例 int a34;20161720181920202120222320089201011201213201415200012002320045200067a00 a01 a02 a03a10 a11 a12 a13a20 a21 a22 a23每个元素每个元素ai由包含由包含4个元素个元素的一维数组组成的一维数组组成二维数组二维数组a是由是由3个元素个元素a0,a1,a2,组成组成a0a1a2行名行名014523a01a02a03a10a11a00a13a20a21a22a23a1267101189a0a1a2二维数组理解二维数组理解一维数组的元素又是一个一维数组一维数组的元素又是一个一维数组