设为首页 加入收藏

TOP

第6章 利用数组处理批量数据(二)
2019-05-23 14:36:41 】 浏览:267
Tags:利用 处理 批量 数据
一对花括号内,数据间用逗号分隔。花括号内的数据就称为“初始化列表”。经过以上的定义和初始化之后,a[0] = 0,a[1] = 1…

(2)可以只给数组中的一部分元素赋值。如:

int a[10] ={0,1,2,3,4};

定义a数组有10个元素,但花括号内只提供5个初值,这表示只给前面5个元素赋初值,系统自动给后5个元素赋初值为0.

(3)如果想使一个数组中全部元素值为0,可写成:

int a[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0,};

int a[10] = {0};   //未赋值的部分元素自动设为0

(4)在对全部数组元素赋初值时,由于数据的个数已经确定,因此可以不指定数组长度。如:

int a[5] = {1,2,3,4,5};

也可写成:

int a[] = {1,2,3,4,5};

虽然没有在方括号中指定数组的长度,但是系统会根据花括号中的数据的个数确定a数组有5个元素。但是,如果数组长度与提供的初值个数不相同,则方括号中的数组长度不能省略。如,想定义数组长度为10,就不能省略数组长度的定义,而必须写成:

int a[10] = {1,2,3,4,5};

只初始化前5个元素,后5个元素为0.

说明:如果在定义数值型数组时,指定了数组的长度并对之初始化,凡未被“初始化列表”指定初始化的数组元素,系统会自动帮忙初始化。(如果是整型则初始化为0;如果是字符型数组,则初始化为‘\0’;如果是指针型数组,则初始化为NULL,即为空指针)。

 

6.1.4 一维数组程序举例

例:用数组来处理球Fibonacci数列问题

编写程序:

 1 #include<stdio.h>
 2 int main()
 3 {
 4     int i;
 5     int s[25]={1,1};
 6     for(i=2;i<25;i++)
 7     s[i]=s[i-1]+s[i-2];
 8     for(i=0;i<25;i++)
 9     {
10         if(i%5==0&&i!=0)
11             printf("\n%12d",s[i]);
12         else
13             printf("%12d",s[i]);
14     }
15     printf("\n");
16     return 0;
17 }
View Code

 

 

6.2 怎样定义和引用二维数组

怎样定义二维数组呢?基本概念与方法和一维数组相似。

float p[3][6];

以上定义了一个float型的二维数组,第1维有3个元素,第2维有6个元素。每一维的长度分别用一对方括号括起来。

   二维数组定义的一般形式为:

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

如:

int a[3][4],b[5][10]

定义a为3*4(3行3列)的数组,b为5*10(5行10列)的数组。注意,不能写成

int a[3,4],b[5,10];   //在一对方括号内写两个下标,错误

   C语言对二维数组采用这样的定义方式,使得二维数组可被看作是一种特殊的一维数组:它的元素又是一个一维数组。如,可把a看作是一个一维数组,它有3个元素:

a[0],a[1],a[2]

每个元素又是一个包含4个元素的一维数组,如:

此处把a[0],a[1],a[2]看作一维数组名。C语言的这种处理方法在数组初始化和用指针表示时显得很方便;这将会后面有所体会。

   C语言中,二维数组中元素排列的顺序是按行存放的,即在内存中先顺序存放第1行的元素,接着在存放第2行的元素。

注意:用矩阵形式(如3行4列形式)表示二维数组,是逻辑上的概念。能形象地表示出行列关系。而在内存中,各元素时连续存放的,不是二维的,是线性的。这点请务必明确。

 C语言还允许使用多为数组。和二维数组一致,只是增加了一个括号:

 int a[2][3][4] //定义三维数组a,它有2页,3行,4列

多维数组在内存中的排列顺序为:1维的下标变化最慢,最右边的下标变化最快。

 

6.2.2 怎样引用二维数组的元素

二维数组元素的表示形式为:

数组名[下标][下标]

如,arr[2][3]表示a数组中序号为2的行中序号为3的列的元素。下标应是整型表达式,如arr[2-1][2*2-1].不要出现a[2,3]、a[2-1,2*2-1]形式。

数组元素可以出现在表达式中,也可以被赋值:

b[1][2] = a[2][3]/2

注意:在引用数组元素时,下标值应在已定义的数组打下的范围内。如:

int a[3][4];       //定义a为3*4的二维数组

……

a[3][4] = 3; //不存在a[3][4]元素

   按以上的定义,数组a可用的“行下标”的范围为0~2,“列下标”的范围为0~3.用a[3][4]表示元素显然超过了数组的范围。

   请严格区分在定义数组时用的a[3][4]和引用元素时的a[3][4]的区别。前者用a[3][4]来定义数组的维数和各维数的大小,后者a[3][4]中的3和4是数组元素的下标值;引用元素时,a[3][4]代表行序号为3、列序号为4的元素(行序号和列序号均从0起算)。

 

6.2.3 二维数组的初始化

可以使用“初始化列表”对二维数组初始化。“初始化列表”不理解的,请看前面的定义。

(1)分行给二维数组赋初值。

int a[3][4] ={{1,2,3,4},{5,6,7,8},{9,10,11,12}};

这种赋初值方法比较直观,把第1个花括号内的数组给第1行的元素,第2个花括号内的数据给第2行的元素……即按行赋初值

(2)可以将所有数据写在一个花括号内,安数组元素在内存中的排列顺序对个元素赋初值。如

int a[3][4] = {1,2,3,4, 5,6,7,8, 9,10,11,12};

效果与第1种赋值相同。但以第1中方法为好,界限清楚。用第2中方法如果数据多,则会写成一大片,容易遗漏,也不容易检查。

(3)可以对部分元素赋初值。如

int a[3][4] ={{1},{5},{9}};

它的作用只对各行第1列(即序号为0的列)的元素赋初值,其余元素值自动为0.赋初值后数组个元素为:

1

0

0

0

5

0

0

0

9

0

0

0

也可以对各行中的某一元素赋初值,如:

int a[3][4] = {{1},{0,6},{0,0,11}};

初始化后的数组元素如下:

 

1

0

0

0

0

6

0

0

0

0

11

0

这种方法对0元素少时比较方便,不必将所有的0都写出来,只需输入少量数据。

也可以只对某几行元素赋初值:

int a[3][4] = {{1},{5,6}};

初始化后的数组元素如下:

1

0

0

0

5

6

0

0

0

0

0

0

第3行不赋初值。

         也

首页 上一页 1 2 3 4 5 下一页 尾页 2/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇关于C的全局变量 下一篇使用函数验证哥德巴赫猜想

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目