C语言新手小白详细教程(5)数组

希望文章能够给到初学的你一些启发~ 如果觉得文章对你有帮助的话,点赞 + 关注+ 收藏支持一下笔者吧~

开篇说明截止目前,我们学习并使用的变量都属于基本类型,且都是单独使用,但有时,我们会有存储批量数据的需求。如,统计100名同学的身高与体重,按照之前的方法,我们需要定义100个int型变量,分别来存储身高,体重,非常繁琐。因此,我们引入数组来解决这个问题。

一.一维数组的定义与引用我们要如何理解定义数组呢

其实很简单,就是和计算机要一块连续的空间,并且告诉计算机,这块空间会存储哪种类型的数据。

1.定义一个一维数组我们首先需要和计算机进行交流,来告诉计算机,我们需要一块多大的连续空间,用来存储哪种类型的数据

结构为:数据类型 数组名[常量表达式];

1.数据类型:就是和计算机申请空间时,需要告诉计算机要存储的数据类型;所以,你申请的这块空间,只可以存储一种类型。

2.数组名:就是你给你自己申请的空间来命名。

3.常量表达式:就是一个确定的数字,例如,1,5,8,10。这些都是确定的数字。

例:

代码语言:javascript复制int counts[9];//9个连续的空间,每个类型都是int型,数组的名字叫counts

char sex[2];//2个连续的空间,每个类型都是char型,数组的名字叫sex2.引用一维数组内的元素当我们向计算机申请了一片连续的空间之后,我们就要使用这些空间。

结构为:数组名字[下标];

下标:就是数组中连续空间的相对位置,从0开始 依次递减。

例如 我们定义int counts[9];数组大小为9,那么空间的相对位置就是0、1、2、3、4、5、6、7、8;那么使用第一个位置的方法就是 counts[0]、使用第二个位置的方法就是 counts[1],依此类推…

这里需要注意的是:我们只能分别引用单个数组元素,不能一次性调用整个数组。

3.一维数组内的初始化我们在和计算机申请时,就给让申请的这块空间来放置一些元素

1.定义时给全部空间初步赋值。

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

这里需要注意的是:你申请的空间是连续的,那么赋值时也是按照相对位置顺序进行放置,用逗号来隔开,用花括号括起来,最后用分号结尾就可以了。

2.只给一部分值

int counts[5] = {1,2};

这里我们申请了五个空间,但是我们只给两个空间赋值,那么剩余的三个空间会自动赋值0.

3.不指定数组长度

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

如果我们没有指定数组长度,计算机会根据后面花括号中数据的个数自动设置数组长度。所以这里数组counts的长度为5.

4.举个例子 申请一个大小为10的int型数组,名字为counts,10个位置分别赋值1、2、3、4、5、6、7、8、9、10;然后依次输出。

这里我们先使用循环来做这个问题

代码语言:javascript复制#include

int main(void) {

// 申请一个大小为10的int型数组,名字为counts

int counts[10];

int i;

for (int i = 0; i < 10; i++) {// 循环变量i从0到9,共循环10次

counts[i] = i + 1;

}

// 依次输出

for (int i = 0; i < 10; i++) {

printf("%d ", counts[i]);

}

printf("\n");

}输出结果是这样子的:

那么我们如果不使用循环会怎么样呢?

代码语言:javascript复制#include

int main() {

int counts[ ] = {1,2,3,4,5,6,7,8,9,10};

printf("%d ", counts[0]);

printf("%d ", counts[1]);

printf("%d ", counts[2]);

printf("%d ", counts[3]);

printf("%d ", counts[4]);

printf("%d ", counts[5]);

printf("%d ", counts[6]);

printf("%d ", counts[7]);

printf("%d ", counts[8]);

printf("%d ", counts[9]);

return 0;

}输出结果还是一样 但是代码的美观性却很差了,而且我们使用循环可以更好的拓展数组,如果数组长度变为100,我们只需要改变循环即可,而不需要一个一个修改。并且我们使用循环,可以更简洁直观。效率更好

二.二维数组的定义与引用我们经常使用的表格其实就是二维数组,在数学中又被称之为矩阵。

1.定义二维数组我们需要和计算机进行交流,告诉计算机,你需要一块多大的连续空间,这片空间被分为M行N列,来存储同一类型的数据。

结构为:数据类型 数组名[常量表达式1] [常量表达式2];

数据类型:和一维数组一样,一个二维数组只可以存储一种类型的数据;数组名:为你申请的这块空间起一个名字。常量表达式1:二维数组的行数;

常量表达式2:二维数组的列数;

所以,整个数组的大小为,行数 * 列数;2.引用二维数组内的元素当我们成功向计算机申请了一片连续的空间之后,我们就要开始自主的使用这块空间

结构为:数组名字[行下标] [列下标];

行下标 & 列下标:和日常使用的表格是一样的概念,你要引用的位置在第几行第几列,行和列都要从0开始依次递增。

比如,int table[3] [3];这相当于我们申请了一个类型是int型,大小为3行3列的二维数组。

3.一维数组内的初始化我们在和计算机申请时,就给让申请的这块空间来放置一些元素

1.分行给二维数组赋初值,例如:

int tables[3] [3] = {{1,2,3},{4,5,6},{7,8,9}};

计算机会将第一个花括号内的数据给第0行,第二个花括号内的数据给第一行,第三个花括号内的数据给第二行。

2.所有数据写在一个花括号内,计算机自动依次赋值,例如:

int tables[3] [3] = {1,2,3,4,5,6,7,8,9};

二维数组是顺序的一块空间,所以计算机会按照你给的数据顺序依次赋值这些空间。

3.对部分元素进行赋值,例如:

(1) int tables[3] [3] = {{1},{4},{7}};

赋值方法如下:三个花括号分别对应 0 1 2 行,再结合一维数组中部分赋值的知识,我们可以知道,支队每一列的第一个元素来进行赋值,其他补零即可。

二维数组形式如下:

(2)int tables[3] [3] = {{1},{4,0,6},{7}};

4.只指定其中一个维度,另外一个维度通过赋值让计算机自动计算,例如:

int tables[ ] [3] = {1,2,3,4,5,6,7,8,9};

一共九个数据,第二维度即列是3,那么行自然也是3:

4.举个例子 定义一个3行4列的二维数组A,从键盘输入一个整数T,A数组的值为T乘以当前行下标和列下标之和。转置这个二维数组,转置后的数组为B,分别输出原数组和转置后的数组B。

代码语言:javascript复制#include

int main() {

int A[3][4];

int B[4][3];

int T, i, j;

// 从键盘输入一个整数T

printf("请输入一个整数T: ");

scanf("%d", &T);

// 计算数组A的值

for (i = 0; i < 3; i++) {

for (j = 0; j < 4; j++) {

A[i][j] = T * (i + j);

}

}

// 输出原数组A

printf("原数组A:\n");

for (i = 0; i < 3; i++) {

for (j = 0; j < 4; j++) {

printf("%d\t", A[i][j]);

}

printf("\n");//每次打印完一行后,换行

}

// 转置数组A到数组B

for (i = 0; i < 3; i++) {

for (j = 0; j < 4; j++) {

B[j][i] = A[i][j];

}

}

// 输出转置后的数组B

printf("转置后的数组B:\n");

for (i = 0; i < 4; i++) {

for (j = 0; j < 3; j++) {

printf("%d\t", B[i][j]);

}

printf("\n");

}

return 0;

}输出结果是这样子的:

意气风发,漫卷疏狂

学习是成长的阶梯,每一次`的积累都将成为未来的助力。我希望通过持续的学习,不断汲取新知识,来改变自己的命运,并将成长的过程记录在我的博客中。

如果我的博客能给您带来启发,如果您喜欢我的博客内容,请不吝点赞、评论和收藏,也欢迎您关注我的博客。

您的支持是我前行的动力。听说点赞会增加自己的运气,希望您每一天都能充满活力!

愿您每一天都快乐,也欢迎您常来我的博客。我叫意疏,希望我们一起成长,共同进步