### 一维数组
##### 1.定义:
a.可以用来表达类型相同的元素的集合,集合的名字就是数组名。
b.数组里的元素都有编号,元素的编号叫下标。通过数组名和下标,就能访问 元素。
c.一维数组的定义方法如下: 类型名数组名[元素个数];
dl其中“元素个数”必须是常量或常量表达式,不能是变量,而且其值必须是 正整数。元素个数也称作“数组的长度”。
e.数组下标从0开始,N个元素的数组,下标从0 至 N-1
##### 2.例子
int a[100];
//名字为a的数组,有100个元素,每个元素都是一个int型变量。
lT a[ N ];
//T为类型名,如char,double,int等。
//N为正整数或值为正整数的常量表达式。
数组a有N个元素,每个元素都是一个类型为T的变量。 N个元素在内存里是一个挨一个连续存放的。 a数组占用大小总共为 N × sizeof(T)字节的存储空间。
表达式“sizeof(a)”的值就是整个数组的体积,即N × sizeof(T)。
数组名a代表数组的地址,假设为p,则变量a[i]的地址就是 p+i*sizeof(int)
#### 3.数组得初始化
在定义一个一维数组的同时,就可以给数组中的元素赋初值:
类型名数组名[常量表达式]={值,值……值};
{ }中的各数据值即为各元素的初值,值之间用逗号间隔
数组初始化时,{ }中值的个数可以少于元素个数。相当于只给前面部分元素 赋值,而后面的元素,其存储空间里的每个字节都被写入二进制数0:
int a[10]={0,1,2,3,4};
只给a[0]~a[4]5个元素赋值,而后5个元素自动赋0值
#### 6.数组越界
l用变量作为数组下标时,不小心会导致数组越界(变量下标值 变为负数,或者太大)
l可能引起意外修改其他变量的值,导致程序运行结果不正确 l可能试图访问不该访问的内存区域,导致程序崩溃
l数组越界的程序,用某些编译器编译后可能可以正确运行,换一 个编译器编译后就运行错误
#### 5.写一个一维数组的题目,求素数
```cpp
#include //筛法求素数
#include using namespace std;
#define MAX_NUM 10000000 bool isPrime[MAX_NUM + 10]; //最终如果isPrime[i]为1,则表示i是素数 int main() {
for( int i = 2;i <= MAX_NUM; ++i) //开始假设所有数都是素数 isPrime[i] = true;
for( int i = 2;i <= MAX_NUM; ++i) { //每次将一个素数的所有倍数标记为非素数
if( isPrime[i]) //只标记素数的倍数
for( int j = 2 * i; j <= MAX_NUM; j += i)
isPrime[j] = false; //将素数 i 的倍数标记为非素数
}
for( int i = 2;i <= MAX_NUM; ++i)
if( isPrime[i])
cout << i << endl;
return 0;
}```c
### 二维数组
#### 1.定义:
定义N行M列的二维数组:
T a[N][M]; // M、N : 正整数,或值为正整数的常量表达式
// T :类型名,如char , double, int等。
每个元素都是一个类型为T的变量 lN×M个元素在内存里是一个挨一个连续存放的。 l
数组占用了一片连续的、大小总共为 N×M×sizeof(T)字节的存储空间。 l
表达式“sizeof(a)”的值就是整个数组的体积,即N×M×sizeof(T)。
访问数组元素的方法: 数组名[行下标][列下标] 例如: a[i][ j] 行下标和列下标都从0开始
#### 2.访问方式:
l数组T a[N][M] 每一行都有M个元素
l第i行的元素就是a[i][0]、a[i][1]……a[i][M-1]。 同一行的元素,在内存中是连续存放的。
l第j列的元素的元素,就是a[0][ j]、a[1][ j]……a[N-1][ j]。
la[0][0]是数组中地址最小的元素。如果a[0][0]存放在地址n,则a[i][ j]存放的 地址就是
**n + i × M× sizeof(T) + j × sizeof(T)**
#### 3.遍历一个二维数组,将其所有元素逐行依次输出:
#define ROW 20
#define COL 30
int a[ROW][COL];
for( int i = 0; i < ROW ; ++i) {
for( int j = 0; j < COL ; ++j )
cout << a[i][j] << " ";
cout << endl;
}
#### 4.一个关于二维数组得程序--矩阵乘法
```cpp
#include using namespace std;
#define ROWS 8
#define COLS 8
int a[ROWS][COLS];
int b[ROWS][COLS];
int c[ROWS][COLS]; //结果 i
nt main() {
int m,n,p,q;
cin >> m >> n;
for(int i = 0;i> a[i][j];
cin >> p >> q;
for(int i = 0;i
> b[i][j];
for(int i = 0; i < m; ++i) {
for(int j = 0; j < q; ++j) {
c[i][j] = 0;
for(int k = 0; k < n; ++k)
c[i][j] += a[i][k] * b[k][j];
}
}
for(int i = 0;i
0.0分
0 人评分