c语言程序设计竞赛辅导课件_第1页
c语言程序设计竞赛辅导课件_第2页
c语言程序设计竞赛辅导课件_第3页
c语言程序设计竞赛辅导课件_第4页
c语言程序设计竞赛辅导课件_第5页
已阅读5页,还剩91页未读 继续免费阅读

下载本文档

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

文档简介

5/21/2020,1,c程序设计竞赛,竞赛与考试的区别,1,PPT学习交流,一、注重程序效率,二、信息数字化,1.数学模型提高程序效率,2.算术技巧提高程序效率,三、数据存储(机试的共同特点),1.状态信息数字化,2.特征信息数字化,文件操作,3.优化数据结构提高程序效率,2,PPT学习交流,1.数学知识提高程序效率,【例1】杨辉三角形的应用,求n次二项式各项的系数:已知二项式的展开式为:(a+b)n=Cn0an+Cn1an-1b+Cn2an-2b2+Cnnbn它们共有n+1个系数。,若你编写程序用n!/(j!*(n-j)!)计算组合系数Cnj,会怎样?,3,PPT学习交流,5/21/2020,4,coeff(inta,intn)if(n=1)a1=1;a2=1;elsecoeff(a,n-1)an+1=1for(i=n;i=2;i-)ai=ai+ai-1;a1=1;,程序如下:,main()inta100,i,n;scanf(“%d”,返回,4,PPT学习交流,5/21/2020,5,【例2】最大公约数的应用,数组中有n个数据,要将它们顺序循环向后移k位,即前面的元素向后移k位,后面的元素则循环向前移k位,例:1、2、3、4、5循环移3位后为:3、4、5、1、2。考虑到n会很大,不允许用2*n以上个空间来完成此题。,若题目没有关于存储空间的限制,可以方便地开辟两个一维数组,一个存储原始数据,另一个存储移动后的数据。,分析1:,5,PPT学习交流,5/21/2020,6,程序1如下:,main()inta100,b100,i,n,k;scanf(“%d%d”,6,PPT学习交流,5/21/2020,7,分析2:,1)一组循环移动的情况:通过计算我们可以确定某个元素移动后的具体位置。当n=5,k=3时,可计算出14,42,25,53,31的位置,一组移动正好将全部数据按要求进行了移动。这样只需一个辅助变量就可完成整个移动过程。,2)多组循环移动的情况:,但若把问题就这样按一组移动去解决,会怎样?,7,PPT学习交流,5/21/2020,8,数学模型:,问题与最大公约数有关,即循环移动的组数等于N与K的最大公约数。这就是利用数学知识建模的过程。“感知”是否正确可以通过数学方法证明(就象哥德巴赫猜想),或通过程序进行大量数据验证。,1)编写函数,完成求n,k最大公约数m的功能2)进行m组循环移动。3)每组移动,和程序1一样,通过计算可以确定某个元素移动后的具体位置。在移动之前,用临时变量存储需要被覆盖的数据。,实现要点:,8,PPT学习交流,5/21/2020,9,程序2如下:,main()inta100,b,i,n,k,m;printf(“inputthenumberofdata”);scanf(“%d”,返回,9,PPT学习交流,5/21/2020,10,ff(inta,intb)t=1for(i=2;i=3)num=num+1;printf(“Thenumberof=90is“%d”,num);,程序如下:,对于计算其成绩高于90分的课程数目,应如何编写?,17,PPT学习交流,5/21/2020,18,【例2】开灯问题:有从1到n依次编号的n个同学和n盏灯。1号同学将所有的灯都关掉;2号同学将编号为2的倍数的灯都打开;3号同学则将编号为3的倍数的灯作相反处理(该号灯如打开的,则关掉;如关闭的,则打开);以后的同学都将自己编号的倍数的灯,作相反处理。问经n个同学操作后,哪些灯是打开的?,18,PPT学习交流,5/21/2020,19,1)定义有n个元素的a数组,它的每个下标变量ai视为一灯,i表示其编号。ai=1表示灯处于打开状态,ai=0表示灯处于关闭状态。2)当ai为1时,ai被重新赋为0;当ai为0时,ai被重新赋为1。但通过以下算术运算:ai=1-ai就很好地模拟“开关”灯的操作。我们把这种形式的赋值语句形象地称为“乒乓开关”。,分析:,19,PPT学习交流,5/21/2020,20,main()intn,a1000,i,k;printf(“inputanumber”);scanf(“%d”,程序如下:,程序中第二个for循环i枚举的不是灯的编号,而是编号为i的同学,其内层循环中,就将包含i因素的灯的编号为“i*k”的灯,改变其状态。程序中还用计算省去了用if语句判断编号能被哪些数整除的过程。,20,PPT学习交流,5/21/2020,21,【例3】右图中所示的圆圈中,我们把相隔一个数据的两个数(如1和10,3和5,3和6)称作是“一对数”,试编写程序求出乘积最大的一对数和乘积最小的一对数。输出格式如下:max:?*?=?min:?*?=?其中?表示:找到的满足条件的数和乘积。,11716810121651993158126,21,PPT学习交流,5/21/2020,22,1)数据有前后“位置”关系,必须用数组来存储。数组定义为anum,则有a0anum-1共num个元素。2)用i代表下标,题目就是顺序将a(i-1)与a(i+1)相乘,求出乘积的最大值和最小值即可。3)关键是i=num-1时,保证i+1的“值”是0;当i=0时,保证i-1的“值”是num-1,把数组当成圆圈操作通过求余运算很容易实现:当i=num-1时,(i+1)%num等于0;当i=0时(num+i1)%num等于num-1。,实现要点:,22,PPT学习交流,5/21/2020,23,4)通过求余运算,便“避免了”判别数组起点与终点的操作。用变量Max记录当前最大的乘积,m、n为对应的两个乘数;变量min记录当前最小的乘积,s、t为对应的两个乘数。,23,PPT学习交流,5/21/2020,24,程序如下:,main()intmax=1,min=32767,a100,num,i,k,m,n,s,t;printf(“inputanumber”);scanf(“%d”,返回,24,PPT学习交流,5/21/2020,25,2)构造下标,【例】请编写程序统计100人的身高分布,分布等级:180以上、175180、170175、165170、160165、155-160、155以下。,分析:,此类问题表面看不太适合用switch语句来完成。因为即使身高是整数若不借助数学运算至少也有20多种情况,需要20多个case子句。但若注意到每个等级基本是5分一段,通过除法运算将成绩(变量sg)除以5后,分支最多也就只有6个了。,25,PPT学习交流,5/21/2020,26,main()intsg,k,s7,t;printf(“Input%dheight:”,100);for(k=1;k300)printf(“Inputerror!,Inputagain”);k-;continue;t=sg/5-30;if(t=6)s6=s6+1;t=6;elsest=st+1;,程序如下:,通过计算t=sg/5-30使七类统计区间与数组下标对应,提高了程序效率。,这个if语句的功能是什么?,26,PPT学习交流,5/21/2020,27,for(t=0;k180:%d”,s6”);break;,返回,27,PPT学习交流,1)数组存储减少条件判断,【例1】某次选举,要从五个候选人(编号分别为1、2、3、4、5)中选一名厂长。请编写程序完成统计选票的工作。,实现要点:1虽然选票发放的数量一般情况下是已知的,但收回的数量通常是无法预知的,所以程序采用随机循环,设计停止标志为“-1”。2统计过程的简单方法为:先为五个候选人各自设置五个“计数器”a,b,c,d,e,然后根据录入数据,通过多分支语句或嵌套条件语句决定为某个“计数器”累加1。最后输出统计结果。,3.优化数据结构提高程序效率,28,PPT学习交流,main()intxp,a,b,c,d,e;a=b=c=d=e=0;printf(inputintegernumber:);scanf(%d,29,PPT学习交流,printf(1snumberofvotesis%dn,a);printf(2snumberofvotesis%dn,b);printf(3snumberofvotesis%dn,c);printf(4snumberofvotesis%dn,d);printf(5snumberofvotesis%dn,e);,30,PPT学习交流,实现要点:把五个“计数器”用数组代替,选票中候选人的编号xp正好做下标,执行Axp=Axp+1就可方便地将选票内容累加到相应的“计数器”中。,程序2如下:,返回,程序改进:这样的程序效率太低,因为程序在执行中要进行大量的比较运算。利用数组做计数器问题可得到很好的解决。,31,PPT学习交流,main()inti,xp,a6;printf(“inputdatauntilinput-1”);scanf(“%d”,32,PPT学习交流,【例2】统计找数字对的出现频率,算法说明:输入N(2N100)个数字(在0与9之间),然后统计出这组数中相邻两数字组成的链环数字对出现的次数。例如:输入:N=20表示要输入数的数目01598722232787879659输出:(7,8)=2(8,7)=3指(7,8)、(8,7)数字对出现次数分别为2次、3次(7,2)=1(2,7)=1(2,2)=2(2,3)=1(3,2)=1,33,PPT学习交流,算法设计:其实并不是只有一维数组这样的数据结构可以在算法设计中有多采的应用,根据数据信息的特点,二维数组的使用同样可以使算法易于实现,此题就正是如此。用10*10的二维数组(行、列下标均为0-9),存储统计结果,i行j列存储数字对(i,j)出现的次数,无需存储原始数据,用其做下标,在数据输入的同时就能统计出问题的结果,,34,PPT学习交流,main()inta1010,m,i,j,k1,k0;print(“Howmanyisnumbers?”);input(n);print(“Pleaseinputthesenumbers:”);input(k0);for(i=2;i0andaji0)print(“i,j”)=aij,“j,i”=aji),35,PPT学习交流,2)数组使信息有序化,【例1】给1000个职工发工资,每人的工资从键盘输入。为了保证不要临时兑换零钱,且取款的张数最少,取工资前要统计出所有职工的工资所需各种币值(100,50,20,10,5,2,1元共七种)的张数。请编写程序。,当题目中的数据缺乏规律时,很难把重复的工作抽象成循环不变式来完成,但先用数组结构存储这些地信息后,问题就迎刃而解了,,36,PPT学习交流,main()inti,j,GZ,A,B8=0,100,50,20,10,5,2,1,S8;for(j=1;j=7;j=j+1)Sj=0;for(i=1;i=0;i=i-1)print(“-”,engai);,41,PPT学习交流,例1,【例1】求X,使X2为一个各位数字互不相同的九位数。分析:只能用枚举法尝试完成此题。由X2为一个九位数,估算X应在1000032000之间。,3)记录状态信息,42,PPT学习交流,算法设计:1)用一个10个元素的状态数组p,记录数字09在X2中出现的情况。数组元素都赋初值为1,表示数字09没有被使用过。2)对尝试的每一个数x,求x*x,并取其各个位数字,数字作为数组的下标,若对应元素为1,则该数字第一次出现,将对应的元素赋为0,表示该数字已出现一次。否则,若对应元素为0,则说明有重复数字,结束这次尝试。3)容易理解当状态数组p中有9个元素为0时,就找到了问题的解。但这样判定有解,需要扫描一遍数组p。为避免这个步骤,设置一个计数器k,在取x*x各个位数字的过程中记录不同的数字的个数,当k=9时就找到了问题的解。,43,PPT学习交流,main()longx,y1,y2;intp10,2,i,t,k,num=0;for(x=10000;x32000;x=x+1)for(i=0;i=9;i=i+1)pi=1;y1=x*x;y2=y1;k=0;for(i=1;i=9.i=i+1)t=y2mod10;y2=y2/10;if(pt=1)k=k+1;pt=0;elsebreak;if(k=9)num=num+1;print(“No.”,num,“:n=”,x,“n2=”,y1);,44,PPT学习交流,【例2】游戏问题:12个小朋友手拉手站成一个圆圈,从某一个小朋友开始报数,报到7的那个小朋友退到圈外,然后他的下一位重新报“1”。这样继续下去,直到最后只剩下一个小朋友,求解这个小朋友原来站在什么位置上呢?,实现要点:首先是如何表示状态的问题。开辟12个元素的数组,记录12个小朋友的状态,开始时将12个元素的数组值均赋为1,表示大家都在圈内。这样小朋友报数就用累加数组元素的值来模拟,累加到7时,该元素所代表的小朋友退到圈外,将相应元素的值改赋为0,这样再累加到该元素时和不会改变,又模拟了已出圈外的状态。,45,PPT学习交流,main()inta100,i,k,p,m;printf(“inputnumbersofgame:”);scanf(“%d”,其中n表示做游戏的总人数,k表示开始及状态数组的下标变量,m表示退出圈外的报数点,即报m的人出队,p表示已退出圈外的人数。,程序如下:,46,PPT学习交流,p=0;while(pn)k=1;x=x+ak;printf(“%d”,k);ak=0;p=p+1;for(i=1;in时,赋k=1,表示n号报完数就该1号报数。模拟了将n个人连成了一个“圈”的情况。2、x为“报”出的数,x=m时输出退出圈外人的下标k,将ak赋值为0;3、p=n-1时游戏结束;4、最后检测还在圈上ai=1的人,输出其下标值即编号。,返回,47,PPT学习交流,48,二、信息数字化1.状态信息数字化,1)提高效率【例1】冒泡排序算法的改进,分析:,冒泡排序算法的基本思想就是:相邻数据比较若逆序则交换,逐渐将小数据冒到数组的前面,大的数据则沉到数组的后面,从而完成排序工作。,48,PPT学习交流,5/21/2020,49,数据原本有序的概率并不高,但经过少于n-1趟操作后,数据已经有序的概率却非常高。为提高效率,可以对冒泡排序算法进行改进,当发现某趟没有交换后就停止下一趟的比较操作。用标志量来记录每趟交换数据的情况,如flag=0表示没有进行过交换,一但有数据进行交换则置flag为1,表示已进行过交换。当一趟比较交换完成后,若flag仍为0时,则无需进行下一趟操作,否则若flag为1时,只能继续进行下一趟操作。,49,PPT学习交流,5/21/2020,50,main()inti,j,t,n,a100,flag;printf(“inputdatanumber(=i;j-)if(ajaj-1)t=aj;aj=aj-1;aj-1=t;flag=1;for(i=0;in;i+)printf(%d,ai);,改进后的程序如下:,返回,50,PPT学习交流,5/21/2020,51,程序说明:,1)排序前“for(i=1;iy,56,PPT学习交流,5/21/2020,57,for(i=2;i=x0;i+)flag=1;while(flag)flag=0;if(x1%i=0)x1=x1/i;flag=1;if(x2%i=0)x2=x2/i;flag=1;if(x3%i=0)x3=x3/i;flag=1;if(flag=1)t=t*i;x0=max(x1,x2,x3);printf(“Theresultis%dn”,t);,返回,57,PPT学习交流,5/21/2020,58,2.特征信息数字化,1)逻辑类问题,【例1】警察局抓了a,b,c,d四名偷窃嫌疑犯,其中只有一人是小偷。审问中a说:“我不是小偷。”b说:“c是小偷。”c说:“小偷肯定是d。”d说:“c在冤枉人。”现在已经知道四个人中三人说的是真话,一人说的是假话,问到底谁是小偷?,58,PPT学习交流,5/21/2020,59,实现要点:,用变量x存放小偷的编号,则x的取值范围从1取到4,就尝试了他们中的某人是小偷的所有情况。四个人所说的话就可以分别写成:a说的话:x!=1b说的话:x=3c说的话:x=4d说的话:x!=4或not(x=4)注意利用前面学习到的技巧,在x的枚举过程中,当这四个逻辑式的值相加等于3时,即表示“四个人中三人说的是真话,一人说的是假话”,所以以此为定解条件。,分析:,将a,b,c,d将四个人进行编号,号码分别为1,2,3,4。则问题可用枚举尝试法来解决。,59,PPT学习交流,5/21/2020,60,程序如下:,main()intx;for(x=1;x=4;x+)if(x!=1)+(x=3)+(x=4)+(x!=4)=3)printf(“%cisathief.”,chr(64+x);,运行结果:cisathief.,程序说明:,为了程序的方便运行我们对人名进行了数字化,但结果的形式还要符合题目的描述,所以输出时,将数字转化为对应的字母。这个程序可以方便的改写成PASCAL或BASIC程序,就C语言而言程序还可直接写成如下形式:,60,PPT学习交流,5/21/2020,61,main()intx;for(x=a;x=d;x+)if(x!=a)+(x=c)+(x=d)+(x!=d)=3)printf(“%cisathief.”,x);,61,PPT学习交流,5/21/2020,62,【例2】三位老师对某次数学竞赛进行了预测。他们的预测如下:甲说:学生A得第一名,学生B得第三名。乙说:学生C得第一名,学生D得第四名。丙说:学生D得第二名,学生A得第三名。竞赛结果表明,他们都说对了一半,说错了一半,并且无并列名次,试编写程序输出A、B、C、D各自的名次。,62,PPT学习交流,5/21/2020,63,分析:,用数1,2,3,4分别代表学生a,b,c,d获得的名次。问题就可以利用三重循环把所有的情况枚举出来。程序如下:,返回,63,PPT学习交流,5/21/2020,64,main()inta,b,c,d;for(a=1;a=4;a+)for(b=1;b=4;b+)if(a!=b)for(c=1;c=4;c+)if(c!=a,运行结果:a=4,b=3,c=1,d=2,64,PPT学习交流,5/21/2020,65,实现要点:,【例1】填写运算符输入任意5个数x1,x2,x3,x4,x5每相邻两个数之间填上一个运算符+、-、*或/。在填入四个运算符后,使得表达式值为一个指定值y(y由键盘输入)。求出所有满足条件的表达式。,模仿人去试填所有的运算符,结果是什么,2)智巧类问题,?,1)枚举法解题2)若当前运算符轮到/则运算符右端的数必须非零,因为零不能当除数。,65,PPT学习交流,5/21/2020,66,3)现在接着考虑+、-、*、/应如何表示,才能方便程序对表达式的求值?4)如何处理“先乘除/后加减”的优先顺序?,模拟计算:,f-减去标志。减法运算时,置f=-1,否则f=1;q-若当前运算符为+(-)时,q存贮运算符的左项值;若当前运算符为*(/)时,q存贮两数乘(除)后结果;p-累加器。每填一个算符p=p+f*q。,为了解决运算的优先级问题,我们设置如下变量:,66,PPT学习交流,5/21/2020,67,程序如下:,main()intj,k,f,i5,total;floatn6,p,q;charc5=,+,-,*,/;printf(“ninputfivenumber”);for(j=1;j=5;j+)scanf(“%f”,1.四个for循环后的四个if语句的作用是什么?2.四个数组元素i1、i2、i3、i4代表四个运算符,定义的作用是什么?,67,PPT学习交流,5/21/2020,68,for(k=1;k=4;k+)switch(ik)case1:p=p+f*q;f=1;q=nk+1;break;case2:p=p+f*q;f=-1;q=nk+1;break;case3:q=q*nk+1;break;case4:q=q/nk+1;if(p+f*q=n0)total+;printf(“ntotal:%5d:”,total);for(k=1;k=4;k+)printf(“%f%c”,nk,cik);printf(“%f=%f”,n5,n0);if(total%20=0)每20个方案为一屏,逐屏显示printf(“pressentertocontinue”);getchar();,68,PPT学习交流,5/21/2020,69,【例2】有10箱产品每箱有1000件,正品每件100克。其中的几箱是次品,次品每件比正品轻10克,问能否用秤只称一次,就找出哪几箱是次品。,程序如下:,main()inti,k,n,w1=0,w2=0,t=1;printf(“nInputthenumberofboxes:”);scanf(“%ld”,69,PPT学习交流,5/21/2020,70,w1=w1*100;printf(“nnormalweight%d”,w1);printf(“nInputrealityweight”);scanf(“%ld”,70,PPT学习交流,5/21/2020,71,【例3】编写程序对输入的一个整数,判断它能否被3,5,7整除,并输出以下信息之一:1)能同时被3,5,7整除;2)能被其中两数(要指出哪两个)整除;3)能被其中一个数(要指出哪一个)整除;4)不能被3,5,7任一个整除。,71,PPT学习交流,5/21/2020,72,switch(k)case3:printf(“nAll”);break;case2:printf(“ntwo”);break;case1:printf(“none”);break;case0:printf(“nnone“);break;,程序1:,main()longn;intk;printf(“nPleaseenteranumber:”);scanf(“%1d”,k=(n%3=0)+(n%5=0)+(n%7=0),72,PPT学习交流,5/21/2020,73,程序2:,main()longn;intk;printf(“nPleaseenteranumber:”);scanf(“%1d”,k=(n%3=0)+(n%5=0)*2+(n%7=0)*4,73,PPT学习交流,5/21/2020,74,程序中k表示整除的情况值。程序1中,k的范围是03可以表示四种情况,而程序2中,为k赋值的表达式是:(n%3=0)+(n%5=0)*2+(n%7=0)*4,k的范围是07可以表示八种情况。,switch(k)case7:printf(“nAll”);bresk;case6:printf(“n5and7is”);break;case5:printf(“n3and7is”);break;case4:printf(“n7is”);break;case3:printf(“n3and5is”);break;case2:printf(“n5is”);break;case1:printf(“n3is”);break;case0:printf(“nnone“);break;,程序说明:,返回,74,PPT学习交流,5/21/2020,75,三、文件,1.C语言文件概述,存储在外存储器上一组相关数据集合称为“文件”每个文件都有一个文件名,OS广义的文件,狭义的文件数据文件程序的处理的数据(输入)和结果(输出),75,PPT学习交流,5/21/2020,76,从文件存储的方式来看,文件可分为:ASCII码文件和二进制码文件两种,ASCII文件也称为文本文件,这种文件在磁盘中存放时每个字符对应一个字节,用于存放对应的ASCII码。,二进制文件是按二进制的编码方式来存储文件的。,输入输出字符流的开始和结束,只由程序控制而不受物理符号的控制。则把这种文件称作“流式文件”。,76,PPT学习交流,77,2.文件的打开与关闭,1)文件指针,文件在进行读、写操作之前要先打开,使用完毕后要关闭。,打开文件实际上是建立文件的各种有关信息,并使文件指针指向该文件,以便进行其它操作。,关闭文件则是断开指针与文件之间的联系,也就禁止再对该文件进行操作。,77,PPT学习交流,5/21/2020,78,用一个指针变量指向一个文件,这个指针称为文件指针。通过文件指针就可对它所指的文件进行各种操作。,定义文件指针的一般形式为:,FILE*指针变量标识符;,2)文件的打开,就是打开外存数据进入内存的通道,并分配一定的内存空间存储进行内存中的文件数据。,78,PPT学习交流,5/21/2020,79,fopen()函数用来打开一个文件,一般形式为:,文件指针名=fopen(文件名,使用文件方式);,对于文件使用方式有以下几点说明:,1)文件使用方式由r,w,a,t,b,+六个字符拼成,各字符的含义是:,r(read):读w(write):写a(append):追加t(text):文本文件,可省略不写b(banary):二进制文件+:读和写,79,PPT学习交流,2)凡用“r”打开一个文件时,该文件必须已经存在,且只能从该文件读出。,3)用“w”打开的文件只能向该文件写入。若打开的文件不存在,则以指定的文件名建立该文件,若打开的文件已经存在,则将该文件已有信息删去,重建一个新文件。,4)若要向一个已存在的文件追加新的信息,只能用“a”方式打开文件。(该文件必须存在),5)在打开一个文件时,如果出错,fopen将返回一个空指针值NULL。,80,PPT学习交流,5/21/2020,81,3)文件的关闭,关闭文件的操作是由函数fclose()实现的,一般形式是:,fclose(文件指针);,正常完成关闭文件操作时,fclose函数返回值为0。如返回非零值则表示有错误发生。,RETURN,81,PPT学习交流,5/21/2020,82,3文件的读写,字符读写函数:fgetc和fputc字符串读写函数:fgets和fputs数据块读写函数:freed和fwrite格式化读写函数:fscanf和fprinf,1字符读写函数fgetc和fputc,字符读写函数是以字符(字节)为单位的读写函数。每次可从文件读出或向文件写入一个字符。,1)读字符函数fgetc(),fgetc函数的功能是从指定的文件中读一个字符,形式为:,字符变量=fgetc(文件指针);,82,PPT学习交流,5/21/2020,83,【注意事项】,在fgetc函数调用中,读取的文件必须是以读或读写方式打开的。,读取字符的结果也可以不向字符变量赋值。,在文件内部有一个位置指针。用来指向文件的当前读写字节。,文件系统在文件的末尾存储了一个结束标志EOF,表文件中的字符已读“完”了。,83,PPT学习交流,5/21/2020,84,2)写字符函数fputc,fputc函数的功能是把一个字符写入指定的文件中,形式为:,fputc(字符,文件指针);,【注意事项】,被写入的文件可以用写、读写、追加方式打开,用写或读写方式打开一个已存在的文件时将清除原有的文件内容,写入字符从文件首开始。,每写入一个字符,文件内部位置指针向后移动一个字节。,fputc函数有一个返回值,如写入成功则返回写入的字符,否则返回一个EOF。,84,PPT学习交流,5/21/2020,85,2字符串读写函数fgets和fputs,1)读字符串函数fgets,功能是从指定的文件中读一个字符串到字符数组中,形式为:,fgets(字符数组名,n,文件指针);,【注意事项】,在读出n-1个字符之前,如遇到了换行符或EOF,则读出结束。,fgets函数也有返回值,其返回值是字符数组的首地址。,85,PPT学习交流,5/21/2020,86,2)写字符串函数fputs,功能是向指定的文件写入一个字符串,形式为:,fputs(字符串,文件指针);,3数据块读写函数fread和fwtrite,读数据块函数调用的一般形式为:,fread(buffer,size,count,fp);,写数据块函数调用的一般形式为:,fwrite(buffer,size,count,fp);,86,PPT学习交流,5/21/2020,87,其中:buffer是一个指针,在fread函数中,它表示存放输入数据的首地址;在fwrite函数中,它表示存放输出数据的首地址。size表示数据块的字节数。count表示要读写的数据块块数。fp表示文件指针。,4格式化读写函数fscanf和fprintf,fscanf(文件指针,格式字符串,输入表列);,fprintf(文件指针,格式字符串,输出表列);,RETURN,87,PPT学习交流,5/21/2020,88,

温馨提示

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

评论

0/150

提交评论