8.2-1 数组的运算
• 在⼀组给定的数据中,如何找出某个数据是否存在?
数组的集成初始化
• 直接⽤⼤括号给出数组的所有元素的初始值
• 不需要给出数组的⼤⼩,编译器替你数数
• 如果给出了数组的⼤⼩,但是后⾯的初始值数量不⾜,
则其后的元素被初始化为0
集成初始化时的定位
Y!
C99 ONL
• ⽤[n]在初始化数据中给出定位
• 没有定位的数据接在前⾯的位置后⾯
• 其他位置的值补零
• 也可以不给出数组⼤⼩,让编译器算
• 特别适合初始数据稀疏的数组
数组的⼤⼩
• sizeof给出整个数组所占据的内容的⼤⼩,单位是字
节
• 可扩展性!
sizeof(a[0])给出数组中单个元素的⼤⼩,于是相除就
得到了数组的单元个数
• 这样的代码,⼀旦修改数组中初始的数据,不需要修
改遍历的代码
数组的赋值
• 数组变量本⾝不能被赋值
• 要把⼀个数组的所有元素交给另⼀个数组,必须采⽤
遍历
遍历数组
• 通常都是使⽤for循环,让循环变量i从0到
度,这样循环体内最⼤的i正好是数组最⼤的有效下标
• 常⻅错误是:
• 循环结束条件是<=数组⻓度,或;
• 离开循环后,继续⽤i的值来做数组元素的下标!
数组作为函数参数时,往往必须再⽤另⼀个参数来传⼊数组的⼤⼩
• 数组作为函数的参数时:
• 不能在[]中给出数组的⼤⼩
• 不能再利⽤sizeof来计算数组的元
素个数!
8.2-2数组的例⼦:素数
判断素数
从2到x-1测试是否可以整除
• 对于n要循环n-1遍
• 当n很⼤时就是n遍
去掉偶数后,从3到x-1 ,每次加2
• 如果x是偶数,⽴刻
• 否则要循环(n-3)/2+1遍
• 当n很⼤时就是n/2遍
⽆须到x-1 ,到sqrt(x)就够了
• 只需要循环sqrt(x)遍
sqrt
判断是否能被已知的且
的素数整除
构造素数表
• 欲构造n以内的素数表
1. 令x为2
2. 将2x、3x、4x直⾄ax
3. 令x为下⼀个没有被标记为⾮素数的数,重复2 ;直
到所有的数都已经尝试完毕
构造素数表
• 欲构造n以内(不含)的素数表
1. 开辟prime[n] ,初始化其所有元素为1,prime[x]为1
表⽰x是素数
2. 令x=2
3. 如果x是素数,则对于(i=2;x*i
4. 令x++ ,如果x
构造素数表
• 算法不⼀定和⼈的思考⽅式相同
8.2-3 ⼆维数组
⼆维数组
•