欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C语言学习笔记(6)数组

程序员文章站 2022-05-05 20:42:23
...

数组

数组是为了节约储存空间,并储存相同的数据类型而产生的。

一维数组

定义方式:

类型说明符 数组名 [常量表达式]

eg:

int a [10]		//定义了整型数组a,其中有10个整型变量元素

意义:节省了定义各个变量的所需时间
注意:
1.[10]中下标是从0开始即,a中的元素为a[0],a[2],a[3]…a[9]。不存在a[10]。
2.不能对数组的大小进行动态定义,即数组大小不能为程序运行中的变量。
3.不可使用圆括号
4.一维数组是在内存中存放的。

一维数组的引用

数组元素也是变量,表示方式为数组名后跟一个下标。下标表示元素在数组中的顺序号。

数组名[下标]

例:

a[0]  = a[5] + a[7] - a[2*3]
a[i+j]
a[i++]

以上皆为合法数组元素
且C语言只能逐个使用下表变量而不能一次引用整个数组
例:

#include <stdio.h>
void main()
{
 	int i,a[10];
 	for(i = 0;i <= 9;i++)
 	{
 		 a[i]=i;		//从a[0]到a[9]依次赋值
	}
	for(i = 9;i >= 0;i--)
 	{
 		printf("%d\n",a[i]);		//从a[9]到a[0]依次输出
 	}
}

则输出结果为:

9
8
7
6
5
4
3
2
1
0
Press any key to continue

注:
数组赋值除了赋值语句逐个元素赋值,还可以采用初始化赋值和动态赋值。

值,在编译阶段进行,减少了运行间,提高了效率(赋值语句和输入语句给数组元素赋予初值是在运行时完成的)
一般形式:

类型说明符 数组名[常量表达式]={值,值,...值};

例:

#include <stdio.h>
void main()
{
 	int i,a[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8,9};
 	for(i = 9;i >= 0;i--)
 	{
  		printf("%d\n",a[i]);
 	}
}

输出结果与用循环语句赋值结果相同。

2.也可以只给数组中的前一部分元素赋值 ,而后边的元素则自动为0

3.使数组中的元素全部为0

int a[10]={0}

4.数组初始化赋值时可以不指定数组长度

int a[5]={1,2,3,4,5};	//该式等价于
int a[ ]={1,2,3,4,5};

动态赋值
运用for循环语句在循环中对数组中元素依次赋值,格式如下

int i,a[5]
printf("Please input a[5]'s element");
for(i = 0;i <= 4;i++)
{
	scanf("%5d",&a[i]);
}

例:

编程实现将输入的5个整数由大到小进行排序


#include <stdio.h>

void main()

{
    int i, k, j, a[5];
    printf("Please input 5 data:\n");
    for(i = 0;i <= 4;i++)
    {
    scanf("%d",&a[i]);
    }
    for(i = 0;i <= 4;i++)
    {
       for(k = i + 1;k <= 4;k++)
       {   
           if(a[i] < a[k])
           {
                  j = a[i];
                  a[i] = a[k];
                  a[k] = j;
           }
       }
    }
    printf("After sorted :\n");
    for(i = 0;i <= 4;i++)
    {
       printf("%5d\n",a[i]);
    }
}

二维数组

数组元素有两个下标的数组成为二维数组
一般格式为:

类型储存 数据类型 数组名[一维整型常量表达式][二维整型常量表达式]
如:int a[2][3]		//表示一个2*3的矩阵,有2*3=6个元素

二维数组的引用

引用格式:

数组名[行下标][列下标]
//使用方法与一维数组相似

需注意的是
1.二维数组行,列下标的有效范围也是由0开始
2.引用数组中的元素要防止超界,区分好行与列的区别

二维数组的初始化

1.分行赋初值

int a[2][3] = {{1,2,3},{4,5,6}}			//输入的矩阵为   1  2  3
								4  5  6

2.按内存顺序赋初值

int a[2][3] = {1,2,3,4,5,6};			//	结果与①相同

3.对部分元素赋值

int a[2][3] = {{1},{4}};			//	输入的矩阵为 1  0  0
								    4  0  0

但绝不可以越过前面的元素对后面元素赋值,如果前面是0必须赋予0值

例:编程实现将M*M的矩阵倒置

#include <stdio.h>
#define M 4
void main()
{
 	int i,j,k;
	int a[M][M] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
 	printf("The old mateix is :\n");
  	for(i = 0;i <= M - 1;i++)
 	{
  		for(j = 0;j <= M - 1;j++)
  		{
   			printf("%5d",a[i][j]);
  		}
  		printf("\n");
 	}
 	for(i = 0;i <= M - 1;i++)
 	{
  		for(j = i;j <= M - 1;j++)
  		{
   			k = a[i][j];
   			a[i][j] = a[j][i];
   			a[j][i] = k;
  		}
 	}
 	printf("The new matrix is :\n");
  	for(i = 0;i <= M - 1;i++)
 	{
  		for(j = 0;j <= M - 1;j++)
  		{
   			printf("%5d",a[i][j]);
  		}
  		printf("\n");
 	}
 
}