




已阅读5页,还剩46页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2018年2月14日星期三,第五章数组,1,第五章数组,2018年2月14日星期三,第五章数组,2,本章主要介绍C语言数组的应用,利用数组编程来处理大规模的数据。,1.一维数组的定义及应用2.二维数组的定义及应用3. 字符数组及字符串的应用,2018年2月14日星期三,第五章数组,3,1 一维数组的定义及应用,一、数组的概念,数组是同一类型数据的有序集合。一个数组是有若干个元素组成的,其所有元素都属于同一数据类型,且它们的先后顺序是确定的。,2018年2月14日星期三,第五章数组,4,1 一维数组的定义及应用,二、一维数组的定义及应用,1.一维数组的定义(在使用前必须先定义)格式: 数组名常量表达式=初值表; 如:int a5; float b10; static double data3=10.5 , 2.5 , 1.0 ; extern int array10=4; 4,0, ,0,2018年2月14日星期三,第五章数组,5,一维数组的存储形式,一维数组的元素在内存中依次连续存储,char a5;,1 一维数组的定义及应用,2018年2月14日星期三,第五章数组,6,说明: 存储类和数据类型用来说明数组元素的类型。缺省存储类是auto,c语言数组多采用static型。 常量表达式用来指明数组元素的个数。下标范围是:0 常量表达式-1。说明时,常量表达式可以省略调用时决定大小。 “常量表达式”可以为符号常量。 初值表给出元素的初值,只有static和extern才能在说明时赋初值,初值表严格按顺序。例如:static int array10= , 4; array1=4, 其余为0static int tab5=1 , 1; 1, 1, 0, 0, 0static int a =1, 2, 3, 4, 5; 数组一旦被定义,系统将分配一段连续的存贮空间来存放数组元素,数组元素按先后顺序存放。编译系统在处理数组说明时分配内存空间。,1 一维数组的定义及应用,2018年2月14日星期三,第五章数组,7,1 一维数组的定义及应用,2、一维数组的引用 在程序中,只能引用数组中的具体元素,不能引用整个数组。可以对数组中的各元素进行各种操作。,一维数组的引用格式如下: 数组名 下标 例如:a1+a3+a5-1,代表某个元素的顺序号,是整数。,下标最小值是0,若数组中有n个元素,则数组中元素分别为a0、a1、a2 . an-1。,注意:引用数组中的元素就象引用具体的变量一样,在程序 中,可以将数组元素看成一个变量。,2018年2月14日星期三,第五章数组,8,1 一维数组的定义及应用,3、一维数组的初始化 ( 初始化是指在定义时,并赋初值。) 一维数组的初始化格式如下: 类型说明符 数组名常量表达式=初值表列; 例如:int a5=1,3,5,7,9;, 对全部元素初始化 int a5=1,3,5,7,9; int a =1,3,5,7,9;, 对部分元素初始化 int a5=1,3,5; 对前3个元素初始化 int a8=, , , , ,5,7,9; 对后3个元素初始化 int a8=, ,1,3,5; 对中间3个元素初始化,2018年2月14日星期三,第五章数组,9,1 一维数组的定义及应用,4、一维数组中元素的输入与输出, 单个元素的输入与输出:直接用标准输入输出函数进行输入输出。例如:scanf(%d, 多个元素的输入与输出:利用循环语句进行输入输出。例5-1#include Stdio.hmain()int a5,i; for(i=0;i5;i+) scanf(%d,2018年2月14日星期三,第五章数组,10,1 一维数组的定义及应用,例 5-2 任意输入一组数(10个数),求和与平均值。,#include Stdio.hmain()int i; float a10,sum,pin; for(i=0;i10;i+) scanf(%f,分析:假定10个数为 1,-5,3,9,10,-3,4,2,45,-33 (这10个数没有规律,无法采用普通方法求解) 1, -5, 3, 9, 10, -3, 4, 2, 45, -33 a: a0, a1, a2, a3, a4, a5, a6, a7, a8, a9,2018年2月14日星期三,第五章数组,11,1 一维数组的定义及应用,例 5-3 任意输入一组数(10个数),求最大值与最小值以及最大值与最小值所处的位置。,#include Stdio.hmain()int a10,i,max,maxi,min,mini; for(i=0;iai) min=ai;mini=i; printf(a%d=%d a%d=%d,maxi,max,mini,min);,2018年2月14日星期三,第五章数组,12,1 一维数组的定义及应用,例 5-4 从一组数(10个数)中找出所要的数,如果有,给出该数所处位置,如果没有,指出没有找到。,#include Stdio.hmain()int a10=1,2,3,4,5,6,7,8,9,10; int i,x,find; printf(input the data:); scanf(%d,2018年2月14日星期三,第五章数组,13,基本思想:两两比较相邻记录关键码,如果反序则交换,直到没有反序的记录为止。,基本思想:两两比较,若为逆序,交换位置。,1 一维数组的定义及应用,例 5-5 从键盘上输入10个数,要求从小到大排列。 (用冒泡法排序),2018年2月14日星期三,第五章数组,14,65,65,55,起泡排序过程示例,65,55,50,1 一维数组的定义及应用,2018年2月14日星期三,第五章数组,15,两层循环结构外层循环每次把操作范围内最大的数放到最后位置内层循环每次把较大的数放到靠后的位置确定每层循环的边界外层循环n-1次j=0 to n-2内层循环n-1-j次i=0 to n-2-j,1 一维数组的定义及应用,2018年2月14日星期三,第五章数组,16,1 一维数组的定义及应用,#include Stdio.hmain()int a10,i,j,t; printf(input the 10 number:); for(i=0;iaj+1)t=aj;aj=aj+1;aj+1=t; printf(the 10 number sort:); for(i=0;i10;i+) printf(%5d,ai); ,2018年2月14日星期三,第五章数组,17,1 一维数组的定义及应用,例 5-6 从键盘上输入10个数,要求从小到大排列。(用冒泡法排序方法:两两比较,若为逆序,交换位置。 ),#include Stdio.hmain()int a10,i,j,t; printf(input the 10 number:); for(i=0;i0;j-) if(ajaj-1)t=aj;aj=aj-1;aj-1=t; printf(the 10 number sort:); for(i=0;i10;i+) printf(%5d,ai); ,2018年2月14日星期三,第五章数组,18,2 二维数组的定义及应用,一、二维数组的概念,二维数组是指具有两个下标的数组。,可以看作元素是一维数组的一维数组举例char a34; /* 3行4列 */,2018年2月14日星期三,第五章数组,19,2 二维数组的定义及应用,二、二维数组定义及应用,1.二维数组的定义(在使用前必须先定义) 格式:类型说明符 数组名常量表达式1 常量表达式2 ; 如:int a56; float b1010;static int a23=2,4,6,8,10,12 2,4,6 , 8,10,12static int a23= 2, , 10 2,0,0,0,10,0static int a 3=2,4,6,8,10,12,2018年2月14日星期三,第五章数组,20,2 二维数组的存储形式,按行存放,先行后列char a34;,2 二维数组的定义及应用,2018年2月14日星期三,第五章数组,21,3 二维数组元素的引用,表示形式数组名下标下标说明用法与一维数组元素类似注意避免下标越界char a34;a15 _ a21,2 二维数组的定义及应用,2018年2月14日星期三,第五章数组,22,4 二维数组的初始化 (1),分行给二维数组赋初值int a34=1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12;对部分元素赋初值int a34=1,0,6,9;int b34=1,5,6;int c34=1,0,0,11;,2 二维数组的定义及应用,2018年2月14日星期三,第五章数组,23,二维数组的初始化 (2),对全部元素赋初值时,第一维长度可以省略,其他维长度不能省略int a4=1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12;只对部分元素赋初值时,第一维长度也可以省略,但是要用分行,即能够判断第一维长度int a4=0,0,3,0,10,11;,2 二维数组的定义及应用,2018年2月14日星期三,第五章数组,24,练习:二维数组的初始化 ( 初始化是指在定义时,并赋初值。) 二维数组的初始化格式如下: 类型说明符 数组名常量表达式1 常量表达式2=初值表列; 例如:int a23=1,3,5,7,9,11;, 对全部元素初始化 int a23=1,3,5,7,9,11; int a23=1,3,5,7,9,11; int a 3=1,3,5,7,9,11; int a 3=1,3,5,7,9,11;, 对部分元素初始化 int a34=1,3,5,7,2,4,6,8; 对前两行初始化 int a34=,1,3,5,7,2,4,6,8; 对后两行初始化 int a34=1,3,5; 对第一列初始化 int a 4=1,3,5; 对第一列初始化,2 二维数组的定义及应用,2018年2月14日星期三,第五章数组,25,5 二维数组与一维数组,可以用一维数组描述二维数组char a23;char a6; aij ai*3+j,2 二维数组的定义及应用,2018年2月14日星期三,第五章数组,26,6、二维数组中元素的输入与输出, 单个元素的输入与输出:直接用标准输入输出函数进行输入输出。例如:scanf(%d, 多个元素的输入与输出:利用循环语句进行输入输出(先行后列)。例5-7#include Stdio.hmain()int a45,i,j; for(i=0;i4;i+) for(j=0;j5;j+) scanf(%d,2 二维数组的定义及应用,2018年2月14日星期三,第五章数组,27,7、二维数组的应用,例 5-8 将一个二维数组进行转置,生成一个新数组。,#include Stdio.hmain()int a24,b42,i,j; printf(please input the data:n); for(i=0;i2;i+) for(j=0;j4;j+) scanf(%d,2 二维数组的定义及应用,2018年2月14日星期三,第五章数组,28,例 5-9 有一个34矩阵,求最大值及该值所在的位置。,#include stdio.hmain() int a34,i,j,h,l,max; printf(please input the data:n); for(i=0;imax) max=aij; h=i;l=j; printf(max=%d,h=%d,l=%dn,max,h,l); ,2 二维数组的定义及应用,2018年2月14日星期三,第五章数组,29,例 5-10 打印杨辉三角形(要求打印10行)。,#include Stdio.hmain()int a1010,i,j; for(i=0;i10;i+) ai0=aii=1; for(i=2;i10;i+) for(j=1;ji;j+) aij=ai-1j-1+ai-1j; for(i=0;i10;i+) for(j=0;j=i;j+) printf(%5d,aij); printf(n);,2 二维数组的定义及应用,2018年2月14日星期三,第五章数组,30,1 字符数组的使用,与其他类型数组用法类似char a10;a5=f; a7=n; a9=105;a0=a3*4-a4;char c=a, , *, n;用作字符串变量字符串作为一维字符数组处理用字符数组名来引用字符串变量字符数组元素包括字符串结束标志0,3 字符数组的定义及应用,2018年2月14日星期三,第五章数组,31,字符数组与字符串,字符串作为一维字符数组来处理China,char str6=C,h, i,n,a,0;,3 字符数组的定义及应用,2018年2月14日星期三,第五章数组,32,2 字符数组的初始化,字符数组初始化的方法逐个字符赋值给各元素用字符串常量赋初值举例char s=T,E,S,T,0;char s=TEST;char s=TEST;char s6=China, Anhui, Hefei, USTC;,3 字符数组的定义及应用,2018年2月14日星期三,第五章数组,33,3 字符数组的定义及应用,比较:char c20; /*定义一个20个字符的数组c*/char str1020; /*定义一个10行20列的数组str*/static char str8=p, r, o, g, r, a, m, 0 ;static char str8=112, 114, 111, 103, 114, 97, 109, 0;static char str8=program;static char str =program;static charstr36=Sum,Earth,Moon;易错:char name7; name7=Turbo C;用strcpy函数 str1=str2;,2018年2月14日星期三,第五章数组,34,3 字符串结束标志,字符串结束标志0以0作为判断字符串结束的唯一标志与存放字符串的字符数组的长度无关所有字符串操作都以0作为结束条件如果对字符数组每个元素分别赋值,并作为字符串使用,必须在最后手工添加0系统在字符串常量后自动添加0举例char s=U,S,T,C,0;,3 字符数组的定义及应用,2018年2月14日星期三,第五章数组,35,4 字符串的输入输出,3 字符数组的定义及应用,2018年2月14日星期三,第五章数组,36,3 字符数组的定义及应用,2018年2月14日星期三,第五章数组,37,3 字符数组的定义及应用,2018年2月14日星期三,第五章数组,38,3 字符数组的定义及应用,2018年2月14日星期三,第五章数组,39,5 字符串处理函数,3 字符数组的定义及应用,字符函数的原型存放在string.h文件中。,2018年2月14日星期三,第五章数组,40,例:字符串复制,. .char sMAX, tMAX;int i;. .for (i=0; si!=0; i+)ti = si;ti = 0;for (i=0; ti=si; i+);,3 字符数组的定义及应用,2018年2月14日星期三,第五章数组,41,例:字符串比较,. .char sMAX, tMAX;int i;. .for (i=0; si=ti; i+)if (si=0)return 0;/* 字符串相等 */return si-ti;/* 字符串不等 */,3 字符数组的定义及应用,2018年2月14日星期三,第五章数组,42,1、strlen()函数功能:测试字符串的长度。一般形式是: length=strlen(字符串)其中: 函数参数可以是字符串常量,或者字符变量。 整型变量length用于保存函数的返回值。 字符串的长度是包围在双引号内的有效字符数,不包括双引号和0。如: ABC 长度为3。 abcn 长度为4 长度为0,3 字符数组的定义及应用,2018年2月14日星期三,第五章数组,43,例: #include#includemain() char msg=Rock and Roll; int lnth; lnth=strlen(msg); printf(字符串:%s的长度是:%dn,msg,lnth); printf(“空字符串的长度是:%dn,strlen();,3 字符数组的定义及应用,2018年2月14日星期三,第五章数组,44,2、strcat()函数功能:用于连结两个字符串。一般形式: strcat(字符串1,字符串2); 将字符串2连结到字符串1的后面,注意:(1) strcat函数不检查字符串1的空白位置是否装得下字符串2。连结前应用strlen函数进行检验,确保不发生溢出。(2) 长度加,为新字符串的结束符0留一个位置。,其中:参数1必须是字符串变量,而参数2可以是字符串常量或变量。,3 字符数组的定义及应用,2018年2月14日星期三,第五章数组,45,例 :#include#include#define SIZE 30main() char bookSIZE; char msg=的确是本好书!; puts(你喜欢什么书?); gets(book); if(strlen(book)+strlen(msg)+1“DEF”),
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年彭州市第二人民医院招聘笔试真题
- 2024年宁波余姚市公益性岗位招聘笔试真题
- 2024年南平市第二医院招聘笔试真题
- 有效的内容营销策略计划
- 战略创新与风险管理考题及答案
- 法学概论的法律理论与试题及答案分析
- 2025年法学概论考试的法律语境变化与试题及答案
- 基于云端的AI服务架构设计试题及答案
- 2025法学概论考试高分秘籍及试题答案
- 2025届吉林省大安市第三中学八下数学期末学业水平测试模拟试题含解析
- 中小学生民法典主题班会-民法典宣讲课件
- HG-T 4062-2023 波形挡边输送带
- 牛背山岩桑坪生态旅游客运索道项目对大熊猫国家公园生态影响评价报告
- 乙状结肠癌根治术手术
- 提水试验过程及数据处理
- (正式版)SHT 3046-2024 石油化工立式圆筒形钢制焊接储罐设计规范
- 呼吸系统(0001)课件
- 单位食堂美食节策划方案
- 小学高段学生数学应用意识培养的实践研究 开题报告
- GA/T 2015-2023芬太尼类药物专用智能柜通用技术规范
- 唱片行业前景分析
评论
0/150
提交评论