制作:方斌 C语言程序设计 教程 郧阳师范高等专科学校 计算机科学系 方斌制作
制 作:方 斌 C语言程序设计 教程 郧阳师范高等专科学校 计算机科学系 方 斌 制作
制作:方斌 第7章数组 为了解决比较复杂的问题,本章介绍C语言提供的 一种最简单的构造类型—数组 7.1一维数组的定义和引用 7.2二维数组的定义和引用 73字符数组与字符串
制 作:方 斌 为了解决比较复杂的问题,本章介绍C语言提供的 一种最简单的构造类型──数组。 7.1 一维数组的定义和引用 7.2 二维数组的定义和引用 7.3 字符数组与字符串 第7章 数 组
制作:方斌 7.1一维数组的定义和引用 711一维数组的定义 712一维数组元素的引用 713一维数组元素的初始化 7.14一维数组应用举例
制 作:方 斌 7.1 一维数组的定义和引用 7.1.1 一维数组的定义 7.1.2 一维数组元素的引用 7.1.3 一维数组元素的初始化 7.1.4 一维数组应用举例
制作:方斌 71.1一维数组的定义 数组:数组是一组有序数据的集合,数组中每一个元素的类型相同。用数 组名和下标来唯一确定数组中的元素。 一、一维数组的定义 定义方式:类型说明符数组名[下标常量表达式] 例、inta[10] 定义一个数组,数组名a,有10个元素,每个元素的类型均为int型。 这10个元素分别是:a[0]、a[1]、a[2]、a[3]、a[4]、…、a[8]、 a[9] 注意: (1)C语言中,数组下标从0开始 (2)C语言不允许对数组的大小做动态定义,如:
制 作:方 斌 7.1.1 一维数组的定义 数组:数组是一组有序数据的集合,数组中每一个元素的类型相同。用数 组名和下标来唯一确定数组中的元素。 一、一维数组的定义 定义方式: 类型说明符 数组名[下标常量表达式] 例、 int a[10] 定义一个数组,数组名a,有10个元素,每个元素的类型均为int型。 这10个元素分别是:a[0]、a[1]、a[2]、a[3]、a[4]、....、a[8]、 a[9]。 注意: (1)C语言中,数组下标从0开始. (2)C语言不允许对数组的大小做动态定义,如:
制作:方斌 int n: scanf(%d",&n) int a[n]; X 因为,在编译时,C编译器根据已知数组大小分配内存。 二、数组元素的引用 C语言规定,不能引用整个数组,只能逐个引用元素,元素引用方式: 数组名[下标] 例 a[0]=a[5]+a[7]-a[2*3]
制 作:方 斌 int n; scanf("%d",&n); int a[n]; × 因为,在编译时,C编译器根据已知数组大小分配内存。 二、数组元素的引用 C语言规定,不能引用整个数组,只能逐个引用元素,元素引用方式: 数组名[下标] 例、 a[0] = a[5] + a[7] - a[2*3]
制作:方斌 [例7.1]使数组元素a[0]~a[9]的值为0~9,然后逆序输出。 maino { int i, a[10] for(i=0;=0;i-) printf(%d " aliD 运行输出: 9876543210
制 作:方 斌 [例7.1] 使数组元素a[0]~a[9]的值为0~9,然后逆序输出。 main() { int i, a[10]; for (i=0;i=0; i--) printf("%d ",a[i]); } 运行输出: 9 8 7 6 5 4 3 2 1 0
制作:方斌 三、一维数组的初始化 初始化:在定义时指定初始值,编译器把初值赋给数组变量。 赋值:使用赋值语句,在程序运行时把值赋给数组变量,如a[O]=2。 1、一般初始化,例、 static int a[10]={0,1,23456,789}; int array[10]={1,2345,6,78,9,10}; 2、部分元素初始化,例、 static int a[10]={01,234}; 仅前5个元素赋初值,后5个元素未指顶初值。 3、全部元素均初始化为0,不允许简写。 static int a[10]={0,0,0,0,0,0,0,0,0,0}; 不能简写为: static int a[10]={0*10};
制 作:方 斌 三、一维数组的初始化 初始化:在定义时指定初始值,编译器把初值赋给数组变量。 赋值:使用赋值语句,在程序运行时把值赋给数组变量,如a[0] = 2。 1、一般初始化,例、 static int a[10] = { 0,1,2,3,4,5,6,7,8,9}; int array[10] = {1,2,3,4,5,6,7,8,9,10}; 2、部分元素初始化,例、 static int a[10] = {0,1,2,3,4}; 仅前5个元素赋初值,后5个元素未指顶初值。 3、全部元素均初始化为0,不允许简写。 static int a[10] = {0,0,0,0,0,0,0,0,0,0}; 不能简写为: static int a[10] = {0*10}; ×
制作:方斌 注意:当程序不给数组指定初始值时,编译器作如下处理: (1)编译器自动把静态数组的各元素初始化为0。 (2)编译器不为动态数组自动指定初始值。 4、如果全部元素均指定初值,定义中可以省略元素的个数,例、 static int a[5]={1,2,345}; 可以写为: static int a[ ] =1, 2, 3, 4, 5); v 四、一维数组程序举例 [例7.2]用数组来处理 Fibonacci数列的前20项。 1=1 n=1 F2=1 n=2 Fn =Fn-1+ Fn-2 n≥3
制 作:方 斌 注意:当程序不给数组指定初始值时,编译器作如下处理: (1)编译器自动把静态数组的各元素初始化为0。 (2)编译器不为动态数组自动指定初始值。 4、如果全部元素均指定初值,定义中可以省略元素的个数,例、 static int a[5] = {1,2,3,4,5}; 可以写为: static int a[ ] = {1,2,3,4,5}; √ 四、一维数组程序举例 [例7.2] 用数组来处理Fibonicci数列的前20项。 F1 = 1 n = 1 F2 = 1 n = 2 Fn = Fn-1 + Fn-2 n ≥ 3
制作:方斌 程序 maino { nt; static int f[20]={1,1};/*f1、千2已知* for(i=2;i<20;i++)f[=f[i-1]+fi2]; for(i=0;i<20;i++) if (i%05==0 printf(\n"); printf(" 12d"f[i]); } }
制 作:方 斌 程序: main() { int i; static int f[20] = {1,1}; /* f1、f2已知 */ for(i=2; i<20; i++) f[i] = f[i-1] + f[i-2]; for(i=0; i<20; i++) { if (i%5 == 0) printf("\n"); printf("%12d",f[i]); } }
制作:方斌 [例7.3]输入10个数,用“起泡法”对10个数排序(由小到大)。 “起泡法”算法:以六个数9、8、5、4、2、0为例。 第1趟比较 第2趟比较 第1趟比较后,剩5个数未排好序;两两比较5次 第2趟比较后,剩4个数未排好序;两两比较4次 第3趟比较后,剩3个数未排好序;两两比较3次 第4趟比较后,剩2个数未排好序;两两比较2次 第5趟比较后,全部排好序;两两比较1次 算法结论:对于n个数的排序,需进行η-1趟比较,第j趟比较需进行nj次 两两比较
制 作:方 斌 [例7.3] 输入10个数,用“起泡法”对10个数排序(由小到大)。 “起泡法”算法:以六个数9、8、5、4、2、0为例。 第1趟比较 第2趟比较 第1趟比较后,剩5个数未排好序;两两比较5次 第2趟比较后,剩4个数未排好序;两两比较4次 第3趟比较后,剩3个数未排好序;两两比较3次 第4趟比较后,剩2个数未排好序;两两比较2次 第5趟比较后,全部排好序;两两比较1次 算法结论:对于n个数的排序,需进行n-1趟比较,第j趟比较需进行n-j次 两两比较