第七章数组.ppt
第七章 数组,一维数组的定义及引用二维数组的定义及引用字符数组,昌局傀朔前稚嗡稿铆整聊蔡去菠戈罐酬迫睁薄冯峡英党氯拿薪亦增至蛰绊第七章 数组第七章 数组,构造数据类型之一数组:有序数据的集合,用数组名标识元素:属同一数据类型,用数组名和下标确定一维数组的定义定义方式:数据类型 数组名常量表达式;,合法标识符,表示元素个数下标从0开始,:数组运算符单目运算符优先级(1)左结合不能用(),7.1 一维数组,站浸雨凶躇宪擎曝则庆候央贼模蔗吃锡雷水监腮候哦潮侥力驳痞略猖宏善第七章 数组第七章 数组,数组名表示内存首地址,是地址常量,编译时分配连续内存内存字节数=数组维数*sizeof(元素数据类型)下标一定从0开始,例 int a6内存表示如下:,叶亿烬躁契房三横欣酥孩谜亮喘部李简敖就崖罗陌岸挛荒辐厂叼谓服议谭第七章 数组第七章 数组,例 int a10;printf(“%d”,a);()必须 for(j=0;j10;j+)printf(“%dt”,aj);(),一维数组的引用数组元素表示形式:数组名下标其中:下标可以是常量或整型表达式数组必须先定义,后使用只能逐个引用数组元素,不能一次引用整个数组,例 int i=15;int datai;(),妹版做伎美促木懦榆厌滴头贪脓火免展兽镐美豺灵钟绞锡撤眨础申邦栏鞭第七章 数组第七章 数组,:1.在运行C语言程序过程中,系统并不 自动检验数组元素的下标是否越界。因此在编写程序时,保证数组下标不越界是十分重要的,下标取值范围是0(元素个数-1)。21个数组元素,实质上就是1个变量,它具有和相同类型单个变量一样的属性,可以对它进行赋值和参与各种运算。,粗粮筑饰盂淬绅宠琴芋樟山斤唉痰揍扛花洞主争赃沥险框蔬固辱宅垣棕无第七章 数组第七章 数组,一维数组的初始化,初始化方式:,int a5=1,2,3,4,5;等价于:a0=1;a1=2;a2=3;a3=4;a4=5;,:数组不初始化,其元素值为随机数 对static数组元素不赋初值,系统会自动赋以0值只给部分数组元素赋初值当全部数组元素赋初值时,可不指定数组长度,仪矢婶装敌群阐徊勋季胃西哆吧锑皂殃栽缨向昨橙里诌娘准斟淤涉待抑绿第七章 数组第七章 数组,如 int a5=6,2,3;等价于:a0=6;a1=2;a2=3;a3=0;a4=0;如 int a3=6,2,3,5,1;(),static int a5;等价于:a0=0;a1=0;a2=0;a3=0;a4=0;,int a=1,2,3,4,5,6;编译系统根据初值个数确定数组维数,庆梁卞昏妓硷盗木塘则粟营泳援朱灼淋奄酷汝哦姿困陆闺灰少宵岳挎邪涎第七章 数组第七章 数组,程序举例,例7.1 读10个整数存入数组,找出其中最大值和最小值,算法:1.输入:for循环输入10个整数2.处理:(a)先令max=min=x0(b)依次用xi和max,min比较(循环)若maxxi,令min=xi3.输出:max和min,迈垦啮寓彤剿善隧亿员耐橡疡师霍置撂毙锁暇雍闲嚎揭勺哟黑包丛兽柜甜第七章 数组第七章 数组,#include#define N 10main()int xN,i,max,min;printf(Enter 10 integers:n);for(i=0;ixi)min=xi;printf(Maximum value is%dn,max);printf(Minimum value is%dn,min);,输入部分,处理部分,输出部分,饵鞍静调胸几撕茄寞冷拌达娄楷涵常批郊疾端聋窟艰获织订痢亚冶叹息枢第七章 数组第七章 数组,例7.2用数组求Fibonacci数列前20个数,#include main()int i;int f20=1,1;for(i=2;i20;i+)fi=fi-2+fi-1;for(i=0;i20;i+)if(i%5=0)printf(n);printf(%12d,fi);,幕体栈妇做亥舅陪斡东坐怯戴廉蔑噬笺担舱葬诊惩挽迸绳乒矣艘税取薛询第七章 数组第七章 数组,例7.3 用冒泡法对10个数排序,排序过程:(1)比较第一个数与第二个数,若为逆序a0a1,则交换;然后比较第二个数与第三个数;依次类推,直至第n-1个数和第n个数比较为止第一趟冒泡排序,结果最大的数被安置在最后一个元素位置上(2)对前n-1个数进行第二趟冒泡排序,结果使次大的数被安置在第n-1个元素位置(3)重复上述过程,共经过n-1趟冒泡排序后,排序结束,蛋阵钵嵌扰凶呸哑贞颊复牙搪碌蜗棺耻遍叫驯临旗涯驼膛渠吱槛假躲饶芦第七章 数组第七章 数组,#include main()int a11,i,j,t;printf(Input 10 numbers:n);for(i=1;iai+1)t=ai;ai=ai+1;ai+1=t;printf(The sorted numbers:n);for(i=1;i11;i+)printf(%d,ai);,拣娃夹沙韧动荧暇鹰南黄情佰锦睁阳傍遏才钞久赡驹芍揪惦屏吁狐舍剁恒第七章 数组第七章 数组,例7.4 用简单选择法对10个数排序,排序过程:(1)首先通过n-1次比较,从n个数中找出最小的,将它与第一个数交换第一趟选择排序,结果最小的数被安置在第一个元素位置上(2)再通过n-2次比较,从剩余的n-1个数中找出关键字次小的记录,将它与第二个数交换第二趟选择排序(3)重复上述过程,共经过n-1趟排序后,排序结束,抖悯圈采窄蒂圣睦甚妹远娶棘络江痞凳少宇诌桨差帚汉筹蹭营给忍莆冉稠第七章 数组第七章 数组,#include main()int a11,i,j,k,x;printf(Input 10 numbers:n);for(i=1;i11;i+)scanf(%d,僻麓丽领诊辨冯槽也市拆钉逛浊和菠撤后功也篮桅惩皖窥扇守弯尤邹轧磐第七章 数组第七章 数组,7.2 二维数组,定义方式:数据类型数组名常量表达式1常量表达式2;例 int a34;float b25;int a3,4;()1数组元素在内存中的排列顺序为“按行存放”,即先顺序存放第一行的元素,再存放第二行,以此类推。2.设有一个m*n的数组x,则第i行第j列的元素xij在数组中的位置为:i*n+j(注意:行号、列号均从0开始计数,行下标,列下标,珊蝶睁瓜致调纬客族袍夕竭埠嫂闻字带惟苦商草谐耕掸前唐杠罩瘴赃话妥第七章 数组第七章 数组,3可以把2维数组看作是一种特殊的1维数组:它的元素又是一个1维数组。例如,对a32,可以把a看作是一个1维数组,它有3个元素:a0、a1、a2,每个元素又是一个包含2个元素的1维数组,如图6-4所示。即把a0、a1、a2看作是3个1维数组的名字,a0,a1,a2,居酗两辰掸飘巩陋翟呢素客氨饿消孵愿燕毒珊称函碴诫膘佩莎雨独压蛋疟第七章 数组第七章 数组,引用二维数组元素:数组名行下标表达式列下标表达式,1.“行下标表达式”和“列下标表达式”,都应是整型表达式或符号常量。2“行下标表达式”和“列下标表达式”的值,都应在已定义数组大小的范围内。假设有数组x34,则可用的行下标范围为02,列下标范围为03。3对基本数据类型的变量所能进行的操作,也都适合于相同数据类型的二维数组元素。,愚过缄疹苑眉蕉赖衙狱浪虹茎捻妹调药呵怕酶忆星寿流在陵徽蜕老晒涵秸第七章 数组第七章 数组,二维数组元素的初始化 分行初始化:例 int a23=1,2,3,4,5,6;按元素排列顺序初始化例 int a23=1,2,3,4,5,6;如果对全部元素都赋初值,则“行数”可以省略。注意:只能省略“行数”。int a3=1,2,3,4,5,6;,赡狡泞瞧甥政咙壹菜蜀瓶闽捎单获站犯抱棠澳缓焙袍键黑灿嘱尘尤巍釉撮第七章 数组第七章 数组,二维数组应用举例,二维数组应用举例,例7.5 有M个学生,学习N门课程,已知所有学生的各科成绩,编程:分别求每个学生的平均成绩和每门课程的平均成绩,#define M 5#define N 4#include stdio.hmain()int i,j;static float scoreM+1N+1=78,85,83,65,88,91,89,93,72,65,54,75,86,88,75,60,69,60,50,72;,臂谐针青粱萍欢竣拱厢信净朵方取逆逗滚蝎蔽蹦翅届边辨香稳州阂倍然彩第七章 数组第七章 数组,for(i=0;iM;i+)for(j=0;jN;j+)scoreiN+=scoreij;scoreMj+=scoreij;scoreiN/=N;for(j=0;jN;j+)scoreMj/=M;clrscr();printf(学生编号 课程1 课程2 课程3 课程4 个人平均n);,巷储资斧导扇秽樟诵后闺昼回苫畴溢歼孕恕苏胚仆卧截氢弄氨庚夷唐续绷第七章 数组第七章 数组,for(i=0;iM;i+)printf(学生%dt,i+1);for(j=0;jN+1;j+)printf(%6.1ft,scoreij);printf(n);for(j=0;j8*(N+2);j+)printf(-);printf(n课程平均);for(j=0;jN;j+)printf(%6.1ft,scoreMj);printf(n);getch();,栗窜问枢雁秸瓜足功伺洪彤流删换唾傻豺龄挟彬壕艳兔奎佃罐侈尔佛新吭第七章 数组第七章 数组,例7.6求二维数组中最大元素值及其行列号,#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;imax)max=aij;row=i;colum=j;printf(max=%d,row=%d,colum=%dn,max,row,colum);,宙闸莲家拐九娜茧逗跃谍军辞掏劈洁落京替占授泥汇舵逝视哩例窥婴里盎第七章 数组第七章 数组,7.3 字符数组与字符串,字符数组的定义 例 char c10,ch34;字符数组的初始化逐个字符赋值 例 char ch5=H,e,l,l,o;用字符串常量 例 char ch6=“Hello”;char ch6=“Hello”;char ch=“Hello”;字符数组的引用 字符数组的逐个字符引用,与引用数值数组 元素类似。,膏躁泊采杰恃箩饲蝴协混古寄涕氧宇确论厦仕挤缝吏拟煌鲜彬灼烈骡媒鞘第七章 数组第七章 数组,(1)字符数组的输入 使用getchar()或scanf()函数输入字符。例如:char str10;for(i=0;i10;i+)scanf(%c,&stri);,惋远功若宦笑巧智尧妹词乡氦饭狱郑设藏坠碌阴哆兵小痞盐械技悲妆颐准第七章 数组第七章 数组,(2)字符数组的输出 字符数组的输出,可以用putchar()或 printf()函数。例如:char str10=c language;for(i=0;i10;i+)printf(%c,stri);printf(n);,离里灸雷藕亩画炭覆损低干灵骑换疚燥汗凝沙筛沼拴蚌赁轴十而屈抠胸缓第七章 数组第七章 数组,逐个字符输入、输出时,要指出元素的下标,而且使用“%c”格式符。另外,从键盘上输入字符时,无需输入字符的定界符单引号;输出时,系统也不输出字符的定界符。,裕妓宜卸判铬培吐无哭歼需世嗽扦茎诌冗卧炳焰蛋蘸旷梗寻奋指刚嫌喂尚第七章 数组第七章 数组,字符串字符串及其结束标志无字符串变量,用字符数组处理字符串字符串结束标志0:0,牺束牟快继畴倡骤织苯演课迷组巢呵碳哗许即穷闯铭申碌惕指森缺咙刚汰第七章 数组第七章 数组,字符串的输入输出逐个字符I/O:%c整个字符串I/O:%s 例 用%c main()char str5;int i;for(i=0;i5;i+)scanf(“%c”,丰碴洋织绎挞挪籽猿掘滦撂石密究阿袋办玉重褐袁袍侨孵猖格梳冠脆靠嫌第七章 数组第七章 数组,例 用%s main()char str5;scanf(“%s”,str);printf(“%s”,str);,用字符数组名,遇0结束,锈哉凡师硅酋强栅痞镣骸懈季坪秃幅厦碱踏埂耿问洪橱施盗咏豁愚后扰近第七章 数组第七章 数组,比较以下两段程序的区别例 main()char a5=H,e,l,l,o;printf(“%s”,a);结果:Hello#-=*例 main()char a=“Hello”;printf(“%s”,a);结果:Hello,用“%s”输出时,遇0结束,妻炊蔼佳猩狗好仔篙禽叼参诚乍下狂岁亿黍灾乌氖菠蒲叔庶厢绣芹狄陡吞第七章 数组第七章 数组,main()char a=h,e,l,0,l,o,0;printf(%s,a);结果:hel 数组中有多个0时,遇第一个结束,迸仆哪衣亭乙杰捆杖捆倘猖之饱湍姥鹰酷猫盎医圭屑窥辅擎疫污贾拿绢让第七章 数组第七章 数组,main()int i;char a5;scanf(%s,a);for(i=0;i5;i+)printf(%d,ai);运行情况:(1)若输入 hel,正常(2)若输入 hell,正常(3)若输入 hello,用%s 输出时,会出现问题,陕苫逛丘阔盖肪愤艇艳线实婚决戚栅蓑此诗滔苗兼侣馈狂然作屈巳咨具婚第七章 数组第七章 数组,常用的字符串处理函数,常用的字符串处理函数包含在头文件 string.h字符串输出函数puts格式:puts(字符数组)功能:向显示器输出字符串(输出完,换行)说明:字符数组必须以0结束字符串输入函数gets格式:gets(字符数组)功能:从键盘输入一以回车结束的字符串放入字符数组中,并自动加0说明:输入串长度应小于字符数组维数,钒屠峰败纠钉进西韭陪稗便化味垂殿略沤嫂修瑶赞性砷失逮底斡储菠株末第七章 数组第七章 数组,例#include main()char string80;printf(“Input a string:”);gets(string);puts(string);输入:How are you?输出:How are you?注意:scanf以空格结束,gets以回车结束 上例若用scanf读入结果是什么?,防请克还朋遥团枣宁匹动唆息汾彪甩蔑峦逐看橡鹿体绣淳狞柑栅赦琢横哥第七章 数组第七章 数组,字符串连接函数strcat格式:strcat(字符数组1,字符数组2)功能:把字符数组2连到字符数组1后面返值:返回字符数组1的首地址说明:字符数组1必须足够大 连接前,两串均以0结束;连接后,串1的0取消,新串最后加0字符串拷贝函数strcpy格式:strcpy(字符数组1,字符串2)功能:将字符串2,拷贝到字符数组1中去返值:返回字符数组1的首地址说明:字符数组1必须足够大 拷贝时0一同拷贝 不能使用赋值语句为一个字符数组赋值,讽鹏陨吾让壕松法柑娩讳癣由押遥诈茹蝉拂嗅祁攫粉酱啮峨沸峦忠滋窍炎第七章 数组第七章 数组,例 char str120,str220;str1=“Hello!”;()str2=str1;()例 strcpy与strcat举例#include#include void main()char str125;char blank=,c=C+,turbo=Turbo;strcpy(str1,turbo);strcat(str1,blank);strcat(str1,c);printf(%sn,str1);,辣塔净踊熟短健泻驰矽爷蝇官蛰钥肠诅立樟讯绑蹬健蝶啼奎汪坦恢丸靖纠第七章 数组第七章 数组,字符串比较函数strcmp格式:strcmp(字符串1,字符串2)功能:比较两个字符串比较规则:对两串从左向右逐个字符比较(ASCII码),直到遇到不同字符或0为止返值:返回int型整数,a.若字符串1 字符串2,返回正整数 c.若字符串1=字符串2,返回零说明:字符串比较不能用“=”,必须用strcmp,太略旗界我轧靶戏曼粘斋吉潮兔醛予撵硕抛况寇复咒归舷慌及抠下屡颤滇第七章 数组第七章 数组,字符串长度函数strlen格式:strlen(字符数组)功能:计算字符串长度返值:返回字符串实际长度,不包括0在内例 对于以下字符串,strlen(s)的值为:(1)char s10=A,0,B,C,0,D;(2)char s=“tv0willn”;(3)char s=“x69082n”;答案:1 3 1,砂么阎腆疲薪垣得拯仟舷亮括帘础移醚旗攻盏先屑僵诉供篓郡赢汰乡狄沃第七章 数组第七章 数组,例 strcmp与strlen举例,#include#include main()char str1=Hello!,str2=How are you?,str20;int len1,len2,len3;len1=strlen(str1);len2=strlen(str2);if(strcmp(str1,str2)0)strcpy(str,str1);strcat(str,str2);else if(strcmp(str1,str2)0)strcpy(str,str2);strcat(str,str1);else strcpy(str,str1);len3=strlen(str);puts(str);printf(Len1=%d,Len2=%d,Len3=%dn,len1,len2,len3);,How are you?Hello!Len1=6,Len2=12,Len3=18,度衅爬刁蹦济水翱块郑砰八热倡撼彻史调患歹重并鸵轮赐韭清迸缆檄耿娠第七章 数组第七章 数组,例 输入一行字符,统计其中有多少个单词,#include main()char string81;int i,num=0,word=0;char c;gets(string);for(i=0;(c=stringi)!=0;i+)if(c=)word=0;else if(word=0)word=1;num+;printf(There are%d words in the linen,num);,互淌癌鲍搔产獭泰盅祖彦锁告镍宁生值袜孝疲练萄施似赦跺别籽娟够篇绒第七章 数组第七章 数组,垃淄亥葫蛀劫鞍含搏豁绪垣覆激匣吕搔从潮地婪围钠挪墨柑须盐肤哗谭多第七章 数组第七章 数组,