《C语言用数组处理批量数据.docx》由会员分享,可在线阅读,更多相关《C语言用数组处理批量数据.docx(18页珍藏版)》请在第壹文秘上搜索。
1、C语言用数组处理批量数据整型、字符型、浮点型数据,都是简单的数据类型。对于简单的问题,使用这些简单的数据类型就可以了。对于有些需要处理的数据,只用以上简单的数据类型是不够的,难以反映出数据的特点,也难以有效地进行处理。比如,一个班有30个学生,每个学生有一个成绩,要求这30名学生的平均成绩。实际上这些数据是同一个班级、同一门课程的成绩,它们具有相同的属性。人们想出这样的办法:既然它们都是同一类性质的数据(都代表一个班中学生的成绩)就可以用同一个名字(如S)来代表它们,而在名字的右下角加一个数字来表示这是第几名学生的成绩,例如,可以用sl,s2,s3,S30代表学生L学生2、学生3学生30,这3
2、0个学生的成绩。这个右下角的数字称为下标。一批具有同名的同属性的数据就组成一个数组(array)zs就是数组名。Q)数组是一组有序数据的集合。数组中各数据的排列是有一定规律的,下标代表数据在数组中的序号。(2)用一个数组名(如S)和下标(如15)来唯一地确定数组中的元素,如s15就代表第15个学生的成绩。(3)数组中的每一个元素都属于同一个数据类型。不能把不同类型的数据(如学生的成绩和学生的性别)放在同一个数组中。C语言规定用方括号中的数字来表示下标,如用s15表示S15,即第15个学生的成绩。将数组与循环结合起来,可以有效地处理大批量的数据。1定义数组和引用一维数组一维数组是数组中最简单的,
3、它的元素只需要用数组名加一个下标,就能唯一地确定。比如:学生成绩数组s就是一维数组。有的数组,其元素要指定两个下标才能唯一确定,如用S2z3表示第2班第3名学生的成绩,其中第1个下标代表班,第2个下标代表班中的学生序号。此时,s就是二维数组。还可以有三维甚至多维数组,如用S4,2,3表示4年级2班第3名学生的成绩,这里s就是三维数组。它们的概念和用法基本上是相同的。定义一维数组要使用数组,必须在程序中先定义该数组,即通知计算机:由哪些数据组成数组,数组有多少元素,属于哪个数据类型。否则计算机不会自动地把一批数据作为数组处理。下面是对数组的定义:inta10;它表示定义了一个整型数组数组名为a,
4、此数组包含10个整型元素。定义一维数组的一般形式为类型说明符数组名常量表达式;说明:(1)数组名的命名规则和变量名相同,遵循标识符命名规则。(2)在定义数组时,需要指定数组中元素的个数,方括号中的常量表达式用来表示元素的个数,即数组长度。例如,指定a10z表示a数组有10个元素。注意,下标是从0开始的,这10个元素是a0za1,a2,a3za4za5za6,a7za8,a9o按数组的定义,不存在数组元素a10(3)常量表达式中可以包括常量和符号常量,如inta3十5;是合法的。不能包含变量,如intan;是不合法的。也就是说,C语言不允许对数组的大小作动态定义,即数组的大小不依赖于程序运行过程
5、中变量的值。例如,下面这样定义数组是不行的:scanf(n%d”,&n);企图在程序中临时输入数组的大小intan;Il数组长度性质是常量,一定不是变量,它有地址,数值是可变的,不能变量表示数组长度。数组整体是变量。用inta10;定义了数组a后,在内存中划出一片存储空间,存放了一个有10个整型元素的数组。可以看到,用一个minta10zz就相当于定义了10个简单的整型变量,比较方便。2引用一维数组元素在定义数组并对其中各元素赋值后,就可以引用数组中的元素。应注意:只能引用数组元素而不能一次整体调用整个数组全部元素的值。引用数组元素的表示形式为数组名下标例如,a0就是数组a中序号为O的元素,它
6、和一个简单变量的地位和作用相似。下标可以是整型常量或整型表达式。例如下面的赋值表达式包含了对数组元素的引用,a0=a5+a7-a2*33一维数组的初始化在定义数组的同时给各数组元素赋值,称为数组的初始化。用初始化列表”方法实现数组的初始化。(1)在定义数组时对全部数组元素赋予初值。例如:inta10=O111,2,3,4,5,6,7,8,9;将数组中各元素的初值JII页序放在一对花括号内,数据间用逗号分隔。花括号内的数据效为初始化列表。经过上面的定义和初始化之后,a0=0,al=lza2=2za3=3,a4=4,a5=5,a6=6,a7=7za8=8za9=9o(2)可以只给数组中的一部分元素
7、赋值。例如:inta10=0,1,2,3,4);定义a数组有10个元素,但花括号内只提供5个初值,这表示只给前面5个元素赋初值,系统自动给后5个元素赋初值为Oo(3)如果想使一个数组中全部元素值为0,可以写成inta10=(0z0z0,0z0z0z0z0z0z0);或inta10=(0);(4)在对全部数组元素赋初值时,由于数据的个数已经确定,因此可以不指定数组长度。例如:未赋值的部分元素自动设定为Ointa5=(1,234,5)可以写成inta=123,4,5在第2种写法中,花括号中有5个数,虽然没有在方括号中指定数组的长度,但是系统会根据花括号中数据的个数确定a数组有5个元素。但是,如果数
8、组长度与提供初值的个数不相同,则方括号中的数组长度不能省略。例如,想定义数组长度为10,就不能省略数组长度的定义,而必须写成inta10=(lz2z3A5;只初始化前5个元素,后5个元素为Oo说明:如果在定义数值型数组时,指定了数组的长度并对之初始化,凡未被初始列表指定初始化的数组元素,系统会自动把它们初始化为0(如果是字符型数组,则初始为,0l如果是指金十型数组,则初始化为NULL,即空指针)。4一维数组程序实例如:已知前两项初值为I1I1后面一项是前面两项之和,依次类推,显示前40项数据。如果用简单变量处理的,只定义3个变量,程序可以顺序计算并输出各项数据值,但不能在内存中保存这些数。假如
9、想直接输出数列中的第40个数是很困难的。查资料找到下面程序:include斐波那锲数列第四十项为多少(前两项的和是后一项)intFabonacci(intn)(intfl=1;intf2=1;intf3=1;inti;for(i=3;i=n;i+)前两项的和给第三项,然后2给1,3给2(f3=fl+f2;fl=f2;f2=f3;returnf3;)intmai()(printf(,%dn,zFabonacci(40);getchar();return0;)scanf和getchar的区别字符数据的输入:scanf()函数是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量中。在SC
10、anf()语句的格式串中由于没有非格式字符在%d%d%d之间作为输入时的间隔,因此在输入时要用一个以上的空格或回车符作为每两个输入数之间的间隔。SCanf()在读取数字时会跳过空格、制表符和换行符。如:1#include2intmain()3(4 intazbzc;5 SCanfe%d%d%d”,&a,&b,&c);6 printf(%d%d%dzazbzc);)getchar()函数是键盘输入函数,其功能是从键盘上输入一个字符。简单来说就是getchar()函数在C程序中的功能是接收一个字符。SCanf()的程序:1 #include2 #include3 intmain(void)45 i
11、ntazbzc;6 printf(pleaseinputnuma:nn);7 scanf(%da);8 printf(,pleaseinputnumb:nn);9 scanf(%d,b);10 printf(pleaseinputnumcn);11 scanf(,%d,c);12 printf(%d,%d,%dnza,bzc);13 )运行结果pleaseinputnuma:1pleaseinputnumb:2pleaseinputnumc:3 123pressanykeytocontinueChar的程序:1 #include2 #include3 intmain(void)4(5 char
12、azbzc;6 printf(,pleaseinputnuma:nn);7 scanf(n%c,a);8 printf(,pleaseinputnumb:nn);9 scanf(%cb);10 printf(,pleaseinputnumcn);11 scanf(,%czc);12 printf(,%c,%cr%c,a,b,c);)程序连续接收了三个字符,在C中enter键代表一个换行符,所以当输入完a的值q之后按下enter键,换行符立马被字符b接收了,然后程序再向下走,输入C的值Wq结果就会按顺序显示azbzc的值,我们已经知道2二十力=曰工=/7;所以结果就会显示两行。getchar()
13、程序:1 #include2 #include3 intmain(void)4(5 charazbzc;6 printf(pleaseinputnuma:nn);7 scanf(%ca);8 getchar();9 printf(,pleaseinputnumb:nn);10 scanf(1,%c,b);11 getchar();12 printf(pleaseinputnumc:n);13scanf(,%cAc);14printf(n%c,%c,%czazb,c);15)如果用数组来处理,每一个数组元素代表数列中的一个数,依次求出各数并存放在相应的数组元素中即可。数组是变量,有空间存储地址,
14、可以存放数组元素,要显示20项数值,直接提取20项数据。编写程序:#includeintmain()inti;intf20=lzl;对最前面两个元素0和1赋初值1,Iofor(i=2;i20;i+)f=fi-2+fi-1;先后求出f2-19的值for(i=0;i20;i+)if(i%5=0)printf(nn,);printf(n%12dzfi);控制每输出5个数后换行输出一个数printf(nn);return0;该程序只计算20个数,定义数组长度为20,对最前面两个元素f0和f1均指定初值为1,根据数列的特点,由前面两个元素的值可计算出第3个元素的值,即f2=f0fl;在循环中可以用以下语句依次计算出f2-f19的值。fi=fi-2+fi-l;if语句用来控制换行,每行输出5个数据。5定义和引用二维数组有的问题需要用二维数组来处理。例如,有3个小分队,每队有6名队员,要把这些队员的工资用数组保存起来以备查。这就需要用到二维数组。如果建立一个数组pay,它应当是二维的,第一维用来表示第几分队,第