C语言基础 模块4 part1
2000年1月25日 北京理工大学 / 1 数组的基本概念 如何处理 一个班学生的学习成绩? 一行文字怎样存储? 一个矩阵怎样存储 ?...... 1 数组的基本概念(续) 其中:mark、str、a 是数组名。 方括号内是数组的长度。 下标的个数称为数组的维数,mark、str是一维数组、a是二维数组。 数组的成员称为数组元素。 数组元素的类型称为该数组的基类型。数组mark的基类型是int,数组str的基类型是char。 2 一维数组 2 一维数组(续) 常量表达式 是数组元素的个数,即数组长度。 它必须是常量。 mark的长度是100 str的长度是200 2 一维数组(续) ① float a[0];/* 数组大小为0没有意义 */ ② int b(2); /* 不能使用圆括号 */ ③ int k, a[k];/*不能用变量说明数组大小 */ ④ int d[2.9];/*定义数组大小的表达式必须是整型常 量表达式 */ 2 一维数组(续) 在说明语句中,方括号内的值是数组中元素的总数量。 如:int a[10]; 说明数组a一共有10个元素 数组下标的起始值是0。即,引用数组的第一个元素的下标是0。 数组a的10个元素分别是:a[0]、a[1]、…、a[9]。 2 一维数组(续) 数组中的每个元素在功能上等价于一个一般的变量。 例如:输入100个学生成绩,并求出总成绩。 一维数组: float mark[100]; 2 一维数组(完) 例1 反向输出数组中各元素的值。 #include void main( ) {static int a[5] = { 10, 20, 30, 40, 50 }; /* 说明一个数组并进行初始化 */ int i=5; while ( - -i >= 0 ) printf("a[%d]=%d\n", i, a[i]); /* 循环控制变量i作为数组的下标 */ } 2 一维数组-冒泡排序 冒泡排序法思想:假设6个整数为7、-3、43、0、1和23 2 一维数组-冒泡排序(续) 冒泡排序程序:当 n=6 时,进行程序抽象 2 一维数组-冒泡排序(完) 程序说明与注释 #include #define N 6 void main ( ) { int i, j, t, a[N]; for (i=0; i a[j+1] ) { t=a[j]; a[j]=a[j+1]; a[j+1]=t; } for (i=N-1; i>=0; i--)/* 输出排序结果 */ printf("%5d", a[i]); } 2 一维数组-选择排序 冒泡排序的缺陷: 在比较交换的过程中大的数不能一次到位,效率低。 2 一维数组-选择排序(续) 问题 将 23、1、0、43、-3 和 7 从小到大排列。 选择排序法 若有N个数,则需要进行N-1轮排序处理。 第 1 轮排序从1~N个数中找出最小的数,然后将它与第1个数交换。第1个数则是最小的数。 第 2 轮排序从2~N个数中找出最小的数,然后将它与第2个数交换。第2个数则是次小的数。 经过 N-1 轮处理,完成全部N个数排序。 编程时使用二重循环。外面的大循环控制进行N-1轮排序,小循环找出第 i 轮的最小值。 2 一维数组-选择排序(续) 2 一维数组-选择排序(续) 2 一维数组-选择排序(续) 程序说明与注释 #define N 6 void main ( ) {int i,j,t,p, a[N]; for (i=0; i