江苏省二级(C语言)考试真题重点题型分类总结课件

上传人:仙*** 文档编号:241573735 上传时间:2024-07-05 格式:PPT 页数:72 大小:336.51KB
返回 下载 相关 举报
江苏省二级(C语言)考试真题重点题型分类总结课件_第1页
第1页 / 共72页
江苏省二级(C语言)考试真题重点题型分类总结课件_第2页
第2页 / 共72页
江苏省二级(C语言)考试真题重点题型分类总结课件_第3页
第3页 / 共72页
点击查看更多>>
资源描述
结束第 1 页结束第 2 页真题汇总小结真题汇总小结省二级考试省二级考试C C语言真题重点题型分类语言真题重点题型分类 一、线性表(建立、删除、插入)二、文件操作(文件打开、读、写)三、递归问题 四、字符串操作问题 五、变量作用域与静态变量问题 六、数列或数字处理问题 七、排序问题 八、上机试题结束第 3 页 线性表是线性表是n 个数据元素的有限序列。个数据元素的有限序列。通常记作(通常记作(a1,a2,a3,an)。)。姓名电话号码蔡颖63214444陈红63217777刘建平63216666王小林63218888张力63215555.一、线一、线 性性 表表例1、数学中的数列(11,13,15,17,19,21)例2、英文字母表(A,B,C,D,EZ)。例3、某单位的电话号码簿。一一 线性表的逻辑结构线性表的逻辑结构电话号码簿是数据元素的有限序列,每一数据元素包括两个数据项,一个是用户姓名,一个是对应的电话号码。结束第 4 页说明:设A=(a1,a2,.,ai-1,ai,ai+1,an)是一线性表1)均匀性:线性表的数据元素可以是各种各样的,但同一线性表中的元素必须是同一类型的;2)相邻性:每个元素至少有一个元素与之相邻。在表中ai-1领先于ai,ai领先于ai+1,称ai-1是ai的直接前趋,ai+1是ai的直接后继;a1,无前驱,an无后继。3)有限性:线性表中元素的个数n称为线性表的长度,n=0时称为空表4)有序性:ai是线性表的第i个元素,称i为数据元素ai的序号,每一个元素在线性表中的位置,仅取决于它的序号;二二 线性表根据其存储结构不同可分为:线性表根据其存储结构不同可分为:链式存储结构的链表顺序存储结构的顺序表结束第 5 页一一 线性链表的概念线性链表的概念1线性链表1、线性链表线性链表a a4 4a a3 3a a1 1a a2 2 0101010241014101010121014101610181020102210241026用一组任意的存储单元存储线性表中的数据元素,对每个数据元素除了保存自身信息外,还保存了直接后继元素的存储位置。用线性链表存储线性表时,数据元素之间的关系 是通过保存直接后继元素的存储位置来表示的结束第 6 页线性链表图示ai-1aia2a1ai+1nan用线性链表存储线性表时,数据元素之间的关系 是通过保存直接后继元素的存储位置来表示的2线性链表图示一般来说,我们并不需要写出直接后继的实际地址,为直观起见,通常用如下所示的图表示链表,其中,箭头表示相应单元中保存的是它所指向结点的存储地址。headhead是头指针是头指针headhead结束第 7 页结点结点:数据元素及直接后继的存储位置(地址)组成一个数据元素的存储结构,称为一个结点;结点的数据域结点的数据域:结点中用于保存数据元素的部分;结点的指针域结点的指针域:结点中用于保存数据元素直接后继存储地址的部分;3 线性链表有关术语线性链表有关术语存储数据元素存储数据元素存储后继结点存储后继结点 存储地址存储地址结点结点数据域数据域指针域指针域结束第 8 页头指针:头指针:用于存放线性链表中第一个结点的存储地址存储地址;空指针:空指针:不指向任何结点,线性链表最后一个结点的指针通常是空指针,空指针一般用NULL表示;头结点:头结点:线性链表的第一元素结点前面的一个附加结点,称为头结点;带头结点的线性链表带头结点的线性链表:第一元素结点前面增加一个附加结点的线性链表称为带头结点的线性链表;带头结点的线性链表图示headhead是头指是头指针针ai-1aia2a1ai+1nan 头结点头结点 空指针空指针headhead结束第 9 页线性链表的每个结点中只有一个指针域故也称为单链表单链表ai-1aia2a1ai+1nanheadhead是头指针是头指针headhead注:从以往二级考试来看都是用没有附加头结点的链表,如图所示结束第 10 页结点变量图示structnodeintx;structnode*next;;node:结构体类型名;node类型结构变量有两个域:x:用于存放线性表的数据元素,next:用于存放元素直接后继结点的地址;该类型结构变量用于表示线性链表中的一个结点;h和head:指向结构体结点的指针变量,用于存放node类型结构变量的地址;数据域数据域指针域指针域 x next node类型结构变量h h结构体结点指针变量h4线性链表的结点类型定义及指向结点的指针类型定义structnode*h;或structnode*head;结构体指针变量定义结构体类型定义结束第 11 页常用的引用格式常用的引用格式(一般格式一般格式):指针变量名指针变量名-结构体成员名结构体成员名如:如:h-x=10;h=h-next;注意:在引用过程中,数据类型还是成员的数据类型。如:h-x为成员x的数据类型(即整形)5怎样利用结构体指针变量来引用结构体成员structnode*h;或structnode*head;不常用引用格式:不常用引用格式:(*指针变量名)指针变量名).结构体成员名结构体成员名如:如:(*h).x=10;*h=(*h).next;结束第 12 页设head是指向链表第一个结点的指针变量,head用来保存线性链表中第一个结点的地址。ai-1aia2a1ai+1nanheadheadHead指向的链表二线性链表基本操作的算法假设线性表用不不带头结点的线性链表head的存储。下面讨论在这种存储方式下,线性表各种基本操作的算法。当线性表用线性链表存储时,对线性表各种基本操作实际上就是对存储在内存中的线性链表进行操作。结束第 13 页如何在线性链表head上实现线性表的基本操作?如何建空表?如何插入?删除?结束第 14 页1取元素操作(从链表中找到与输入的值m相等的元素)功能:1、将线性链表中第i个元素赋值给e2、从链表中找到与输入的值m相等的元素,并将其指针返回取元素操作主要步骤:1)查找链表的第i个元素结点;2)将第i个元素结点中的数据元素赋值给e;(或将其指针返回;)取元素元素操作图示ai-1aia2a1ai+1nanheadheadp1p1p p注:p、p1为工作指针结束第 15 页2插入操作功能:在线性链表head的第i个元素结点之前插入一个新元素结点;插入操作图示:插入前插入后ai-1aia2a1ai+1nanheadheadai-1aia2a1ai+1naneheadhead结束第 16 页插入操作主要步骤:1)查找链表L的第i-1个元素结点;2)为新元素建立结点;3)修改第i-1个元素结点的指针和新元素结点指针完成插入;结束第 17 页3删除操作功能:在线性链表L中删除第i个元素,并且用e返回其值删除操作图示:删除前删除后ai-1aia2a1ai+1nanheadheadai-1aia2a1ai+1nanheadhead结束第 18 页删除操作主要步骤:1)查找链表的第i-1个元素结点;2)修改第i-1个元素结点指针,删除第i个元素结点;3)将第i个元素结点中的数据元素赋值给e;4)回收被删除结点空间;用free(指针变量)函数释放删除结点的空间结束第 19 页4线性链表归并操作图示131n542n6papb归并31n6papcpb524结束第 20 页以前考过的线性链表的题目以前考过的线性链表的题目lP10 13题(即题(即2000年秋的填空题中的年秋的填空题中的13题)题)此题是链表归并问题:此题是链表归并问题:首先要搞清楚每个指针的用途。如首先要搞清楚每个指针的用途。如pt指针变量就指针变量就是用来指向建立的新结点。是用来指向建立的新结点。结束第 21 页P10 13题(即题(即2000年秋的填空题中的年秋的填空题中的13题)题)PNODE *padd(PNODE *pa,PNODE*pb)PNODE*pcr,*pt,*pc;pc=NULL;while(23)if(pa-y=pb-y)pt=(24)malloc(sizeof(PNODE);pt-x=pa-x+pb-x;pt-y=pa-y;pt-next=NULL;if(pc=NULL)pc=pcr=pt;else pcr-next=pt;(25);pa=pa-next;pb=pb-next;else if(26)pb=pb-next;else pa=pa-next;Return pc;本空显然是控制结束的,只有当pa、pb两个链表中都没有元素时才会结束分配的空间类型判断papb中当前元素y成员的值谁大将新增的结点连到工作指针pcr上结束第 22 页P10 13题(答案)题(答案)PNODE *padd(PNODE *pa,PNODE*pb)PNODE*pcr,*pt,*pc;pc=NULL;while(23)if(pa-y=pb-y)pt=(24)malloc(sizeof(PNODE);pt-x=pa-x+pb-x;pt-y=pa-y;pt-next=NULL;if(pc=NULL)pc=pcr=pt;else pcr-next=pt;(25);pa=pa-next;pb=pb-next;else if(26)pb=pb-next;else pa=pa-next;Return pc;pa&pbPNODE*pa-ypb-ypcr=pt结束第 23 页P21 14题(即题(即2001年春的填空题中的年春的填空题中的14题)题)PNODE *padd(PNODE *pa)PNODE*p1,*p2,*p;p1=p2=pa;while(p1)if(p1-x%2=0&(27)p=p1;p1=p1-next;(28)=p1;P-next=pa;(29)else p2=p1;p1=p1-next;Main()PNODE a10=1,2,3,4,5,6,7,8,9,10,*ha=a,*p;int i;for(i=0;i”,p-x);p=p-next;链表结尾的指针(NULL)如果p1指向的结点就是第一个结点,则不用移本行是从链表中删除结点将p指向的结点插到链表的头部没找着偶数值结点时,指针向后移,P2一直在P1的前一个结点结束第 24 页P21 14题(答案)题(答案)PNODE *padd(PNODE *pa)PNODE*p1,*p2,*p;p1=p2=pa;while(p1)if(p1-x%2=0&(27)p=p1;p1=p1-next;(28)=p1;P-next=pa;(29)else p2=p1;p1=p1-next;Main()PNODE a10=1,2,3,4,5,6,7,8,9,10,*ha=a,*p;int i;for(i=0;i”,p-x);p=p-next;NULLp1!=pap2-next=p1pa=p结束第 25 页P31 14题(即题(即2001年秋的填空题中的年秋的填空题中的14题)题)Struct node *deladd(struct node *h,int value)struct node *p1,*p2;int flage=0;p1=p2=h;while(p1&flage=0)if(p1-x=value)flage=1;if(p1=h)h=(27);free(p1);else p2-next=(28);free(p1);else p2=p1;p1=(29);If(flage=0)p1=(struct node*)malloc(sizeof(struct node);p1-x=value;p1-next=0;if(h=0)h=p1;else (30);链表结束或找到结点不执行循环Flage是一个标志变量用来标志是否找到结点如果找到符合每件的结点,就删除结点如果没找到适合每件的结点,则指针后移如果没找到结点构造一个新结点如果链表为空就直接将构造的结点作为链表的第一个结点,否则将其插入到链表最后结束第 26 页P31 14题(答案)题(答案)Struct node *deladd(struct node *h,int value)struct node *p1,*p2;int flage=0;p1=p2=h;while(p1&flage=0)if(p1-x=value)flage=1;if(p1=h)h=(27);free(p1);else p2-next=(28);free(p1);else p2=p1;p1=(29);If(flage=0)p1=(struct node*)malloc(sizeof(struct node);p1-x=value;p1-next=0;if(h=0)h=p1;else (30);p1-nextp1-nextp1-nextp2-next=p1结束第 27 页P42 14题(即题(即2002年春的填空题中的年春的填空题中的14题)题)(27)create(int n)struct node *p,*p1,*p2,*h=NULL;int i=0;if(nx);p-next=NULL;if(h=NULL)(29);else p1=p2=h;while(p2&p-x=p2-x)p1=p2;p2=p2-next;if(p2=h)(30);h=p;else p-next=p2;p1-next=p;i+;Return h;函数返回值类型如果找到的插入位置是第一个结点创建结点个数的控制如果链表为空,直接插入结点作为首结点如果找到的插入位置不是第一个结点就在找到的位置插入结束第 28 页P42 14题(答案)题(答案)(27)create(int n)struct node *p,*p1,*p2,*h=NULL;int i=0;if(nx);p-next=NULL;if(h=NULL)(29);else p1=p2=h;while(p2&p-x=p2-x)p1=p2;p2=p2-next;if(p2=h)(30);h=p;else p-next=p2;p1-next=p;i+;Return h;structnode*p-next=p2inext=NULL)return head;if(dir=0)while(p1-next)p2=p1;p1=p1-next;(23)=NULL;p1-next=(24);head=p1;else head=(25);p2=head;while(p2-next)p2=p2-next;(26);p1-next=NULL;return head;右移一次如果是空链表或只有一个结点的链表左移一次找到最后一个结点使得p1指向最后一个结点P2指向倒数第二个结点将最后一个结点(p1指向的)移到链表头找到最后一个结点P2指向最后一个结点结束第 30 页P51 14题(答案)题(答案)Struct node *loop(struct node *head,int dir)struct node *p1,*p2;p1=head;if(p1=NULL|p1-next=NULL)return head;if(dir=0)while(p1-next)p2=p1;p1=p1-next;(23)=NULL;p1-next=(24);head=p1;else head=(25);p2=head;while(p2-next)p2=p2-next;(26);p1-next=NULL;return head;p1-nextp2-nextheadp2-next=p1结束第 31 页P60 14题(即题(即2003年春的填空题中的年春的填空题中的14题)题)Struct node *find_del(struct node *head,int *pm)struct node *p1,*p2,*pmax,*pre;if(head=NULL)return NULL;pmax=(23);p2=p1=pmax;while(p1)if(p1-x (24)pre=p2;pmax=p1;p2=p1;p1=p1-next;if(pmax=head)head=pmax-next;else (25)=pmax-next;(26)=pmax;Return head;如果是空链表就结束函数,并返回空指针首先认为第一个结点是x值最大的结点Pmax始终指向当前x值最大的结点P1为工作指针(活动指针)如果首结点的x值最大就删除首结点删除pmax指向的结点将x值最大的结点地址保存到pm指向指向的指针变量中结束第 32 页P60 14题(即题(即2003年春的填空题中的年春的填空题中的14题)题)Struct node *find_del(struct node *head,int *pm)struct node *p1,*p2,*pmax,*pre;if(head=NULL)return NULL;pmax=(23);p2=p1=pmax;while(p1)if(p1-x (24)pre=p2;pmax=p1;p2=p1;p1=p1-next;if(pmax=head)head=pmax-next;else (25)=pmax-next;(26)=pmax;Return head;headpmax-xpre-next*pm结束第 33 页c 2.2 2.2 线性表的线性表的顺序表示顺序表示和实现和实现 一线性表的顺序存储结构顺序表1线性表的顺序存储结构2顺序表的类型定义二顺序表的基本操作算法三利用基本操作实现线性表的其他操作2、顺序链表、顺序链表2、顺序链表、顺序链表结束第 34 页为了存储线性表,至少要保存两类信息:1)线性表中的数据元素;2)线性表中数据元素的顺序关系;在计算机内部可以采用不同的方式来存储一个线性表,其中最简单的方式就是本节要讲的线性表的顺序存储结构。结束第 35 页线性表的顺序存储结构,就是用一组连续的内存单元依次存放线性表的数据元素。用顺序表存储线性表时,数据元素之间的逻辑关系,是通过数据元素的存储顺序反映出来的a a1 1a a2 2a ai i-1-1a ai ia ai i+1+1a an n线性表(a1,a2,a3,.an)的顺序存储结构用顺序存储结构存储的线性表称为顺序表一一 线性表的顺序存储结构线性表的顺序存储结构顺序表顺序表1线性表的顺序存储结构结束第 36 页说明:在顺序存储结构下,线性表元素之间的逻辑关系,可通过元素的存储顺序反映(表示)出来,所以只需存储数据元素的信息;假没线性表中每个数据元素占用k个存储单元,那么,在顺序存储结构中,线性表的第i个元素的存储位置与第1个元素的存储位置的关系是:Loc(ai)=Loc(a1)+(i1)k这里Loc(ai)是第i个元素的存储位置,Loc(a1)是第1个元素的存储位置,也称为线性表的基址;结束第 37 页怎样在计算机上实现线性表的顺序存储结构?2、顺序表的类型定义以上用自然语言描述了线性表的顺序存储结构,怎样将这种存储方式在计算机上实现?为此,我们用C语言对这种存储方式进行描述,我们知道C语言一维数组的机内表示也是顺序结构,因此,可借用C语言的一维数组实现线性表的顺序存储。结束第 38 页顺序表的类型定义#defineLIST_INIT_SIZE100/线性表存储空间的初始分配量#defineLISTINCREMENT10/线性表存储空间的分配增量typedefstructElemType*elem;/线性表存储空间基址intlength;/当前线性表长度intlistsize;/当前分配的线性表存储空间大小/(以sizeof(ElemType)为单位)SqList;SqList:类型名,SqList类型的变量是结构变量,它的三个域分别是:*elem:存放线性表元素的一维数组基址;其存储空间在初始化操作(建空表)时动态分配;length:存放线性表的表长;listsize:用于存放当前分配(存放线性表元素)的存储空间的大小。结束第 39 页顺序表图示顺序表图示a a1 1a a2 2a ai i-1-1a ai ia ai i+1+1a an nL.lengthL.lengthL.L.listsizelistsizeL.L.elemelemn nLIST_INIT_SIZELIST_INIT_SIZE存放线性表元素的一维数组设A=(a1,a2,a3,.an)是一线性表,L是SqList类型的结构变量,用于存放线性表A,则L在内存中的状态如图所示:结束第 40 页如何在顺序表上实现线性表的基本操作?如何建空表?如何求表长?如何插入?删除?设线性表用顺序表L存储,下面我们介绍用顺序表存储线性表时,各种基本操作的算法。当线性表用顺序表存储时,对线性表各种基本操作实际上就是对存储在内存中的顺序表进行操作。二、顺序表的基本操作算法结束第 41 页取元素操作图示1取元素操作GetElem_Sq(SqListL,inti,ElemType&e)功能:将顺序表中第i个元素赋值给e算法:StatusGetElem_Sq(SqList&L,inti,ElemType&e)If(iL.length-1)returnERROR;/i非法e=L.elemi-1;/将顺序表中第i个元素赋值给ereturnOK;/GetElem_Sq算法2.4由于C语言的一维数组下标从0开始,故线性表的第一个元素放在L.elem0,第i个素放L.elemi-1中,最后一个元素放在L.elemL.length-1中。结束第 42 页 取元素操作 n nLIST_INIT_SIZELIST_INIT_SIZEL.lengthL.lengthL.L.listsizelistsizeL.L.elemelem0 01 1LIST_INIT_SIZE-1LIST_INIT_SIZE-1a a1 1a a2 2a ai i-1-1a ai ia ai i+1+1a an nn n LIST_INIT_SIZE-1LIST_INIT_SIZE-1e ea ai i再演示一次结束第 43 页2插入操作ListInsert_Sq(&L,i,e)参数:L:顺序表,i插入位置,e被插入元素;因为插入操作对顺序表进行修改,所以用了引用参数&L;功能:在顺序表L的第i个元素之前插入一个新元素e;插入操作示意图:结束第 44 页插入操作图示插入操作主要步骤:1)i是否合法,若合法转2),否则算法结束,并返回ERROR;2)L是否已满,若未满转3),否则算法结束,并返回ERROR;3)将顺序表ai及之后的所有元素后移一个位置;4)将新元素写入空出的位置;5)表长+1;用鼠标单击图中的绿字结束第 45 页 插入元素操作e eL.lengthL.lengthL.L.listsizelistsizeL.L.elemelem0 01 1LIST_INIT_SIZE-1LIST_INIT_SIZE-1a a1 1a a2 2a ai i-1-1a ai ia ai i+1+1a an nn n LIST_INIT_SIZE-1LIST_INIT_SIZE-1结束第 46 页 插入元素操作L.lengthL.lengthL.L.listsizelistsizeL.L.elemelem0 01 1LIST_INIT_SIZE-1LIST_INIT_SIZE-1a a1 1a a2 2a ai i-1-1e ea ai ia an nn+1n+1 LIST_INIT_SIZE-1LIST_INIT_SIZE-1结束第 47 页StatusListInsert_Sq(SqList&L,inti,ElemTypee)/在顺序表L中第i个位置之前插入新的元素e,/i的合法值为1iL.length+1,当i=L.length+1时/e插在表尾if(iL.length+1)returnERROR;/i值不合法if(L.length=L.listsize)returnERROR;/顺序表已满for(j=L.length-1;j=i-1;-j)L.elemj+1=L.elemj;/插入位置及之后的元素后移一个位置L.elemi-1=e;/插入e+L.length;/表长增1returnOK;/ListInsert_Sq算法2.5a插入操作算法为初学者易于理解插入算法,这里通过下标引用L.elem中的元素。结束第 48 页3删除操作ListDelete_sq(SqList&L,inti,ElemType&e)功能:删除顺序表L的第i个元素,并用e返回删除操作图示结束第 49 页删除操作主要步骤:1)i不合法或表空,算法结束,并返回ERROR;否则转2)2)将ai赋值给e;3)将顺序表中ai后面的元素依次向前移动一个位置;4)表长-1删除操作图示用鼠标单击图中的绿字结束第 50 页 删除元素操作L.lengthL.lengthL.L.listsizelistsizeL.L.elemelem0 01 1LIST_INIT_SIZE-1LIST_INIT_SIZE-1a a1 1a a2 2a ai i-1-1a ai ia ai i+1+1a an nn n LIST_INIT_SIZE-1LIST_INIT_SIZE-1结束第 51 页 删除元素操作L.lengthL.lengthL.L.listsizelistsizeL.L.elemelem0 01 1LIST_INIT_SIZE-1LIST_INIT_SIZE-1a a1 1a a2 2a ai i-1-1aiai+1+1a an nn-1n-1 LIST_INIT_SIZE-1LIST_INIT_SIZE-1结束第 52 页删除操作算法StatusListDelete_Sq(SqList&L,inti,ElemType&e)/在顺序表L中删除第i个元素,并用e返回其值/i的合法值为1iL.length,/表空L.length=0则iL.lengthif(iL.length)returnERROR;/i值不合法或表空e=L.elemi-1;/被删除元素的值赋给efor(j=i;j=L.length-1;+j)L.elemj-1=L.elemj/被删除元素之后的元素前移-L.length;/表长减1returnOK;/ListDelete_Sq算法2.56a为初学者易于理解插入算法,这里通过下标引用L.elem中的元素。结束第 53 页二级考试以往出现的顺序表试题二级考试以往出现的顺序表试题lP61 2003春春15题题 顺序表排序顺序表排序lP49 2002秋秋12题题 顺序表插入元素顺序表插入元素lP40 2002春春11题题 顺序表处理顺序表处理lP29 2001秋秋12题题 顺序表处理顺序表处理lP20 2001春春12题题 顺序表排序顺序表排序结束第 54 页二、二、文件操作1、文件类型指针变量的定义格式:FILE如:FILE*fp;、文件打开与关闭)打开文件-fopen()函数如:FILE*fp;if(fp=fopen(“c:tc2example1.txt”,”w”)=NULL)printf(“Filecannoetbeopened!n”);exit(0);结束第 55 页文件打开方式:MODE文件类型文件类型处理方式处理方式指定文件不存在指定文件不存在时时指定文件存在时指定文件存在时“r”文本文件文本文件读取读取出错出错正常打开正常打开“r+”文本文件文本文件读取读取/写入写入出错出错正常打开正常打开“rb”二进制文件二进制文件读取读取出错出错正常打开正常打开“rb+”二进制文件二进制文件读取读取/写入写入出错出错正常打开正常打开“w”文本文件文本文件写入写入建立新文件建立新文件文件原有内容丢失文件原有内容丢失“w+”文本文件文本文件写入写入/读取读取建立新文件建立新文件文件原有内容丢失文件原有内容丢失“wb”二进制文件二进制文件写入写入建立新文件建立新文件文件原有内容丢失文件原有内容丢失“wb+”二进制文件二进制文件写入写入/读取读取建立新文件建立新文件文件原有内容丢失文件原有内容丢失“a”文本文件文本文件追加追加建立新文件建立新文件在文件原有内容后追加在文件原有内容后追加“a+”文本文件文本文件读取读取/追加追加建立新文件建立新文件在文件原有内容后追加在文件原有内容后追加“ab”二进制文件二进制文件追加追加建立新文件建立新文件在文件原有内容后追加在文件原有内容后追加“ab+”二进制文件二进制文件读取读取/追加追加建立新文件建立新文件在文件原有内容后追加在文件原有内容后追加结束第 56 页)关闭文件)关闭文件-fclose()函数函数关闭文件的功能:关闭文件的功能:是将写入到内容文件指针位置的内容存储到硬盘上的文件中,并关闭文件,释放文件指针。在程序终止前必须关闭文件。否则,向文件中存入的内容全部没有存入。使用格式:使用格式:fclose(文件指针);结束第 57 页文件的相关函数文件的相关函数文件所有的读写,输入输出函数在使用时,必须包含头文件:stdio.h即:#include1、feof(文件指针变量)本函数是判断文件是否结束。如果返回值为:(真),则表示已到文件尾;如果返回值为:(假),则表示未到文件尾。、fgetc(文件指针变量)从文件中读出一个字符,并将文件当前位置移到下一位置。返回值:读出的值;EOF读出出错、fputc(字符,文件指针变量)将字符(常量或变量)写入文件指针指向的文件当前位置。返回值:写入的值;EOF写入出错结束第 58 页字符串输入输出函数、fgets(字符串变量名,n,文件指针变量)从文件中读出一个长度为n-1的字符串,放到字符串变量。返回值:读出字符串的长度;EOF读出出错、fputs(字符串,文件指针变量)将字符串(常量或变量)写入文件指针指向的文件当前位置。返回值:写入的字符数;EOF写入出错结束第 59 页格式化输入输出函数6、fscanf(fp,“输入格式串”,输入项)完成从文件中读入操作的函数。7、fprintf(fp,“输出格式串”,输出项)向文件输出数据的函数。向fp指向的文件按“输出格式串”中规定,输出到文件中。结束第 60 页块输入输出函数8、fread(buffer,size,count,fp)9、fwrite(buffer,size,count,fp)参数说明:buffer是一个指针,对于fread来说是读入数据块的存放地址;对fwrite来说,它是输出数据块的地址。这里的地址是指数据块的首地址,通常用数据名(或数组指针或结构体数组)来代表。size是要读/写数据块的字节数count的值是要读/写多少个size字节的数据块fp是一个文件指针,指示已经打开的文件(由fopen()函数打开的)结束第 61 页文件定位函数8、rewind(fp)将文件读写位置重新设置在文件头部。9、fseek(fp,longoffset,intorigin)参数说明:1)fp是指向要进行读写操作的文件结构指针,该文件已由fopen()函数打开;2)origin是计算文件指针位置的起始点;文件指针的起始点可以设置在三个不同的位置上,用三个符号常量或数字代表:SEEK_SET或0代表文件头SEEK_CUR或1代表文件当前位置SEEK_END或2代表文件尾3)offset是距起始点的偏移位置,以字节为单位。结束第 62 页二级考试以往出现的文件操作试题二级考试以往出现的文件操作试题lP10 2000秋秋14题题 在文件中查找并替换在文件中查找并替换lP19 2001春春10题题 从文件读入从文件读入/向文件输出向文件输出lP29、30 2001秋秋11、13题题 从文件读入从文件读入lP40 2002春春11题题 从文件读入从文件读入l在每次的上机题中,编写的程序输出内容必须输出在每次的上机题中,编写的程序输出内容必须输出到文件中到文件中结束第 63 页三、递归问题三、递归问题lP7、P8 2000秋秋5题、题、8题题 lP20 2001春春4、12题题 用递归实现排序(冒泡排序)用递归实现排序(冒泡排序)lP28 2001秋秋8题题lP49 2002秋秋11题题lP59 2003 春春11题题结束第 64 页四、字符串操作问题四、字符串操作问题lP9 2000秋秋12题题 从字符串中删除子串从字符串中删除子串lP20 2001春春13题题 插入子串插入子串lP30 2001秋秋13题题 读子串读子串lP39 2002春春10题题 字符串加密字符串加密lP51 2002秋秋15题题 在字符串中查找子串在字符串中查找子串lP59 2003 春春12题题 字符串处理字符串处理结束第 65 页五、变量作用域与静态变量问题五、变量作用域与静态变量问题lP6 2000秋秋3题题 变量作用域变量作用域lP27 2001秋秋7题题 静态变量静态变量lP38 2002春春8题题 变量作用域与静态变量变量作用域与静态变量lP47 2002秋秋8题题 变量作用域变量作用域lP57 2003春春8题题 变量作用域变量作用域结束第 66 页六、数列或数字处理问题六、数列或数字处理问题lP9 2000秋秋11题题 lP20 2001春春11题题 lP28 2001秋秋10题题lP50 2002秋秋13题题lP60 2003 春春13题题结束第 67 页七、排序问题七、排序问题l共出现三次排序问题:共出现三次排序问题:使用了使用了1次冒泡排序,次冒泡排序,2次选择排序次选择排序P41 2002春春 13题题结束第 68 页上上 机机 考考 试试-改错题改错题l第一:看函数返回值类型是否正确第一:看函数返回值类型是否正确 03年春年春06第二个错误第二个错误 03年春年春01第一个错误第一个错误 02年秋年秋06第一个错误第一个错误 02年秋年秋04第二个错误第二个错误l第二:看函数形参与实参的对应关系(个数、顺序、第二:看函数形参与实参的对应关系(个数、顺序、类型是否相同)类型是否相同)03年春年春05第三个错误第三个错误 03年春年春03第一个错误第一个错误 03年春年春04第二个错误第二个错误 03年春年春02第一个错误第一个错误 03年春年春01第四个错误第四个错误 02年秋年秋05第四个错误第四个错误 02年秋年秋04第二个错误第二个错误 02年秋年秋03第一个错误第一个错误 02年秋年秋02第一个错误第一个错误 02年秋年秋01第一个错误第一个错误结束第 69 页上上 机机 考考 试试-改错题改错题l第三:看是否少头文件第三:看是否少头文件 03年春年春06第一个错误第一个错误 02年秋年秋04第一个错误第一个错误 02年春年春04第一个错误第一个错误 02年春年春01第一个错误第一个错误 01年秋年秋03第一个错误第一个错误 01年秋年秋02第一个错误第一个错误 01年秋年秋01第一个错误第一个错误 00年秋年秋03第一个错误第一个错误 00年秋年秋01第一个错误第一个错误1、stdio.h 当用到文件输入当用到文件输入/输出函数及常量值输出函数及常量值NULL时,如:时,如:fread(),fwrite(),fopen(),fclose(),fscanf(),fprintf(),scanf(),printf(),gets(),puts(),putchar(),getchar()等函数等函数2、string.h 当用到字符串处理函数时,如:当用到字符串处理函数时,如:strlen(),strcpy(),strcmp(),strcat()等函数。等函数。3、ctype.h 当用到字符处理函数时,如:当用到字符处理函数时,如:isdigit(),isalpha()等。等。4、math.h 当用到数学函数时,如:当用到数学函数时,如:sqrt(),pow(),exp(),fabs(),abs()等函数。等函数。结束第 70 页上上 机机 考考 试试-改错题改错题l第四:函数体中变量定义及赋初值出错第四:函数体中变量定义及赋初值出错 03年春年春06第四个错误第四个错误 03年春年春03第二个错误第二个错误 03年春年春02第四个错误第四个错误 03年春年春01第三个错误第三个错误 02年秋年秋06第三个错误第三个错误 02年秋年秋05第三个错误第三个错误 02年秋年秋02第三个错误第三个错误错误的方式有错误的方式有:赋值类型不对,少定义变量,定义的数组元素:赋值类型不对,少定义变量,定义的数组元素不确定等。不确定等。结束第 71 页上上 机机 考考 试试-改错题改错题l第五:其它出错的方面第五:其它出错的方面 1、如少、如少 :02秋秋-04第第4个错,个错,02年春年春-01第第2个错个错 2、如循环结束条件不正确:、如循环结束条件不正确:03-05第第1个错(多数会造个错(多数会造成数组越界)成数组越界),02秋秋-06第第4个错个错 3、等号写成赋值号:如、等号写成赋值号:如03-04第第3个错个错 4、循环语句格式错:如、循环语句格式错:如03-03第第3个错个错,5、判断真假时,易出错:如、判断真假时,易出错:如02秋秋03第第4个错个错 6、数组下标运算符、数组下标运算符写成():如写成():如03-05第第4个错,个错,02秋秋02第第3个错个错 结束第 72 页需要记住的几个算法需要记住的几个算法 1、排序:选择排序、冒泡排序、排序:选择排序、冒泡排序 2、判断素数的算法、判断素数的算法 3、计算倒序数的算法:如输入、计算倒序数的算法:如输入4321,则轮换成:,则轮换成:1234 4、最大值、最小值求法、最大值、最小值求法 5、最大公约数的求法,最小公倍数的求法、最大公约数的求法,最小公倍数的求法
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!