第6章 利用数组处理批量数据_第1页
第6章 利用数组处理批量数据_第2页
第6章 利用数组处理批量数据_第3页
第6章 利用数组处理批量数据_第4页
第6章 利用数组处理批量数据_第5页
已阅读5页,还剩67页未读 继续免费阅读

下载本文档

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

文档简介

1、4 4学时学时第第6 6章章 利用数组处理批量数据利用数组处理批量数据 本章主要内容:本章主要内容: 1. 1. 一维数组一维数组 2. 2. 二维数组二维数组 3. 3. 字符数组字符数组2/72第第6 6章章 利用数组处理批量数据利用数组处理批量数据 在在C C语言中,语言中,类型一致类型一致的一组数据按的一组数据按顺序顺序存放在一起就形成存放在一起就形成了了数组数组,是一种派生数据类型,数组中的每一个数据称为,是一种派生数据类型,数组中的每一个数据称为元素元素,数组有一个名字,称为数组有一个名字,称为数组名数组名,数组中的每个元素在数组中有,数组中的每个元素在数组中有一个序号,称为该元素

2、在数组中的一个序号,称为该元素在数组中的下标下标。在程序中,通过数组。在程序中,通过数组名和下标可以访问到相应的元素,其中下标可以用变量来表示,名和下标可以访问到相应的元素,其中下标可以用变量来表示,因此,数组经常与循环结构中的循环变量配合使用。因此,数组经常与循环结构中的循环变量配合使用。 要使用数组,必须在程序中要使用数组,必须在程序中预先定义预先定义,通知计算机数组名,通知计算机数组名字是什么,包含多少个元素,这些元素属于哪种数据类型。字是什么,包含多少个元素,这些元素属于哪种数据类型。3/72第第6 6章章 利用数组处理批量数据利用数组处理批量数据 本章主要内容:本章主要内容: 1.

3、1. 一维数组一维数组 2. 2. 二维数组二维数组 3. 3. 字符数组字符数组4/72第第6 6章章 利用数组处理批量数据利用数组处理批量数据一、一维数组一、一维数组1.1.一维数组的定义一维数组的定义 (1 1)一般形式:)一般形式: 类型符类型符 数组名数组名 常量表达式常量表达式 ; 例如:例如:int a10; (2 2)说明:)说明: 类型可以是基本类型,也可以是其他派生类型。类型可以是基本类型,也可以是其他派生类型。 数组名的命名规则和变量名相同,必须是标识符。数组名的命名规则和变量名相同,必须是标识符。 5/72第第6 6章章 利用数组处理批量数据利用数组处理批量数据 定义数

4、组时,用方括中的常量表达式规定元素的个数,定义数组时,用方括中的常量表达式规定元素的个数, 即数组的长度,数组下标从即数组的长度,数组下标从0 0开始。开始。 例如:例如:int a10; 注意:数组元素为注意:数组元素为a0a9,共,共10个,不存在元素个,不存在元素a10, 括号必须是括号必须是方括号方括号,不允许使用圆括号。,不允许使用圆括号。 定义数组时,其长度必须用常量来表示,不允许使用变量或定义数组时,其长度必须用常量来表示,不允许使用变量或 包含变量的表达式。包含变量的表达式。6/72第第6 6章章 利用数组处理批量数据利用数组处理批量数据2.2.一维数组元素的引用一维数组元素的

5、引用 定义完数组并对其中各元素赋值后,即可引用数组元素。定义完数组并对其中各元素赋值后,即可引用数组元素。 引用数组元素的表示形式引用数组元素的表示形式: 数组名数组名 下标下标 数组元素在程序中的作用等同于一般的变量。数组元素在程序中的作用等同于一般的变量。 注意:在注意:在C C语言中,系统不检查下标是否越界!语言中,系统不检查下标是否越界! 例例6.1 对对10个数组元素依次赋值为个数组元素依次赋值为0,1,2,3,4,5,6,7,8,9, 要求按逆序输出。要求按逆序输出。7/72第第6 6章章 利用数组处理批量数据利用数组处理批量数据 8/72第第6 6章章 利用数组处理批量数据利用数

6、组处理批量数据#include int main() int i,a10; for (i=0; i=0; i-) printf(%4d,ai); printf(n); return 0; 9/72第第6 6章章 利用数组处理批量数据利用数组处理批量数据3.3.一维数组初始化一维数组初始化 在定义数组的同时,为数组元素赋初值,称为数组初始化。在定义数组的同时,为数组元素赋初值,称为数组初始化。(1)在定义数组时对全部数组元素赋初值。在定义数组时对全部数组元素赋初值。 int a10=0,1,2,3,4,5,6,7,8,9;(2)可以只给数组中的一部分元素赋初值。可以只给数组中的一部分元素赋初值。

7、 int a10=0,1,2;10/72第第6 6章章 利用数组处理批量数据利用数组处理批量数据(3)可以把数组全部元素赋初值为可以把数组全部元素赋初值为0。 int a10=0,0,0,0,0,0,0,0,0,0; 或或 int a10=0; (4)对全部数组元素赋初值时,可以不指定数组长度。对全部数组元素赋初值时,可以不指定数组长度。 int a5=1,2,3,4,5; 可以写成:可以写成: int a =1,2,3,4,5;(5)在程序执行过程中,在程序执行过程中,只能只能引用数组元素而引用数组元素而不能不能一次整体一次整体 调用整个数组全部元素的值调用整个数组全部元素的值。 int a

8、5; a5=1,2,3,4,5;或或a =1,2,3,4,5;均不正确。;均不正确。11/72第第6 6章章 利用数组处理批量数据利用数组处理批量数据4.4.一维数组程序举例一维数组程序举例例例6.2 6.2 利用数组求利用数组求FibonacciFibonacci数列前数列前2020项。项。12/72第第6 6章章 利用数组处理批量数据利用数组处理批量数据#include int main() int i; int f20=1,1; for(i=2;i20;i+) fi=fi-2+fi-1; for(i=0;i20;i+) if(i%5=0) printf(“n”); printf(“%12

9、d”,fi); printf(n); return 0;13/72思考题:思考题:1.有关回车的问题有关回车的问题有无好的解决办法有无好的解决办法?2.如果用如果用f1到到f20存放数据,程序如存放数据,程序如何修改?何修改?第第6 6章章 利用数组处理批量数据利用数组处理批量数据例例6.3 6.3 对对1010个数按照从小到大的顺序排序。个数按照从小到大的顺序排序。 排序的方法有很多上,本例采用的是排序的方法有很多上,本例采用的是“起泡法起泡法”,也称为,也称为 “ “冒泡法冒泡法”,基本思路是:每次将相邻两个数比较,将小的,基本思路是:每次将相邻两个数比较,将小的 调到前面。调到前面。14

10、/72第第6 6章章 利用数组处理批量数据利用数组处理批量数据 15/72985420895420859420854920854290854209a0a1a2a3a4a5大数大数沉淀,沉淀,小数小数起泡起泡以上称为第一趟起泡,以上称为第一趟起泡,6 6个数进个数进行了行了5 5次比较,推广开来,次比较,推广开来,7 7个数个数需进行需进行6 6次比较,次比较,1010个需进行个需进行9 9次次比较,比较,n n个数需进行个数需进行n-1n-1次比较。次比较。for(i=0;iai+1) t=ai;ai=ai+1;ai+1=t; 第第6 6章章 利用数组处理批量数据利用数组处理批量数据 16/7

11、2854209584209548209542809542089a0a1a2a3a4a5第二趟起泡,第二趟起泡,6 6个数中,最后一个数中,最后一个数已是最大,无需再参与比较,个数已是最大,无需再参与比较,因此本趟起泡只有因此本趟起泡只有5 5个数参与,个数参与,共需比较共需比较4 4次。次。for(i=0;iai+1) t=ai;ai=ai+1;ai+1=t; 第第6 6章章 利用数组处理批量数据利用数组处理批量数据 17/72542089452089425089420589a0a1a2a3a4a5第三趟起泡,第三趟起泡,6 6个数中,最后两个数中,最后两个数已是最大,无需再参与比较,个数已是

12、最大,无需再参与比较,因此本趟起泡只有因此本趟起泡只有4 4个数参与,个数参与,共需比较共需比较3 3次。次。for(i=0;iai+1) t=ai;ai=ai+1;ai+1=t; 第第6 6章章 利用数组处理批量数据利用数组处理批量数据 18/72420589240589204589a0a1a2a3a4a5第四趟起泡,第四趟起泡,6 6个数中,最后三个数中,最后三个数已是最大,无需再参与比较,个数已是最大,无需再参与比较,因此本趟起泡只有因此本趟起泡只有3 3个数参与,个数参与,共需比较共需比较2 2次。次。for(i=0;iai+1) t=ai;ai=ai+1;ai+1=t; 第第6 6章

13、章 利用数组处理批量数据利用数组处理批量数据 19/72204589024589a0a1a2a3a4a5第五趟起泡,第五趟起泡,6 6个数中,最后四个数中,最后四个数已是最大,无需再参与比较,个数已是最大,无需再参与比较,因此本趟起泡只有因此本趟起泡只有2 2个数参与,个数参与,共需比较共需比较1 1次。次。for(i=0;iai+1) t=ai;ai=ai+1;ai+1=t; 20/72第第6 6章章 利用数组处理批量数据利用数组处理批量数据#include int main() int a6=9,8,5,4,2,0; int i,j,t; for(j=0;j5;j+) for(i=0;ia

14、i+1) t=ai;ai=ai+1;ai+1=t; for(i=0;i6;i+) printf(%3d ,ai); return 0; 21/72思考题:思考题:1.将待序的数增加至将待序的数增加至10个。个。2.将待排序的将待排序的10个数从键盘输入。个数从键盘输入。3.将待排序的数从数组的第将待排序的数从数组的第1个元素个元素 (a1)开始存放,如何调整开始存放,如何调整i,j的值?的值?4.将待排序的数按降序排序。将待排序的数按降序排序。第第6 6章章 利用数组处理批量数据利用数组处理批量数据关于起泡法排序的关于起泡法排序的总结总结: n n个数进行排序,需要进行个数进行排序,需要进行n

15、-1n-1趟起泡,第趟起泡,第j j趟起泡需要进趟起泡需要进 行行n-jn-j次比较。次比较。 关于循环变量的取值变化情况:关于循环变量的取值变化情况: i i控制比较次数(内层循环),用控制比较次数(内层循环),用j j控制起泡的趟数(外层控制起泡的趟数(外层 循环),对循环),对n n个数进行排序:个数进行排序: 若若i,ji,j均从均从0 0开始,则:开始,则: j j的范围是:的范围是:0,n-1)0,n-1),i i的范围是:的范围是:0,n-1-j)0,n-1-j)。 若若i,ji,j均从均从1 1开始,则:开始,则: j j的范围是:的范围是:1,n)1,n),i i的范围是:的

16、范围是:1,n+1-j)1,n+1-j)。22/72第第6 6章章 利用数组处理批量数据利用数组处理批量数据 本章主要内容:本章主要内容: 1. 1. 一维数组一维数组 2. 2. 二维数组二维数组 3. 3. 字符数组字符数组23/72第第6 6章章 利用数组处理批量数据利用数组处理批量数据二、二维数组二、二维数组 矩阵在计算机里用二维数组表示。矩阵在计算机里用二维数组表示。1.1.二维数组的定义二维数组的定义 (1 1)一般形式:)一般形式: 类型说明符类型说明符 数组名数组名 常量表达式常量表达式常量表达式常量表达式 ; 例如:例如: float a34; (2 2)说明:)说明: 二维

17、数组定义时要用两个方括号二维数组定义时要用两个方括号。 例如:例如: float a34; 不能写成:不能写成:float a3,4;24/72第第6 6章章 利用数组处理批量数据利用数组处理批量数据 注意二维数组中维数与下标的关系。注意二维数组中维数与下标的关系。 例如:例如:float a34; 表示名称为表示名称为a的的3行行4列二维数组,列二维数组, 行下标范围是行下标范围是02,列下标范围是,列下标范围是03。25/72第第6 6章章 利用数组处理批量数据利用数组处理批量数据 由于由于内存的地址是线性的内存的地址是线性的,二维数组在内存中也是线性存,二维数组在内存中也是线性存 储的,

18、在储的,在C语言中,遵循语言中,遵循行优先的原则行优先的原则,即,即先存储第先存储第0行行 的元素,接着存储第的元素,接着存储第1行的元素行的元素,。二维数组的这种存。二维数组的这种存 储格式将在第储格式将在第8章指针部分得到进一步的应用。章指针部分得到进一步的应用。 26/72第第6 6章章 利用数组处理批量数据利用数组处理批量数据 27/72第第6 6章章 利用数组处理批量数据利用数组处理批量数据2.2.二维数组元素的引用二维数组元素的引用 二维数组元素的表示形式:二维数组元素的表示形式:数组名数组名 下标下标下标下标 引用二维数组元素时同一维数组一样,要注意下标的变化情引用二维数组元素时

19、同一维数组一样,要注意下标的变化情 况,从况,从0 0开始,且不能越界。开始,且不能越界。 int x67; 元素:元素:x00 x56 区分定义时的区分定义时的 “int a34;” 与与 引用时引用时 a34;28/72二维数组是二维数组是3行行4列的列的第第3行第行第4列元素的下标列元素的下标第第6 6章章 利用数组处理批量数据利用数组处理批量数据3.3.二维数组初始化二维数组初始化(1 1)分行给二维数组赋初值。分行给二维数组赋初值。 int a34=1,2,3,4,5,6,7,8,9,10,11,12; 按行赋初值:第按行赋初值:第1个花括号内的数据赋给第个花括号内的数据赋给第0行的

20、元素,行的元素, 第第2个花括号内的数据赋给第个花括号内的数据赋给第1行的元素,行的元素, 。(2 2)把所有数据写在一个花括号内把所有数据写在一个花括号内,按数组元素在内存中的,按数组元素在内存中的 排列顺序对各元素赋初值。排列顺序对各元素赋初值。 int a34=1,2,3,4,5,6,7,8,9,10,11,12; 注意:别遗漏数据,造成错位。注意:别遗漏数据,造成错位。29/72第第6 6章章 利用数组处理批量数据利用数组处理批量数据(3)(3)对部分元素赋初值。对部分元素赋初值。30/72第第6 6章章 利用数组处理批量数据利用数组处理批量数据(4 4)对全部元素赋初值,定义数组时第

21、)对全部元素赋初值,定义数组时第1 1维维的长度可以的长度可以不指不指 定定,但,但第第2 2维维的长度的长度不能省略不能省略。 int a34=1,2,3,4,5,6,7,8,9,10,11,12; 等价于:等价于: int a 4=1,2,3,4,5,6,7,8,9,10,11,12; 31/72第第6 6章章 利用数组处理批量数据利用数组处理批量数据4.4.二维数组程序举例二维数组程序举例 例例6.4 6.4 将一个二维数组行和列的元素互换,存到另一个二维将一个二维数组行和列的元素互换,存到另一个二维 数组中。数组中。 32/72第第6 6章章 利用数组处理批量数据利用数组处理批量数据

22、33/72第第6 6章章 利用数组处理批量数据利用数组处理批量数据 34/72思考题:思考题:1. 锯齿形的格式影响程序运行吗?锯齿形的格式影响程序运行吗?2. for(i=0;i=1;i+) 与与 for(i=0;i 字符串字符串2 2,则函数值为一个,则函数值为一个正整数正整数。 如果字符串如果字符串1 1 字符串字符串2 2,则函数值为一个,则函数值为一个负整数负整数。 关于返回值的补充说明:关于返回值的补充说明: 在在VCVC中,返回中,返回0 0、1 1、-1-1;而在;而在TCTC中,返回中,返回0 0、对应的不相同字、对应的不相同字 符符ASCIIASCII码的差值。由于不同的编

23、译器规定不同,对于码的差值。由于不同的编译器规定不同,对于strcmpstrcmp 的返回值,的返回值,通常只判断其等于通常只判断其等于0 0,大于,大于0 0,或小于,或小于0 0即可即可。 例如:例如:strcmp(”abcf”,”abcd”); 在在VCVC中返回中返回1 1,在,在TCTC中返回中返回2 2。57/72第第6 6章章 利用数组处理批量数据利用数组处理批量数据(7 7)strlen函数函数-测试字符串长度的函数,测试字符串长度的函数,string length 一般形式:一般形式:strlen( (字符数组字符数组) ) 作用:测试字符串的长度。作用:测试字符串的长度。

24、返回值:字符串的实际长度(不包括返回值:字符串的实际长度(不包括0在内)在内) char str10=“China”; printf(“%d”,strlen(str); 58/72第第6 6章章 利用数组处理批量数据利用数组处理批量数据(8 8)strlwr函数函数-转换为小写的函数,转换为小写的函数,string lowercase 一般形式:一般形式:strlwr( (字符串字符串) ) 返回值:全部都是小写字母的字符串(非字母不变)。返回值:全部都是小写字母的字符串(非字母不变)。 说明:说明:在在VC中中strlwr后面的参数后面的参数只能放数组名只能放数组名, 而而在在TC中中,数组

25、名和字符串均可数组名和字符串均可。 char str10=“AbCDeF23” printf(“%s”,strlwr(str); 59/72第第6 6章章 利用数组处理批量数据利用数组处理批量数据(9 9)strupr函数函数-转换为大写的函数,转换为大写的函数,string uppercase 一般形式:一般形式:strupr( (字符串字符串) ) 返回值:全部都是大写字母的字符串(非字母不变)。返回值:全部都是大写字母的字符串(非字母不变)。 说明:说明:在在VC中中strupr后面的参数后面的参数只能放数组名只能放数组名, 而而在在TC中中,数组名和字符串均可数组名和字符串均可。 ch

26、ar str10=“AbCDeF23” printf(“%s”,strupr(str);60/72第第6 6章章 利用数组处理批量数据利用数组处理批量数据前面共介绍了前面共介绍了9 9个字符串处理函数:个字符串处理函数: gets,puts: 在文件的开头用在文件的开头用 #include strcat,strcpy,strncpy,strcmp,strlen,strlwr,strupr: 在文件的开头用在文件的开头用 #include 61/72第第6 6章章 利用数组处理批量数据利用数组处理批量数据5.5.字符数组应用举例字符数组应用举例例例6.8 6.8 输入一行字符,统计其中有多少个单

27、词。输入一行字符,统计其中有多少个单词。 (单词之间用空格分开)(单词之间用空格分开)思路:思路:(1 1)先找到)先找到第一个非空格字符第一个非空格字符,作为作为一个单词的一个单词的开始开始, 计数计数1 1次次;(2 2)再次碰到)再次碰到空格空格或或0,当前,当前单词结束单词结束。62/72第第6 6章章 利用数组处理批量数据利用数组处理批量数据 63/72第第6 6章章 利用数组处理批量数据利用数组处理批量数据 64/72第第6 6章章 利用数组处理批量数据利用数组处理批量数据 65/72第第6 6章章 利用数组处理批量数据利用数组处理批量数据作业:作业:用筛法求用筛法求100100之

28、内的素数。之内的素数。筛法,是求不超过自然数筛法,是求不超过自然数N N(N N1 1)的所有素数的一种方法。据)的所有素数的一种方法。据说是古希腊的说是古希腊的埃拉托斯特尼埃拉托斯特尼(约公元前(约公元前274274194194年)发明的,年)发明的,又称埃拉托斯特尼筛法。又称埃拉托斯特尼筛法。具体做法是:先把具体做法是:先把N N个自然数按次序排列起来。个自然数按次序排列起来。1 1不是素数,也不是素数,也不是合数,不是合数,要划去要划去。第二个数。第二个数2 2是素数留下来是素数留下来,而把,而把2 2后面所有后面所有能被能被2 2整除的数都划去整除的数都划去。2 2后面第一个没划去的数是后面第一个没划去的数是3 3,把,把3 3留下留下,再把,再把3 3后面所有后面所有能被能被3 3整除的数都划去整除

温馨提示

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

评论

0/150

提交评论