C笔记(5)-数组

目录

一、数组概念

二、 一维数组

2.1 数组创建

2.2 一维数组初始化

2.3 数组类型

三、二维数组

3.1 数组概念

3.2 二维数组初始化

四、C99中的变长数组

五、练习

5.1 多个字符从两端移动,向中间汇聚

5.2 二分查找


一、数组概念

数组是一组相同类型元素的集合。

数组在内存中是连续存放的。

二、 一维数组

2.1 数组创建

//⼀维数组创建的基本语法
type arr_name[常量值];
//type 指定的是数组中存放数据的类型,可以是: char、short、int、float 等,也可以⾃定义的类型

2.2 一维数组初始化

//完全初始化
int arr[5] = {1,2,3,4,5};

//不完全初始化
int arr2[6] = {1};//第⼀个元素初始化为1,剩余的元素默认初始化为0

//错误的初始化 - 初始化项太多
int arr3[3] = {1, 2, 3, 4};

2.3 数组类型

int arr1[10]; //arr1数组的类型是 int [10]
int arr2[12]; //arr2数组的类型是 int [12]
char ch[5];   //ch 数组的类型是 char [5]

三、二维数组

3.1 数组概念

把⼀维数组做为数组的元素,这时候就是⼆维数组,⼆维数组作为数组元素的数组被称为三维数组,⼆维数组以上的数组统称为多维数组。

type arr_name[常量值1][常量值2];

3.2 二维数组初始化

//不完全初始化
int arr1[3][5] = { 1,2 };
int arr2[3][5] = { 0 };

//完全初始化
int arr3[3][5] = { 1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7 };

//按照⾏初始化
int arr4[3][5] = { {1,2},{3,4},{5,6} };

//初始化时省略⾏,但是不能省略列
int arr5[][5] = { 1,2,3 };
int arr6[][5] = { 1,2,3,4,5,6,7 };
int arr7[][5] = { {1,2}, {3,4}, {5,6} };

四、C99中的变长数组

//C99中给⼀个变⻓数组的新特性,允许我们可以使⽤变量指定数组⼤⼩
int n = a + b;
int arr[n];
//变⻓数组的根本特征,就是数组⻓度只有运⾏时才能确定,所以变⻓数组不能初始化

//在VS2022上,不⽀持C99中的变⻓数组;在gcc编译器上测试

#include <stdio.h>
int main()
{
	int n = 0;
	scanf("%d", &n);//根据输⼊数值确定数组的⼤⼩
	int arr[n];
	int i = 0;
	for (i = 0; i < n; i++)
	{
		scanf("%d", &arr[i]);
	}
	for (i = 0; i < n; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}


//5
//1 2 3 4 5
//1 2 3 4 5

五、练习

5.1 多个字符从两端移动,向中间汇聚

#include <stdio.h>
int main()
{
	char arr1[] = "welcome to bit...";
	char arr2[] = "#################";
	int left = 0;
	int right = strlen(arr1) - 1;
	printf("%s\n", arr2);
	while (left <= right)
	{
		Sleep(1000);
		arr2[left] = arr1[left];
		arr2[right] = arr1[right];
		left++;
		right--;
		printf("%s\n", arr2);
	}
	retutn 0;
}

5.2 二分查找

#include <stdio.h>
int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	int left = 0;
	int right = sizeof(arr) / sizeof(arr[0]) - 1;
	int key = 7;//要找的数字
	int mid = 0;//记录中间元素的下标
	int find = 0;
	while (left <= right)
	{
		mid = left + (right - left) / 2;
		if (arr[mid] > key)
		{
			right = mid - 1;
		}
		else if (arr[mid] < key)
		{
			left = mid + 1;
		}
		else
		{
			find = 1;
			break;
		}
	}
	if (1 == find)
		printf("找到了,下标是%d\n", mid);
	else
		printf("找不到\n");
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值