C语言程序设计教程课件第6章

上传人:我*** 文档编号:144916863 上传时间:2020-09-14 格式:PPT 页数:27 大小:121KB
返回 下载 相关 举报
C语言程序设计教程课件第6章_第1页
第1页 / 共27页
C语言程序设计教程课件第6章_第2页
第2页 / 共27页
C语言程序设计教程课件第6章_第3页
第3页 / 共27页
C语言程序设计教程课件第6章_第4页
第4页 / 共27页
C语言程序设计教程课件第6章_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《C语言程序设计教程课件第6章》由会员分享,可在线阅读,更多相关《C语言程序设计教程课件第6章(27页珍藏版)》请在金锄头文库上搜索。

1、第6章 数 组,6.1 一维数组 6.2 二维数组 6.3 字符数组与字符串 6.4 数组作为函数参数 6.5 程序举例,6.1 一维数组 6.1.1 一维数组的定义与引用 定义一维数组的一般形式如下: 类型说明符 数组名常量表达式; 其中类型说明符是定义数组中各元素的数据类型,常量表达式是说明数组的大小(即数组中元素的个数。 数组的说明与变量的说明一样,其作用是为数组分配存储空间。,返回目录,关于数组的说明要注意以下几个问题: (1)数组名的命名规则与变量名相同。 (2)说明数组大小的常量表达式必须为整型,并且用方括号括起来(不能用圆括号)。 (3)说明数组大小的常量表达式中可以包含符号常量

2、,但不能是变量。,例6.1 下面的程序说明了如何对数组定义和引用数组元素: #include stdio.h #define N 5 main() 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种。

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

4、始化外,还可以对用static说明的局部数组进行初始化。,例6.3 分析下列程序的输出结果: #include stdio.h main() 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

5、)在分行给二维数组赋初值时,对于每一行都可以只对前几个元素赋初值,后面未赋初值的元素系统将自动赋初值0;并且,还可以只对前几行元素赋初值。 (2)在给全部元素赋初值时,说明语句中可以省略第一维的长度说明。 (3)在分行赋初值时,也可以省略第一维的长度说明。,6.3 字符数组与字符串 6.3.1 字符数组的定义与初始化 定义字符数组的一般形式如下: char 数组名常量表达式; 一维字符数组 char 数组名常量表达式1常量表达式2; 二维字符数组 (1)当对字符数组中所有元素赋初值时,数组的长度说明可以省略。 (2)可以只对前若干元素赋初值。 (3)虽然标准C语言规定只能对“静态存储”的字符数

6、组进行初始化,即除了可以对外部(全局)字符数组进行初始化外,还可以对用static说明的局部字符数组进行初始化。,返回目录,6.3.2 字符串 C语言规定,字符串常量(简称字符串)要用一对双撇号括起来。在一个字符串常量中,最后还包括一个结束符0。 C语言允许用字符串常量对字符数组进行初始化。,6.3.3 字符数组与字符串的输入与输出 1输入输出一个字符(格式说明符为 %c) 在用于输入时,输入项为数组元素地址。在具体输入时,各字符之间不要分隔,字符也不要用单撇号括起来。 在用于输出时,输出项为数组元素。 2输入输出一个字符串(格式说明符为 %s) 在用格式说明符%s进行输入输出时,其输入输出项

7、均为数组名。但在输入时,相邻两个字符串之间要用空格分隔,系统将自动地在字符串最后加结束符0。,6.3.4 字符串处理函数 下面简单介绍一些常用的字符串处理函数。 (1)puts(字符数组名) 功能:输出一个字符串到终端。 (2)gets(字符数组名) 功能:从终端输入一个字符串到字符数组,并返回字符数组的地址。 (3)strcat(字符数组1,字符串2) 功能:将字符串2连接到字符串1的后面,并返回字符串1的地址。,(4)strcpy(字符数组1,字符串2) 功能:字符串2拷贝到字符数组1中。 (5)strcmp(字符串1,字符串2) 功能:比较字符串。 这个函数的返回值如下: 若字符串1字符

8、串2,则返回值为0; 若字符串1字符串2,则返回值为正整数; 若字符串1字符串2,则返回值为负整数。,(6)strlen(字符串) 功能:测试字符串长度。 (7)大小写转换函数 大小写转换函数有以下两个: 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; i

9、n2; ii1) ki; for (ji1; jn1; jj1) if (bjbk) kj; if (k!i) dbi; bibk; bkd; ,/* ex.c */ #include stdio.h #include select.c main() int 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语言中,形参数组

10、与实参数组之间的结合要注意以下几点: (1)调用函数与被调用函数中分别定义数组,其数组名可以不同,但类型必须一致。 (2)在C语言中,形参变量与实参之间的结合是采用数值结合的,因此,如果在被调用函数中改变了形参的值,是不会改变实参值的。 (3)实参数组与形参数组的大小可以一致也可以不一致,C编译系统对形参数组的大小不作检查,调用时只将实参数组的首地址传给形参数组。 (4)虽然函数中的形参数组一般不指定大小,但为了控制形参数组的使用范围,一般要在函数中另设一个传送形参数组元素个数的形参变量,如函数select()中的形参n。,6.4.2 二维数组作为函数参数 二维数组作为函数参数与一维数组完全类

11、似。 例6.9 利用函数求两个矩阵的乘积矩阵。 在例6.4中说明了两个矩阵相乘的方法。但在例6.4中,只能对固定的两个矩阵进行相乘,没有通用性。在本例中,用函数matmul()来实现矩阵相乘,在主函数main()中再用具体的矩阵来调用它。,具体的C程序如下: #include stdio.h main() int 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) prin

12、tf(%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 从键盘输入年、月、日,计算并输出该日是该年的第几天。 C程序如下: #include stdio.h main() int year,month,day,k,sum; static int t31,0,31,30,31,3

13、0,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); ,返回目录,例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; ,

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

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号