




已阅读5页,还剩44页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1,第4章数组,2,4.1一维数组4.2二维数组4.3字符数组与字符串,4.1一维数组,4.1.1一维数组的定义方式一维数组定义形式为:数据类型数组名常量表达式;说明:(1)数据类型符可以是int、char和float等基本类型或构造类型,它表明每个数组元素所具有的数据类型。(2)数组名的命名规则与变量名命名规则完全相同,遵循标识符的命名规则。(3)常量表达式的值是数组的长度,即数组中所包含的元素个数。,(4)C语言数组元素的编号是从0开始的。以下是合法的数组定义语句:ints40;floats2+3;以下是不合法的数组定义语句:inti;i=5;intdatai;,4,4.1.2一维数组的初始化初始化就是定义的同时对各数组元素占据的空间赋予明确的值,这就称为数组的初始化。其格式为:数据类型数组名常量表达式=数据1,数据2,数据n;说明:(1)花括号中的值是初始值,用逗号分隔开。例如:inta10=0,1,2,3,4,5,6,7,8,9;(2)数组若在定义时没有赋初值,通常数组各元素的值不确定。若指定存储在静态存储区的数组各元素自动赋值0,字符串数组的各元素自动赋值空字符。,5,(3)可以只给一部分元素赋初值。例如:inta10=0,1,2,3,4;(4)在对全部数组元素赋初值时,定义时可以不指定数组的长度。例如:inta=0,1,2,3,4;,6,4.1.3一维数组的引用与一维数组元素地址的引用1一维数组的引用一维数组的引用格式为:数组名下标表达式说明:(1)下标表达式可以是整型常量表达式或含变量的整型表达式。例如,定义了一个数组:intb,c,a5;(2)C编译系统对数组不做下标“越界”的检查。,7,如果定义inta10(C语言数组元素的下标从0开始使用),程序中出现引用a10,编译程序时并不报错,而把a9的下一个单元中的内容(并非数组中元素)作为a10引用.2一维数组的地址和一维数组元素地址的引用在C语言中,数组名代表数组的首地址,即第一个元素的内存地址。数组名这个地址是不能改变的,因此,数组名本质上是个地址常量。例如:inta10,b;a=0 x50;/*表达式错*/a=/*表达式错*/,8,例如:下面程序段从键盘输入10个数并存放到数组a中inta10;for(i=0;imax,则max被赋予与ai相同的值,,10,main()inta10;inti,max,position;for(i=0;iai+1时将二个元素互换,即将大数调到后面,小数调到前面,第一轮比较下来,将最大值放入a9中(大数下沉,小数上浮)。接着第二轮比较,次大数放入了a8,继续重复上述操作,直到将10个数按从小到大分别存放在a0,a1,a9中。,12,13,14,4.2二维数组,4.2.1二维数组的定义二维数组定义的一般形式为:数据类型数组名【常量表达式】【常量表达式】;例如:inta23,b510;(1)定义a为2行3列的整型数组,共有23=6个元素;b为5行10列的整型数组,共有510=50个元素。(2)这种定义方式便于把二维数组看成一种特殊的一维数组。,15,16,4.2.2二维数组的初始化二维数组初始化采用以下两种方式:按行对二维数组初始化。例如:inta23=1,2,3,4,5,6;,17,按照数组元素的存放顺序给数组初始化例如:inta23=1,2,3,4,5,6;这种方法把所有的值写入一对大括号中,依次赋给数组中的各个元素。说明:(1)初始化时可以对数组中的所有元素初始化,也可以只对部分元素进行初始化。例如:inta34=1,2,3;,18,(2)对全部元素初始化时,可以省略第一维的长度,但不能省略第二维的长度,例如:inta3=1,2,3,4,5,6;(3)按行初始化时,对全部元素或部分元素初始化均可以省略第一维的长度例如:inta32=1,3,2;也可以写为inta3=1,3,2;,19,4.2.3二维数组元素引用和地址引用1.二维数组元素引用二维数组引用格式为:数组名下标表达式1下标表达式2说明:(1)下标表达式可以是整型常量表达式,也可以是含变量的整型表达式。例如:inta23;可以采用以下的合法引用:a01,a2-12/3(2)与一维数组一样,要注意数组引用越界的问题。,20,2.二维数组的地址和二维数组元素地址引用二维数组名也是一个地址常量,代表二维数组的首地址。例如,inta34,a就是二维数组的首地址,从地址值上来说就等于第一个元素的地址inti,j,b32;printf(arraya:n);for(i=0;i2;i+)for(j=0;j3;j+)printf(%5d,aij);bji=aij;printf(n);,for(i=0;i3;i+)for(j=0;j2;j+)printf(%5d,bij);printf(n);,25,【例44】有一3行4列的矩阵,要求编写程序求出每一行元素的和以及所有元素的和。分析:这是一个累加问题,包括对每一行的累加以及对全部元素的累加,对每一行累加4次球出每一行的和,再对每一行的和进行累加求出所有数组元素的和。,26,#defineM4main()intcM=0;intaM3=9,7,5,3,1,2,4,6,8,3,5,7;inti,j,sum=0;for(i=0;iM;i+)for(j=0;j3;j+)ci+=aij;sum=sum+ci;,for(i=0;iM;i+)printf(c%d=%dn,i,ci);printf(“thesumis%dn”,sum);,27,4.3字符数组与字符串,4.3.1字符数组的定义例如:charc10;c0=a;由于字符型是以整型形式(ASCII码)存放,因此可以用整型数组存放字符串,例如:intc5;c0=a;c1=b;,28,4.3.2字符数组的初始化对字符数组的初始化,最容易理解的方式是采用“初始化列”,把各个字符依次赋给数组中的各元素。例如:charc10=c,p,r,o,g,r,a,m;其中c9未赋值,系统自动赋予0值。当对全体元素赋初值时,可以省略数组的长度,系统会根据初值个数确定数组长度。例如:charc=c,p,r,o,g,r,a,m;同样可以定义和初始化二维字符数组,例如:inta3=1,2,3,4,5,6;本例的二维字符数组由于在初始化时全部元素都赋以初值,因此一维下标的长度可以不写。,29,4.3.3引用字符数组字符数组的引用与前一节关于一维、二维数组的引用是完全相同的,可以引用字符数组中的一个元素,得到一个字符。,30,【例45】#include“stdio.h”main()inti,j;chara5=C,B,O,O,K,L,I,G,H,T;,for(i=0;i0;字符串1%sn,str1,str2);if(k0)printf(%s%sn,str1,str2);,43,6.测字符串长度函数strlen()格式:strlen(字符数组功能:测字符串的实际长度(不含字符串结束标志0),并作为函数返回值,44,【例410】输入五个国家的名称按照字母顺序排列输出。分析:五个国家名可由一个二维字符数组str510来处理。在此可以采用冒泡排序法,也可采用其他排序方法。本例采用选择排序方法。选择法排序(升序)的思路是:从所有的数中找出最小的一个,将其放在最前面;接着在余下的数中找到最小的一个,放在第二位;依次类推,数列逐渐有序,,45,#include“string.h”main()charst20;charcs520;inti,j,min;printf(inputcountrysname:”);for(i=0;i5;i+)gets(csi);printf(n);for(i=0;i5;i+)min=i;strcpy(st,csi);for(j=i+1;j5;j+),if(strcmp(csj,st)0)min=j;if(min!=i)strcpy(st,csi);strcpy(csi,csmin);strcpy(csmin,st);puts(csi;,46,【例411】有输入一行字符,统计其中多少个单词,单词之间用空格分开。分析:很明显问题的核心是确定单词的边界,可以采用从第一个字符开始逐个字符进行检查,判断此字符是否是单词的开头,如果是,就使变量num累加,最后得到的值就是单词总数。在此查找每一空格字符,来判断是否是一新单词,如果找到一个空格字符,且前面是非空格字符,则表示“新单词开始”,此时num累加1。如果找到一个空格字符,且前面也是空格字符情况,则表示未发现“新单词”,此时num维持不变。继续查找下一
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 福建闽侯第四中学2026届化学高一上期末学业水平测试模拟试题含解析
- 福建省莆田市第九中学2026届高二化学第一学期期末联考试题含答案
- 2025年蜡拖行业研究报告及未来行业发展趋势预测
- 建筑施工现场安全管理方案
- 2025年安全座椅行业研究报告及未来行业发展趋势预测
- 家政服务员五级模拟练习题含参考答案
- 高速公路施工环境监测方案
- 高速公路施工质量监控方案
- 母婴护理证书试题及答案
- 2025年修正贴行业研究报告及未来行业发展趋势预测
- 重大版英语六年级上册单词默写表
- 征信异议申诉合同(2篇)
- 《画电气原理图接线》课件
- 人美版美术七年级上册第一单元《第2课 品篆刻之美》课件
- 停水停电停氧的应急预案
- 带押过户合同模板
- 护理肝癌的疑难病例讨论
- 韬睿惠悦-知识管理KM-职涯地图方法论(P65)-2015
- 顺丰快递管理规章制度流程
- 企业治安防范教育培训
- 五年级冀教版数学下学期应用题专项水平练习题
评论
0/150
提交评论