文章目录
一、一维数组
(1) 数组是一组有序数据的集合。数组中各数据的排列是有一定规律的,下标代表数据在数组中的序号。
(2) 用数组名和下标即可唯一地确定数组中的元素。
(3) 数组中的每一个元素都属于同一个数据类型。
1.定义一维数组
类型说明符 数组名[常量表达式]
2.引用一维数组
数组名[下标]
int a[10];
//前面有int,这是定义数组,指定数组包含10个元素
t=a[6];
//这里的a[6]表示引用a数组中序号为6的元素
举例:
对10个数组元素依次赋值为0,1,2,3,4,5,6,7,8,9,要求按逆序输出。
#include<stdio.h>
int main()
{
int i,a[10];
for(i=0; i<=9;i++) //对数组元素a[0]~a[9]赋值
a[i]=i;
for(i=9;i>=0;i--) //输出a[9]~a[0]共10个数组元素
printf("%d ",a[i]);
printf("\n");
return 0;
}
3.一维数组的初始化
4.一维数组程序举例
(1)用数组来处理求Fibonacci数列问题
#include <stdio.h>
int main()
{
int i;
int f[20]={1,1}; //对最前面两个元素f[0]和f[1]赋初值1
for(i=2;i<20;i++)
f[i]=f[i-2]+f[i-1]; //先后求出f[2]~f[19]的值
for(i=0;i<20;i++)
{
if(i%5==0) printf("\n"); //控制每输出5个数后换行
printf("%12d",f[i]); //输出一个数
}
printf("\n");
return 0;
}
(2)有10个数,要求对它们按由小到大的顺序排列。
排序算法:起泡(冒泡)排序法
#include <stdio.h>
int main()
{
int a[10];
int i,j,t;
printf("input 10 numbers :\n");
for (i=0;i<10;i++)
scanf("%d",&a[i]);
printf("\n");
for(j=0;j<9;j++) //进行9次循环,实现9趟比较
for(i=0;i<9-j;i++) //在每一趟中进行9-j次比较
if(a[i]>a[i+1]) //相邻两个数比较
{t=a[i];a[i]=a[i+1];a[i+1]=t;}
printf("the sorted numbers :\n");
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n");
return 0;
}
二、二维数组
1.定义二维数组
二维数组常称为矩阵(matrix)。把二维数组写成行(row)和列(column)的排列形式,可以有助于形象化地理解二维数组的逻辑结构。
类型说明符 数组名[常量表达式][常量表达式]
float a[3][4], b[5][10];
//定义a为3×4(3行4列)的数组,b为5×10(5行10列)的数组
2.二维数组的储存
C语言中,二维数组中元素排列的顺序是按行存放的
用矩阵形式(如3行4列形式)表示二维数组,是逻辑上的概念,能形象地表示出行列关系。而在内存中,各元素是连续存放的,不是二维的,是线性的。
3.引用二维数组
数组名[下标] [下标]
在引用数组元素时,下标值应在已定义的数组大小的范围内。
严格区分在定义数组时用的a[3][4]和引用元素时的a[3][4]的区别。前者用a[3][4]来定义数组的维数和各维的大小,后者a[3][4]中的3和4是数组元素的下标值,a[3][4]代表行序号为3、列序号为4的元素(行序号和列序号均从0起算)。
4.二位数组的初始化
5.二维数组程序举例
1.将一个二维数组行和列的元素互换,存到另一个二维数组中。
#include <stdio.h>
int main()
{
int a[2][3]={{1,2,3},{4,5,6}};
int b[3][2],i,j;
printf("array a:\n");
for(i=0;i<=1;i++) //处理a数组中的一行中各元素
{
for (j=0;j<=2;j++) //处理a数组中某一列中各元素
{
printf("%5d",a[i][j]); //输出a数组的一个元素
b[j][i]=a[i][j]; //将a数组元素的值赋给b数组相应元素
}
printf("\n");
}
printf("array b:\n"); //输出b数组各元素
for(i=0;i<=2;i++) //处理b数组中一行中各元素
{
for(j=0;j<=1;j++) //处理b数组中一列中各元素
printf("%5d",b[i][j]); //输出b数组的一个元素
printf("\n");
}
return 0;
}
2.有一个3×4的矩阵,要求编程序求出其中值最大的那个元素的值,以及其所在的行号和列号。
#include <stdio.h>
int main()
{ int i,j,row=0,colum=0,max;
int a[3][4]={{1,2,3,4},{9,8,7,6},{-10,10,-5,2}}; //定义数组并赋初值
max=a[0][0]; //先认为a[0][0]最大
for(i=0;i<=2;i++)
for(j=0;j<=3;j++)
if(a[i][j]>max) //如果某元素大于max,就取代max的原值
{ max=a[i][j];
row=i; //记下此元素的行号
colum=j; //记下此元素的列号
}
printf("max=%d\nrow=%d\ncolum=%d\n",max,row,colum);
return 0;
}
三、多维数组
float a[2][3][4]; //定义三维数组a,它有2页,3行,4列
float a[2][3][4];在内存中的排列顺序为:
a[0][0][0] → a[0][0][1] → a[0][0][2] → a[0][0][3] → a[0][1][0] → a[0][1][1] → a[0][1][2] → a[0][1][3] → a[0][2][0] → a[0][2][1] → a[0][2][2] → a[0][2][3] → a[1][0][0] → a[1][0][1] → a[1][0][2] → a[1][0][3] → a[1][1][0] → a[1][1][1] → a[1][1][2] → a[1][1][3] → a[1][2][0] → a[1][2][1] → a[1][2][2] → a[1][2][3]