回顾C语言(五):数组1

回顾C语言(五):数组1

一、什么是数组?

数组是存放相同类型元素的集合。其意义在于集合化存储和引用同类型的数据,比如说:班里有60名学生,我们需要统计这60名学生的数学成绩,按照此前所学的内容,我们需要定义60个int 类型的变量(假设成绩不保留小数),要使用数组的话我们只需要定义一个长度为60的数组就行。

二、数组的特点

  1. 存放相同类型的若干个元素
  2. 元素的地址空间是连续的
  3. 数组名就是一个地址,它是数组首元素的地址(此时以数组元素为单位来描述),也是数组的地址(此时把数组看作一个整体要加上取地址符‘ & ’)

三、数组的分类

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bKmEq92R-1637495918500)(C:\Users\纵横四海\AppData\Roaming\Typora\typora-user-images\image-20211121151446238.png)]

四、数组的定义

1、一维数组的定义
(1)定义方式: 数据类型 数组名[长度]; // 数组名和普通变量名一样命名要符合规范,
类型含义:int arr[10];
变量名:arr
数组的类型: int [10]
数组元素的类型:int

例如:int a[5]; // 定义了一个名为a 长度为5个int大小的数组,由于该数组是int类型,int类型的占4个字节,因此数组里的每个元素占4个字节,整个数组占20个字节。

其中

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DCGRi9I1-1637495918503)(C:\Users\纵横四海\AppData\Roaming\Typora\typora-user-images\image-20211121154127414.png)]

  • 数据类型

char 、int、double、float、结构体、指针

  • 数组名

命名要符合变量名规范

  • [长度];

    数组的长度:必须常量或者常量表达式,必须得是确定得 整型或字符型、常量符,不能是变量、浮点型。

    例:

    int a[10];

    int a[2.5]; 错!

    int a[‘c’];

    int i = 4; int a[i]; 错!

    int a[1+2];

    #define N 10
    int a[N];


(2)一维数组的初始化

数组一定要进行初始化,不然里面元素值会是随机值,容易引起bug;

  • 定义时赋值

​ char a[5] = {‘a’,‘x’,‘c’,‘f’,‘g’}; // 是完全赋值;我们自己给数组中的每个元素都赋了值。

​ char a[5] = {‘a’,‘x’}; //是部分赋值; 元素a[0] = ‘a’ , a[1] = ‘x’ , 至于数组的其他元素操作系统自动赋值为NULL(ascii值零)

注意1: 数组定义时赋值必须是连续赋值,不能间隔赋值,如:错误示范:int arr[5] = {1,3,4,5}; 正确示范:int arr[5] = {1,3,3,4,5}; 或 int arr[5] = {1,3};

注意2: 定义时赋值,相邻元素要用逗号隔开,第一个元素之前和最后一个元素之后不要加逗号。字符型赋值要加单引号 ‘ ’ ,整型和浮点型则不用加。


不声明数组长度直接定义后赋值

​ int a[] = {2,3,4,5}; // 在整型和浮点型情况下元素的个数即为数组长度,所以int a[] = {2,3,4,5}; 等同于int a[4] = {2,3,4,5};


字符数组则有所不同

​ 方式一:

​ char str[] = {‘a’,‘b’,‘c’}; // 这种情况下字符数组的长度就是字符元素个数,所以此时char str[] = {‘a’,‘b’,‘c’}; 等同于 char str[3] = {‘a’,‘b’,‘c’};

​ 方式二:

​ char str[] = “abcdefg”; 和 char str[] = {“abcdefg”}; // 字符型数组这两种赋值(字符串赋值)形式功能完全相同,这种情况下数组的长度是字符数加 1,因为操作系统会在该字符串末尾多加一个字符 ‘\0’ ,也就是说: char str[] = “abcdefg”; char str[] = {“abcdefg”}; char[8] = {‘a’,‘b’,‘c’,‘d’,‘e’,‘f’,‘g’,’\0’}; 这三 种形式是一个含义。

注意3: 字符数组进行字符串赋值时,其数组长度是字符数加1,因为操作系统在字符串末尾多加了一个字符 ‘\0’

注意4: 数组在定义时必须要有确定的长度,这个长度可以在定义时由我们自己声明(如:int[3];),或者定义时赋值由操作系统声明(如:int[]={3,2,3};),其实就是确定了操作系统要给数组分配的内存空间的大小。

  • 定义后赋值

    数组定义后只能进行单元素赋值,例如:

    int a[4]; //定一个一个长度为4的int数组

    a[4] = {1,2,3,4}; 错误! // 这里有两点错误:一,数组在定义后不能进行多元素赋值。二、数组定义后数组名加下标表示数组内的一个元素,又因为数组的下标从零开始因此该数组的四个元素分别为: a[0] , a[1] , a[2] , a[3] 所以就是按单元素赋值它也是错的。PS: 数组的长度为n,则其下标范围是 0 ~ n-1 ;

2、一维数组元素的引用
  • 数组必须先定义后使用
  • 只能一个元素一个元素的引用,不能一次引用整个数组。
  • 在使用时 数组名[ 下标] : 下标 可以是整型/字符型 常量/ 变量,它们的值是整数
  • 数组下标的含义是:距离首元素的偏移量
  • 数组下标范围是 0 ~ n-1 ; n代表数组的长度

例:int arr[5] = {3,2,4,53,9};

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WDbuhnjV-1637495918509)(C:\Users\纵横四海\AppData\Roaming\Typora\typora-user-images\image-20211121184245130.png)]

还可以通过循环对数组元素进行引用:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c89bhAk8-1637495918512)(C:\Users\纵横四海\AppData\Roaming\Typora\typora-user-images\image-20211121184514623.png)]

用sizeof计算数组的长度:

数组的长度 = 数组的类型大小/元素的类型大小

sizeof(arr) 的参数是数组名,则计算的是整个数组的长度,如果参数是元素则计算的事元素的类型

存中…(img-c89bhAk8-1637495918512)]

用sizeof计算数组的长度:

数组的长度 = 数组的类型大小/元素的类型大小

sizeof(arr) 的参数是数组名,则计算的是整个数组的长度,如果参数是元素则计算的事元素的类型

数组的长度 = sizeof(arr)/sizeof(arr[0]);

2、二维数组
1、定义

定义一般形式: 数据类型 数组名[行数][列数]

二维数组的元素数 = 行数*列数

参照一维数组,二维数组的行数和列数,必须是常量或者常量表达式,必须得是确定得 整型或字符型、常量符,不能是变量、浮点型。

其逻辑结构相当于一个矩阵的形式如图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6MZuBV71-1637504489590)(C:\Users\纵横四海\AppData\Roaming\Typora\typora-user-images\image-20211121211913330.png)]

2、二维数组初始化

二维数组具有一维数组所有的特点,定义时初始化(完全赋值、部分赋值),定义后初始化;

定义时初始化

int a[3][4] = {0,1,2,3,4,5,6,7,8,9,10,11}; // 完全初始化

int a[3][4] = { {0,1,2,3},{4,5,6,7},{8,9,10,11} }; // 完全初始化,我们一般使用这种方式,便于区分元素的位置,这种定义方式和上一行的作用完全相同。

int a[3][4] = {0,1,2,3,4,5,6,7,8,9}; // 部分初始化 等同于 int a[3][4] = { {0,1,2,3},{4,5,6,7},8,9};

int a[3][4] = { {0,1,2,3},{4,5,6,7} }; // 部分初始化

3、二维数组的引用

形式: 数组名[行标][列标]

例如:int a[3][3]={
{1,2,3},
{4,5,6},
{7,8,9}
};

1 == a[0][0] , 9 == a[2][2]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-41UkPAxS-1637504489597)(C:\Users\纵横四海\AppData\Roaming\Typora\typora-user-images\image-20211121220503824.png)]

最方便的是用双重for循环:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mc5bk4o0-1637504489602)(C:\Users\纵横四海\AppData\Roaming\Typora\typora-user-images\image-20211121220722155.png)]

关于对二维数组的理解

如下图所示,我们可以把二维数组里的每一行作为一个整体当做一个元素来理解,在这样的理解方式下二维数组的元素是一维数组,此时a[0]、a[1]、a[2]是每个一维数组的首元素地址,我把它称为伪元素,此时元素的大小为int[4],有三个元素,它的特点完全等同于一维数组。实际上二维数组的真实元素是 int,有3*4(行数*列数)个元素。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-voYv1aVN-1637504489610)(C:\Users\纵横四海\AppData\Roaming\Typora\typora-user-images\image-20211121221034068.png)]

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
计算机二级C语言100题是一个非常具有挑战性的考试。以下是一般情况下会包含的内容和答题建议: 题目内容通常涵盖C语言的基础知识、语法规则、流程控制语句、数组、指针、函数等方面,要求考生具备一定的编程基础和实践经验。 对于这样的考试,建议考生做好以下准备和应对策略: 1. 复习基础知识:回顾C语言的基础知识,包括数据类型、运算符、表达式、语句等,确保自己对基本概念和语法规则掌握清楚。 2. 理解题意:认真阅读题目,理解题目要求,明确所需实现的功能和目标。 3. 列举测试用例:对于给定的题目,尽可能想出各种可能的测试用例,以确保自己编写的程序可以覆盖各种情况。 4. 动手实践:根据题目要求,使用C语言编写程序解决问题。注意编程风格、代码规范和逻辑清晰,尽量避免出现错误和漏洞。 5. 调试和优化:在编写代码完成后,进行调试,确保程序没有错误。如果出现问题,使用调试工具逐步追踪并修复错误。优化程序以提高效率和性能。 6. 题目的顺序:尽可能选择先做熟练的题目,避免耽误时间在难题上。 7. 时间分配:合理分配时间给每道题,避免过度消耗在某个题目上。 8. 仔细检查:完成所有题目后,花时间审查和验证每个题目的答案,确保没有忽略错误和遗漏内容。 总结起来,对于计算机二级C语言100题,准备充分,理解题意,编写清晰、规范的程序,并进行调试和优化是非常重要的。通过认真备考和实践,相信能够顺利应对这个挑战,取得好成绩。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值