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

上传人:牧羊曲112 文档编号:6504087 上传时间:2023-11-07 格式:PPT 页数:27 大小:265.49KB
返回 下载 相关 举报
C语言程序设计教程(修订本)第6章数组.ppt_第1页
第1页 / 共27页
C语言程序设计教程(修订本)第6章数组.ppt_第2页
第2页 / 共27页
C语言程序设计教程(修订本)第6章数组.ppt_第3页
第3页 / 共27页
C语言程序设计教程(修订本)第6章数组.ppt_第4页
第4页 / 共27页
C语言程序设计教程(修订本)第6章数组.ppt_第5页
第5页 / 共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 一维数组的定义与引用 定义一维数组的一般形式如下:类型说明符 数组名常量表达式;其中类型说明符是定义数组中各元素的数据类型,常量表达式是说明数组的大小(即数组中元素的个数。数组的说明与变量的说明一样,其作用是为数组分配存储空间。,返回目录,关于数组的说明要注意以下几个问题:(1)数组名的命名规则与变量名相同。(2)说明数组大小的常量表达式必须为整型,并且用方括号括起来(不能用圆括号)。(3)说明数组大小的常量表达式中可以包含符号常量,但不能是变量。,例6

2、.1 下面的程序说明了如何对数组定义和引用数组元素:#include stdio.h#define N 5main()int i,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语言中,给数组元素提供数据的方法有以下3种。(1)利用赋值语句逐个对数组中的元素进行赋值。(2)利用输

3、入函数逐个输入数组中的各个元素。例如,#include stdio.hmain()int i,a5;for(i0;i5;ii1)scanf(%d,&ai);其中&ai表示取数组元素ai的地址。(3)初始化。,下面对静态一维数组的初始化作三点说明:(1)可以只给数组的前若干个元素赋初值,此时后面的元素均将自动赋以初值0。(2)在对全部元素赋初值时,说明语句中可以不指定数组长度,其长度默认为与初值表中数据的个数相同。(3)虽然标准C语言规定只能对“静态存储”的数组进行初始化,即除了可以对外部(全局)数组进行初始化外,还可以对用static说明的局部数组进行初始化。,例6.3 分析下列程序的输出结果

4、:#include stdio.hmain()int k,x5;static int y5;int z50,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 二维数组的初始化 与一维数组一样,也可以对静态存储的二维数组进行初始化。在对二维数组进行初始化时要注意以下几点。(1)在分行给二维数组赋初值时,对于每一行都可以只对前几个元素赋初值,后面未赋初值的元素系统将自动赋初值0;并且,还可以只对前

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

6、串 C语言规定,字符串常量(简称字符串)要用一对双撇号括起来。在一个字符串常量中,最后还包括一个结束符0。C语言允许用字符串常量对字符数组进行初始化。,6.3.3 字符数组与字符串的输入与输出1输入输出一个字符(格式说明符为%c)在用于输入时,输入项为数组元素地址。在具体输入时,各字符之间不要分隔,字符也不要用单撇号括起来。在用于输出时,输出项为数组元素。2输入输出一个字符串(格式说明符为%s)在用格式说明符%s进行输入输出时,其输入输出项均为数组名。但在输入时,相邻两个字符串之间要用空格分隔,系统将自动地在字符串最后加结束符0。,6.3.4 字符串处理函数 下面简单介绍一些常用的字符串处理函

7、数。(1)puts(字符数组名)功能:输出一个字符串到终端。(2)gets(字符数组名)功能:从终端输入一个字符串到字符数组,并返回字符数组的地址。(3)strcat(字符数组1,字符串2)功能:将字符串2连接到字符串1的后面,并返回字符串1的地址。,(4)strcpy(字符数组1,字符串2)功能:字符串2拷贝到字符数组1中。(5)strcmp(字符串1,字符串2)功能:比较字符串。这个函数的返回值如下:若字符串1字符串2,则返回值为0;若字符串1字符串2,则返回值为正整数;若字符串1字符串2,则返回值为负整数。,(6)strlen(字符串)功能:测试字符串长度。(7)大小写转换函数大小写转换

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

9、k;static int s103,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语言中,形参变量与实参之间的结合是采用数值结合的,因此,如果在被调用函数中改变了形参的值,是不会改变实参值的。(3)实参数组与形参数组的大小可以一致也可以不一致,C编译系

10、统对形参数组的大小不作检查,调用时只将实参数组的首地址传给形参数组。(4)虽然函数中的形参数组一般不指定大小,但为了控制形参数组的使用范围,一般要在函数中另设一个传送形参数组元素个数的形参变量,如函数select()中的形参n。,6.4.2 二维数组作为函数参数二维数组作为函数参数与一维数组完全类似。例6.9 利用函数求两个矩阵的乘积矩阵。在例6.4中说明了两个矩阵相乘的方法。但在例6.4中,只能对固定的两个矩阵进行相乘,没有通用性。在本例中,用函数matmul()来实现矩阵相乘,在主函数main()中再用具体的矩阵来调用它。,具体的C程序如下:#include stdio.hmain()in

11、t i,j,c23;static int a241,2,3,4,5,6,7,8;static int b431,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)int m,n,k,a24,b43,c23;int i,j,t;for(i0;im;ii1)for(j0;jk;jj1)cij0;for(t0;tn;tt1)cijcijait*btj;return;,6.5 程序举例 例6.10

12、 从键盘输入年、月、日,计算并输出该日是该年的第几天。C程序如下:#include stdio.hmain()int year,month,day,k,sum;static int t31,0,31,30,31,30,31,31,30,31,30,31;printf(input year,month,day:);scanf(%d,%d,%d,&year,&month,&day);if(year%40&year%100!0)|year%4000)t129;else t128;sumday;for(k0;kmonth1;kk1)sumsumtk;printf(Dyas%dn,sum);,返回目录,

13、例6.12 编写一个对长度为n的线性表进行冒泡排序的函数。冒泡排序的过程如下:从前到后扫描待排序序列,依次比较相邻两个项目的大小,若发现逆序就进行交换,最后使最大者换到序列的最后;然后从后到前扫描剩下的序列,依次比较相邻两个项目的大小,若发现逆序就进行交换,最后使最小者换到序列的最前面。对剩下的序列重复这个过程,直到剩下的序列为空为止。,C函数如下:void prbub(p,n)int n;double p;int m,k,j,i;double d;k0;mn1;while(km jm1;m0;for(ik;ij;i)if(pipi1)dpi;pipi1;pi1d;mi;jk1;k0;for(im;ij;i)if(pi1 pi)dpi;pipi1;pi1d;ki;return;,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号