资源预览内容
第1页 / 共53页
第2页 / 共53页
第3页 / 共53页
第4页 / 共53页
第5页 / 共53页
第6页 / 共53页
第7页 / 共53页
第8页 / 共53页
第9页 / 共53页
第10页 / 共53页
亲,该文档总共53页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第六章第六章戏待嘛屑场贱烹洼寥久尸使里括瞪绎数崭悉湛尸阐拭萨讨茶订芜起欺梨颠C语言程序ppt课件ch6 数组C语言程序ppt课件ch6 数组1本章要点本章要点1.1.建立数组的概念;建立数组的概念;2.2.掌握一维数组和二维数组的定义、掌握一维数组和二维数组的定义、引用、引用、存储结构和初始化方法;存储结构和初始化方法;3.3.掌握一维字符数组的输入输出;掌握一维字符数组的输入输出;4.4.掌握字符串处理函数的使用;掌握字符串处理函数的使用;5.5.掌握用数组进行编程的技术。掌握用数组进行编程的技术。低辉椅遗陇嗽便趣赶局精收富锁驴曾着斜厂扯踢画慷锐挂丽局唬绣街续援C语言程序ppt课件ch6 数组C语言程序ppt课件ch6 数组26.1 6.1 数组的概念数组的概念如何处理一个班学生的学习成绩?如何处理一个班学生的学习成绩?一行文字怎样存储?一行文字怎样存储?一个矩阵怎样存储一个矩阵怎样存储 ?. 问题的提出:问题的提出: 一组具有一组具有相同数据类型相同数据类型的数据的的数据的 有序集合有序集合 这些数据的特点这些数据的特点:1.1.具有相同的数据类型具有相同的数据类型 2. 2.使用过程中需要保留原始数据使用过程中需要保留原始数据 C C语言为这些数据提供了一种语言为这些数据提供了一种构造数据类型:构造数据类型:数组。数组。撮戚由织喇毅幸洱薯所浴魄措韭托篱彤佰庶猪聘枚套富坡轧裹釜腐农糙丽C语言程序ppt课件ch6 数组C语言程序ppt课件ch6 数组3 数组数组是一组有序的、类型相同的数据的集合,是一组有序的、类型相同的数据的集合,这些数据被称为这些数据被称为数组的元素数组的元素。泰粥脑解洋窟木桃签夏壬砰憎啃馏晰沿嫩扔微贝德钦酋漫狞肖技拼呜殿裹C语言程序ppt课件ch6 数组C语言程序ppt课件ch6 数组46.2 6.2 一维数组一维数组6.2.1 6.2.1 一维数组的定义和引用一维数组的定义和引用1. 定义一维数组的一般方式:定义一维数组的一般方式: 类型说明符类型说明符 数组名数组名 常量表达式常量表达式 ; ;说明:说明:l类型说明符:数组的类型。类型说明符:数组的类型。l数组名同变量名命名规则相同。数组名同变量名命名规则相同。l常量表达式指明数组中元素个数,必须大于零。常量表达式指明数组中元素个数,必须大于零。可以是数值常量、符号常量和字符常量。可以是数值常量、符号常量和字符常量。例如:例如: float mark100;float mark100; char str200; char str200; int a10; int a10;瞪痒楔豫缄九槐睹枷彼娟惦坏睬喜掖职拱锑衬程胜琐澳迸恨想攘护韶靶涵C语言程序ppt课件ch6 数组C语言程序ppt课件ch6 数组5其中:其中:markmark、strstr、a a 是数组名。是数组名。 方括号内是数组的方括号内是数组的长度长度。 下标的个数称为数组的下标的个数称为数组的维数维数,markmark、strstr是是一维数组、一维数组、a a是二维数组。是二维数组。 数组的成员称为数组数组的成员称为数组元素元素。 数组元素的类型称为该数组的数组元素的类型称为该数组的基类型基类型。数。数组组markmark的基类型是的基类型是floatfloat,数组,数组strstr的基类型是的基类型是charchar。例如:存储学生成绩用实型数组例如:存储学生成绩用实型数组 mark100 mark100, 存储一行文字用字符数组存储一行文字用字符数组 str200 str200, 存储一个存储一个4*64*6的矩阵用二维整型数组的矩阵用二维整型数组 a46 a46。援连症奢肋觉氮茨糕颗源涟企亦毙局费丛敏愧蛙公楞覆展烤刁搞坦僻迭酋C语言程序ppt课件ch6 数组C语言程序ppt课件ch6 数组6说明说明: : (1) (1)数组名后是用方括号数组名后是用方括号而不是圆括号而不是圆括号。 (2)(2)数组定义中的常量表达式表示数组元素个数。数组定义中的常量表达式表示数组元素个数。必须必须是大于零的是大于零的常量常量。 如:如: int a0,d(6); /*错误错误*/ int b-8; /*错误错误*/ int c2+3; /*正确正确*/(3)(3) 语言中不允许对数组的大小作语言中不允许对数组的大小作动态动态定义。定义。 数组的说明语句必须在数组的说明语句必须在可执行语句之前可执行语句之前。#define N 5int aN;int n;scanf(“%d” , &n ); int an;int n=10,an;检腾滓泳好驶志宛枢碗触辆磺卸搅诣绷雄字改晶辫根颓匿捞鬼瞎厩甲瓦左C语言程序ppt课件ch6 数组C语言程序ppt课件ch6 数组72. 一维数组的引用一维数组的引用 数组元素的引用形式:数组元素的引用形式: 数组名数组名 下标下标 如如a3n下标可以是整型常量、整型变量或整型表达式。下标可以是整型常量、整型变量或整型表达式。 如:如: a3= a0 + ai+1; n下标的值是数组元素的下标的值是数组元素的序号序号,且从,且从0开始,直到开始,直到n-1. int a10, 说明数组说明数组a一共有一共有10个元素,起始值是个元素,起始值是0。数组数组a的的10个元素分别是:个元素分别是:a0、a1、a9。n数组的输入输出应采用循环的方法数组的输入输出应采用循环的方法. int a10;int a10; for ( i=0; i10; i+ ) for ( i=0; i10; i+ ) scanf( scanf(”%d%d”, &ai);, &ai); 下标指出在数组中第几个元素敏冠默姚妹坤班沉嗜腾掌诺圃贺慧赦超豪爽优衣醉跨横见钥漳砖荆阐夜务C语言程序ppt课件ch6 数组C语言程序ppt课件ch6 数组8数组中的每个元素数组中的每个元素在功能上在功能上等价于一个一般的变量。等价于一个一般的变量。例如:例如:输入输入100100个学生成绩,并求出总成绩。个学生成绩,并求出总成绩。l 引用数组元素的注意事项引用数组元素的注意事项: :float m100,sum=0;float m100,sum=0;for ( i=0; i100; i+ )for ( i=0; i100; i+ ) scanf( scanf(”%f%f”, &, &m mii);); sum +=sum += m mii; ; 数组方式数组方式float x, sum=0;float x, sum=0;for (i=0; i100; i+)for (i=0; i100; i+) scanf( scanf(”%f%f”, &x);, &x); sum += x; sum += x; 简单变量简单变量 x x sumsum85 m0m1m2m99 sumsum8285637890638585 851488279501482263167950优点:优点:数据重用数据重用 数据有序数据有序弯煮犁视目妥类秧蛔嚎叹毋当总缠刨黔颠夏恢寄羡善肃贩嘶笆度指投锡仑C语言程序ppt课件ch6 数组C语言程序ppt课件ch6 数组9mark0mark1mark2mark3.mark9986.592.077.552.0.94.02000H2004H2008H200CH。218CH引用数组元素时,根据首引用数组元素时,根据首地址和下标,自动计算出地址和下标,自动计算出该元素的实际地址,取出该元素的实际地址,取出该地址的内容进行操作。该地址的内容进行操作。如引用如引用 mark2:(1)计算计算 2000+2* *4=2008(2)取出取出2008的内容的内容l下标与地址的关系下标与地址的关系 为下标运算符为下标运算符, , 数组数组名、数组元素是两种不同性名、数组元素是两种不同性质的数据。质的数据。 数组名是数组的首地址,数组名是数组的首地址,是一个地址常量。是一个地址常量。 数组元素则是数值。数组元素则是数值。挟缀疟蚌烩翱沫插慕妙狗犬奏擞丧锌源邢琅耽搁准令语盯吞妮秸篷碱梦悍C语言程序ppt课件ch6 数组C语言程序ppt课件ch6 数组106.2.26.2.2 一维数组的初始化一维数组的初始化 在数组定义时为数组元素赋初值称为数组初始化.方法:将初值依次写在花括号方法:将初值依次写在花括号 内。内。如:如: int a5= 2 , 4 , 6 , 8 , 10 ;存储形式:存储形式:存储单元存储单元俞谰甲将短韧辜摊旭沮嚼泻夜衷尘沛溺犁雷呢粟讥斌几诞佰崔哉爷娄申梆C语言程序ppt课件ch6 数组C语言程序ppt课件ch6 数组11 (1)给数组中部分元素赋初值,其他元素按零值处理。给数组中部分元素赋初值,其他元素按零值处理。 如:如: int a9=1,2; 则则 a0= 1, a1= 2, a2a8值全为值全为0。(2) 对数组元素全部赋值可以不指定长度。 int a=0,1,2,3,5 ;int a=0,1,2,3,5 ;等价于:等价于:int a5=0,1,2,3,5 ;int a5=0,1,2,3,5 ; (4)初值的个数不能超过数组总元素的个数)初值的个数不能超过数组总元素的个数。 int a3= 1, 2,3, 4 ; 语法错语法错!说明:说明:(3)对数组中间元素赋值必须指明位置)对数组中间元素赋值必须指明位置。 int a5= , , 2,3, 4 ; /*对第对第3-5个元素赋初值个元素赋初值*/ 泽中愈畏介珍辫裹浙砾荐瑞羊痈刺嘱翘蛋皂境块涣统奴晕戴鲸泞含盛残打C语言程序ppt课件ch6 数组C语言程序ppt课件ch6 数组12数组元素在程序中赋值利用输入函数利用输入函数main() char as26; int i ; for(i=0; i26; i+) scanf(%c,&asi); .利用赋值语句利用赋值语句main() char as26,ch; for(ch=A;ch=Z;ch+) asch-A=ch; .孝凑扫箔酱圃群窜介杰茎叛斋躁德掉嗜陪雏蔑咙前凝魁挨思段蔫泌裳逗作C语言程序ppt课件ch6 数组C语言程序ppt课件ch6 数组136.2.3 一维数组应用举例 例例1 1 从键盘上输入从键盘上输入1010个实型数存入数组,然个实型数存入数组,然 后按输入顺序的逆序输出这后按输入顺序的逆序输出这1010个数。个数。main() float a10; int i; for(i=0 ; i=0 ; i-) printf(“%10.2f”,ai);赤映颓泼幌改履柞眺汐孙贪躁柑禁石鬃绸巢嘿媒总画极揉戏皿环斟机珐绷C语言程序ppt课件ch6 数组C语言程序ppt课件ch6 数组14 例例2 2 从键盘上输入从键盘上输入1010个数,求出其中最大值并输出。个数,求出其中最大值并输出。main() int a10,i,max; for(i=0 ; i10 ; i+) scanf(“%d”,&ai); max=a0; for(i=0 ; imax) max=ai; printf(“max=%dn”,max);算法分析算法分析:采用打擂台的方法采用打擂台的方法,先把先把10个数存在数组中个数存在数组中,任意任意指定某数为擂主指定某数为擂主,然后擂主依次与其他数比较然后擂主依次与其他数比较,若某数大于若某数大于擂主擂主,则该数为擂主。循环结束,则该数为擂主。循环结束,max中一定是最大的数。中一定是最大的数。指定第指定第1 1个元个元素为擂素为擂主主 靴匡画矣时赡薛娱毛堰渡诗斤月咏琅恨讯屯形泄凭棍眶蜒篓姑菲炕乃剐擅C语言程序ppt课件ch6 数组C语言程序ppt课件ch6 数组15 例例33从键盘上输入从键盘上输入6个数存入数组中,再按输入顺序的逆序个数存入数组中,再按输入顺序的逆序存放在该数组中并输出。存放在该数组中并输出。main() int a6,i,j,k,t; for(i=0 ; i6 ; i+) scanf(“%d”,&ai); k=6/2-1; for(i=0 ; i=k ; i+) j=6-i-1; t=aj; aj=ai; ai=t; for(i=0 ; i6 ; i+) printf(“%3d”,ai);算法分析算法分析:采用循环设计。逆序操作可总结为:采用循环设计。逆序操作可总结为: ai与与aj进行交换,其中进行交换,其中i=0,1,n/2-1, j=n-i-1程序运行演示程序运行演示3 4 1 5 6 2 a0 a1 a2 a3 a4a5畏闯皋薄宦姻依仪痢哪牙钓檬阉置航瘸毗写什锰萧暮纽廓岸赘攀巢剃凶谗C语言程序ppt课件ch6 数组C语言程序ppt课件ch6 数组16例例4 用用冒泡法冒泡法对数据进行由小到大排序。对数据进行由小到大排序。方法:将两个相邻数比较,小的调到前头。采用两重循环。方法:将两个相邻数比较,小的调到前头。采用两重循环。9 8 8 8 8 8 5 5 5 5 4 4 4 2 2 0 8 9 5 5 5 5 8 4 4 4 5 2 2 4 0 25 5 9 4 4 4 4 8 2 2 2 5 0 0 4 4 4 4 4 9 2 2 2 2 8 0 0 0 5 5 5 52 2 2 2 9 0 0 0 0 8 8 8 8 8 8 80 0 0 0 0 9 9 9 9 9 9 9 9 9 9 9由以上可推知:由以上可推知:6 个数要比较个数要比较5趟趟 第第一一趟中要进行两两比较趟中要进行两两比较5次次 第第二二趟中比较趟中比较 4次次 若若 有有n个数,则要进行个数,则要进行n-1趟比较趟比较 第第 i趟比较中要进行趟比较中要进行n-i次两两比较。次两两比较。凑贿向欠搅幽殴来躁瘪荆悸诗盂敏觉荔嚣最涸年虞警语涎鹰懦屁锅搬贮褪C语言程序ppt课件ch6 数组C语言程序ppt课件ch6 数组17#define N 6 main( ) int aN, i, j, t ; for( i=0; iN; i+) scanf(“%d”, &ai); for( i=0; iN-1; i+ ) for( j=0; jaj) t=aj-1; aj-1= aj;aj= t ; printf(“The sorted numbers: n”); for( i=0; iN; i+) printf(“%d ”, ai); n n个数比较个数比较n-1n-1趟趟第第i i趟比较趟比较n-in-i次次程序运行演示程序运行演示座诌猛工南咀掂淄甫腰熬镜尖衰易怯彼誓贩揪火纽妖罩障脉甸拎设娟伪而C语言程序ppt课件ch6 数组C语言程序ppt课件ch6 数组18冒泡排序的缺陷:在比较交换的过程中大的数不能冒泡排序的缺陷:在比较交换的过程中大的数不能一次到位,效率低。一次到位,效率低。 例例6 6 选择法排序。选择法排序。 选择排序法的基本思想:选择排序法的基本思想: 以以冒冒泡泡排排序序法法为为基基础础,在在两两两两比比较较后后并并不不马马上上进进行行交交换换,而而是是在在找找到到最最小小的的数数之之后后,记记住住最最小小数数的的位位置置(数数组组中中的的下下标标),待待一一轮轮比比较较完完毕毕后后,再再将将最最小小的的数一次交换到位。数一次交换到位。灶裴百键桃吮辖靠维疵脆栏褒蜕又奴速耽粮屏废焚掣永浚陛搽蟹兰剩音钞C语言程序ppt课件ch6 数组C语言程序ppt课件ch6 数组193 6 1 9 41 6 3 9 41 3 6 9 41 3 4 9 61 3 4 6 9 选择法排序选择法排序. .问题问题 将将 3 3、6 6、1 1、9 9、4 4 从小到大排列。从小到大排列。自帽堵有畦粉马堕城柴鹏濒硝钳且眉喀妊武盯笛簿炔乌吊账讯仟刨抗捂豫C语言程序ppt课件ch6 数组C语言程序ppt课件ch6 数组20选择排序算法选择排序算法 若有若有N N个数,则需要进行个数,则需要进行N-1N-1轮排序处理。轮排序处理。 第第1 1轮轮排序从排序从1 1N N个数中找出最小的数,然后将它个数中找出最小的数,然后将它与第与第1 1个数交换。第个数交换。第1 1个数则是最小的数。个数则是最小的数。第第2 2轮轮排序从排序从2 2N N个数中找出最小的数,然后将它个数中找出最小的数,然后将它与第与第2 2个数交换。第个数交换。第2 2个数则是次小的数。个数则是次小的数。 经过经过 N-1 N-1 轮处理,完成全部轮处理,完成全部N N个数排序。个数排序。 编程时使用二重循环。外面的大循环控制进行编程时使用二重循环。外面的大循环控制进行N-1N-1轮排序,轮排序,内内循环找出第循环找出第 i i 轮的最小值。轮的最小值。货溉皋懊工蹋绣毁叠搬牵掳滦职仅浩牵便至劳又鸽淖豁缄甸谭鹿力帚损崩C语言程序ppt课件ch6 数组C语言程序ppt课件ch6 数组21#define N 5#define N 5main( )main( ) int aN ,i,j,k,t; int aN ,i,j,k,t; printf(Input numbers:n); printf(Input numbers:n); for( i=0; iN; i+) for( i=0; iN; i+) scanf(%d, &ai); scanf(%d, &ai); for( i=0;iN-1;i+ ) for( i=0;iN-1;i+ ) k=i; k=i; for(j=i+1;jN;j+)for(j=i+1;jaj) k=j; if(akaj) k=j; if(k!=i) if(k!=i) t=ai; ai=ak;ak=t; t=ai; ai=ak;ak=t; printf(The sorted numbers: n); printf(The sorted numbers: n); for( i=0; iN; i+) for( i=0; iN; i+) printf(%d , ai); printf(%d , ai); 程序运行演示程序运行演示峡离俗申窃希羞鼠腐颜挝寺崎祸库膝朋安断存堵钒潦凌扩醚姿萍搔棍间眶C语言程序ppt课件ch6 数组C语言程序ppt课件ch6 数组22 程序运行演示程序运行演示main( )int n, m , t, a10=3,4,7,2,5,0,12,54,23,53;for (n=0;n=9;n+) for (m=n+1;mam) min=an; an=am;am=min;for (n=0;n=9;n+) printf(%3d,an); 唯违囚种赔愿譬朗傅妓峭哼袖一疫香辛陪绝养嫩汕趾骏宁伊状眉歇柜搬恬C语言程序ppt课件ch6 数组C语言程序ppt课件ch6 数组23 定义二维数组的一般方式:定义二维数组的一般方式:类型说明符类型说明符 数组名数组名 常量表达式常量表达式11常量表达式常量表达式22; 例如例如 int a33 存储形式:存储形式: 二维数组在内存中二维数组在内存中按行的顺序存放按行的顺序存放,即先存放,即先存放第一行的元素,再存放第二行的元素。第一行的元素,再存放第二行的元素。 例如例如 float a34; float a34; 6.3 6.3 二维数组二维数组6.3.1 二维数组的定义二维数组的定义第一个下标可第一个下标可能取值的个数能取值的个数第二个下标可第二个下标可能取值的个数能取值的个数顽螟侍湾鲍廊家垣窖募富宝戒譬捍辽旨棱盅殆捐敏箔砖惮顷釜颂松腮攒蔑C语言程序ppt课件ch6 数组C语言程序ppt课件ch6 数组24说明:说明:二维数组除了维数比一维数组多一维外,二维数组除了维数比一维数组多一维外, 其它性质与一维数组全部类似。其它性质与一维数组全部类似。 下面写法是否正确?下面写法是否正确? int a03; 用于定义数组长度的常量表达式的值必须用于定义数组长度的常量表达式的值必须是大于是大于0的正整数。的正整数。 int i=3 , j=4 ; int aij ; 定义数组元素的个数必须使用常量表达式,定义数组元素的个数必须使用常量表达式,而不能使用变量。而不能使用变量。 庶垄吹额乐账携妆吞窄绒格鳃耙员卞惠俯数左骤枯抖视寥干肆涪乌勘杠苑C语言程序ppt课件ch6 数组C语言程序ppt课件ch6 数组256.3.2 二维数组的引用二维数组的引用 二维数组的引用二维数组的引用与引用一维数组元素一样,也用与引用一维数组元素一样,也用下标法引用二维数组元素。下标法引用二维数组元素。 二维数组元素表示形式:二维数组元素表示形式:数组名数组名下标下标1下标下标2 下标下标1和下标和下标2是整型常量、整型变量或整型表达是整型常量、整型变量或整型表达式。其编号是从式。其编号是从0开始的开始的。 例如:若有例如:若有 int a2*53*4, i=15; 则使用则使用 a3*30, a1i-5都是合法的。都是合法的。说明说明:数组名:数组名a代表的是代表的是数组数组a在内存中的首地址在内存中的首地址, 因此,可以用数组名因此,可以用数组名a来代表数组元来代表数组元 素素a00的的地址。地址。数组名是常量,不可对它赋值。数组名是常量,不可对它赋值。下标不要越界下标不要越界下标不要越界下标不要越界诺动蒸溺芒恶褐伺惶诚仲冰脸溅琼炭旬代残钦犹锗访统浴隅粕圾范顽扑多C语言程序ppt课件ch6 数组C语言程序ppt课件ch6 数组26一、二维数组的初始化一、二维数组的初始化1. 分行给二维数组赋初值。分行给二维数组赋初值。如:int a23= 2,3,1,1,2,3;2. 将所有数据写在一个将所有数据写在一个 内,按顺序赋值。内,按顺序赋值。 即按数组元素在内存中排列的顺序赋初值。即按数组元素在内存中排列的顺序赋初值。 int a23=2,3,1,1,2,3;6.3.3 二维数组的初始化和输入输出二维数组的初始化和输入输出硷碍络疥乙窍事桅镰抵喳稳也晤务兹己苛沮桶霜樱殃猴逻蝗钾瘟沧汉淄阿C语言程序ppt课件ch6 数组C语言程序ppt课件ch6 数组273. 对部分元素赋值对部分元素赋值如: int a33=1,0,1,0,0,1;相当矩阵:4. 如果对数组全部元素赋初值,第一个下标可省略,但第二如果对数组全部元素赋初值,第一个下标可省略,但第二个下标不可省略。个下标不可省略。 如: a34=0,1,3,1,2,1,0,2,1,1,2,0; 可写成 a 4=0,1,3,1,2,1,0,2,1,1,2,0; int a33=1, ,0,0,1;相当矩阵:int a23=5,6,7,8;int a23=5,6,7,8;例得到的数组为得到的数组为: 5 6 0 7 8 0得到的数组为得到的数组为: 5 6 7 8 0 0暖放着田奎宇叉迁曾惊浦点膜魂酵繁丑尼求姚痔崩跳嚎妆渐钓蔓拔御调明C语言程序ppt课件ch6 数组C语言程序ppt课件ch6 数组281. 二维数组的输入二维数组的输入 int a23,i,j; for( i=0; i2; i+) for( j=0; j3; j+) scanf(“%d”, &aij);2. 二维数组的输出二维数组的输出 int a23,i,j; for( i=0; i2; i+) for( j=0; j3; j+) printf(“%5d”, aij);二、二维数组的输入、输出二、二维数组的输入、输出箱统滚盲辰氮澎白晰席淡辈涝诗蚌榨知琵辅畅司逐温赖录繁道限嗽吴鼓卑C语言程序ppt课件ch6 数组C语言程序ppt课件ch6 数组296.3.4 二维数组程序举例二维数组程序举例例例1 将一个矩阵将一个矩阵a 23转置存到另一个矩阵转置存到另一个矩阵b 32中。中。 分析:用数组分析:用数组a、b分别代表矩阵分别代表矩阵a、b; a 矩阵的矩阵的行数行数必须要等于必须要等于b 矩阵的矩阵的列数列数。 执行:执行:bji=aij; 即可完成转换。即可完成转换。 涉及到两个下标的,一般用涉及到两个下标的,一般用两重两重循环。循环。 求矩阵转置问题也可以在矩阵本身进行,但应求矩阵转置问题也可以在矩阵本身进行,但应是方阵。是方阵。京凳海距毅马恫捆邓摄顽攒剪歼寂铱喉锣裹质孕忌狱孟点脐屠鳞废得啼疚C语言程序ppt课件ch6 数组C语言程序ppt课件ch6 数组30main( ) int a23=1,2,3,4,5,6; int b32, i , j; printf(“array a: n”); for( i=0; i2; i+) for( j=0; j3; j+) printf(“%5d”, aij); bji=aij; printf(“n”); printf(“array b: n”); for(i=0; i3; i+) for( j=0; j2; j+) printf(“%5d”,bij); printf(“n”); 运行结果如下:运行结果如下: array a: 1 2 3 4 5 6 array b: 1 4 2 5 3 6 噎怕替寻贸系廖卫快咆效蛆攫面炎檀淀擎镰吓悠辉诺枫挽主烽赎瀑醉邯槛C语言程序ppt课件ch6 数组C语言程序ppt课件ch6 数组31例例2求方阵求方阵A4*4的转置阵,并将该转置阵输出的转置阵,并将该转置阵输出(限定在一个数组进行限定在一个数组进行)main( ) int a44,i,j,t; printf(array a: n); for( i=0; i4; i+) for( j=0; j4; j+) scanf(%d, &aij); /*输输入入*/ for(i=0;i4-1;i+) /*转置转置*/ for(j=i+1;j4;j+) t=aij;aij=aji;aji=t; printf(“rotated a: n); for(i=0; i4; i+) for( j=0; j4; j+) printf(%4d, aij); /* 输出输出 */ printf(n); 程序运行情况:程序运行情况:array a:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 rotated a:15 9 13 26 10 1437 11 154 8 12 16转置部分还可改写如下:转置部分还可改写如下:for(i=1;i4;i+) for(j=0;ji;j+) t=aij;aij=aji;aji=t;二维数组输入二维数组输入伦槽寓庸碑倘悉刊赎驻褥泵峨凤恩店趁阐嫡袖鱼婴哺孜割诽郴歼陪陋学传C语言程序ppt课件ch6 数组C语言程序ppt课件ch6 数组32程序:main( )int i, j, row=0, colum=0, max; int a34=1,2,3,4,9,7,4,6,-1,2,0,8; 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);运行结果为: max=9,row=1, colum=0例例3 求求34矩阵中最大元素的值及其所在行和列号。矩阵中最大元素的值及其所在行和列号。傍饺稚矮坠吊轧荐朽煽踢穗睬朗斥语顷艾灾砰楔庙登驮恐籍陵苛褂菊爸被C语言程序ppt课件ch6 数组C语言程序ppt课件ch6 数组33将程序修改完整将程序修改完整main( ) int a,i,j,sum; for( i=0; i ; i+) for( j=0; j ; j+) scanf(%d, &aij); printf(%4d, ); 例例4编写求整型矩阵编写求整型矩阵A3*3的副对角线元素之积的程序。的副对角线元素之积的程序。烤辑妆椎叼妮夫兽黍毖挎宽苦用庚胃背令蹿拼屁柏绘赌鱼赢难虞韵徒价隘C语言程序ppt课件ch6 数组C语言程序ppt课件ch6 数组346.4 6.4 字符数组字符数组6.4.1 6.4.1 一维字符数组的定义一维字符数组的定义 用来存放字符数据的数组是用来存放字符数据的数组是字符数组字符数组。 C语言用字语言用字符数组存放字符串,字符数组中的符数组存放字符串,字符数组中的各元素依次各元素依次存放字符存放字符串的串的各字符各字符。 格式:格式:char char 数组名数组名 常量表达式常量表达式 强调:字符串强调:字符串实际实际占有单元的数量等于占有单元的数量等于字符串长度字符串长度+1。 定义时应注意考虑定义时应注意考虑元素总个数元素总个数应比应比实际长度多实际长度多1。例如:例如:char c6, b10;C 数组具有数组具有6个元素,可以存放长度等于或小于个元素,可以存放长度等于或小于5的字符串。的字符串。掣驱令匹火站碗呸男孟弛鸵缄在雍赠柴模挡咋娥亦谱袁吱响狄餐魔宿赠叮C语言程序ppt课件ch6 数组C语言程序ppt课件ch6 数组351.1.用单个字符对字符数组初始化用单个字符对字符数组初始化例如:例如:char char ch6=ch6=C C, ,H H, ,I I, ,N N, ,A A,00;把把5 5个字符分别赋给个字符分别赋给ch0ch0到到c4.c4.在内存中存放情况:在内存中存放情况:6.4.2 6.4.2 一维字符数组的初始化一维字符数组的初始化说明:说明:(1 1)初值的个数不能超过数组元素的个数,否则语法错)初值的个数不能超过数组元素的个数,否则语法错 ( (2 2) ) 初值的个数小于数组长度,系统自动添入结束符初值的个数小于数组长度,系统自动添入结束符00 ( (3 3) ) 初值的个数与数组元素相等,定义时可省略长度初值的个数与数组元素相等,定义时可省略长度 (4) (4) 因字符串常量自动加因字符串常量自动加0,0,因此常人为地在字符数组后加因此常人为地在字符数组后加一个一个00。CHINA0c0 c1 c2 c3 c4 c5串长=5铡后幌目粕椒违皱谊呻陋杏悉魔募档孙驼讥烟仆广奉掏代袭济起镐彻兹泻C语言程序ppt课件ch6 数组C语言程序ppt课件ch6 数组362. 2. 用字符串对字符数组初始化:用字符串对字符数组初始化:char ch6=CHINA;char ch6=CHINA;char ch6=CHINA;char ch6=CHINA; /* /* 省略省略 */ */char ch =CHINA;char ch =CHINA; /* /* 省略长度值省略长度值 */ */ char d12= char d12=“How are youHow are you”与与char d=char d=H H, ,o o. .w w, , , ,a a, ,r r, ,e e, , , ,y y, ,o o, ,u u, ,00;等价等价猾气计李直哈药近激衷宁越霍沮种颅庶困宏躲汽番嫡转精怔潞谓犯扇彪遗C语言程序ppt课件ch6 数组C语言程序ppt课件ch6 数组37例如:例如: char a6= char a6=g g, ,r r, ,e e, ,e e, ,n n; char b5= char b5=“123123”; ; a2= a2=00; ; a5=b1; a5=b1; printf( printf(“%cn%cn”,a1);,a1); printf( printf(“%s%s”,a);,a); 6.4.3 6.4.3 一维字符数组的引用一维字符数组的引用酞襟嘶逃庸仔须朵痈柜裳誓釜摇靛疏挫隶斧俩榔泊环们橱碾啤伪咙首棱蜡C语言程序ppt课件ch6 数组C语言程序ppt课件ch6 数组38 main() main() int i; int i; char a3;char a3; for (i=0;i3;i+) for (i=0;i3;i+) scanf scanf( ( %c%c ,&ai);,&ai); for (i=0;i3;i+) for (i=0;i3;i+) printf printf( ( %c%c ,ai);,ai); printf( printf( nn );); 输入数据顺序:输入数据顺序: dos输出数据顺序:输出数据顺序: dos 6.4.4 6.4.4 字符数组的字符数组的输入与输出输入与输出1.1.单字符输入输出单字符输入输出 ( (用格式符用格式符c c或字符输入函数或字符输入函数) ) char a3;char a3; for (i=0;i3;i+) for (i=0;i3;i+) ai=getchar();ai=getchar(); for (i=0;i3;i+) for (i=0;i3;i+) putchar(ai); putchar(ai); printf( printf( nn ); ); 欠痢粳年挟露滤袋忍源阁釜备确琉算镑趣邢丙梨智埔妄毅著喜珍笨脂墓近C语言程序ppt课件ch6 数组C语言程序ppt课件ch6 数组39char a7;char a7;scanfscanf( ( %s%s , ,a); a); 2. 2. 字符串整体或部分输入输出字符串整体或部分输入输出 ( (用格式符用格式符s)s) - -输入输出项必须是以字符串的地址形式出现;输入输出项必须是以字符串的地址形式出现; 也可以是字符串常量:也可以是字符串常量: printf ( %sn , abcd ); - -只能输入不包括只能输入不包括空格空格、tt和和nn的字符串;的字符串; - -若要输入空格,用若要输入空格,用getsgets函数;函数; - -数组名前不加数组名前不加 & &符号。符号。如:如:char a10; scanf( %s ,a); printf( %sn ,a);输入:输入:How are you输出:输出: How空格、跳格和回空格、跳格和回车是输入数据的车是输入数据的结束标志结束标志.络赣薛东龙咸噪蒲内挎隅枕拄拔坯怜俐朱汲奠篷念课蟹紊撒淤炽星弃侧切C语言程序ppt课件ch6 数组C语言程序ppt课件ch6 数组40n 用用s s输出字符串时,从输出项提供的地址开始输输出字符串时,从输出项提供的地址开始输出,直到遇字符串结束符出,直到遇字符串结束符 00 为止。为止。n 若字符串长度与数组定义长度相等,则字符串结束若字符串长度与数组定义长度相等,则字符串结束标志无法存储,输出字符串后继续输出后续存储单元标志无法存储,输出字符串后继续输出后续存储单元内容,直到遇到结束符内容,直到遇到结束符0为止。为止。若若: :char b3= xyz , ,c= H ,a10= abcd072 ; printf( b=%sn ,b); printf( a=%sn ,a); printf( %cn ,a2);输出:输出: b=xyzHabcd a=abcd c妮馋宴缚轮罚躬牢茶酞加红痈尊沙万骸界丽竣富辆困洛拽咏滞符扛百慰斯C语言程序ppt课件ch6 数组C语言程序ppt课件ch6 数组41C函数库中提供一些用来处理字符串的函数:函数库中提供一些用来处理字符串的函数: puts puts 输出字符串输出字符串 gets gets 输入字符串输入字符串 ( (使用时注意前边加使用时注意前边加: #include ): #include ) strcat strcat 字符串连接字符串连接strcpy strcpy 字符串复制字符串复制strcmp strcmp 字符串比较字符串比较strlen strlen 字符串长度字符串长度strlwr strlwr 将字符串中的大写字符转换为小写字符将字符串中的大写字符转换为小写字符strupr strupr 将字符串中的小写字符转换为大写字符将字符串中的小写字符转换为大写字符( (使用时注意前边加使用时注意前边加: #include ): #include )6.4.5 字符串处理函数字符串处理函数芽畏梧舶锯婴躇里瞎哉际噪忻颈屿呼潜猫嫉志颁展钱疑冶行拉张利榔剪褐C语言程序ppt课件ch6 数组C语言程序ppt课件ch6 数组42(1) puts(puts(字符数组字符数组) ) 将一个字符串输出到终端并换行。将一个字符串输出到终端并换行。 (2) gets(字符数组字符数组) 输入一个字符串到字符数组,输入一个字符串到字符数组,该字符数组的起始地址为该函数值。该字符数组的起始地址为该函数值。 可以输入带空格的字符串可以输入带空格的字符串,用用scanf的的%s格式不行格式不行.main() char str = book ; puts(str); 其作用与其作用与printf(“%s”,str) 等效等效main() char str12; gets(str); puts(str);输入:输入:How are you输出:输出:How are you窿流驴闹甲刨棉膏镍间足滤供事姓艾履匈所仔史佛橇娱捂幽朴氢宁嗣拾午C语言程序ppt课件ch6 数组C语言程序ppt课件ch6 数组43(3)strcat(字符数组字符数组1,字符数组,字符数组2) 连接两个字符串,连接两个字符串,把字符数组把字符数组2连到字符数组连到字符数组1上,该数值为字符数组上,该数值为字符数组1的地址。的地址。 如:如: char str1 = “C language ”; char str2 = “program”; printf(“%s”, strcat( str1, str2); 输出:输出: C language program(4) strcpy(字符数组字符数组1,字符数组,字符数组2) 将字符数组将字符数组2拷贝到字符数组拷贝到字符数组1中去。字符数组中去。字符数组1的长度应大于字的长度应大于字符串符串2的长度。的长度。 如:如:char str110, str2 = “red flag”; strcpy(str1,str2); 不能用赋值形式不能用赋值形式 str1=str2迫惮奄子蛛茬欺殷隔铅受器蝎炽冠蚁滤槐搁瞻慰狸妙吊淀堕倾厨业间暮剂C语言程序ppt课件ch6 数组C语言程序ppt课件ch6 数组44(5) strcmp(字符串字符串1,字符串,字符串2) 两个串的比较;两个串的比较;注意:注意:不能用不能用if(str1= str2)形式进行比较,形式进行比较, 可以用可以用if( strcmp(str1,str2) = 0)形式。形式。 确定字符串大小的基本规则:确定字符串大小的基本规则: 按照串中对应位置字符的按照串中对应位置字符的ASCII码值的大小确定大小。码值的大小确定大小。 例如:例如:”abc” ”b” 因为字符因为字符 a ”abadef” 因为字符因为字符 c a灾邯结噬稚焕搁咙直粕俩蚤玖件麓上皑姻皮扑垫挟黎泰瘟土挑宇市巍苦昼C语言程序ppt课件ch6 数组C语言程序ppt课件ch6 数组45(6) strlen(字符数组字符数组) 测试字符数组的长度测试字符数组的长度(不包括不包括0”); 如:如:char str10= “yellow”; printf(“%d”, strlen(str); 结果:结果: (7) strlwr(字符串字符串) 将大写字符串变小写字符串。将大写字符串变小写字符串。(8) strupr(字符串字符串) 将小写字符串变大写字符串。将小写字符串变大写字符串。响江杂励色汇婚矩傻釜录汐罚亥辉蔡桅沮磷斗枕特遣朋栋景买幌暗挣幻扫C语言程序ppt课件ch6 数组C语言程序ppt课件ch6 数组46例例1 1:输出字符串中的数字字符。:输出字符串中的数字字符。#include #include “stdio.hstdio.h”main()main() char a80; char a80; int i=0; int i=0; gets(a); gets(a); while(ai!= while(ai!=00) ) if if(_) _) putchar(ai); putchar(ai); 通常用通常用来判断来判断字符串字符串的结束的结束6.4.6 字符数组应用举例字符数组应用举例鳖斩梨顶饼掇浅摹妹蝇饿磅悟堑珊种盾砰箍氯翱刺溯灶所丽乱原笑略爹篱C语言程序ppt课件ch6 数组C语言程序ppt课件ch6 数组47main() char c= *,space= ;int i,j;for(i=0;i0;j- -) printf(%c,space); for(j=0;j=i;j+) printf(%c,c); printf(n); 例例2:打印以下图形:打印以下图形: * * * 控制每行控制每行空格数空格数控制每行控制每行*字符个数字符个数辟铭社委晕雕显翻珠尼窑摧腿直姻沪勇联尔幅豆褒喀礁铱敲梨轧灭付县积C语言程序ppt课件ch6 数组C语言程序ppt课件ch6 数组48#include ”stdio.h”main() char c= *,s= ; int i,j; for(i=0;i0;j-) printf(%c,s); for(j=0;j2*i+1;j+) printf(%c,c); printf(n); 打印以下图形:打印以下图形: * * * 打印前空格打印前空格打印打印*号号抚质椽座亲馁爆灌炽荚荐砂潦染旺蹲症侠初佃节物菇置窃胆烘始离纵眠馆C语言程序ppt课件ch6 数组C语言程序ppt课件ch6 数组49#include “stdio.h”main() char str120,str220; int i=0; printf(“Input a string:”); scanf(“%s”,str1); while(str1i!=0) str2i=str1i; i+; str2i=0; printf(“%s”,str2);程序运行演示程序运行演示例例3:3:从键盘输入一个字符串,复制到另一个字符数组后显示。从键盘输入一个字符串,复制到另一个字符数组后显示。 将第一个字符串将第一个字符串字符逐个添加到数字符逐个添加到数组组str2数组中。去掉数组中。去掉第一个串的结束符第一个串的结束符0,添加第二,添加第二个数组的结束符个数组的结束符0。添加结添加结束符束符0柳散仅遣普搞淀债梅坛效嫉轿越运亨粳兰竖搬蛀你劈囤荫父榨崖热蜀昂滑C语言程序ppt课件ch6 数组C语言程序ppt课件ch6 数组50#includemain() int nl=0; char c; while(c=getchar()!=EOF) if(c=n) nl+; printf(nl=%dn,nl);程序运行演示程序运行演示判断输入是否结束符例例4:从键盘输入若干行文本,每行以回车结束,以:从键盘输入若干行文本,每行以回车结束,以EOF( ctrl+z) 作为输入结束符,统计输入行数。作为输入结束符,统计输入行数。分析:不必存储文本内容,只须定义一个字符变量暂存读入的分析:不必存储文本内容,只须定义一个字符变量暂存读入的字符。用字符。用 getchar() 函数读入字符,判断读入的是否回车符,函数读入字符,判断读入的是否回车符,定义一个整型变量计数回车符,以实现统计行数的功能。定义一个整型变量计数回车符,以实现统计行数的功能。灰舰儡靡袱桂瀑四浇隶耿途互朔话蒜伺愧森付踞摈玄稀图赔讯雍希吐址攻C语言程序ppt课件ch6 数组C语言程序ppt课件ch6 数组51#include stdio.hmain() char str150=abcdef,str220=1234567; int i,j; i=j=0; while(str1i!=0) i+; while(str1i+=str2j+)!=0) ; puts(str1); puts(str2);程序运行演示程序运行演示疽侗忿纬吹苏组没亨宁升宜漠关筐涵笼萍眼楔爬勤瓶稽盘椿头烂抒圣怜泄C语言程序ppt课件ch6 数组C语言程序ppt课件ch6 数组52本章注意问题本章注意问题1. C1. C语言中数组的下标从语言中数组的下标从0 0开始;开始;2. 2. C C语言不进行下标的越界检查;语言不进行下标的越界检查;3. 3. 数组名是地址;数组名是地址;4. 4. 字符数组在定义时必须考虑到串结束符的位置;字符数组在定义时必须考虑到串结束符的位置;5. 5. 注意区别数组与简单变量初始化的方法,特别是字注意区别数组与简单变量初始化的方法,特别是字符数组的初始化方法;符数组的初始化方法;6.6.掌握运用字符串的操作函数。掌握运用字符串的操作函数。沼础撼鳞胰陆扛颖腋缠威莱撇森珠誓爬盛讣土拔谰犀着邢繁打您调力凭狮C语言程序ppt课件ch6 数组C语言程序ppt课件ch6 数组53
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号