看完这篇还学不会数组?

本文详细介绍了数组在C语言中的基本概念,包括一维数组的创建、初始化、使用,以及二维数组的构造和操作。还讨论了C99中的变长数组特性。通过实例和练习,帮助读者掌握数组在编程中的应用。
摘要由CSDN通过智能技术生成

目录

 前言

一、数组的概念

二、一维数组

三、二维数组

四、延伸拓展

五、练习


 前言

 今天咱来讲讲关于数组的那些事,本文将从数组的概念、一维数组、二维数组的创建与使用、延伸拓展、练习几个方面为大家详细阐述数组的方方面面。

一、数组的概念

数组(Array)顾名思义就是一堆数放在一起构成的组合,数组中的每个数称为数组元素,类似于数学当中的集合,数组元素规定必须为相同类型的元素(如int、char、指针等),写法大致如下:

int arr[10]

其中“int”表示数组元素类型,arr是我们为了方便对数组的使用,给数组起的数组名,之后中括号[ ]里面的数字表示此数组包含的元素个数

二、一维数组

1、概念

我们可以把每个数组中的元素想象成一个个点,将这些点串联在一起就构成了一条线,这条线就代表一维数组

2、一维数组的创建与初始化

(1)创建

正如我们在概念中的示例一样,我们可以按照数组元素类型,数组名,包含元素个数这三点创建出来一个一维数组,例如我们可以用int age[12]来表示十二个人的年龄集合

(2)初始化

下面我们进行数组的初始化

初始化可包括完全初始化和不完全初始化,我们用大括号内包含元素并用等号对数组赋值的形式来完成初始化,如:

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

1 表示完全初始化,即数组标明的元素个数正好等于初始化的元素个数

2表示不完全初始化,即数组标明的元素个数大于初始化的元素个数,此时数组中剩余的元素没有具体表明要赋的值,系统这时会默认其为0

(3)类型

数组的类型很容易记,只要把数组名的部分删掉,剩下的就是该数组的类型,如int arr[5]的类型是int [5]

(4)一维数组的使用

C语⾔规定数组是有下标的,下标是从0开始的,假设数组有n个元素,最后⼀个元素的下标是n-1,下 标就相当于数组元素的编号,如下:

int arr[5] = {1,2,3,4,5}
//对应元素下标 0 1 2 3 4
若我们想要调用数组中的第一个元素,可以用arr[0](即数组名加下标)的形式来调用

三、二维数组

1、概念

一维数组可以想象成由点构成的一条线,二维数组则可以在此基础上想象为由线叠加构成的二维平面,平面可以划分成行和列

2、二维数组的创建与初始化

(1)创建

二维数组的创建与一维数组类似,

int arr[2][3]

我们可以把[2][3]分别看作一共有两行,每行包含三个元素,该数组中共可以装2*3 = 6个元素 

(2)初始化

二维数组初始化也与一维数组类似,可分为以下几种:

a 完全初始化

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

b 不完全初始化

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

c 按照行初始化

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

d 初始化时省略行,但是不能省略列

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

(3) 类型

二维数组去掉数组名即是其类型,如int arr[2][3] 的类型是 int [2][3]

(4)二维数组的使用

当我们掌握了⼆维数组的创建和初始化,那我们怎么使用二维数组呢? 其实⼆维数组访问也是使用下标的形式的,二维数组是有行和列的,只要锁定了行和列就能唯一锁定 数组中的一个元素。 C语言规定,二维数组的行是从0开始的,列也是从0开始的,如下所示:

int arr[3][5] = {1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7};
01234
012345
123456
234567

当我们要调用二维数组元素时,首先要找到它在哪一行,其次是哪一列,如arr[1][2]表示的就是第一行第二列的元素

四、延伸拓展

C99中的变长数组

在C99标准之前,C语言在创建数组的时候,数组大小的指定只能使⽤常量、常量表达式,或者如果我们初始化数据的话,可以省略数组大小

例如

 int arr1[10];
 int arr2[3+5];
 int arr3[] = {1,2,3};

这样的语法限制,让我们创建数组就不够灵活,有时候数组大了浪费空间,有时候数组又小了不够用的。 C99中给一个变长数组(variable-lengtharray,简称VLA)的新特性,允许我们可以使用变量指定数组大小

 int n = a+b;
 int arr[n];

上面示例中,数组 arr 就是变长数组,因为它的长度取决于变量 n 的值,编译器没法事先确定,只 有运行时才能知道 n 是多少。 变长数组的根本特征,就是数组长度只有运行时才能确定,所以变长数组不能初始化。它的好处是程序员不必在开发时,随意为数组指定一个估计的长度,程序可以在运行时为数组分配精确的长度。有一个比较迷惑的点,变长数组的意思是数组的大小是可以使用变量来指定的,在程序运行的时候,根据变量的大小来指定数组的元素个数,而不是说数组的大小是可变的。数组的大小一旦确定就不能再变化了


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

五、练习

练习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;
 }
练习2:二分查找 在⼀个升序的数组中查找指定的数字n,很容易想到的方法就是遍历数组,但是这种方法效率比较低。比如我买了⼀双鞋,你好奇问我多少钱,我说不超过300元。你还是好奇,你想知道到底多少,我就让你猜,你会怎么猜?你会1,2,3,4...这样猜吗?显然很慢;⼀般你都会猜中间数字,比如:150,然 后看大了还是小了,这就是二分查找,也叫折半查找
#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");

  • 25
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值