修仙之数组全面复习

修仙之数组

  • 一.数组
    • 1.概念
    • 2.一维数组
      • 2.1 一维数组的创建和初始化
      • 2.2 一维数组的使用
      • 2.3 sizeof计算数组元素个数
    • 3.二维数组
      • 3.1 二维数组的创建
      • 3.2 二维数组的初始化
      • 3.3 二维数组的使用
    • 4.数组练习
      • 练习1:多个字符从两端移动,向中间汇聚
      • 练习2.二分查找

一.数组

1.概念

数组是一组相同类型元素的集合;
从这个概念中我们就可以发现2个有价值的信息:
• 数组中存放的是1个或者多个数据,但是数组元素个数不能为0
• 数组中存放的多个数据,类型是相同的

2.一维数组

2.1 一维数组的创建和初始化

1.创建一维数组

int arr[i]={0};
double arr[i]={0};

每个数组都有自己的数据类型,如 int-,double-,等等。用[ ]来显示数组的个数,{ }来显示数组的内容。

2数组的初始化

完全初始化
int arr[5] = {1,2,3,4,5};
//不完全初始化
int arr2[6] = {1};//第⼀个元素初始化为1,剩余的元素默认初始化为0
//错误的初始化 - 初始化项太多
int arr3[3] = {1, 2, 3, 4};

2.2 一维数组的使用

1.数组下标

int arr[10]={1,2,3,4,5,6,7,8,9}
//           0 1 2 3 4 5 6 7 8

数组的下标是从0开始的,最后一个元素的下标是n-1;

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[4]);//5
return 0;
}

2.数组的打印
只要我们产生数组所有元素的下标就可以了,那我们使用for循环产生0~9的下标,接下来使用下标访问就行了。

请添加图片描述请添加图片描述
3 数组的输入

#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;
}

1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9

2.3 sizeof计算数组元素个数

sizeof 中C语言是一个关键字,是可以计算类型或者变量大小的,其实 sizeof 也可以计算数组的大小。

#include <stido.h>
int main()
{
 int arr[10] = {0};
 int sz = sizeof(arr)/sizeof(arr[0]);
 printf("%d\n", sz);
 return 0;
}

这里的结果是:10,表示数组有10个元素。

以后在代码中需要数组元素个数的地方就不用固定写死了,使用上面的计算,不管数组怎么变化,计算出的大小也就随着变化了。

3.二维数组

3.1 二维数组的创建

int arr[3][5];
double data[2][8];

解释一下:上述代码中出现的信息
• 3表示数组有3行
• 5表示每一行有5个元素
• int 表示数组的每个元素是整型类型
• arr 是数组名,可以根据自己的需要指定名字
data数组意思基本一致。
在这里插入图片描述

3.2 二维数组的初始化

这我们主要讲按照行初始化

int arr[3][5]={{1,2},{3,4},{56}};

在这里插入图片描述
注意:初始化时省略行,但是不能省略列

int arr[][5]={0};
//是可以的。
int arr[3][]={0};
//不可以使用,不知道列数

3.3 二维数组的使用

1。二维数组的输入和输出

访问二维数组的单个元素我们知道了,那如何访问整个二维数组呢?

其实我们只要能够按照⼀定的规律产生所有的行和列的数字就行;以上⼀段代码中的arr数组为例,行的选择范围是0-2,列的取值范围是0~4,所以我们可以借助循环实现生成所有的下标。

#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;
}

4.数组练习

练习1:多个字符从两端移动,向中间汇聚

编写代码,演示多个字符从两端移动,向中间汇聚

请添加图片描述请添加图片描述
通过先打印arr2的数组,再通过左右的替换,把arr2的内容替换掉。其中left左边的可以等以right右边,但不能大于,否则将无法计算。

练习2.二分查找

在一个升序的数组中查找指定的数字n,很容易想到的方法就是遍历数组,但是这种方法效率比较低。
比如我买了一双鞋,你好奇问我多少钱,我说不超过300元。你还是好奇,你想知道到底多少,我就让你猜,你会怎么猜?你会1,2,3,4…这样猜吗?显然很慢;二般你都会猜中间数字,比如:150,然后看大了还是小了,这就是二分查找,也叫折半查找
请添加图片描述请添加图片描述
使用中间值的下标去判断你想要的数字下标,如果大了,就要左边小的;如果小了,就要右边大的,以此累推,最终可以我到想要的数的下标。

  • 25
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值