C语言--数组

目录

1.数组的定义

2.sizeof关键的使用

3.斐波那契数列

递推公式

 4.数组的简单排序法

5.数组冒泡排序

6. 二维数组


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;
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值