李红霞
摘要:通过研究斐波那契数列等在实际中的应用,分析如何运用一维数组、二维数组及字符数组解决C语言在批量处理数据过程中存在的不便之处,对学习和应用C语言具有一定的借鉴意义。
关键词:C语言;程序设计;数组
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2018)29-0108-03
C语言是一种结构化的程序设计语言,它拥有非常丰富的数据类型和运算符,功能齐全。我们使用C语言中数据的基本类型(整型、实型、字符型),通过基本的数据类型可以描述和解决一些相对简单的问题,但是在面对实际问题中,往往会遇到成批或大量的数据要进行解决和处理,仅靠C语言中的基本数据类型很难处理,甚至根本无法解决。这时候,就需要使用数据类型中构造类型的数组类型了,例如,一个班有45个学生,要求按照学生的平均成绩排名,如果按照变量类型表示成绩,需要设置45个简单变量来表示学生成绩,在程序设计时很难对这组数据进行处理,但如果使用数组来存放45人的成绩,可以利用循环很方便的处理这个问题。该文将浅析一下C语言程序设计中数组的使用。
1 数组的定义及分类
数组是指一组数目固定、数据类型相同的若干个元素组成的有序集合。常用的数组主要有一维数组、二维数组和字符数组。
2 一维数组
2.1 一维数组的定义及使用
一维数组的定义方式为:类型说明符 数组名[常量表达式],如int a [20],它表示数组名为 a,包含20个元素,每个元素的数据类型都是整型;float x [100],它表示数组名为x,包含100个元素,每个元素的数据类型都是实型。
关于一维数组在使用时有几点说明部分:1)数据类型可以是int型、float型、char型以及指针类型、结构体和共用体; 2)数组名必须是合法的标识符。3)[ ]中间必须是一个常量表达式,它表示元素的个数,也就是数组的长度。
2.2 一维数组的初始化
1)对全部元素赋值,int a[5]={1,2,3,4,5};等价于:a[0]=1; a[1]=2; a[2]=3; a[3]=4; a[4]=5;2)对部分元素赋初值,int a[7]={0,1,2,3,4};等价于a[0]=0; a[1]=1; a[2]=2; a[3]=3; a[4]=4,a[5]=0; a[6]=0。3)若赋全部元素的初值,可省略常量表达式,如 a ={0,1,2,3},表示数组元素有4个。
2.3一维数组的应用
1)輸出斐波那契数列,问题描述:通常来讲,兔子在出生两个月以后,就可以进行繁殖,一对兔子每个月能产下一对小兔子。如果所有的兔子都能够存活的话,一年以后可以繁殖出多少对兔子? 经统计后发现,这对兔子一年中的每个月繁殖兔子的数目为1,1,2,3,5,8,13,21,34,55,89,144。在通过以上数据的分析,可以发现以上数列具有以下几项规律:
①第一项为1,第二项为1,其余每项都等于前两项之和。得到的通项公式是:
②每项的平方都等于相邻两项乘积加(减)1。③连续的四项中,中间两项的乘积等于边缘两项乘积加(减)1。④相邻两项的比率总是接近黄金分割数0.618。
这个数列是由数学家斐波那契发现的,故称作斐波那契数列,另由于数列是由兔子问题引出的,所以也称作兔子数列。程序来源于生活,斐波那契数列在生活中也有很广泛的用途,在自然界中也有很多巧合,斐波那契数列中的斐波那契数规律现象经常会在我们的生活中出现一些植物的果实(松果、凤梨)以及树叶的排列、一些花朵的花瓣数都符合这个规律。比如马蹄莲1个花瓣,虎刺梅2个花瓣,百合花3个花瓣,梅花5个花瓣,大波斯菊8个花瓣,万寿菊13个花瓣,向日葵有21或34个花瓣,雏菊有34,55和89三个数目的花瓣等。此外,在杨辉三角形中,如果将杨辉三角左对齐,同一斜行的数之和,就可以得出一组数列:1、1、2、3、5、8……。斐波那契数列还时常出现在影视作品中,尤其在欧美地区,斐波那契数列更是尽人皆知,就像黄金分割一样流行。在著名的《达芬奇密码》里,它是一个重要的符号和情节线索,在《魔法玩具城》里,店主招聘会计时随口问的问题也是关于斐波那契数列的。斐波那契数列在股市中也有用到,股市中的时间周期理论是股价涨跌的根本原因之一,但寻找变盘点,斐波那契数列都是各种重要分析的基础之一。
2)起泡排序法的使用。起泡排序法的基本思路是:将相邻两个数进行大小比较,将小的数放到前面,大的数放在后面。在一个带排列的数字序列中,从前往后依次对相邻的两个数进行比较,每一次比较都将小的数放到前面,这样经过多次比较交换后,得到的序列就是一串数按照升序排列的最终结果,这样的过程称为起泡排序法。若有n个数,则要进行n减一轮次的比较。比如要对9,8,5,3,7,2这6个数字进行比较,则要进行5轮次的比较。
问题描述如下:用起泡法对6个数字进行升序排序。
在排序的过程中需要注意以下几点:1)比较第一个数与第二个数,若为逆序a[0]>a[1],则交换;然后比较第二个数与第三个数;依次类推,直至第n-1个数和第n个数比较为止——第一趟起泡排序,结果最大的数被安置在最后一个元素位置上。2)对前n-1个数进行第二趟起泡排序,结果使次大的数被安置在第n-1个元素位置。3)重复上述过程,共经过n-1趟起泡排序后,排序结束。
3 二维数组
3.1 二维数组的定义
当构成二维数组的元素也是一维数组时,就构成了二维数组。二维数组是一维数组的数组。二维数组定义的一般形式是:数据类型 数组名[常量表达式][常量表达式];例 int a[3][4]; float b[2][5];二维数组即是一个矩阵,a[3][4]是一个3行4列的矩阵,元素个数=行*列。
定义二维数组时的注意事项有:
1)不可将定义写为int a[4,10]。2)一个二维数组就是一个矩阵,二维数组是一维数组的数组,如: int a[3][3];则有三个一维数组a[0],b[1], b[2],每一个又有三个元素:a[0][0], a[0][1], a[0][2]; a[1][0], a[1][1], a[1][2];a[2][0], a[2][1], a[2][2]。
3.2 二维数组初始化
1)二维数组的元素全部初始化,例如int x[2][3]={{6,5,4},{7,8,9}};则x[0][0]=6, x[0][1]=5, x[0][2]=4,x[1][0]=7, x[1][1]=8, x[1][2]=9;2)部分初始化:例如int a[2][3]={1,2,4};则a[0][0]=1, a[0][1]=2, a[0][2]=4,a[1][0]=0, a[1][1]=0, a[1][2]=0;3)第一维长度省略初始化,例 int a[][3]={1,2,3,4,5};就表示行为2行。
3.3 二维数组的使用
1)現有一个3×3的矩阵,请使用数组求出其中值最大的那个元素,并输出最大值所在的行号和列号。
4 字符串与数组
4.1 基本定义
字符串是比较常用的,所谓字符串就是用双引号引起来的一串字符,但实际上,字符串是一种字符型数组,并且这个数组的最后一个元素的值是‘\0',也就意味着字符串就是一种以‘\0结束的字符数组。当程序中出现‘\0这个结束标志后,无论字符数组有多长,都标志着这个字符串已结束。用字符串构成的数组称为字符串数组。字符串数组,实际上是一个存放了多行字符串的字符数组构成的字符型二维数组。
4.2 字符串数组的使用
例如,从键盘输入一个句子,统计句子中单词的个数并输出。
5 结束语
数组在C语言程序设计中非常重要,是构造类型中使用比较频繁的数据类型,当需要批量处理数据的时候,使用数组来解决会很方便且容易解决,但一定要熟练定义数组并正确使用方可解决问题。
参考文献:
[1] 昝德才. C语言中数组的使用与分析[J]. 福建电脑, 2006(5).
[2] 武丽娟. 论《C语言程序设计》中的数组[J]. 福建电脑, 2010(7).
[3] 张科星. C语言中数组的元素[J]. 计算机光盘软件与应用, 2010(16).
【通联编辑:谢媛媛】