提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
数组的定义及初始化
一维数组:
1.定义整型的数组,数组元素用大括号{}来引用
2.计算元素所占的内存用sizeof来进行求解 ,对于单个字符的个数计算(见上)
3.特别注意:对于字符串的求长度用strlen(arr),头文件为#include<string.h>
二维数组
1.二维数组的[2]代表有俩排,[3]代表每排有三个 元素
2.二维数组的 不完全初始化,是把一维数组作为元素的数组,如果在元素内加大括号{},则说明将一维数组作为元素来定义,从左到右,从下到上.
3.二维数组可以按照元素初始化,也可以按照行数初始化.(对于行数初始化,里面的元素要加大括号)
4.注意:二维数组的长度声明永远不能省略,int char[] [5];
二维数组的打印
int main()
{
int arr[3][5]={0};
int i= 0;
for(i=0;i<3;i++)
{
int j = 0;
for(j=0;j<5;j++)
{
scanf("%d",&arr[][]);
}
}
for(i=0;i<3;i++)
{
int j = 0;
for(j=0;j<5;j++)
{
printf("%d",&arr[][]);
}
}
return 0;
}
注意事项:对于二维数组的打印,先定义列的变量,利用for循环,再在for循环的内部定义行的变量,再次在for的循环 里面嵌套for循环,随后利用scanf函数进行元素的输入,重复列和行的循环,最后利用print
函数完成打印.
巧用计算元素的个数来打印
int main()
{
int arr[]={1,2,3,4,5,6,7,8,9,10};
printf("%zd",sizeof(arr))
int sz = sizeof(arr) / sizeof(arr[0]);//对于整个数组,arr后面可以什么都不写,arr[]
int a = 0;
for(a=0;a<sz;a++)
{
printf("%d",arr[a])
}
return 0;
}
计算数组长度的时候,最好用%zd来 打印
打印数组的地址
int main()
{
int arr[2][3] = { 0 };
int i = 0;
for (i = 0;i <2 ;i++)
{
int j = 0;
for(j=0;j<3;j++)
printf("&arr[%d][%d]=%p\n", i,j, &arr[i][j]);
}
printf("\n");
return 0;
}
1.注意给数组打印的地址,要为数组加上取地址符号&
2.arr[ ]里面的占位符用%d,这里代替的是前面行列所对应的下标,
3.%p作为占位符则是对应的所打印数组的地址
一、二分查找的应用
示例:二分查找的定义
二分搜索算法是一种在有序数组中查找特定元素的有效方法。其基本思想是通过将搜索区间分成两半,然后根据目标值与中间元素的比较结果来选择搜索的半区,从而逐步缩小搜索范围,直到找到目标值或确定目标值不存在。
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int k = 0;
scanf("%d", &k);
int left = 0;
int right = sizeof(arr) / sizeof(arr[0]) - 1;
int flag = 0;
while (left <= right)
{
int mid = (left + right) / 2;
if (arr[mid] < k)
{
left = mid + 1;
}
else if (arr[mid] > k)
{
right = mid + 1;
}
else if (arr[mid] == k)
{
printf("找到了,下标为%d\n", mid);
flag = 1;
break;
}
}
if(flag==0)
{
printf("找不到\n");
}
return 0;
}
对于这里面的right 和 left都是指的是数组的下标,写的时候注意!!
利用下标的范围逐渐变小,最后锁定所要查找的数的下标
二 字符串两边打印,逐渐替换字符
1.引入库
库函数代码如下(示例):
#include<string.h>
#include<Windows.h>
#include<stdlib.h>
最上面:用来计算字符串的长度,strlen(arr1)
中间:通过控制Windows系统 system("cls"); cls负责 清空台面所有内容
最下面:我们可以控制休眠时间,也就是可以调整打印的速度和节奏,Sleep(1000);//休眠1000毫秒
2.读入数据
代码如下(示例):
int main ()
{
char arr[1]="hello bit!!!!!!!!!!" ;
char arr[2]="*******************" ;
int left = 0;
int right = strlen(arr1) - 1;
while(left<right)
{
arr2[left] = arr1[left];
arr2[right] = arr1[right];
printf("%s\n", arr2);
Sleep(1000);
system("cls");
left++;
right--;
}
printf("%s",arr[1]);
return 0;
}
注意:
1.对于left的定义是整形数字,相当与数组后的下标.表示最开始的为arr[left]
2.对于字符串的打印用%s来打印
3.运行起来防止最后一步直接被清除,我们再用printf函数将之前的继续打印一遍
总结
以上就是和大家分享的数组的内容,整体难度不是特别大,其中对于二维数组的打印也是用到了咱们之前学到的for循环及其嵌套来完成实现,比较突出数组特色的就是二分查找,铁铁自己也是调试研究了好长时间,先就和大家分享到这里,文章中有什么问题可以评论区多多交流,一起讨论,互相进步,你们的支持和喜欢是我坚持下去的动力,感谢大家的点赞和关注!!!!!
谢谢大家!!!!