从“追求尽量不出错”,到正视“出错是必然”的转变,才是微服务架|

如此而已~~~

园龄:3年3个月粉丝:0关注:12

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 中国大陆许可协议进行许可。

posted @   如此而已~~~  阅读(93)  评论(1编辑  收藏  举报
//雪花飘落效果
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起