C语言用数组处理批量数据_第1页
C语言用数组处理批量数据_第2页
C语言用数组处理批量数据_第3页
C语言用数组处理批量数据_第4页
C语言用数组处理批量数据_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C语言用数组处理批量数据整型、字符型、浮点型数据,都是简单的数据类型。对于简单的问题,使用这些简单的数据类型就可以了。对于有些需要处理的数据,只用以上简单的数据类型是不够的,难以反映出数据的特点,也难以有效地进行处理。比如,一个班有30个学生,毎个学生有一个成绩,要求这30名学生的平均成绩。实际上这些数据是同一个班级、同一门课程的成绩,它们具有相同的属性。人们想出这样的办法:既然它们都是同一类性质的数据(都代表一个班中学生的成绩)就可以用同一个名字(如s)来代表它们,而在名字的右下角加一个数字来表示这是第几名学生的成绩,例如,可以用s1,s2,s3,…S30代表学生1、学生2、学生3…学生30,这30个学生的成绩。这个右下角的数字称为下标。一批具有同名的同属性的数据就组成一个数组(array),s就是数组名。(1)数组是一组有序数据的集合。数组中各数据的排列是有一定规律的,下标代表数据在数组中的序号。(2)用一个数组名(如s)和下标(如15)来唯一地确定数组中的元素,如s[15]就代表第15个学生的成绩。(3)数组中的每一个元素都属于同一个数据类型。不能把不同类型的数据(如学生的成绩和学生的性别)放在同一个数组中。C语言规定用方括号中的数字来表示下标,如用s[15]表示S15,即第15个学生的成绩。将数组与循环结合起来,可以有效地处理大批量的数据。1定义数组和引用一维数组一维数组是数组中最简单的,它的元素只需要用数组名加一个下标,就能唯一地确定。比如:学生成绩数组s就是一维数组。有的数组,其元素要指定两个下标才能唯一确定,如用S2,3表示“第2班第3名学生的成绩”,其中第1个下标代表班,第2个下标代表班中的学生序号。此时,s就是二维数组。还可以有三维甚至多维数组,如用S4,2,3表示4年级2班第3名学生的成绩,这里s就是三维数组。它们的概念和用法基本上是相同的。定义一维数组要使用数组,必须在程序中先定义该数组,即通知计算机:由哪些数据组成数组,数组有多少元素,属于哪个数据类型。否则计算机不会自动地把一批数据作为数组处理。下面是对数组的定义:inta[10];它表示定义了一个整型数组,数组名为a,此数组包含10个整型元素。定义一维数组的一般形式为类型说明符数组名[常量表达式];说明:(1)数组名的命名规则和变量名相同,遵循标识符命名規则。(2)在定义数组时,需要指定数组中元素的个数,方括号中的常量表达式用来表示元素的个数,即数组长度。例如,指定a[10],表示a数组有10个元素。注意,下标是从0开始的,这10个元素是a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9]。按数组的定义,不存在数组元素a【10】(3)常量表达式中可以包括常量和符号常量,如“inta[3十5];”是合法的。不能包含变量,如“inta[n];”是不合法的。也就是说,C语言不允许对数组的大小作动态定义,即数组的大小不依赖于程序运行过程中变量的值。例如,下面这样定义数组是不行的:intn;scanf("%d",&n);//企图在程序中临时输入数组的大小inta[n];∥数组长度性质是常量,一定不是变量,它有地址,数值是可变的,不能变量表示数组长度。数组整体是变量。用“inta[10];”定义了数组a后,在内存中划出一片存储空间,存放了一个有10个整型元素的数组。可以看到,用一个“inta[10];”,就相当于定义了10个简单的整型变量,比较方便。2引用一维数组元素在定义数组并对其中各元素赋值后,就可以引用数组中的元素。应注意:只能引用数组元素而不能一次整体调用整个数组全部元素的值。引用数组元素的表示形式为数组名[下标]例如,a[0]就是数组a中序号为0的元素,它和一个简单变量的地位和作用相似。“下标”可以是整型常量或整型表达式。例如下面的赋值表达式包含了对数组元素的引用,a[0]=a[5]+a[7]-a[2*3]3一维数组的初始化在定义数组的同时给各数组元素赋值,称为数组的初始化。用“初始化列表”方法实现数组的初始化。(1)在定义数组时对全部数组元素赋予初值。例如:inta[10]={0,,1,2,3,4,5,6,7,8,9};将数组中各元素的初值顺序放在一对花括号内,数据间用逗号分隔。花括号内的数据效为“初始化列表”。经过上面的定义和初始化之后,a[0]=0,a[1]=1,a[2]=2,a[3]=3,a[4]=4,a[5]=5,a[6]=6,a[7]=7,a[8]=8,a[9]=9。(2)可以只给数组中的一部分元素赋值。例如:inta[10]={0,1,2,3,4};定义a数组有10个元素,但花括号内只提供5个初值,这表示只给前面5个元素赋初值,系统自动给后5个元素赋初值为0。(3)如果想使一个数组中全部元素值为0,可以写成inta[10]=(0,0,0,0,0,0,0,0,0,0);或inta[10]=(0);(4)在对全部数组元素赋初值时,由于数据的个数已经确定,因此可以不指定数组长度。例如://未赋值的部分元素自动设定为0inta[5]=(1,2,3,4,5)可以写成inta={1,2,3,4,5}在第2种写法中,花括号中有5个数,虽然没有在方括号中指定数组的长度,但是系统会根据花括号中数据的个数确定a数组有5个元素。但是,如果数组长度与提供初值的个数不相同,则方括号中的数组长度不能省略。例如,想定义数组长度为10,就不能省略数组长度的定义,而必须写成inta[10]=(1,2,3,4,5};只初始化前5个元素,后5个元素为0。说明:如果在定义数值型数组时,指定了数组的长度并对之初始化,凡未被"初始列表”指定初始化的数组元素,系统会自动把它们初始化为0(如果是字符型数组,则初始为"\0”,如果是指針型数组,则初始化为NULL,即空指针)。4一维数组程序实例如:已知前两项初值为1,1,后面一项是前面两项之和,依次类推,显示前40项数据。如果用简单变量处理的,只定义3个变量,程序可以顺序计算并输出各项数据值,但不能在内存中保存这些数。假如想直接输出数列中的第40个数是很困难的。查资料找到下面程序:#include<stdio.h>//斐波那锲数列第四十项为多少(前两项的和是后一项)intFabonacci(intn){intf1=1;intf2=1;intf3=1;inti;for(i=3;i<=n;i++)//前两项的和给第三项,然后2给1,3给2{f3=f1+f2;f1=f2;f2=f3;}returnf3;}intmain(){printf("%d\n",Fabonacci(40));getchar();return0;}scanf和getchar的区别字符数据的输入:scanf()函数是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量中。在scanf()语句的格式串中由于没有非格式字符在“%d%d%d”之间作为输入时的间隔,因此在输入时要用一个以上的空格或回车符作为每两个输入数之间的间隔。scanf()在读取数字时会跳过空格、制表符和换行符。如:1#include<stdio.h>2intmain()3{4inta,b,c;5scanf("%d%d%d",&a,&b,&c);6printf("%d%d%d",a,b,c);}getchar()函数是键盘输入函数,其功能是从键盘上输入一个字符。简单来说就是getchar()函数在C程序中的功能是接收一个字符。scanf()的程序:1#include<stdio.h>2#include<stdlib.h>3intmain(void)4{5inta,b,c;6printf("pleaseinputnuma:\n");7scanf("%d",&a);8printf("pleaseinputnumb:\n");9scanf("%d",&b);10printf("pleaseinputnumc:\n");11scanf("%d",&c);12printf("%d,%d,%d",a,b,c);13}运行结果pleaseinputnuma:1pleaseinputnumb:2pleaseinputnumc:3123pressanykeytocontinuechar的程序:1#include<stdio.h>2#include<stdlib.h>3intmain(void)4{5chara,b,c;6printf("pleaseinputnuma:\n");7scanf("%c",&a);8printf("pleaseinputnumb:\n");9scanf("%c",&b);10printf("pleaseinputnumc:\n");11scanf("%c",&c);12printf("%c,%c,%c",a,b,c);}程序连续接收了三个字符,在C中enter键代表一个换行符,所以当输入完a的值‘q’之后按下enter键,换行符立马被字符b接收了,然后程序再向下走,输入c的值‘w’。结果就会按顺序显示a,b,c的值,我们已经知道a='q',b='\n',c='w';所以结果就会显示两行。getchar()程序:1#include<stdio.h>2#include<stdlib.h>3intmain(void)4{5chara,b,c;6printf("pleaseinputnuma:\n");7scanf("%c",&a);8getchar();9printf("pleaseinputnumb:\n");10scanf("%c",&b);11getchar();12printf("pleaseinputnumc:\n");13scanf("%c",&c);14printf("%c,%c,%c",a,b,c);15}如果用数组来处理,每一个数组元素代表数列中的一个数,依次求出各数并存放在相应的数组元素中即可。数组是变量,有空间存储地址,可以存放数组元素,要显示20项数值,直接提取20项数据。编写程序:#include<stdio.h>intmain()inti;intf[20]={1,1};//对最前面两个元素[0]和[1]赋初值1,1。for(i=2;i<20;i++)f[i]=f[i﹣2]+f[i﹣1];//先后求出f[2]~[19]的值for(i=0;i<20;i++)if(i%5==0)printf("\n");printf("%12d",f[i]);//控制每输出5个数后换行//输出一个数printf("\n");return0;该程序只计算20个数,定义数组长度为20,对最前面两个元素f[0]和f[1]均指定初值为1,根据数列的特点,由前面两个元素的值可计算出第3个元素的值,即f[2]=f[0]+f[1];在循环中可以用以下语句依次计算出f[2]~f[19]的值。f[i]=f[i-2]+f[i-1];if语句用来控制换行,每行输出5个数据。5定义和引用二维数组有的问题需要用二维数组来处理。例如,有3个小分队,每队有6名队员,要把这些队员的工资用数组保存起来以备查。这就需要用到二维数组。如果建立一个数组pay,它应当是二维的,第一维用来表示第几分队,第二维用来表示第几个队员。例如用pay2;3表示2分队第3名队员的工资,它的值是1725。二维数组常称为矩阵(matrix)。把二维数组写成行(row)和列(column)的排列形可以有助于形象化地理解二维数组的逻辑结构。5.1怎样定义二维数组怎样定义二维数组呢?其基本概念与方法和一维数组相似。如:floatpay[3][6];以上定义了一个float型的二维数组,第1维有3个元素,第2维有6个元素。每一维的长度分别用一对方括号括起来。二维数组定义的一般形式为类型说明符数组名[常量表达式常量表达式];例如:floata[3][4],b[5][10];定义a为3×4(3行4列)的数组,b为5X10(5行10列)的数组。注意,不能写成floata[3,4],b[5,10];//在一对方括号内写两个下标,错误C语言对二维数组采用这样的定义方式,使得二维数组可被看作一种特殊的一维数组:它的元素又是一个一维数组。例如,可以把a看作一个一维数组,它有3个元素:a[0].a[1],a[2]每个元素又是一个包含4个元素的一维数组。a[0]…a[0][0]a[o][1]a[0][2]a[0][3]a[1]…a[1][0]a[1][1]a[1][2]a[1][3]a[2]--a[2][0]a[2][1]a[2][2]a[2][3]可以把a[0],a[1],a[2]看作3个一维数组的名字。上面定义的二维数组可以理解为定义了3个一维数组,即相当于floata[0][4],a[1][4],a[2][4];此处把a[0],a[1],a[2]看作一维数组名。C语言中,二维数组中元素排列的顺序是按行存放的,即在内存中先顺序存放第1行的元素,接着再存放第2行的元素。假设数组a存放在从2000字节开始的一段内存单元中,一个元素占4个字节,前16个字节(2000~2015)存放序号为0的行中的4个元素,接着的16个字节(2016~2031)存放库号为1的行中的4个元素,余类推。注意:用矩阵形式(如3行4列形式)表示二维数组,是逻辑上的概念,能形象地示出行列关系。而在内存中,各元素是连续存放的,不是二维的,是线性的。C语言还允许使用多维数组。有了二维数组的基础,再掌握多维数组是不困难的。如,定义三维数组的方法如下:floata[2][3][4];多维数组元素在内存中的排列顺序为:第1维的下标变化最慢,最右边的下标变化最快。5.2怎样引用二维数组的元素二维数组元素的表示形式为数组名[下标][下标]如:a[2][3]表示a数组中序号为2的行中序号为3的列的元素。下标应是整型表达式,如a[2-1][2*2-1]。不要写成a[2,3]或a[2-1,2*2-1]形式。数组元素可以出现在表达式中,也可以被赋值,如:b[1][2]=a[2][3]/2注意:在引用数组元素时,下标值应在已定义的数组大小的范围内。在这个问题上常出现錯误。例如:inta[3][4];a[3][4]=3;按以上的定义,数组a可用的“行下标”的范围为0~2,“列下标”的范围为0~3。//定义a为3X

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论