希望文章能够给到初学的你一些启发~ 如果觉得文章对你有帮助的话,点赞 + 关注+ 收藏支持一下笔者吧~
阅读指南:
开篇说明
截止目前,我们学习并使用的变量都属于基本类型,且都是单独使用,但有时,我们会有存储批量数据的需求。如,统计100名同学的身高与体重,按照之前的方法,我们需要定义100个int型变量,分别来存储身高,体重,非常繁琐。因此,我们引入数组来解决这个问题。
一.一维数组的定义与引用
我们要如何理解定义数组呢
其实很简单,就是和计算机要一块连续的空间,并且告诉计算机,这块空间会存储哪种类型的数据。
1.定义一个一维数组
我们首先需要和计算机进行交流,来告诉计算机,我们需要一块多大的连续空间,用来存储哪种类型的数据
结构为:数据类型 数组名[常量表达式];
1.数据类型:就是和计算机申请空间时,需要告诉计算机要存储的数据类型;所以,你申请的这块空间,只可以存储一种类型。
2.数组名:就是你给你自己申请的空间来命名。
3.常量表达式:就是一个确定的数字,例如,1,5,8,10。这些都是确定的数字。
例:
int counts[9];//9个连续的空间,每个类型都是int型,数组的名字叫counts
char sex[2];//2个连续的空间,每个类型都是char型,数组的名字叫sex
2.引用一维数组内的元素
当我们向计算机申请了一片连续的空间之后,我们就要使用这些空间。
结构为:数组名字[下标];
下标:就是数组中连续空间的相对位置,从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;然后依次输出。
这里我们先使用循环来做这个问题
#include <stdio.h>
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");
}
输出结果是这样子的:
那么我们如果不使用循环会怎么样呢?
#include <stdio.h>
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。
#include <stdio.h>
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;
}
输出结果是这样子的:
标签:教程,int,C语言,二维,数组,printf,空间,新手,counts From: https://blog.csdn.net/2302_79751907/article/details/140657670意气风发,漫卷疏狂
学习是成长的阶梯,每一次`的积累都将成为未来的助力。我希望通过持续的学习,不断汲取新知识,来改变自己的命运,并将成长的过程记录在我的博客中。如果我的博客能给您带来启发,如果您喜欢我的博客内容,请不吝点赞、评论和收藏,也欢迎您关注我的博客。
您的支持是我前行的动力。听说点赞会增加自己的运气,希望您每一天都能充满活力!
愿您每一天都快乐,也欢迎您常来我的博客。我叫意疏,希望我们一起成长,共同进步。
我是意疏 下次见!