c语言数组t,C语言基础之数组

### 一维数组

##### 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 人评分

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值