c语言的数组学习
c语言数组初识
在前面我们定义变量通常使用一个或者几个字母,当所涉及的变量较多时我们便使用a1 a2 a3 的形式来进行变量的定义,那么就有人发现了如果定义的变量较多如何是好?且不说定义时所面对的困扰,关键还有在输入输出时的困扰。那么如何解决这一问题,就是我们今天要说的。
(首先我在此说明本人初识数组,以下内容只是个人对数组的一点见解。)
一维数组:
语法:
类型标识符(如:int char float double ) 数组名(使用合法的标识符尽量英文字母) [整型常量表达式];
示例:
#include <stdio.h> int main() { int a[10]={0},i;/*这里a[10]={0}是指将数组的值全部初始化为0。*/ for(i=0;i<10;i++) { printf("%d",a[i]); } return 0; }
a[0] | a[1] | a[2] | a[3] | a[4] | a[5] | a[6] | a[7] | a[8] | a[9] |
---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
这里我用了表格来描述这个数组的赋值情况,而且需要注意a[10]是从a[0]开始的并且在a[9]结束,而并不是从1~10。顺便说一下数组的初始化。
一维数组的初始化:
直接对一维数组进行赋值。
形式:
int a[10]={0,1,2,3,4,5,6,7,8,9};
这里我逐个将数组的变量进行赋值,那么可能有人就说那前面的{}中就只有一个0就将所有的值赋值为0了,是不是只赋值一个就只写一个啊?当然不是啦!原因是对数组赋值规定有:
- 局部初始化如:
int a[10]={0};
这样做会将第一个即a[0]=0,而剩下了没有进行赋值默认为0。
- 全局初始化如:
int a[10]={0,1,2,3,4,5,6,7,8,9};
- 最后需要注意你所在{}内输入的值的数量不能超过[]内的常量的数值!
最后我在提及一下这种形式:
#include <stdio.h> int main() { int i,a[]={1,2,3};/*当采用这样的形式时[]内的常数是可以省略的。*/ for(i=0;i<3;i++) { printf("%d",a[i]); } return 0; }
一维数组的常见应用:
(说了这么多,现在就让我们来体验一下数组的魅力。)
提示一下使用一维数组时要结合一下循环,我这里使用for循环来演示。
int i,max; max=a[0]; for(i=1;i<n;i++) { if(a[i]>max) { max=a[i]; } } /*找到数组中的最大值a[i]*/ int i,min; min=a[0]; for(i=1;i<n;i++) { if(a[i]<min) { min=a[i] } } /*找到数组中的最小值a[i]*/
while(m) { i=m%10; a[i]++; m=m/10; } /*记录m这个输入数中出现0~9的每一个出现次数*/
#include <stdio.h>/*简单的数组输入输出*/ int main() { int a[10]; int i; for(i=0;i<10;i++) { scanf("%d",&a[i]); } for(i=0;i<10;i++)/*改为for(i=9;i>=0;i--)则为数字的逆序输出*/ { printf("%d",a[i]); } return 0; }
等等都是一维数组的一些应用,显然从中我们可以发现数组的魅力。
接下来我们便来看看二维数组。(本人初学,课程紧理解不周到,求大腿)
二维数组:
语法:
类型标识符 数组名 [整型常量表达式1] [整型常量表达式2]
示例:
#include <stdio.h> //一个简单的二维数组定义与输入输出。 int main() { int a[2][3]; int i,j; for(i=0;i<2;i++) { for(j=0;j<3;j++) { scanf("%d",&a[i][j]); } } for(i=0;i<2;i++) { for(j=0;j<3;j++) { printf("%d",a[i][j]); } printf("\n"); } return 0; }
可以看到的是这里我结合了for的镶嵌循环,其实二维数组与for的二层镶嵌循环十分类似。
二维数组赋值:
一:
#include <stdio.h> int main() { int i,j; int a[3][4]={1,2,3,0,4,5,6,0,7,8,9,0}; for(i=0;i<3;i++) { for(j=0;j<4;j++) { printf("%d",a[i][j]); } printf("\n"); } return 0; }
输出结果与此表对应:
行/列 | 0 | 1 | 2 | 3 |
---|---|---|---|---|
0 | 1 | 2 | 3 | 0 |
1 | 4 | 5 | 6 | 0 |
2 | 7 | 8 | 9 | 0 |
显然这个赋值方式是由一行一行的读取的,读取完每行列数后再读取下一行。
二:
#include <stdio.h> int main() { int i,j; int a[3][4]={{1,2,3,4},{1,2,3,4},{1,2,3,4}}; for(i=0;i<3;i++) { for(j=0;j<4;j++) { printf("%d",a[i][j]); } printf("\n"); } return 0; }
而这一种便更为直观了直接将每一列都用{}括起来。
与一维数组相同的地方就是二维数组也是{}里的数不能超过[]与[]之间的值相乘的数,可以小于,不足的依然补0。
与之不同之处就是二维数组在{}内的值输入后可以忽略行数及:
int a[][3]={1,2,3,4,5,6,7,8,9}
注意[]与[]中的数最好与for( ; <“数 ” ; )中的”数“一致当然也可以去尝试不同时会发生什么这里我就不做说明了。
最后在说一下两个例题:
例题一:
#include <stdio.h>//二维数组矩阵求和 #define N 3 int main() { int i,j; int num=0; int a[N][N]; for(i=0;i<N;i++) { for(j=0;j<N;j++) { scanf("%d",&a[i][j]); if(i==j||i+j==2) { num=num+a[i][j]; } } } printf("%d ",num); return 0; }
本题是将三行三列的二维数组中的对角和求出。
例题二:
#include <stdio.h>//二维数组转换 int main() { int i,j; int a[2][3]={{1,2,4},{3,6,9}}; int b[3][2]; printf("a数组:\n"); for(i=0;i<2;i++) { for(j=0;j<3;j++) { printf("%d",a[i][j]); b[j][i]=a[i][j]; } printf("\n"); } printf("b数组:\n"); for(j=0;j<3;j++) { for(i=0;i<2;i++) { printf("%d",b[j][i]); } printf("\n"); } return 0; }
本题是将二维数组a二行三列中的值依次存入二维数组b三行二列中。
本文作者:如此而已~~~
本文链接:https://www.cnblogs.com/fragmentary/p/15720991.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步