数组名为表示数组首地址的常量。
数组未初始化即auto存储类型,数组单元内容的值不确定。
数组部分初始化即static存储类型,除了初始化的值,其他都置为0。
M长度的数组下标从0到M-1。
数组越界不会检查,是因为数组是由指针偏移表达式构成的,即arr[i] = &(arr+i),越界会自动选取顺序上的下一块地址。
static void fibonacci(void)
{
int i,j,tmp;
int fib[10] = {1,1};
//不确定数组长度时可以采用sizeof来表示数组长度
for(i = 2;i
tmp = fib[i];
fib[i] = fib[j];
fib[j] = tmp;
i++;
j--;
}
for(i = 0;i
用数组实现冒泡排序
static void sort1(void)
{
int i,j,tmp;
int arr[N] = {12,54,22,66,98,28,78,8,49,81};
for(i = 0;i
for(j = 0;j
if(arr[j]>arr[j+1])
{
tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
}
}
}
for(i = 0;i
用数组实现选择排序
static void sort2(void)
{
int i,j,k,tmp;
int arr[N] = {12,54,22,66,98,28,78,8,49,81};
for(i = 0;i < N;i++)
printf("%d ",arr[i]);
printf("n");
for(i = 0;i < N-1;i++)
{
k = i;
for(j = i+1;j < N;j++)
{
if(arr[j] < arr[k])
{
k = j;
}
}
tmp = arr[i];
arr[i] = arr[k];
arr[k] = tmp;
}
for(i = 0;i
进制转换算法
static void convert(void)
{
int num,base;
int i = 0;
int arr[128];//声明一个不会越界的数组范围
printf("Please enter the num:n");
scanf("%d",&num);
printf("Please enter the base:n");
scanf("%d",&base);
do
{
arr[i] = num%base;
num/=base;
i++;
}while(num != 0);
for(i--;i>=0;i--)
{
if(arr[i]>10)
printf("%c",arr[i]-10+'A');
else
printf("%d",arr[i]);
}
printf("n");
return;
}
用数组方式求1000以内的质数
static void primer(void)
{
int i,j;
char num[1001] = {0};
for(i = 2;i<1001;i++)
{
if(num[i] == 0)
{
for(j = i*2;j<1001;j+=i)
num[j] = -1;
}
}
for(i = 2;i<1001;i++)
{
if(num[i] == 0)
printf("%d ",i);
}
printf("n");
return;
}
二维数组
【存储类型】 数据类型 标识符【行下标】【列下标】
数组存储为顺序存储,按行存储
二维数组的行数可以省略,列数不可省略,会根据元素的数量自动分配行号
矩阵的行列互换
#define M 2
#define N 3
static void change(void)
{
int i,j;
int a[M][N] = {1,2,3,4,5,6} ,b[N][M];
for(i = 0;i
for(j = 0;j
printf("%d ",a[i][j]);
b[j][i] = a[i][j];
}
printf("n");
}
for(i = 0;i
for(j = 0;j
求矩阵的最大值
#define M 2
#define N 3
static void max(void)
{
int a[M][N] = {24,54,2,7,98,16};
int max = a[0][0],row = 0,colum = 0;
int i,j;
for(i = 0;i
for(j = 0;j
if(max
max = a[i][i];
row = i;
colum = j;
}
}
}
printf("max:a[%d][%d] = %dn",row,colum,max);
return;
}
求二维数组各行与各列的和:
static void sum(void)
{
int a[5][4] = {{1,2,3},{4,5,6},{7,8,9},{10,11,12}};
int i,j;
for(i = 0;i<4;i++)
{
for(j = 0;j<3;j++)
{
a[4][3]+=a[i][j];
a[i][3]+=a[i][j];
a[4][j]+=a[i][j];
}
}
for(i = 0;i<5;i++)
{
for(j = 0;j<4;j++)
printf("%4d",a[i][j]);
printf("n");
}
return;
}
矩阵乘法的实现
#define M 2
#define N 3
#define K 2
static void mul(void)
{
int a[M][N] = {1,2,3,4,5,6};
int b[N][K] = {1,0,0,1,2,1};
int c[M][K] = {0};
int i,j,k;
for(i = 0;i
for(j = 0;j
for(k = 0;k
for(j = 0;j
二维数组的深入理解
声明一个二维数组int a[M][N],a代表的是数组的首地址,a+1表示的并不是第二个数组元素的地址,而是把a看作一个包含了N个元素的总体,a+1表示的是数组第二行的首地址,即跳过了N*4B大小的空间。



