C语言数组初入

情景

实用程序输出一个 4×4 的整数矩阵,代码如下:

#include <stdio.h>
#include <stdlib.h>
int main()
{int a1=20, a2=345, a3=700, a4=22;int b1=56720, b2=99, b3=22, b4=2;int c1=233, c2=205, c3=1, c4=6666;int d1=34, d2=0, d3=23, d4=23006783;printf("%-9d %-9d %-9d %-9d\n", a1, a2, a3, a4);printf("%-9d %-9d %-9d %-9d\n", b1, b2, b3, b4);printf("%-9d %-9d %-9d %-9d\n", c1, c2, c3, c4);printf("%-9d %-9d %-9d %-9d\n", d1, d2, d3, d4);system("pause");return 0;
}

运行结果:

20        345       700       22
56720     9999      22        2
233       205       1         6666
34        0         23        23006783

矩阵共有 16 个整数,我们为每个整数定义了一个变量,也就是 16 个变量。那么,为了减少变量的数量,让开发更有效率,能不能为多个数据定义一个变量呢?比如,把每一行的整数放在一个变量里面,或者把 16 个整数全部都放在一个变量里面。答案当然是肯定的,办法就是使用数组(Array)。

数组的概念和定义

我们知道,要想把数据放入内存,必须先要分配内存空间。放入4个整数,就得分配4个int类型的内存空间:

int a[4];

这样,就在内存中分配了4个int类型的内存空间,共 4×4=16 个字节,并为它们起了一个名字,叫a。

我们把这样的一组数据的集合称为数组(Array),它所包含的每一个数据叫做数组元素(Element),所包含的数据的个数称为数组长度(Length),例如int a[4];就定义了一个长度为4的整型数组,名字是a。

数组中的每个元素都有一个序号,这个序号从0开始,而不是从我们熟悉的1开始,称为下标(Index)。使用数组元素时,指明下标即可,形式为:

arrayName[index]

arrayName 为数组名称,index 为下标。例如,a[0] 表示第0个元素,a[3] 表示第3个元素。

接下来我们就把第一行的4个整数放入数组:

a[0]=20;
a[1]=345;
a[2]=700;
a[3]=22;

这里的0、1、2、3就是数组下标,a[0]、a[1]、a[2]、a[3] 就是数组元素。

我们经常会使用循环结构将数据放入数组中(也就是为数组元素逐个赋值),然后再使用循环结构输出(也就是依次读取数组元素的值),下面我们就来演示一下如何将 1~10 这十个数字放入数组中:

#include <stdio.h>
int main(){int nums[10];int i;//将1~10放入数组中for(i=0; i<10; i++){nums[i] = (i+1);}//依次输出数组元素for(i=0; i<10; i++){printf("%d ", nums[i]);}return 0;
}

运行结果:

1 2 3 4 5 6 7 8 9 10 

变量 i 既是数组下标,也是循环条件;将数组下标作为循环条件,达到最后一个元素时就结束循环。数组 nums 的最大下标是 9,也就是不能超过 10,所以我们规定循环的条件是 i<10,一旦 i 达到 10 就得结束循环。

更改上面的代码,让用户输入 10 个数字并放入数组中:

#include <stdio.h>
int main(){int nums[10];int i;//从控制台读取用户输入for(i=0; i<10; i++){scanf("%d", &nums[i]);  //注意取地址符 &,不要遗忘哦}//依次输出数组元素for(i=0; i<10; i++){printf("%d ", nums[i]);}return 0;
}

运行结果:

22 18 928 5 4 82 30 10 666 99922 18 928 5 4 82 30 10 666 999 

第 8 行代码中,scanf() 读取数据时需要一个地址(地址用来指明数据的存储位置),而 nums[i] 表示一个具体的数组元素,所以我们要在前边加 & 来获取地址。

最后我们来总结一下数组的定义方式:

dataType  arrayName[length];

dataType 为数据类型,arrayName 为数组名称,length 为数组长度。例如:

float m[12];  //定义一个长度为 12 的浮点型数组
char ch[9];  //定义一个长度为 9 的字符型数组

注意
1 . 数组中每个元素的数据类型必须相同,对于int a[4];,每个元素都必须为 int。

2 . 数组长度 length 最好是整数或者常量表达式,例如 10、20*4 等,这样在所有编译器下都能运行通过。

3 . 访问数组元素时,下标的取值范围为 0 ≤ index < length,过大或过小都会越界,导致数组溢出。

数组内存是连续的

数组是一个整体,它的内存是连续的;也就是说,数组元素之间是相互挨着的,彼此之间没有一点点缝隙。下图演示了int a[4];在内存中的存储情形:
在这里插入图片描述
「数组内存是连续的」这一点很重要,所以我使用了一个大标题来强调。连续的内存为指针操作(通过指针来访问数组元素)和内存处理(整块内存的复制、写入等)提供了便利,这使得数组可以作为缓存(临时存储数据的一块内存)使用。

数组的初始化

上面的代码是先定义数组再给数组赋值,我们也可以在定义数组的同时赋值,例如:

int a[4] = {20, 345, 700, 22};

数组元素的值由{ }包围,各个值之间以,分隔。

对于数组的初始化需要注意以下几点:
1 . 可以只给部分元素赋值。当{ }中值的个数少于元素个数时,只给前面部分元素赋值。例如:

int a[10]={12, 19, 22 , 993, 344};

表示只给 a[0]~a[4] 5个元素赋值,而后面 5 个元素自动初始化为 0。

当赋值的元素少于数组总体元素的时候,剩余的元素自动初始化为 0:

	对于short、int、long,就是整数 0;对于char,就是字符 '\0';对于float、double,就是小数 0.0。

我们可以通过下面的形式将数组的所有元素初始化为 0:

int nums[10] = {0};
char str[10] = {0};
float scores[10] = {0.0};

由于剩余的元素会自动初始化为 0,所以只需要给第 0 个元素赋值为 0 即可。

2 . 只能给元素逐个赋值,不能给数组整体赋值。例如给 10 个元素全部赋值为 1,只能写作:

int a[10] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1};

而不能写作:

int a[10] = 1;

3 . 如给全部元素赋值,那么在定义数组时可以不给出数组长度。例如:

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

等价于

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

我们使用数组来输出一个 4×4 的矩阵:

#include <stdio.h>
int main()
{int a[4] = {20, 345, 700, 22};int b[4] = {56720, 9999, 20098, 2};int c[4] = {233, 205, 1, 6666};int d[4] = {34, 0, 23, 23006783};printf("%-9d %-9d %-9d %-9d\n", a[0], a[1], a[2], a[3]);printf("%-9d %-9d %-9d %-9d\n", b[0], b[1], b[2], b[3]);printf("%-9d %-9d %-9d %-9d\n", c[0], c[1], c[2], c[3]);printf("%-9d %-9d %-9d %-9d\n", d[0], d[1], d[2], d[3]);return 0;
}

扫一扫获取更多资讯哟!!!在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/565090.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

最全python爬虫库安装详解

目录 一、请求库的安装 1.requests 的安装 2.Selenium的安装 3.ChromeDrive 的安装 4.GeckoDriver 的安装 5.PhantomJS 的安装 6.aiohttp 的安装 二、解析库的安装 1.lxml 的安装 2.Beautiful Soup 的安装 3.pyquery 的安装 4.tesserocr 的安装 一、请求库的安装 …

山东大学 2020级数据库系统 实验五

What’s more 山东大学 2020级数据库系统 实验一 山东大学 2020级数据库系统 实验二 山东大学 2020级数据库系统 实验三 山东大学 2020级数据库系统 实验四 山东大学 2020级数据库系统 实验五 山东大学 2020级数据库系统 实验六 山东大学 2020级数据库系统 实验七 山东大学 20…

C语言二维数组的使用

二维数组的定义 二维数组定义的一般形式是&#xff1a; dataType arrayName[length1][length2];其中&#xff0c;dataType 为数据类型&#xff0c;arrayName 为数组名&#xff0c;length1 为第一维下标的长度&#xff0c;length2 为第二维下标的长度。 我们可以将二维数组看…

python基础入门(8)之集合

目录 Python集合 一、集合理解 二、访问集合 2.1&#xff09;遍历集合 3.2&#xff09;检查是否存在 三、添加集合 3.1&#xff09;添加项目值 3.3&#xff09;添加任何可迭代对象 四、移除集合项 4.1&#xff09;remove方法 4.2&#xff09;iscard() 方法 4.3&…

山东大学 2020级数据库系统 实验六

What’s more 山东大学 2020级数据库系统 实验一 山东大学 2020级数据库系统 实验二 山东大学 2020级数据库系统 实验三 山东大学 2020级数据库系统 实验四 山东大学 2020级数据库系统 实验五 山东大学 2020级数据库系统 实验六 山东大学 2020级数据库系统 实验七 山东大学 20…

C语言数组元素的查询

数组的查询 在日常的开发过程中&#xff0c;我们经常需要查询数组中的元素&#xff0c;这就需要我们使用数组元素查询的方法来进行查询。 对无序数组的查询 无序数组&#xff0c;就是数组元素的排列没有规律。无序数组元素查询的思路也很简单&#xff0c;就是用循环遍历数组…

山东大学 2020级数据库系统 实验七

What’s more 山东大学 2020级数据库系统 实验一 山东大学 2020级数据库系统 实验二 山东大学 2020级数据库系统 实验三 山东大学 2020级数据库系统 实验四 山东大学 2020级数据库系统 实验五 山东大学 2020级数据库系统 实验六 山东大学 2020级数据库系统 实验七 山东大学 20…

python基础入门(9)之字典

目录 Python字典 一、字典理解 1.1&#xff09;创建字典与访问 1.2&#xff09;字典长度 1.3&#xff09;数据类型 二、访问字典 2.1&#xff09;访问键名 2.2&#xff09;访问健值 三、更改字典各种方法 四、添加字典项各种方法 五、删除字典的各种方法 ​六、遍历…

山东大学 2020级数据库系统 实验八、九

What’s more 山东大学 2020级数据库系统 实验一 山东大学 2020级数据库系统 实验二 山东大学 2020级数据库系统 实验三 山东大学 2020级数据库系统 实验四 山东大学 2020级数据库系统 实验五 山东大学 2020级数据库系统 实验六 山东大学 2020级数据库系统 实验七 山东大学 20…

python基础入门(10)之循环语句

目录 一、If … Else语句 一.if语句 二.缩进 三.elif语句 四.else语句 4.1基本else 4.2&#xff09;and语句 4.3&#xff09;or 语句 4.4&#xff09;嵌套if语句 4.4&#xff09;pass语句 二、while循环语句 一.基本理解 二.中断声明 三.continue 声明 四.else …

python基础(11)之函数

目录 函数 一、创建函数与调用 二、参数 三、参数数量 四、任意参数&#xff0c;*args 五、关键字参数 七、任意关键字参数&#xff0c;**kwargs 八、默认参数值 九、将列表作为参数传递 十、返回值 十一、pass语句 函数 一、创建函数与调用 在 Python 中&#xf…

排序算法的实现及时间复杂度分析——计数排序、选择排序、冒泡排序、插入排序

文章目录排序算法计数排序选择排序冒泡排序插入排序排序算法 排序算法是解决问题中常见且非常重要的一环&#xff0c;针对相应的问题选择相应的排序算法&#xff0c;能够提高问题解决速度&#xff0c;节省时间&#xff01;&#xff01;&#xff01; 常见的排序算法有&#xf…

python基础(12)之匿名函数lambda

lambda lambda 函数是一个小的匿名函数。一个 lambda 函数可以接受任意数量的参数&#xff0c;但只能有一个表达式。 语法&#xff1a; lambda arguments : expression 执行表达式并返回结果&#xff1a; 示例将 10 添加到 argument a&#xff0c;并返回结果&#xff1a; …

C语言快速排序

快速排序是对冒泡法排序的一种改进。 快速排序算法 的基本思想是&#xff1a;将所要进行排序的数分为左右两个部分&#xff0c;其中一部分的所有数据都比另外一 部分的数据小&#xff0c;然后将所分得的两部分数据进行同样的划分&#xff0c;重复执行以上的划分操作&#xff0…

机器学习入门(1)之基本概念简介

目录 一、机器学习概述 1.1 什么是机器学习&#xff1f; 1.2 为什么需要机器学习&#xff1f; 1.3 机器学习应用场景 1.4 机器学习的一般流程 1.5 典型的机器学习过程​ 二、机器学习的基本术语 三.假设空间与版本空间 四、归纳偏好 1.哪种更好 2..假设的选择原则 …

山东大学 2020级计算机系统原理——拆解二进制炸弹

写在前面 第一次拿到这个实验还是有点慌&#xff01;之前没见过&#xff0c;不过还是慢慢做过来了。 这是个需要耐心的过程&#xff0c;请一定静下心来哦&#xff01; 环境及配置 环境&#xff1a;Ubuntu 20.04 GDB 调试工具 可参考配置&#xff1a;GDB调试工具配置&#…

机器学习入门(2)之模型评估与选择

目录 一、误差与拟合 1. 泛化误差与经验误差 2. 损失函数与训练误差 3. 过拟合与欠拟合 4. 过拟合的另一种现象&#xff1a;数据泄露 二、评估方法 1. 留出法 2. 交叉验证法&#xff08;留一法&#xff09; 3. 自助法 4. 调参与最终模型 三、性能度量 1. 混淆矩阵 …

pytorch MNIST 手写数字识别 + 使用自己的测试集 + 数据增强后再训练

文章目录1. MNIST 手写数字识别2. 聚焦数据集扩充后的模型训练3. pytorch 手写数字识别基本实现3.1完整代码及 MNIST 测试集测试结果3.1.1代码3.1.2 MNIST 测试集测试结果3.2 使用自己的图片进行测试3.2.1 测试图片预处理代码3.2.2 测试图片结果4. 数据增强4.1 手动读取 MNIST …

python基础(13)之数组

目录 数组 一、访问数组的元素 二、数组的长度 三、修改数组 四、数组的其它操作 数组 Python 没有对数组的内置支持&#xff0c;但可以使用Python 列表代替。 例如&#xff1a; ben ["笨小孩1", "笨小孩2", "笨小孩3"]一、访问数组的元…

C语言归并排序(合并排序)

归并排序也称合并排序&#xff0c;其算法思想是将待排序序列分为两部分&#xff0c;依次对分得的两个部分再次使用归并排序&#xff0c;之后再对其进行合并。仅从算法思想上了解归并排序会觉得很抽象&#xff0c;接下来就以对序列A[0], A[l]…, A[n-1]进行升序排列来进行解说&a…