C语言数组基本知识

一维数组

一维数组的定义

先定义才能使用
数据类型 数组名[数组长度];
数据类型 数组名[] = {数组元素,…}; 数组的长度由初始化时数组元素的个数来决定

初始化数组:
int arr[5] = {1,2,3,4,5};
int arr[5] = {1,2,3,4,5,6};//警告
int arr[5] = {1,2};//补0
int arr[5] = {0};//数组元素全部初始化为0
int arr[5] = {};
int arr[] = {1,2,3,4,5};

一维数组相当于一次性定义了数组长度个变量 变量名都一样(数组名)
所以为了区分 用编号 即下标(索引)

数组下标:

数组下标是从0开始 到 数组长度-1
如果超出范围访问,则数组越界 千万注意,数组别越界访问
数组越界非常危险,编译代码时不会检查数组越界
代码可能运行没有错误,也可以有逻辑错误,也可能导致程序崩溃

数组长度:
	sizeof(数组名)/sizeof(数组名[0])
	C语言中数组长度一旦定义,则不能改变
可变长数组:
	int n = 0;
	scanf("%d",&n);
	int arr[n]; //不能直接用 = {}的方式来初始化数组 = {0}
	for(int i=0;i<n;i++){
		arr[i] = 0;
	}

	通过遍历下标的方式来访问数组中的每一个元素
例题:

8 2 3 4 7 6 1 9 0
从第2个元素开始往前插入(前面是一个有序的数列,插入一个数之后使数列保持有序)插入排序

#include <stdio.h>

int main(){
	int len = 0;
	printf("请输入数组长度:");
	scanf("%d",&len);
	int arr[len];
	printf("请输入%d个数组元素:",len);
	int i = 0;
	for(i=0;i<len;i++){
		scanf("%d",&arr[i]);	
	}
	
	for(i=1;i<len;i++){//把arr[i]元素插入到arr[0]-arr[i]区间 使这个区间有序
		int key = arr[i];//记录arr[i] 
		int j=0;
		for(j=i-1;j>=0 && arr[j]>key;--j){
			arr[j+1] = arr[j];	
		}
		if(j+1 != i){
			arr[j+1] = key;
		}
	}

	for(i=0;i<len;i++){
		printf("%d ",arr[i]);	
	}
	printf("\n");

	
	return 0;	
}

二维数组

矩阵 行 和 列 只是为了方便理解想像出来的矩阵 以及 行和列 但本质上不是
定义:
数据类型 数组名[二维长度][一维长度];
二维长度 相当于行
一维长度 相当于列
数据类型 是数组中存储数据元素的类型
数组中可以存储 二维长度*一维长度 个元素

下标:
行下标 下标编号从0开始
列下标 下标编号从0开始
数组名[行下标][列下标]

二维数组初始化:
数组一旦定义,就不能进行整体赋值 = {}  只能单个进行赋值 
数组初始化 = {xx,...}
int arr[3][4] = {{1,2,3,4},{4,5,6,7},{7,8,9,10}};
		//int arr[3][4] = {{1,2,3,4,5},{4,5,6,7},{7,8,9,10},{1,2,3,4}};//警告 多列或者多行
		int arr[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
		int arr[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12,13};
		int arr[3][4] = {{1,2,3},{4,5}};//补0
		int arr[3][4] = {{1,2}};
		int arr[3][4] = {1,2,3,4,5};//补0
		int arr[3][4] = {{0}};
		int arr[3][4] = {0};
		int arr[3][4] = {[1]={1,2,3,4}};
		int arr[3][4] = {[0][0]=1,[1][1]=1,[2][2]=1};
		int arr[][] = {{1,2,3,4},{4,5,6,7},{6,7,8,9}};//错误
		int arr[][4] = {{1,2,3,4},{4,5,6,7},{6,7,8,9}};
		int arr[][4] = {{1,2,3},{4,5},{6,7,8,9}};
		int arr[][4] = {1,2,3,4,5,6,7,8,9};

可变长二维数组:
int n=0,m=0;
	scanf("%d %d",&n,&m);
	int arr[n][m];//不能直接初始化
例题3

输出杨辉三角形前n行
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1

#include <stdio.h>

int main(){
	int n = 0;
	printf("行数:");
	scanf("%d",&n);
	int arr[n][n];

	int i=0,j=0;
	for(i=0;i<n;i++){
		for(j=0;j<=i;j++){
			if(j==0 || i==j){
				arr[i][j] = 1;	
			}else{
				arr[i][j] = arr[i-1][j-1] + arr[i-1][j];	
			}
			printf("%3d ",arr[i][j]);
		}	
		printf("\n");
	}
	
	
	return 0;	
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值