[计算机软件及应用]ch6

上传人:豆浆 文档编号:49471547 上传时间:2018-07-28 格式:PPT 页数:53 大小:505.50KB
返回 下载 相关 举报
[计算机软件及应用]ch6_第1页
第1页 / 共53页
[计算机软件及应用]ch6_第2页
第2页 / 共53页
[计算机软件及应用]ch6_第3页
第3页 / 共53页
[计算机软件及应用]ch6_第4页
第4页 / 共53页
[计算机软件及应用]ch6_第5页
第5页 / 共53页
点击查看更多>>
资源描述

《[计算机软件及应用]ch6》由会员分享,可在线阅读,更多相关《[计算机软件及应用]ch6(53页珍藏版)》请在金锄头文库上搜索。

1、第6章 数组数组的概念一维数组二维数组与多维数组字符数组与字符串数组作为函数参数数组综合应用举例16.1 数组的概念数组的定义:按序排列的同种类型数据所组成的集合.说明:用一个统一的数组名来标识这一组数据,用下标来指示数组种元 素的序号,下标是用于描述数组元素在数组中位置信息的量,从0 开始;数组中所包含的数据称为数组元素,每个数组元素属于同种数据 类型;数组按序排列是指数组元素排列的先后次序是确定的而不是指数 组元素按大小有序排列;数组属于构造数据类型,一个数组可以包含多个数组元素,这些 数组元素可以是基本数据类型或者构造类型;数组用数组名来标识,其代表了数组的内存首地址,是地址常量 ;数组

2、可以根据数组元素类型分类,也可以根据数组下标数目分类 ,并把数组下标的数目称为数组的维数,C语言允许一维数组和多 维数组;数组的使用必须遵循“先声明,后使用”的原则。26.2 一维数组一维数组指只有一个下标的数组。 一、一维数组的声明:基本语法:存储类型说明符 类型标识符 数组名整型常量表达式 ; 说明:存储类型为可选说明符,用于指定数组的存储类型,可以为 static,auto,extern类型,忽略时默认为auto;类型标识符用于指定数据的数据类型,即数据元素可以存放的数据 类型;数组名为数组指定一个名称,以便随后引用;整型常量表达式,用于指定数组的大小,即数组中元素的个数。 :数组运算符

3、 单目运算符 左结合 不能用( )3注意:数组的类型实际上是指数组元素的类型,对于同一数组,其所 有元素的数据类型应该是相同的;数组名的书写应该符合C语言标识符的命名规则;数组名不能与其他变量名或者标识符同名;方括号中常量表达式规定数组元素的个数,是一个常量值,不 可以用变量来代替;数组下标从0开始,到常量表达式值减1结束,C对下标不作越 界检查,要自己注意;数组声明允许和同类型数组或变量共用同一声明语句。4例1: char name10; 声明存放10个字符的数组(字符型 ) float scores50; 声明存放50个成绩的数组(浮点型 ) int number20, age30; 声明

4、分别存放20个学号和存放 30个年龄的数组(整型) #define MAX 20double priceMAX , sum2*MAX; 利用符号常量声明一个存放20个价格和40个总值的两个双 精度数组例2:int i=15;int datai; (不能用变量定义数组维数)试判断下列数组定义是否合法: int student35; static char name20,id7*2; auto float score35, f=1.2;#define student 35 float n_studentstudent; int score_studentstudent*3;int person(1

5、0);int n=10, an;5二、一维数组的初始化一维数组的内存分配数组定义后,其元素是在一片连续内存中有序存放的,数组名代表 着这一段内存的起始地址,数组元素按下标从小到大的次序连续存 放,数组所占内存的大小可以通过sizeof(数组名)计算出来; 又因为每个元素所占的内存的大小(字节数)是相同的,所以可以 根据元素的下标以及起始地址计算出某一个元素的内存地址,从而 实现数组元素的随机访问 :数组元素地址 = 数组起始地址 + 元素下标 * sizeof(数组类型) 数组元素地址内存 Name02000C Name12001H Name22002I Name32003N Name4200

6、4A 62. 一维数组的初始化含义含义:在定义数组的同时,对数组各元素指定初值, 初始化在编译阶段 完成,不占用运行时间。 注意注意: 用赋值语句或输入语句也可给数组元素指定初值,是在运行 时完成,占用运行时间 数组初始化基本形式: 类型说明符 数组名常量表达式=Value1,Value2,ValueN; 注意:形式中左边与声明相同,右边为逗号分割开的数组元素初始值(常 量),类型必须与类型说明符一致,且与元素从左到右顺次对应赋 值;可以只给部分元素赋初值,当初值个数少于元素个数时,只给前面 的部分元素赋初值,后面的元素值自动赋零值(0或0);只能给元素逐个赋值,不能对数组整体赋值;如给全部元

7、素赋值,则说明中可以不必给出数组元素的个数,当不 是全部赋值时必须给出数组长度,且初值个数不能大于数组长度;不赋初值时,对static、extern类型系统自动赋零值(0或0) ,对于auto类型的则各元素值不确定。7例如:int sco10=0,1,2,3,4,5,6,7,8,9; 相当于sco0=0;sco1=1;sco9=9 ;例如:给10个元素全部赋初值为1,只能写成如下形式: static int w10=1,1,1,1,1,1,1,1,1,1; 下面的格式则是错误的: static int w10=1; 例如: int a5=1,2,3,4,5; 也可写为: int a=1,2,3

8、,4,5; 例如:int a5=1,2,3; 但: int a5=1,2,3,4,5,6 是错误的 ?例如:static int a5=1,2,3; 等价于 a0=1, a1=2, a2=3, a3=0, a4=0; 而 static char c3; 在数值上等价于 char c3=0,0,0;8例:赋初值与不赋的区别 main() int i,a5=3,4,5,b5;extern int c ;extern char d ;printf(“array a is:“);for( i=0; i main() int i, max, a10;printf(“Please input 10 num

9、bers:n“);for( i=0; imax)max=ai;printf(“maxmum=%dn“, max); 11例 用数组求Fibonacci数列前20个数f0 f1 f2 f3 f4 f5f19.1 1f190 14 52 3192 3 5#include main() int i;int f20=1,1;for( i=2; ia1,则交换;然后比较第二个数与第三个数;依次类推,直至第n-1个数和第n个数比较为止第一趟冒泡排序,结果最大的数被安置在最后一个元素位置上 (2)对前n-1个数进行第二趟冒泡排序,结果使次大的数被安置在第n-1个元素位置 (3)重复上述过程,共经过n-1趟冒

10、泡排序后,排序结束13例38 49 65 76 13 27 30 97第一趟38 49 65 13 27 30 76第二趟38 49 13 27 30 65第三趟38 13 27 30 49第四趟13 27 30 38第五趟13 27 30第六趟49 38 65 97 76 13 27 30初始关键字3849769713972797309713767676273013652765306513134949304927382738303813 27第七趟14输入n 个数给a0 到 an-1for j=1 to n-1for i=0 to n-j-1aiai+1真假aiai+1输出a0 到 an-1

11、#include main() int a10,i,j,t;printf(“Input 10 numbers:n“);for(i=0;iai+1) t=ai; ai=ai+1; ai+1=t; printf(“The sorted numbers:n“);for(i=0;i main() int a10,i,j,k,x;printf(“Input 10 numbers:n“);for(i=0;i main() int j,k;int a33=1,2,3,4,5,6,7,8,9 , b33;for(j=0; jmain() int i,j;char a7=E,n,g,l,i,s,h,F,o,x,

12、p,l,u,s;for(i=0;i main() int i;char s8=“English“;scanf(“%s”, s ); /* 使用%s时,用数组名而不用再加 /* 使用字符数组名输出连续空间的内容,遇0结束 */printf(“n“); 若输入的字符串长度不小于该维上的数组长度,则会出现问题 若数组中有多个0,则按%s输出时遇到第一个就结束 函数 scanf()遇到空格或回车就结束上例分别输入:1234567、12345678、123456789,结果为? 令s8=1,2,3,0,4,5,6,0,再按%s输出,为?用语句scanf(“%s”,s);能不能记录字符串”how do y

13、ou do?”令s8=1,2,3,4,5,6,7,8,再按%s输出,为?34三、字符串处理函数 使用时应包含头文件stdio.h或string.h1. 字符串输出函数puts 格式:puts(字符数组); 功能:向显示器输出字符串(输出结束后换行) 说明:字符数组必须以0结束2. 字符串输入函数gets 格式:gets(字符数组); 功能:从键盘输入一个以回车结束的字符串并放入字符数组中 ,再在其后自动加0,函数返回字符数组的起始地址 说明:输入串长度应小于字符数组的长度例6.9 : #include main() static char s=“English and Foxplus“;pri

14、ntf(“Original string is:n“);puts(s);printf(“Please input a new string:n“);gets(s);printf(“New string is:n“);puts(s); 353. 字符串连接函数strcat 格式:strcat(字符数组1,字符数组2); 功能:删除字符数组1最后的0,再把字符数组2连到字符 数组1后面,使字符数组1存储新的字符序列 返值:返回字符数组1的首地址 说明:字符数组1必须足够大以容纳所构成的新串连接前,两串均以0结束;连接后,串1原有的0 取消,而新串最后保留串2的04. 字符串拷贝函数strcpy 格式:strcpy(字符数组1,字符串2); 功能:将字符串2拷贝到字符数组1中去,使之获得新值 返值:返回字符数组1的首地址 说明:字符数组1必须足够大容纳串2拷贝时0一同拷贝不能使用赋值语句为一个字符数组赋值例 char str120,str220;str1=“Hello!”;

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

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