目录
1.数组的定义
C 语言支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合。
如int a[10];
在内存开辟的空间是按 0,1,2,3,4,5,6,7,8,9 的排序
#include <stdio.h>
int main()
{
int a[10];
int data = 0;
for(data = 0 ;data < 10;data++){
a[data] = data+100;
}
puts("数组初始化完毕!");
for(data = 0;data < 10;data++){
printf("%d ",a[data]);
}
puts("done");
return 0;
}
2.sizeof关键的使用
2.1 sizeof是关键字,而不是函数,用于计算数组的长度
#include <stdio.h>
int main()
{
int a[10] = {1,2,3}; //表示这边的10的大小
int data;
int array[] = {100,333,444,555,22,44,33,22,21};
int size;
int b[10]= {0};
//把整个数组的大小,除以数组中一个元素的大小,就获得总个数
size = sizeof(array)/sizeof(array[0]);
//sizeof关键字,能计算括号中对应数据的内存空间大小。
printf("array的个数有:%d\n" ,size);
for(data = 0;data < size;data++){
printf("address: %p,data : %d\n",&array[data],array[data]);
}
return 0 ;
}
3.斐波那契数列
递推公式
#include <stdio.h>
int main()
{
int arr[30];
int i;
int arraySize;
arraySize = sizeof(arr)/sizeof(arr[0]);
arr[0] = 0;
arr[1] = 1;
for(i = 2;i < arraySize;i++){
arr[i] = arr[i - 1] + arr [i-2];
}
for(i = 0;i < arraySize;i++){
printf("%d ",arr[i]);
}
printf("\n done \n");
return 0 ;
}
4.数组的简单排序法
对数组中的元素进行比较交换从而从小到大排序
#include <stdio.h>
int main()
{
int array[] = {12,8,13,9,223,44,5,66,7,88};
int i;
int j;
int tmp;
int len = sizeof(array)/sizeof(array[0]);
//简单选择排序法
for(i=0;i<len-1;i++){
for(j=i+1;j<len;j++){
if(array[i] > array[j]){
tmp = array[i];
array[i] = array[j];
array[j] = tmp;
}
}
}
for(i=0;i<len;i++){
printf("%d ",array[i]);
}
return 0;
}
5.数组冒泡排序
数组的冒泡排序就是将数组元素两两比较,较大的元素后移,例如有一数组array,array[1] > array[2],那么将array[1]后移,即将array[1]与array[2]中的元素互换,互换之后继续开始比较array[2]与array[3]… 当数组中最后两个元素比完之后,能选出该数组中最大的元素。接着开始第二轮比较,由于已经将最大的数确定在了最后一位,所以这一轮比到到数组倒数第二个元素就结束了,接着以此类推,直到将数组元素按升序排列完成为止。降序也可以这样操作。
#include <stdio.h>
int main()
{
int array[] = {12,8,13,9,110,34,1,90,85,101,13,13};
int i;
int j;
int tmp;
int len = sizeof(array)/sizeof(array[0]);
for(i=0;i<len-1;i++){
for(j=0; j<len-1-i;j++){
if(array[j] > array[j+1]){
tmp = array[j];
array[j] = array[j+1];
array[j+1] = tmp;
}
}
}
for(i=0;i<len;i++){
printf("%d ",array[i]);
}
return 0;
}
6. 二维数组
二维数组在概念上是二维的,有行和列,但在内存中所有的数组元素都是连续排列的,它们之间没有“缝隙”。
要用数组指针来操作二维数组。int (*p)[4]=a; //p每移动一次就是移动了一个一维数组。
指针数组:int *p=a[4];
int *p([4]);
以下面的二维数组 a 为例:
int a[3][4] = { {0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, 10, 11} };
从概念上理解,a 的分布像一个矩阵:
0 1 2 3
4 5 6 7
8 9 10 11
但在内存中,a 的分布是一维线性的,整个数组占用一块连续的内存:
#include <stdio.h>
int main()
{
int i;
int j;
int hang;
int lie;
int arry[3][4] = {{1,12,23,84}
,{15,116,347,68}
,{99,110,131,121}};
int max;
for(i=0;i<3;i++){
for(j=0;j<4;j++){
printf("%d \t",arry[i][j]);
}
printf("\n");
}
max = arry[0][0];//身高最高的那个汉子,先记录第一个来挑战的汉子的身高在纸上
for(i=0;i<3;i++){
for(j=0;j<4;j++){
if(max < arry[i][j]){//如果纸上记录的身高比当前这个小鬼的身高矮,重新写入新的身高
max = arry[i][j];
hang = i;
lie = j;
}
}
}
printf("其中在%d行第%d列的数%d最大\n",hang+1,lie+1,max);
return 0;
}