




已阅读5页,还剩37页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第6章数组,许建龙xujianlong126,C程序设计,内容提要,数组类型;向函数传递一维数组和二维数组;常用算法:排序、查找、求最大最小值等;用字符数组存取字符串;使用字符串处理函数处理字符串,数组的用处,保存大量同类型的相关数据如矩阵运算,表格数据等,数组(Array),inta10;定义一个有10个元素的数组,每个元素的类型均为int使用a0、a1、a2、a9这样的形式访问每个元素。它们与普通变量没有任何区别系统会在内存分配连续的10个int空间给此数组数组下标可以是整型表达式直接对a的访问,就是访问此数组的首地址,a,a9,a8,a7,a1,a0,数组的定义与初始化,数组定义后的初值仍然是随机数,一般需要我们来初始化inta5=12,34,56,78,9;inta5=0;inta=11,22,33,44,55;数组大小最好用宏来定义,以适应未来可能的变化#defineSIZE10intaSIZE;数组大小定义好后,将永远不变,数组的使用,数组的下标都是从0开始对数组每个元素的使用与普通变量无异可以用任意表达式作为下标,动态决定访问哪个元素for(i=0;iSIZE;i+)ai=2*i;下标越界是大忌!使用大于最大下标的下标,将访问数组以外的空间。那里的数据是未知的,可能带来严重后果sizeof可以用来获得数组大小,数组的特点,快速地随机访问一旦定义,不能改变大小,只能逐个对数组元素进行操作(字符数组例外),输入方法:,inta10,i;,输入第i个数组元素:,scanf(%d,输入整个数组元素:,for(i=0;i10;i+)scanf(%d,输出方法:,输出第i个数组元素:,printf(%d,ai);,输出整个数组元素:,for(i=0;i10;i+)printf(%d,ai);,一维数组的输入和输出,例6.1,兔子生崽问题Fibonacci数列1,2,3,5,8,13,21,34,55,89,144,233,,例6.1,#include#defineYEAR_MONTH12main()intfYEAR_MONTH+1=0,1,2;intmonth;for(month=3;month=YEAR_MONTH;month+)fmonth=fmonth-1+fmonth-2;for(month=1;month=YEAR_MONTH;month+)printf(%dt,fmonth);printf(nsum=%dn,fYEAR_MONTH);,例6.2打印出最高分及其学生序号,从键盘输入学生人数n;从键盘输入所有学生的学号和成绩分别存入数组num和score假设其中的一个学生成绩为最高,同时记录其学号,即令maxScore=score0maxNum=num0;对所有学生成绩进行比较,即for(i=0;imaxScore,则修改maxScore值为scorei,并记录其学号maxNum=numi;打印最高分maxScore及其学号maxNum;,#include#defineARR_SIZE40main()floatscoreARR_SIZE,maxScore;intn,i;longmaxNum,numARR_SIZE;printf(Pleaseentertotalnumber:);scanf(%d,#include#defineARR_SIZE40floatFindMax(floatarr,intn);main()floatscoreARR_SIZE,maxScore;intn,i;printf(Pleaseentertotalnumber:);scanf(%d,floatFindMax(floatarr,intn)floatmax;inti;max=arr0;for(i=1;imax)max=arri;returnmax;,数组名作函数参数,用数组名作参数,就是将数组的首地址传递给函数实参数组与形参数组占用同一段内存在函数中可对形参数组元素修改,结果会影响主调函数中的实参数组,简单变量作函数参数,数组作函数参数,现场演示排序算法,交换法排序选择法排序,交换法排序,交换法排序for(i=0;iscorei)交换成绩scorej和scorei,交换学号numj和numi;,交换法排序,选择法排序,选择法排序for(i=0;iscorek)记录此轮比较中最高分的元素下标k=j;若k中记录的最大数不在位置i,则交换成绩scorej和scorei,交换学号numj和numi;,选择法排序,现场演示查找算法,顺序查找特例:求最大值,求最小值折半查找,顺序查找,intSearch(longa,intn,longx)inti;for(i=0;in;i+)if(ai=x)return(i);return(-1);,折半查找,折半查找,intBinSearch(longa,intn,longx)intlow,high,mid;low=0;high=n-1;while(lowamid)low=mid+1;elseif(xamid)high=mid-1;elsereturn(mid);return(-1);,字符串(String)与字符数组,字符串一串以0结尾的字符在C语言中被看作字符串用双引号括起的一串字符是字符串常量,C语言自动为其添加0终结符C语言并没有为字符串提供任何专门的表示法,使用字符数组和字符指针来处理字符数组每个元素都是字符类型的数组charstring80;,字符数组的初始化,用字符型数据对数组进行初始化charstr6=C,h,i,n,a,0;用字符串常量直接对数组初始化charstr6=China;charstr6=China;,逐个输入输出,for(i=0;si!=0;i+)putchar(si);putchar(n);,一次性输入输出,scanf(%s,s);printf(%s,s);,chars10;,字符数组的输入输出,gets(s);puts(s);,scanf(),inti;scanf(%d,不能读入带空格的字符串,gets()可以这种用法很不安全。当用户的输入多于10个(含10个),str数组将越界scanf被公认为最易遭到黑客攻击的函数之一,gets(),字符串输入函数gets()也没有提供限制输入字符串长度的方法,容易引起缓冲区溢出,给黑客攻击以可乘之机对输入字符串长度有限制的函数调用fgets(buf,sizeof(buf),stdin);,字符串处理函数,在中定义了若干专门的字符串处理函数strcpy:stringcopychar*strcpy(char*dest,constchar*src);strlen:stringlengthsize_tstrlen(constchar*s);返回字符串的实际长度,不包括0strcat:stringcombinationchar*strcat(char*dest,constchar*src);strcmp:stringcomparisonintstrcmp(constchar*s1,constchar*s2);当出现第一对不相等的字符时,就由这两个字符决定所在字符串的大小,字符串不能直接整体复制!,str1=str2/*错误*/,0作为字符串结束符的天生缺陷,假若交给这些字符串处理函数的字符串没有0会如何?0很关键,如果没有,那么这些处理函数会一直进行处理直到遇到一个0为止。此时可能已经把内存弄得乱七八糟ANSIC定义了一些“n族”字符处理函数,包括strncpy、strncat、strncmp等,通过增加一个参数来限制处理的最大长度char*strcpy(char*dest,constchar*src,unsignedintcount);,例6.9,从键盘任意输入5个学生的姓名,编程找出并输出按字典顺序排在最前面的学生姓名等价于求最小字符串,#include#include#defineARRA_SIZE80main()intn,num;charstrARRA_SIZE,minARRA_SIZE;printf(Pleaseenterfivenames:n);gets(str);strcpy(min,str);for(n=1;n5;n+)gets(str);if(strcmp(str,min)0)strcpy(min,str);printf(Theminis:);puts(min);,二维数组的定义,格式:数据类型数组名常量表达式常量表达式,intb23;,b为23(2行3列)的数组,注意下标范围,b0b1,b,-b00b01b02,-b10b11b12,二维数组的存储结构,intb23;,b10,b11,b12,b00,b01,b02,存放顺序:按行存放,先顺序存放第一行的元素,再存放第二行的元素,二维数组的输入和输出,数组的输入和输出只能逐个对数组元素进行操作(字符数组例外),intb23,i,j;,向函数传递二维数组,实际传送
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 厂房建筑垃圾分类与回收方案
- 高速公路路面抗滑性能设计方案
- 阿洛酮糖生产线项目建设工程方案
- 城乡供水信息系统建设方案
- 浅谈如何在小学英语教学中培育学生的核心素养
- 风光储一体化电网接入方案
- 人防设施维修
- 无线传输展示技术方案
- 虚拟现实展厅构建方案
- 中俄石油供应合同协议
- 眼内炎的预防控制措施
- 2025年度化肥生产设备租赁与维护合同书
- 2025年上半年泸州市纳溪区总工会招考社会化专职工会工作者易考易错模拟试题(共500题)试卷后附参考答案
- 广东学校安全条例课件
- 毕氏族谱完整版本
- 法院冻结所有账户执行异议申请书
- 【MOOC】地理空间数据库-战略支援部队信息工程大学 中国大学慕课MOOC答案
- 中华民族共同体概论教案第十二讲-民族危亡与中华民族意识觉醒
- ICU患者的护理常规
- 六年级语文上册第三单元习作-让生活更美好课件
- 《江城子·乙卯正月二十日夜记梦》课件 -2024-2025学年统编版高中语文选择性必修上册
评论
0/150
提交评论