




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第七章 数组内容提要(ni rn t yo): 一维数组 二维数组 字符数组 应用举例共三十五页回顾(hug) 我们前面使用的数据类型(lixng)都属于基本类型(lixng)(整型、实型、字符型)其存储特点是:每个变量单独存储,亦称简单变量如: x=a ; y1=0; y2=-2*x;个变量之间独立存放,无任何联系。共三十五页构造类型的基本概念 构造类型(lixng):是由基本类型(lixng)构造而成的。 (如数组、结构体、共同体、梅举型)在C语言中,变量类型(lixng)除了前面介绍的几种基本类型(lixng)之外,还有另外一些复杂的类型(lixng),合称为构造类型(lixng)。构造
2、类型的每一个分量是一个变量,它可以是简单类型或者构造类型。构造类型的分量占用相邻的存储空间。共三十五页数组是构造数据类型之一数组:具有相同类型的,在存储空间上连续(linx)的一组元素的集合。元素:属同一数据类型,用数组名和下标来唯一确定合法(hf)标识符表示元素个数 :数组运算符单目运算符优先级(1)左结合不能用( )7.1 一维数组一维数组的定义定义方式: 数据类型 数组名常量表达式; 例 int i=15; int datai; (不能用变量定义数组长度)定义即提供四个方面的信息:名、类型、维数、长度, 从而分配空间。例如:int a10 表示数组名是 ,它是 维数组,数组元素的类型是
3、,数组有 个元素。a整型10一共三十五页一维数组的引用数组必须先定义,后使用只能逐个引用数组元素,不能一次引用整个数组数组元素表示形式: 数组名下标其中:下标可以(ky)是常量或整型表达式如果数组长度(chngd)为n,则元素的最大下标为n-1注意: 定义数组时用到的“数组名常量表达式” 和引用数组元素时用到的“数组名下标” 是有区别的。例如 int a10; t=a6; 下标从0开始例 int a10; printf(“%d”,a); /* 定义数组长度为10 */* 引用a数组中序号为6的元素。此时6不代表数组长度 */例 int data5; data0、 data1、 data2、 d
4、ata3、 data4;printf(“%dt”,aj);共三十五页例7.1 数组元素(yun s)的引用#include void main() int i,a10; for (i=0; i=0; i-) printf(%d ,ai); printf(n); 运行结果如下:9 8 7 6 5 4 3 2 1 0 程序使a0到a9的值为09,然后(rnhu)按逆序输出。数组元素的下标常用循环变量来控制共三十五页 注意:在一维数组引用(ynyng)过程中要防止下标越界问题。如“int a10”定义的数组a,数组a中不包括a10元素,下标为10已经越界。对于数组下标越界问题,C语言编译系统不进行检
5、测,即不进行错误报告,只是会造成程序运行结果的错误。共三十五页 C编译程序(bin y chn x)怎么管理一个数组呢?用连续的内存(ni cn)单元存放各个元素 如:int a5:其内存中存储为:低地址 高地址 1000 1004 1008 1012 1016 a0 a1 a2 a3 a4每个数据元素占用的字节数,就是基类型的字节数一个元素占4个字节一维数组的存储 a数组名表示内存首地址,是地址常量共三十五页一维数组的初始化初始化方式(fngsh) 在定义数组时,为数组元素赋初值(在编译阶段(jidun)使之得到初值) int a5=1,2,3,4,5;等价于:a0=1; a1=2; a2=
6、3; a3=4; a4=5;说明:数组不初始化,其元素值为随机数如果想使一个数组中全部元素值为0或,可以写成 : int a10=0; char b5=当全部数组元素赋初值时,可不指定数组长度只给部分数组元素赋初值 int a=1,2,3,4,5,6;编译系统根据初值个数确定数组长度如 int a5=6,2,3; 等价于: a0=6; a1=2;a2=3; a3=0; a4=0;共三十五页 如: 1、int a4=1、2、3、4、5、6; 2、int a4; a1=1;a22;a33;a44; 3、int an;数据多于元素个数,且数据间没用(mi yn)逗号隔开错错错不能使用(shyng)变
7、量下标要从0开始共三十五页例 数组的初始化#include stdio.hvoid main() int i;int a5=1,2,3,4,5; int b5=1,2,3;int c=1,2,3,4,5;int d5=0; int e5;for(i=0;i5;i+) printf(%d,ai);printf(n); for(i=0;i5;i+) printf(%d,bi);printf(n);for(i=0;i5;i+) printf(%d,ci);printf(n);for(i=0;i5;i+) printf(%d,di);printf(n);for(i=0;i5;i+) printf(%d
8、,ei);printf(n); 12345123001234500000-858993460-858993460-858993460-858993460-858993460 int i, a5=1,2,3,4,5, b5=1,2,3,c=1,2,3,4,5,d5=0, e5;共三十五页例7.2 用数组求Fibonacci数列(shli)(斐波纳契数列)前20个数f0f1f2f3f4f5f19.11f1901452319235#include main() int i; int f20= ; for(i=2;i20;i+) for(i=0;iai+1真假aiai+1输出a1到an共三十五页#in
9、clude main() int a11,i,j,t; printf(Input 10 numbers:n); for(i=1;i11;i+) scanf(%d,&ai); printf(n); for(i=1;i=9;i+) for (j=1;jaj+1) t=aj; aj=aj+1; aj+1=t; printf(The sorted numbers:n); for(i=1;i11;i+)printf(%d ,ai);共三十五页7.2 二维数组及多维数组 二维数组的定义(dngy)定义方式:数据类型数组名常量表达式常量表达式;例 int a34; float b25; int a3,4;
10、行数列数元素(yun s)个数=行数*列数在C语言中,数组的元素还可以是数组,这样就构成二维数组,所以二维数组可以看成是“数组的数组”。可以用于存放有行有列的数据表格共三十五页引用二维数组元素的一般(ybn)形式: 数组名 行下标列下标 二维数组的引用(ynyng) 如:int a23; 定义了一个2行3列的二维整型数组a,它的各元素为a00,a01,a02,a10,a11,a12,总共有六个元素。注意: 不要写成 a1,2,a2-1,2*2-2形式又如:a2-12*2-1 b12=a13/2注意:在使用数组元素时,下标的最大取值。 即注意数组定义和数组元素引用的区别如:int a34; /*
11、 定义a为34的数组 */ 则下标下限值是a00下标上限值是a23共三十五页例 int a34;a00a01a02a03a10a11a12a13a20a21a22a23每个元素(yun s)ai由包含4个元素的一维数组组成二维数组a是由3个元素(yun s)组成a0a1a2行名二维数组理解: 我们可以把二维数组看作是一种特殊的一维数组:它的元素又是一个一维数组。014523a01a02a03a10a11a00a13a20a21a22a23a1267101189a0a1a2数组元素的存放顺序原因:内存是一维的二维数组:按行存放共三十五页二维数组元素(yun s)的初始化分行初始化: 例 int
12、a23=1,2,3,4,5,6;a00a01a02a10a11a12123456全部初始化按元素(yun s)排列顺序初始化 例 int a23=1,2,4;a00a01a02a10a11a12120400部分初始化 例 int a3=1,4,5;a00a01a02a10a11a12100450第一维长度省略初始化 例 int a23=1,2,3,4,5,6;a00a01a02a10a11a12123456全部初始化 例 int a23=1,2,4;a00a01a02a10a11a12124000部分初始化 例 int a3=1,2,3,4,5;a00a01a02a10a11a12123450
13、第一维长度省略初始化第一维的大小按以下规则决定:(1)当初值的个数能被第二维的常量表达式的值除尽时,所得的商就是第一维的大小。(2)当初值的个数不能被第二维的常量表达式的值除尽时,则:第一维的大小=所得的商+1。共三十五页程序(chngx)举例例 将二维数组输入(shr)与输出#include main() int a33,i,j; for(i=0;i=2;i+) for(j=0;j=2;j+) scanf(%d,&aij); for(i=0;i=2;i+) for(j=0;j=2;j+) printf(%d , aij );printf(n); 一般二维数组的处理用二重循环实现, 用循环变量
14、的值控制数组元素的下标。 #include main() int a33,i,j; for(i=0;i=2;i+) for(j=0;j=2;j+) scanf(%d,&aji); for(i=0;i=2;i+) for(j=0;j=2;j+) printf(%d , aij );printf(n); a00a01a02a10a11a12a21a22a231234567891 2 3 4 5 67 8 91 2 3 7 8 9 4 5 6 1 4 7 2 5 83 6 9共三十五页算法:1、a数组初始化并输出2、用二重循环进行(jnxng)转置 bji=aij3、输出b数组例7.4 将二维数组行
15、列元素互换,存到另一个(y )数组中(转置)。a=1 2 34 5 6b=1 42 53 6#include main() int a23=1,2,3,4,5,6; int b32,i,j; printf(array a:n); for(i=0;i=1;i+) for(j=0;j=2;j+) printf(%5d,aij); bji=aij;printf(n); printf(array b:n); for(i=0;i=2;i+) for(j=0;j=1;j+) printf(%5d,bij); printf(n); printf(array b:n); for(j=0;j=2;j+) for
16、(i=0;imax真假max=aijrow=icolum=j输出:max和row,colum#include main() int a34=1,2,3,4, 9,8,7,6, -10,10,-5,2; int i,j,row=0,colum=0,max; max=a00; for(i=0;i=2;i+) for(j=0;jmax) max=aij; row=i; colum=j; printf(max=%d,row=%d, colum=%dn,max,row,colum);共三十五页作业(zuy): 7.4 7.6共三十五页7.3 字符(z f)数组内容提要(ni rn t yo): 字符数组
17、的定义 字符数组的初始化 字符数组的引用 字符串的字符串结束标志 字符数组的输入与输出 字符串处理函数 字符数组的应用共三十五页一、字符(z f)数组的定义用来存放(cnfng)字符数据的数组是字符数组。例 int c10, ch34;在C语言中没有专门的字符串变量,而是将字符串存入字符数组来处理。用一个一维数组存放一个字符串,每个元素存放一个字符。P142字符数组是数组的一个特殊情况,它的定义方法与前面介绍的类似,引用方法可以与前面介绍的相同,但也有其独特的引用方法。二、字符数组的初始化逐个字符赋值 P141 7.3.2用字符串常量 P142 7.3.4无字符串变量,用字符数组存放字符串,字
18、符串结束标志:0 例 char ch5=H,e,l,l,o;ch0Hello逐个元素赋值ch1ch2ch3ch4 例 char ch5=B,o,y;ch0Boy00逐个字符赋值ch1ch2ch3ch4 例 char ch6=“Hello”; char ch6=“Hello”; char ch =“Hello”;用字符串常量ch0Helloch1ch2ch3ch40ch5注:以字符串方式赋值时,必须保证数组元素个数字符个数+1。(后面自动加一个0) char a5=“hello”; 例 char fruit7=“Apple”, “Orange”, “Grape”, “Pear”, “Peach”
19、;二维字符数组初始化fruit0fruit1fruit2fruit3fruit4Apple00Orange0Grape00Pear000Peach00例 char c10, ch34; 例 char ch5=“Boy”;ch0Boy00用字符串常量ch1ch2ch3ch4空字符 例 char diamond5=., .,*,.,*,.,*, *, ., ., . ,*,.,*, .,*,., .,*;二维字符数组初始化.*00.*.*0*.*.*.*0.*00diamond0diamond1diamond2diamond3diamond4例 “hello”共5个字符,在内存占6个字节 字符串长
20、度5 h e l l o 0104 101 108 108 111 0内存存放字符ASCII码值共三十五页一、字符(z f)数组的定义用来存放(cnfng)字符数据的数组是字符数组。例 char c10, ch34;二、字符数组的初始化逐个字符赋值用字符串常量三、字符数组的引用例: #include void main() char a10=I, , a,m , ,h,a,p,p,y,b10;int i; for (i=0;i10;i+) scanf(%c,&bi); for (i=0;i10;i+) printf(%5ct%5cn,ai,bi);四、字符串的输入与输出 逐个字符I/O:(数组
21、元素)%c 整个字符串I/O:(数组)%s例 用%c main() char str5; int i; for(i=0;i5;i+) scanf(“%c”, &stri); for(i=0;i5;i+) printf(“%c”, stri);例 用%s main() char str5; scanf(“%s”, str); printf(“%s”, str);用字符数组名,遇0结束例 #include void main( ) char a =Hello; printf(%s,a); main() char a=h,e,l,0,l,o,0; printf(%s,a);注:如果 字符数组中包含一
22、个以上的0,则遇第一个0时输出就结束。共三十五页例 字符串输入(shr)举例 P145#include main() char a15,b5,c5; scanf(%s%s%s,a,b,c); printf(a=%snb=%snc=%sn,a,b,c); scanf(%s,a); printf(a=%sn,a);scanf中%s输入时,遇空格或、tab键或回车(hu ch)结束输出:a=How b=are c=you? a=How运行情况:输入:How are you?输入:How are you?运行情况:输入: How areyou ?输入: Howareyou?输出:a=How b=are
23、you c=? a=Howareyou?共三十五页常用(chn yn)的字符串处理函数格式:puts(字符数组)功能:向显示器输出(shch)字符串(输出(shch)完,换行)说明:字符数组必须以0结束格式:gets(字符数组)功能:从键盘输入一以回车结束的字符串放入字符数组中, 并自动加0说明:输入串长度应小于字符数组维数例 #include main( ) char string80; printf(“Input a string:”); gets(string); puts(string); 输入: How are you?输出: How are you ? 包含在头文件 string.
24、h 中字符串输出函数puts字符串输入函数gets字符串连接函数strcat格式:strcat(字符数组1,字符数组2)功能:把字符数组2连到字符数组1后面返值:返回字符数组1的首地址说明:字符数组1必须足够大 连接前,两串均以0结束;连接后,串1的0取消, 新串最后加0字符串拷贝函数strcpy格式:strcpy(字符数组1,字符串2)功能:将字符串2,拷贝到字符数组1中去返值:返回字符数组1的首地址说明:字符数组1必须足够大 拷贝时0一同拷贝 不能使用赋值语句为一个字符数组赋值#include #include void main() char a25; char b = , c = C+
25、, t = “Visual; strcpy(a, t); strcat(a, b); strcat(a, c); printf(%sn, a);字符串比较函数strcmp格式:strcmp(字符串1,字符串2)功能:比较两个字符串比较规则:对两串从左向右逐个字符比较(ASCII码), 直到遇到不同字符或0为止返值:返回int型整数,a. 若字符串1 字符串2, 返回正整数 (1) c. 若字符串1= 字符串2, 返回零 (0)说明:字符串比较不能用“=”,必须用strcmp字符串长度函数strlen格式:strlen(字符数组)功能:计算字符串长度返值:返回字符串实际长度,不包括0在内例 对于
26、以下字符串,strlen(s)的值为:(1)char s10=A,0,B,C,0,D;(2)char s =“tv0willn”;(3)char s =“x69082n”; 答案:1 3 1共三十五页#include void main() char str140 , strt221; int j,k; printf(“please input 20 charactersn”); scanf(“%s”, ); printf(“please input 20 charactersn”); scanf(“%s”, ); for ( j=0; str1j!= ;j+); for ( k=0; str
27、t2k!= ;k+) =strt2k; ; =0; printf(“%s”,str1); 习题7.13:以下为不用strcat函数而将两个字符串中的字符拼接起来(q li)的程序,请补充。str1strt200str1jj+st1j 算法:输入字符串str1 和str2找到str1的结 束标志0将str2的字符 逐个放入str1 当前位置开始(kish) 的地方共三十五页例7.9 有三个字符串,找出其中(qzhng)最大者 H o w 0 H e l l o 0 H i g h 0 str0str1str2#include #include main() char string20,str320; int i; for(i=1;i0)strcpy(string,str1); else strcpy(string,str2); if(strcmp(str3,string)0)strcpy(string,str3); printf(n
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 四川省成都市高中化学 专题 硫及其氧化物的性质教学实录 新人教版必修1
- 湘少版三年级英语上册教学工作计划(及进度表)
- Unit 2 Different families(教学设计)-2024-2025学年人教版(2024)英语三年级上册
- 广东省韶关市八年级政治上册 第一单元 塑造自我 1.2 明辨是非(铸就良知的标尺)教学实录 粤教版
- 浙教版信息技术七上第10课《数据可视化》教学设计
- oec管理方法内容
- ns方程推导过程
- 全国江西科学技术版小学信息技术三年级下册第三单元第12课《网上购物》教学设计
- 山东省淄博市七年级生物下册 4.5.2 人粪尿的处理教学实录 新人教版
- 2025年地震数字遥测接收机项目建议书
- 食品的营养课件
- 化学品安全技术说明书 MSDS( 石脑油)
- 电位计算精品课件
- DB13T 5542-2022 水利水电工程施工组织设计编制指南
- 中子源介绍课件
- 二期6KV系统1
- 研究生面试复试英语+常问问题
- 安徽省教育科学研究项目课题申请书【模板】
- 参考文献的标注规范
- 幼年特发性关节炎.
- 武松打虎剧本
评论
0/150
提交评论