数组:是一种容器,可以用来连续存储同种数据类型的多个值,可以通过索引或下标访问其中的元素。
数据类型 数组名[长度] ={数据值,数据值,数据值......}
当定义完成一组数组后,想要将其中的数据拿出来,需要先找到要拿哪一个位置的数据,这就是索引,索引就是数组的一个编号,也叫做角标,下标,编号。
在创建数组时,[ ]不能使用变量,只能使用常量或者宏定义。
数组中元素的访问:
/*定义一个长度为5 的数组,并进行初始化:12345
完成下列要求;
1.获取索引为0,2,4的元素,并求和
2.把最后一个索引上的元素修改为10*/
#include<stdio.h>
int main()
{
int arr[5] = { 1,2,3,4,5 };
int num1 = arr[0];
int num2 = arr[2];
int num3 = arr[4];
int arr2 = num1 + num2 + num3;
printf("%d\n", arr2);
printf("修改前arr[4]为:%d\n", arr[4]);
arr[4] = 10;
printf("修改后arr[4]为:%d\n", arr[4]);
return 0;
}
数组只能够整体初始化,不能被整体赋值,只能使用循环从第一个逐个遍历赋值。
内存:软件在运行时用力临时存储数据的
内存地址:内存中每一个小格子的编号
eg1:最大值
#include<stdio.h>
int main()
{/*已知数组元素为33,5,22,33,55
找出数组中的最大值并打印在控制台*/
int arr[] = { 33,5,22,33,55 };
int max = arr[0];
int sz = sizeof(arr) / sizeof(arr[0]);
for(int i=0;i<sz;i++)
{
if (max < arr[i])
{
max = arr[i];
}
}printf("%d\n", max);
return 0;
}
eg2: 数组求和
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
/*生成10个1到100的随机数字存入数组,并求出所有数据的和*/
int arr[10] = { 0 };
srand(time(NULL));
int sz = sizeof(arr) / sizeof(arr[0]);
int sum = 0;
for (int i = 0; i < sz; i++)
{
arr[i] = rand() % 100 + 1;
sum = sum + arr[i];
printf("%d ", arr[i]);
}
printf("\n");
printf("%d\n", sum);
return 0;
}
eg3:反转数组
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void printARR(int arr[], int sz);
int main()
{
/*键盘录入5个数据,完成以下功能
1.遍历数组
2.反转数组
3.再次遍历*/
int arr[5] = { 0 };
int sz = sizeof(arr) / sizeof(arr[0]);
for (int i = 0; i < sz; i++)
{
printf("请输入第%d个数据\n", i + 1);
scanf_s("%d", &arr[i]);
}
//遍历数组
printARR(arr, sz);
//反转数组
int i = 0;
int j=sz-1;//i j是索引,不是数据;
while (i<j)
{
int temp = arr[i];
arr[i]=arr[j];
arr[j] = temp;
i++;
j--;
}
//将反转后的数组输出
printf("\n");
printARR(arr, sz);
}
void printARR(int arr[], int sz)
{
for (int i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
}
数组中的常见算法
折半查找
提高了查找效率
eg:容易出错的点在于mid和min,max都是索引,num为需要查找的数字,在比较大小时,要使用arr[mid]=num;mid的取值是在循环里面的,因为会随着循环变换。
可以看出二分查找适用的是一组有顺序的数据
#include<stdio.h>
int erfensearch(int arr[], int sz, int num);
int main()
{
/*数组的二分查找*/
int arr[] = { 12,22,34,56,67,99 };
int sz = sizeof(arr) / sizeof(arr[0]);
int num=34;
int index = erfensearch(arr, sz, num);
printf("%d\n", index);
}
int erfensearch(int arr[], int sz, int num)
{
int min = 0;
int max = sz - 1;
while (min <= max)
{
int mid = (min + max) / 2;
if (arr[mid] < num)
{
min = mid + 1;
}
else if (arr[mid] > num)
{
max = mid - 1;
}
else
return mid;
}
}
3.