c语言电子版教程第6章数组_第1页
c语言电子版教程第6章数组_第2页
c语言电子版教程第6章数组_第3页
c语言电子版教程第6章数组_第4页
c语言电子版教程第6章数组_第5页
已阅读5页,还剩37页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第6章内容提要数组类型;向函数传递一维数组和二维数组;常用算法:排序、查找、求最大最小值等;用字符数组存取字符串;使用字符串处理函数处理字符串2007-05-262数组的用处保存大量同类型的相关数据如矩阵运算,表格数据等2007-05-263数组(a10;10定义一个有个元素的数组,每个元素的类型使用a0使a用、1a、0a、2a、1、aa、2、9、a这样9的这形样式访问每个元素。它们与普通变量没有任何区别系统会在内存分配连续1的0数组下标可以是整型表达式个空给间此给数此组数组直接对a直的a,就就是此此数数组组的的首首地地址址a9a8a7数组首地址a1aa02007-05-264C语言大学实用课

2、件数组的定义与初始化数组定义后的初值仍然是随机数,一般需要来初始化初始化55=12,34,56,78,9;0;a=11,22,33,44,55;数组大小最好用宏来定义,以适应未来可能的变化#define#SSdIIeZZfEEin11e0aSIZE;aZE数组大小定义好后,将不变2007-05-265数组的使用数组的下标都是从0对数组每个元素的使用与普通变量无异可以用任意表达式作为下标,动态决定哪个元素forf(oir=0; iSIZE;i+)ai=2*i;下标越界大是忌大!忌 使用大于最大下标的下标,将 的数据是未知的,可能带来严重sizeof可以用来获得数组大小数组以外的空间。那里2007

3、-05-266数组的特点快速地随机一旦定义,不能改变大小2007-05-267一维数组的输入和输出只能逐个对数组元素进行操作(字符数组例外)a10,i;输入方法:输出方法:i个数组元素:输个出数第组i个元数素组:元素:输出第f %dscanf(%d,&ai);rai输出整个数组元素:输入整个数组元素:for(i=0;i10;i+)scanf(%d,&ai);for(i=0;i10;i+)f(%d,ai);8pr2007-05-26例兔子生崽问题Fibonacci数列Fibon数ac列ci1,2,3,5,8,f1 1(n 1)f2 1n 2()(n3)n 2n2007-05-269例includ

4、e#main YEAR_MONTH12ai(n)YEAR_MONTH+1 = 0,1,2;month;ontforf(omronth=3;month=YEAR_MONTH; month+)fmonth =fmonth-1 +fmonth-2;forf(ommronth=1;month=YEAR_MONTH; month+)prf(%dt, fmonth);prf(prfum = %dn, fYEAR_MONTH);2007-05-2610例打印出最高分及其学生序号从键盘输入学生人数n;从键盘输入所有学生的学号和成绩分别存入数nu组mscon和rue mscore假设其中的一个学生成绩为最 ,同

5、时其学号,即令maxScore=score0maxNum=num0;对所有学生成绩进行比较,即for(i=0;imaxScore,= numi;并其学号maxNum打ma印x最Sc高or分e及其学号mmaaxxSNcuomr及e 其学号m;axNum2007-05-2611include# define#in defAiRnRe_SIZE40floatflosactoreARR_SIZE, maxScore; n, i;longlongmaxNum, numARR_SIZE;prfp(rfa(sePleenatseer etnotarl tnoutmablern:um)b;er:);scanf

6、s(ca%ndf,(%&dn),; &n);(ase enter the number and score: forfo(ri=0; in; i+)scanfs(ca%nlfd(%f%l,d%&fnu,m&inu,m&isc,or&escior)e;i);maxScore = score0; maxNum = num0;fo(ri=1; i maxScore)= scorei;maxNum =numi;(Score= %.0f, maxNum= %ldn, maxScore,maxNum);2007-05-2612float FindMax(float arr,n)floatmafxl;oat

7、 max;i;max = arr0;(i=1; i max)include#in ARR SIZE#40max=arri;floatFindMax(float arr,n);maai(n)floatflosactoreARR_SIZE, maxScore; n, i;prfp(rfa(sePleenatseer etnotarl tnoutmablern:um)b;er:);scanfs(ca%ndf,(%&dn),; &n);prfp(rfa(sePleenatseer etnhteersctnohr)e;:score:n);(i=0; in; i+)scanfmaxScore(sca%nf

8、f(,%&fsc,or&escior)e;i);=FindMax(score,n);prfp(rfS(comraexS=co%r.e0f=n%.,0fmaxScore);2007-05-2613数组名作函数参数用数组名作参数,就是将数组的首地址传递给函数实参数组与形参数组占用同一段内存在函数中可对形参数组元素修改的结果,会影响结果主调函数中的实参数组2007-05-2614简单变量作函数参数2007-05-2615实参实参实参主调函数未变化被调函数修改形参形参形参调用时执行被调函数从被调函数返回变量值变量值变量值变量值变量值变量值数组作函数参数实参实参实参地址值地址值地址值已改变主调函数数组被

9、调函数地址值地址值地址值修改形参调用时形参执行被调函数形参从被调函数返回2007-05-2616现场演示排序算法交换法排序选择法排序2007-05-2617交换法排序交换法排序for(i=0;in-1;i+)for(j=i+1;jscorei)交换成绩scorej和scorei,交换学号numj和numi;2007-05-2618交换法排序19课件 制作人选择法排序选择法排序forf(oir=0;in-1;i+)k=i;forj=i+f(1orj;=jjiscorek)此轮比较中最高分的元素下标的最大数不在位置i,则k=j;若k中交换sc成o绩re交j换成绩 s和csocroereji,和nu

10、mi;2007-05-2620选择法排序2007-05-2621现场演示查找算法顺序查找 特例:求最大值,求最小值折半查找2007-05-2622序查找arclongSaear,clho(nan,gn,x)longx);i;forfo(ii=0; iamid, low=mid+19901399017low=midhighx=amid,找到2007-05-2624折半查找数组下标0123499015599017699019第一次循环:9901199013查找值x=99016low第二次循环:99011mid 99015high 99019xamid, low=mid+19901399017low

11、=mid highxamid, high=mid-1第三次循环:9901199013990159901799019highlow不满足low=high, 循环结束,未找到2007-05-2625inSearlcohn(ga,lonan,gn,x)longx)ow, high, mid;low = 0;high = n - 1;(low amid)low = mid + 1;ifelseife(lxse amid)high =mid -1;elseelsereturn(mid);return(mid);return 1);2007-05-26r(etu-r1n);(-26字符与字符数组一串以0

12、一串0以结尾结的尾字的符字在C符C语在言中被看作字符串引号括起的一串字符是字符串常量,语言自动为其添加 0终添结加0符终结符语言并没有为字符串提供任何专门的表示法,完全使用字符数组和字符指针来处理每个元素都是字符类型的数组charcsshttaring80;2007-05-2627字符数组的初始化用字符型数据对数组进行初始化 charstr6=C,h,i,n,a,0;用字符串常量直接对数组初始化charcharstr6str6=China;China;2007-05-2628字符数组的输入输出chars10逐个输入输出输入输出scanf(%s,s);forf(oir=0;si!=0;i+)pr

13、f(%s,s);phar(si);pgets(%s,s);hanr();n);uts%ss2007-05-2629scanf(%d,/*&i);,就用i,能达到效果吗?*/cshtar10;charstr10; str);scanf(%s, 不能读入带空格的字g符et串s(,)可以gets可()以 这种用法很不安全。当用户的输入多于10个(含10个),s数t组r数将组越将界越界被公认为最易遭到str的函数之一2007-05-2630字符串输入函数也没有提供限制输入字符串长度的方法,容易引起缓冲区溢出,给以可对输入字符串长度有限制的函数调用 fgets(buf,sizeofe(buf),stdi

14、n);2007-05-2631字符串处理函数在中定义了若干专门的字符串处理函数stringsctorpcypyco:psytringtrcpy:ch*asrtrcpy(charcha*rd*estr,chya(rco*ndsetst,c*hsarrc);const*src);ssttrirnlgenle:ngthsize_tcsshtar en(const cha*rs);trlen:con*s);返回字符串的实际长度,不包括0ssttrirncgatco:mbinationchar *strcat(char *dest, const char *src);ssttrirncgmpco:mpa

15、risontrcat:trcmp:cmprcosntsrtcmpc(h*asrc1h,ar concso*tnss1t, ch*asr2);cons*ts2);当出现第一对不相等的字符时,就由这两个字符决定所在字符串的大小字符串不能直接整str1=str2错误/*错误*/322007-05-260作为字符串结束符的天生缺陷假若交给这些字符串处理函数的字符串没有0会如何?如何? 00很关键,如果没有,那么这些处理函数会一直进行处理直到遇到一0个0为止为。止此。时此可时能可已能经已把经内把存内弄存得弄得乱七八糟乱七八糟C定义了一些“n族”字符处理函数,包括strncpystrncasttrnsct

16、pryn、cms、ptrncats等t,rn通cm过p增加一个参数来限制处理的最大长度c*hsatrrcpy(charch*adre*st,rchhpaayrr(unsignedco*ndsetst*c,shracr,count);cons*tsrc,2007-05-2633例.从键盘任意输入5个学生的,编程找出并输出按字典顺序排在最前面的学生等价最小字符串2007-05-2634include# includ#e#in in ARRA_SIZE 80maai(n)n,;n, num;charchssatrrARRA_SIZE,minARRA_SIZE;prf(Please enter fiv

17、e namnes):;n);gets(str);strcpy(min, str); f(onr=1; n5; n+)gets(str);if i(fstrcmp(str, min) 0)strcpy(min, str);forprf(The minis:);20p0u7-t05s-2(6min);35二维数组的定义:常量表达式常量表达式b23;b为23(2行3列)的数组,注意下标范围b-0b00b01b02b0bb1b-1b10b11b122007-05-2636二维数组的结构存放顺序:按行存放,先顺序存放第一行的元素,再存放第二行的元素b02b23;b01b00b0b12b1b11b102007-05-2637二维数组的输入和输出数组的输入和输出只能逐个对数组元素进行操作(字符数组例外)b23,i,j;输出方法:输出第i行第j列元素:输入方法:输入第i行第j列元素:scanf(“%d”,&aij);输入整个数组元素:for (i=0;i2;i+) for(j=0;j3;j+)prf(“%d”,aij);输出整个数组元素:for (i=0;i2;i+) for(j=0;j3;j+)scanf(“%d”&ai);rf(“%d”ai);2007-05-2638向函数传递二维数组实际传送的是指向数组第一个元素的地址在二维数组形参时,不能省

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论