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三行二列中。

posted @ 2021-12-22 20:32  如此而已~~~  阅读(116)  评论(1)    收藏  举报
//雪花飘落效果