C语言程序设计教程(修订本)第6章数组.ppt

上传人:wuy****n92 文档编号:79031669 上传时间:2023-03-19 格式:PPT 页数:27 大小:265.49KB
返回 下载 相关 举报
C语言程序设计教程(修订本)第6章数组.ppt_第1页
第1页 / 共27页
C语言程序设计教程(修订本)第6章数组.ppt_第2页
第2页 / 共27页
点击查看更多>>
资源描述

《C语言程序设计教程(修订本)第6章数组.ppt》由会员分享,可在线阅读,更多相关《C语言程序设计教程(修订本)第6章数组.ppt(27页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、第6章 数 组 6.1一维数组一维数组6.2二维数组二维数组6.3字符数组与字符串字符数组与字符串6.4数组作为函数参数数组作为函数参数6.5程序举例程序举例6.1一维数组一维数组6.1.1一维数组的定义与引用一维数组的定义与引用定义一维数组的一般形式如下:定义一维数组的一般形式如下:类型说明符类型说明符数组名数组名常量表达式常量表达式;其其中中类类型型说说明明符符是是定定义义数数组组中中各各元元素素的的数数据据类类型型,常常量量表达式是说明数组的大小(即数组中元素的个数。表达式是说明数组的大小(即数组中元素的个数。数数组组的的说说明明与与变变量量的的说说明明一一样样,其其作作用用是是为为数数

2、组组分分配配存存储空间。储空间。关于数组的说明要注意以下几个问题:关于数组的说明要注意以下几个问题:(1)数组名的命名规则与变量名相同。)数组名的命名规则与变量名相同。(2)说说明明数数组组大大小小的的常常量量表表达达式式必必须须为为整整型型,并并且且用用方方括括号号括起来(不能用圆括号)。括起来(不能用圆括号)。(3)说明数组大小的常量表达式中可以包含符号常量,但不)说明数组大小的常量表达式中可以包含符号常量,但不能是变量。能是变量。例例6.1下面的程序说明了如何对数组定义和引用数组元素:下面的程序说明了如何对数组定义和引用数组元素:#includestdio.h#defineN5main(

3、)inti,aN;for(i0;iN;ii1)aii;for(i0;iN;ii1)printf(%5d,ai);printf(n);在这个程序中,首先定义了一个长度为在这个程序中,首先定义了一个长度为5的整型的整型一维数组一维数组a,然后利用,然后利用for循环对其中的每一个元素循环对其中的每一个元素(a0a4)进行赋值,最后利用)进行赋值,最后利用for循环输出这循环输出这5个元素值。个元素值。在在C语言中,凡是一般简单变量可以使用的地语言中,凡是一般简单变量可以使用的地方都可以使用数组元素。方都可以使用数组元素。6.1.2 一维数组的初始化一维数组的初始化在在C语言中,给数组元素提供数据的

4、方法有以下语言中,给数组元素提供数据的方法有以下3种。种。(1)利用赋值语句逐个对数组中的元素进行赋值。)利用赋值语句逐个对数组中的元素进行赋值。(2)利用输入函数逐个输入数组中的各个元素。例如,)利用输入函数逐个输入数组中的各个元素。例如,#includestdio.hmain()inti,a5;for(i0;i5;ii1)scanf(%d,&ai);其中其中&ai表示取数组元素表示取数组元素ai的地址。的地址。(3)初始化。)初始化。下面对静态一维数组的初始化作三点说明:下面对静态一维数组的初始化作三点说明:(1)可以只给数组的前若干个元素赋初值,此时后面的元素)可以只给数组的前若干个元素

5、赋初值,此时后面的元素均将自动赋以初值均将自动赋以初值0。(2)在对全部元素赋初值时,说明语句中可以不指定数组长)在对全部元素赋初值时,说明语句中可以不指定数组长度,其长度默认为与初值表中数据的个数相同。度,其长度默认为与初值表中数据的个数相同。(3)虽然标准)虽然标准C语言规定只能对语言规定只能对“静态存储静态存储”的数组进行初的数组进行初始化,即除了可以对外部始化,即除了可以对外部(全局全局)数组进行初始化外,还可以对数组进行初始化外,还可以对用用static说明的局部数组进行初始化。说明的局部数组进行初始化。例例6.3分析下列程序的输出结果:分析下列程序的输出结果:#includestd

6、io.hmain()intk,x5;staticinty5;intz50,0,0;for(k0;k5;k)printf(%5d%5d%5d,xk,yk,zk);printf(n);6.2二维数组二维数组6.2.1 二维数组的定义与引用二维数组的定义与引用 定义二维数组的一般形式如下:定义二维数组的一般形式如下:类型说明符类型说明符数组名数组名常量表达式常量表达式1常量表达式常量表达式2;6.2.2 二维数组的初始化二维数组的初始化 与一维数组一样,也可以对静态存储的二维数组进行初始与一维数组一样,也可以对静态存储的二维数组进行初始化。化。在对二维数组进行初始化时要注意以下几点。在对二维数组进行

7、初始化时要注意以下几点。(1)在分行给二维数组赋初值时,对于每一行都可以)在分行给二维数组赋初值时,对于每一行都可以只对前几个元素赋初值,后面未赋初值的元素系统将自动赋只对前几个元素赋初值,后面未赋初值的元素系统将自动赋初值初值0;并且,还可以只对前几行元素赋初值。;并且,还可以只对前几行元素赋初值。(2 2)在给全部元素赋初值时,说明语句中可以省略第)在给全部元素赋初值时,说明语句中可以省略第一维的长度说明。一维的长度说明。(3)在分行赋初值时,也可以省略第一维的长度说明。)在分行赋初值时,也可以省略第一维的长度说明。6.3字符数组与字符串字符数组与字符串6.3.1 字符数组的定义与初始化字

8、符数组的定义与初始化 定义字符数组的一般形式如下:定义字符数组的一般形式如下:char数组名数组名常量表达式常量表达式;一维字符数组一维字符数组char数组名数组名常量表达式常量表达式1常量表达式常量表达式2;二维字符数组二维字符数组 (1 1)当当对对字字符符数数组组中中所所有有元元素素赋赋初初值值时时,数数组组的的长长度度说说明明可以省略。可以省略。(2)可以只对前若干元素赋初值。)可以只对前若干元素赋初值。(3)虽然标准)虽然标准C语言规定只能对语言规定只能对“静态存储静态存储”的字符数组的字符数组进行初始化,即除了可以对外部进行初始化,即除了可以对外部(全局全局)字符数组进行初始化外,

9、字符数组进行初始化外,还可以对用还可以对用static说明的局部字符数组进行初始化。说明的局部字符数组进行初始化。6.3.2 字符串字符串C语言规定,字符串常量(简称字符串)要用一对双语言规定,字符串常量(简称字符串)要用一对双撇号括起来。在一个字符串常量中,最后还包括一个结撇号括起来。在一个字符串常量中,最后还包括一个结束符束符0。C语言允许用字符串常量对字符数组进行初始化。语言允许用字符串常量对字符数组进行初始化。6.3.3 字符数组与字符串的输入与输出字符数组与字符串的输入与输出1输入输出一个字符输入输出一个字符(格式说明符为格式说明符为%c)在用于输入时,输入项为数组元素地址。在具体输

10、在用于输入时,输入项为数组元素地址。在具体输入时,各字符之间不要分隔,字符也不要用单撇号括起入时,各字符之间不要分隔,字符也不要用单撇号括起来。来。在用于输出时,输出项为数组元素。在用于输出时,输出项为数组元素。2输入输出一个字符串(格式说明符为输入输出一个字符串(格式说明符为%s)在用格式说明符在用格式说明符%s进行输入输出时,其输入输出项进行输入输出时,其输入输出项均为数组名。但在输入时,相邻两个字符串之间要用空均为数组名。但在输入时,相邻两个字符串之间要用空格分隔,系统将自动地在字符串最后加结束符格分隔,系统将自动地在字符串最后加结束符0。6.3.4 字符串处理函数字符串处理函数下面简单

11、介绍一些常用的字符串处理函数。下面简单介绍一些常用的字符串处理函数。(1)puts(字符数组名)(字符数组名)功能:输出一个字符串到终端。功能:输出一个字符串到终端。(2)gets(字符数组名)(字符数组名)功功能能:从从终终端端输输入入一一个个字字符符串串到到字字符符数数组组,并并返返回回字字符符数数组组的地址。的地址。(3)strcat(字符数组(字符数组1,字符串,字符串2)功功能能:将将字字符符串串2连连接接到到字字符符串串1的的后后面面,并并返返回回字字符符串串1的的地地址。址。(4)strcpy(字符数组(字符数组1,字符串,字符串2)功能:字符串功能:字符串2拷贝到字符数组拷贝到

12、字符数组1中。中。(5)strcmp(字符串(字符串1,字符串,字符串2)功能:比较字符串。功能:比较字符串。这个函数的返回值如下:这个函数的返回值如下:若字符串若字符串1字符串字符串2,则返回值为,则返回值为0;若字符串若字符串1字符串字符串2,则返回值为正整数;,则返回值为正整数;若字符串若字符串1字符串字符串2,则返回值为负整数。,则返回值为负整数。(6)strlen(字符串)(字符串)功能:测试字符串长度。功能:测试字符串长度。(7)大小写转换函数)大小写转换函数大小写转换函数有以下两个:大小写转换函数有以下两个:strlwr(字符串)(字符串)将字符串中大写字母转换成小写字母。将字符

13、串中大写字母转换成小写字母。strupr(字符串)(字符串)将字符串中小写字母转换成大写字母。将字符串中小写字母转换成大写字母。6.4数组作为函数参数数组作为函数参数6.4.1 形参数组与实参数组的结合形参数组与实参数组的结合例例6.8用选择法对无序序列进行排序。用选择法对无序序列进行排序。图6.1 选择法排序流程图C程序如下:程序如下:/*select.c*/select(b,n)intn,b;inti,j,k,d;for(i0;in2;ii1)ki;for(ji1;jn1;jj1)if(bjbk)kj;if(k!i)dbi;bibk;bkd;/*ex.c*/#includestdio.h#

14、includeselect.cmain()intk;staticints103,5,4,1,9,6,10,56,34,12;printf(n);for(k0;k10;kk1)printf(%4d,sk);printf(n);select(s,10);for(k0;k10;kk1)printf(%4d,sk);printf(n);在在C语语言言中中,形形参参数数组组与与实实参参数数组组之之间间的的结结合合要要注注意意以以下下几几点:点:(1)调用函数与被调用函数中分别定义数组,其数组名可以)调用函数与被调用函数中分别定义数组,其数组名可以不同,但类型必须一致。不同,但类型必须一致。(2)在)在C

15、语言中,形参变量与实参之间的结合是采用数值结语言中,形参变量与实参之间的结合是采用数值结合的,因此,如果在被调用函数中改变了形参的值,是不会改合的,因此,如果在被调用函数中改变了形参的值,是不会改变实参值的。变实参值的。(3)实参数组与形参数组的大小可以一致也可以不一致,)实参数组与形参数组的大小可以一致也可以不一致,C编译系统对形参数组的大小不作检查,调用时只将实参数组的编译系统对形参数组的大小不作检查,调用时只将实参数组的首地址传给形参数组。首地址传给形参数组。(4)虽虽然然函函数数中中的的形形参参数数组组一一般般不不指指定定大大小小,但但为为了了控控制制形形参参数数组组的的使使用用范范围

16、围,一一般般要要在在函函数数中中另另设设一一个个传传送送形形参参数数组组元元素个数的形参变量,如函数素个数的形参变量,如函数select()中的形参中的形参n。6.4.2 二维数组作为函数参数二维数组作为函数参数二维数组作为函数参数与一维数组完全类似。二维数组作为函数参数与一维数组完全类似。例例6.9利用函数求两个矩阵的乘积矩阵。利用函数求两个矩阵的乘积矩阵。在在例例6.4中中说说明明了了两两个个矩矩阵阵相相乘乘的的方方法法。但但在在例例6.4中中,只只能能对对固固定定的的两两个个矩矩阵阵进进行行相相乘乘,没没有有通通用用性性。在在本本例例中中,用用函函数数matmul()来来实实现现矩矩阵阵

17、相相乘乘,在在主主函函数数main()中中再再用用具具体体的矩阵来调用它。的矩阵来调用它。具体的具体的C程序如下:程序如下:#includestdio.hmain()inti,j,c23;staticinta241,2,3,4,5,6,7,8;staticintb431,2,3,4,5,6,7,8,9,10,11,12;matmul(a,b,c,2,4,3);for(i0;i2;ii1)for(j0;j3;jj1)printf(%5d,cij);printf(n);printf(n);matmul(a,b,c,m,n,k)intm,n,k,a24,b43,c23;inti,j,t;for(i0

18、;im;ii1)for(j0;jk;jj1)cij0;for(t0;tn;tt1)cijcijait*btj;return;6.5程序举例程序举例例例6.10从从键键盘盘输输入入年年、月月、日日,计计算算并并输输出出该该日日是是该该年年的第几天。的第几天。C程序如下:程序如下:#includestdio.hmain()intyear,month,day,k,sum;staticintt31,0,31,30,31,30,31,31,30,31,30,31;printf(inputyear,month,day:);scanf(%d,%d,%d,&year,&month,&day);if(year%

19、40&year%100!0)|year%4000)t129;elset128;sumday;for(k0;kmonth1;kk1)sumsumtk;printf(Dyas%dn,sum);例例6.12编编写写一一个个对对长长度度为为n的的线线性性表表进进行行冒冒泡泡排排序序的的函数。函数。冒泡排序的过程如下:冒泡排序的过程如下:从从前前到到后后扫扫描描待待排排序序序序列列,依依次次比比较较相相邻邻两两个个项项目目的的大大小小,若若发发现现逆逆序序就就进进行行交交换换,最最后后使使最最大大者者换换到到序序列列的的最最后后;然然后后从从后后到到前前扫扫描描剩剩下下的的序序列列,依依次次比比较较相相邻邻两两个个项项目目的的大大小小,若若发发现现逆逆序序就就进进行行交交换换,最最后后使使最最小小者者换换到到序序列列的的最最前前面面。对对剩剩下下的的序序列列重重复复这这个个过过程程,直直到剩下的序列为空为止。到剩下的序列为空为止。C函数如下:函数如下:voidprbub(p,n)intn;doublep;intm,k,j,i;doubled;k0;mn1;while(kmjm1;m0;for(ik;ij;i)if(pipi1)dpi;pipi1;pi1d;mi;jk1;k0;for(im;ij;i)if(pi1pi)dpi;pipi1;pi1d;ki;return;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com