大家新年好,新的一年学习到的东西更多了,在这里总结一个C语言中数组的使用,希望对你有帮助,谢谢。
数组在C语言中起到了存储、处理和组织数据的重要作用,是程序设计中不可或缺的一种数据结构。
1、概念
数组是一组相同类型元素的集合。
数组分为一维数组和多维数组,多维数组一般多见的是二维数组。
2、一维数组的创建与初始化
基本语法:
type arr_name[常量值];
初始化:
//完全初始化
int arr[5] = {1,2,3,4,5};
//不完全初始化
int arr2[6] = {1};//第⼀个元素初始化为1,剩余的元素默认初始化为0
//也可以先不创建大小,我一般这样写
int arr3[]={0};
//错误的初始化 - 初始化项太多
int arr3[3] = {1, 2, 3, 4};
3、数组的类型
4、 一维数组的使用
数组下标:
1 int arr[10] = {1,2,3,4,5,6,7,8,9,10};
下标引⽤操作符:[]
我们就可以轻松的访问到数组的元素了,如下代码:
#include <stdio.h>
int main()
{
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
printf("%d\n", arr[7]);//结果是8
printf("%d\n", arr[3]);//结果是4
return 0;
}
如果要访问整个数组,只要我们产生所以元素就可以了,那我们使⽤for循环产⽣0~9的下标,接下来使⽤下标访问就⾏了,如下代码:
#include <stdio.h>
int main()
{
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
int i = 0;
for(i=0; i<10; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
这样打印的结果就是:1,2,3,4,5,6,7,8,9,10
数组的输入:
#include <stdio.h>
int main()
{
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
int i = 0;
for(i=0; i<10; i++)
{
scanf("%d", &arr[i]);
}
for(i=0; i<10; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
这样⾃⼰给数组输⼊想要的数据,并打印。
sizeof 计算数组元素个数:
sizeof是C语言中一个关键字,是可以计算类型或者大小的,其实sizoef也可以计算数组的大小。
比如:
#include <stido.h>
int main()
{
int arr[10] = {0};
printf("%d\n", sizeof(arr));
return 0;
}
#include <stido.h>
int main()
{
int arr[10] = {0};
printf("%d\n", sizeof(arr[0]));//计算⼀个元素的⼤⼩,单位是字节
return 0;
}
#include <stido.h>
int main()
{
int arr[10] = {0};
int sz = sizeof(arr)/sizeof(arr[0]);
printf("%d\n", sz);
return 0;
}
5.⼆维数组的创建
二维数组的创建
基本语法:
type arr[常量值1][常量值2]:
例如:
int arr[2][3];
⼆维数组的初始化
不完全初始化
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};
6.⼆维数组的使⽤
int arr[3][5] = {1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7};
下标引⽤操作符
#include <stdio.h>
int main()
{
int arr[3][5] = {1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7};
printf("%d\n", arr[2][4]);
return 0;
}
输出的结果就是7.
⼆维数组的输⼊和输出
访问⼆维数组的单个元素我们知道了,那如何访问整个⼆维数组呢?
其实跟一维数组是一样的;只要能够按照⼀定的规律产⽣所有的⾏和列的数字就⾏;我们一样使用for循环即可:
#include <stdio.h>
int main()
{
int arr[3][5] = {1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7};
int i = 0;//遍历⾏
//输⼊
for(i=0; i<3; i++) //产⽣⾏号
{
int j = 0;
for(j=0; j<5; j++) //产⽣列号
{
scanf("%d", &arr[i][j]); //输⼊数据
}
}
//输出
for(i=0; i<3; i++) //产⽣⾏号
{
int j = 0;
for(j=0; j<5; j++) //产⽣列号
{
printf("%d ", arr[i][j]); //输出数据
}
printf("\n");
}
return 0;
}
如上,我们输入:5 5 5 5 5 6 6 6 6 6 8 8 8 8 8
则输出:5 5 5 5 5
6 6 6 6 6
8 8 8 8 8
⼆维数组中的每个元素也都是连续存放的
如下图
了解清楚⼆维数组在内存中的布局,有利于我们后期使⽤指针来访问数组的学习。
7.数组练习
练习1:多个字符从两端移动,向中间汇聚
#include <stdio.h>
int main()
{
char arr1[] = "welcome to C ...";
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;
}
远行结果:
练习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)/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");
}