目录
一、数组概念
数组是一组相同类型元素的集合。
数组在内存中是连续存放的。
二、 一维数组
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");
}