您的位置:首页 > 编程语言 > C语言/C++

4.【数组】

2016-06-21 17:36 375 查看
【数组】
为什么需要数组
为了解决大量同类型数据的的存储和使用问题
为了模拟现实世界
-------------------------
#include <stdio.h>
int main()
{
int a[5] = {1,2,3,4,5};  //a是数组的名字,5表示数组元素的个数,并且这个5个元素分别用a[0] a[1] a[2] a[3] a[4] 表示
int i;
for(i=0; i<5; ++i)
printf("%d\n",a[i]);  //将会依次输出a[5]里面的5个元素的值1 2 3 4 5
printf("%d\n",a[100]);   //因为a[100]没有在a[5]里面所以,会是输出一个其他的值
return 0;
}
-----------------------------------
数组的分类
一维数组
怎样定义一维数组
为那个变量连续分配存储空间
所有的变量数据类型必须相同
所有变量所占字节大小必须相等
列子:
int a[5];
一维数组名不代表数组中所有的元素
一维数组名代表数组第一个元素的地址
有关一维数组的操作
初始化
完全初始化
int a[5] = {1,2,3,4,5};
不完全初始化,未进行初始化的元素自动为零
int a[5] = {1,2,3};
不初始化,所有元素是垃圾值
int a[5];
清零,里面的每个元素初始值都为零
int a[5] = {0};
错误写法:
int a[5];
a[5] = {1,2,3,4,5};  //错误
只有在定义数组的同时才可以整体赋值,其他情况下整体赋值都是错误的
只有在定义数组的时候,中括号里面的数字才表示元素的个数,其他时候都表示为里面元素的下标,即元素的位置
int a[5] = {1,2,3,4,5};
a[5] = 100;  //错误,因为没有a[5]这个元素,内里元素最大只到到a[4]

int a[5] = {1,2,3,4,5};
int b[5];
如果要把a数组中的值全部复制给b数组,怎么写呢?
错误的写法:
b = a;// error,因为这里的a代表的是a[5]这个数组里面的第一个元素的地址
正确的写法:
for(i=0;i<5;++i)
b[i] = a[i];
赋值------------------------------------
#include <stdio.h>
int main()
{
int a[5];
int i;

scanf("%d",a[0]);
printf("a[0]=%d\n",a[0]);

scanf("%d",a[3]);
printf("a[3]=%d\n",a[3]);

for (i=0; i<5; ++i)
printf("%d",a[i]);

return 0;
}
----如果输入1和2,则输出结果为:-----
a[0]=1
a[3]=2
1,数值,数值,2,数值
排序
求最大/最小值
倒置
查找
插入
删除
-------------------------------------
#include <stdio.h>
int main()
{
int a[7] = {1,2,3,4,5,6,7};
int i=0,j=6,t;
while(i<j)
{
t=a[i];
a[i] = a[j];
a[j] = t;

i++;  //这样效果会不一样
--j;
}
for(i=0;i<7;++i)            //最后输出结果可以查看
printf("%d\n",a[i]);
}
----------输出的结果为:7 6 5 4 3 2 1--------------------
二维数组
int a[3][4];
总共是12个元素,可以当做3行4列看待,这12个元素的名字依次是:
a[0][0] a[0][1] a[0][2] a[0][3]
a[1][0] a[1][1] a[1][2] a[1][3]
a[2][0] a[2][1] a[2][2] a[2][3]
a[i][j] 表示第i+1行第j+1列元素
int a[m]
; 该二维数组右下角最大位置的元素只能是a[m-1][n-1]
初始化
int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
int a[3][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9,10,11,12},
};
输出二维数组内容:
---------------------------------
#include<stdio.h>
int main()
{
int a[3][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9,10,11,12},
};
int i,j;
for (i=0; i<3; ++i)
{
for (j=0; j<4; ++j)
printf("%-5d",a[i][j]);   //这里的-5表示格式左对齐5位一格
printf("\n");
}
return 0;
}
----------------------------------------------------------
操作
对二维数组排序
求每一行的最大值
判断矩阵是否对称
矩阵的相乘
多维数组
是否存在多维数组
不存在
因为内存是线性一维的
N维数组可以当做每个元素是n-1维数组的一维数组
比如:
int a[3][4];
该数组是含有3个元素的一维数组
只不过每个元素都可以再分成4个小元素
int a[3][4][5];
该数组是含有3个元素的一维数组
只不过每个元素都是4行5列的二维数组
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 C