第7章数组
第7章 数组
主要内容: 1、一维数组 2、二维数组 3、字符数组和字符串 重点: 数组的定义和数组元素的引用
数组概述 ■数组:用于保存一批相同类型的数据 ■属构造类型 数组名:一批同类型数据共有的名字。 下标:数组中的各个数据用下标来区分。 ■例如,一组实验数据、一批学生成绩、表、矩阵等 的处理,均用数组数据类型表示
数组概述
7.1一维数组 例71输入50个整数,按逆序输出。 maino i int a[50], i; 定义数组a和循环变量i* for(i=0;i=0;j-)/*逆序输出50个整数* printf(9/",ali); a[o]a[a[2]a3]a[4].a-49
7.1 一维数组 …
维数组:每个数组元素只带有一个下标 维数组的一般形式 类型说明符数组名常量表达式 如: float score|30; fomt是类型说明符,定义了该数组中元素的类型。 score是数组名,是这一组数据共有的的名字; 30是常量表达式表示数组的长度,即数组元素的个 数。 也就是说:数组 score可以保存30个foat型的数据。 注意:定义数组时长度必须是确定的值。 例如: int aal l;(eror) int n; float xsn];(error)
数组元素的引用:数组名下标 如:a是数组a中下标为i的数组元素; a|0是下标为0的数组元素。 C语言的规定:数组的下标从0开始。 比如数组a50包含50个数组元素,分别是:a|0al al2……a|49 即下标的范围为0-49,不存在数组元素 corel50 若使用a50是危险的,为什么? 维数组的存储格式:每个数组占用一片连续的存储单 元,按下标次序依次存放各元素。 如 int data10;数组data占2*10=20个字节 data[ol datal ll data[21 datas
data[0] data[1] data[2] …… data[9]
例73编程实现:输入某门课30人的成绩(0~100) 要求将高于平均分的那些成绩打印出来 分析数据结构:30人的成绩,类型相同,可用一维 数组来保存。 分析算法: Sl:输入30人的成绩并累加,用循环实现,循环体 为“输入第k个人的成绩、并累加入部分和” S2:求平均 S3:求高于平均分的成绩。也用循环实现,循环体 为“将第k个成绩平均分比较,若高,则输出”; 循环条件为“k<30,k的初值为0,增值为 k++
#definen 3 maino i float scoreN, sum, average; int k; printf(n enter %d scores:", N; sum=D for(k=0;k<Nk+)/输入N个成绩,存入数组,并累加 scanf( %of",&score D); sum=sum+score[ 3 average=sum/N;求平均 printf( n average=%6.If, average); r(=水<Nk+ ii(scorelk ayerage) printi(n %o6." seore[kj
例74用起泡法对N个整数由小到大排序。 起泡排序的基本思想是:相邻两个元素比较,按要求的顺序 排放,比较一遍后,最大的元素被换到待排序数列的最后位 置。对待排序序列依次重复上述过程,直至全部排完为止。 数据结构:N个整数用一维整型数组保存。 算法:(设N=5待排序的数据为:321081) 起泡排序过程为: 第一遍:238110 第二遍:231810 第三遍:21380 第四遍:123810 ■分析:当待排序数据个数n=5时,共排n-=4遍,第遍待排 序序列是从第个元素到第个元素。用双重循环实现。 流程图:
■例74起泡排序。 #definen 5 mainO int到l=10,3,2,10,8,1j;intt for(i=l;iaj+1)若相邻两数逆序,则交换* it=ajl;all=aj+l:aj+1=t; printf("In for(iFl; i<=N; i++) printf("%d a[iD; 数组a的长度为11,由初始值的个数决定。其中a1a0为 有效数据,a|0未用,主要是为了符合我们的计数习惯