c语言-课件

PPT
  • 阅读 43 次
  • 下载 0 次
  • 页数 83 页
  • 大小 174.512 KB
  • 2022-11-24 上传
  • 收藏
  • 违规举报
  • © 版权认领
下载文档30.00 元 加入VIP免费下载
此文档由【小橙橙】提供上传,收益归文档提供者,本网站只提供存储服务。若此文档侵犯了您的版权,欢迎进行违规举报版权认领
c语言-课件
可在后台配置第一页与第二页中间广告代码
c语言-课件
可在后台配置第二页与第三页中间广告代码
c语言-课件
可在后台配置第三页与第四页中间广告代码
c语言-课件
c语言-课件
还剩10页未读,继续阅读
【这是免费文档,您可以免费阅读】
/ 83
  • 收藏
  • 违规举报
  • © 版权认领
下载文档30.00 元 加入VIP免费下载
文本内容

【文档说明】c语言-课件.ppt,共(83)页,174.512 KB,由小橙橙上传

转载请保留链接:https://www.ichengzhen.cn/view-44580.html

以下为本文档部分文字说明:

一、基本语法标识符–定义:字母或下划线开头后跟字母、数字、下划线–分类:关键字:共32个关键字,用小写英文字母表示,不允许作为用户自定义标识符。预定义标识符:在C语言中具有特定含义,如C语言中提供的库函数名字和预编译处理命令。用户标识符:用户根据需要对C程序中用到的变量、符号常量、自

定义函数或文件指针进行命名,形成用户标识符。二、数据类型基本类型–整型–实型(float、double)–字符型–枚举型指针类型构造类型–数组类型–结构体(struct)–共用体(union)空类型(void)注意:在C语言中,用0表示‚假‛,用非0的数表示‚真‛整型

数据整型常量–十进制整数如:1、2、3…–八进制整数以‚0”开头如:023、056…–十六进制整数以‚0x”开头如:0x23、0x56…整型变量–基本型(int)–短整型(short)–长整型(long

)–无符号型(unsigned)无符号整型无符号短整型无符号长整型思考:039是几进制的数据???使用说明:–在某些系统下,int和shortint等价,占用内存2个字节,取值范围为-32768~32767之间–longint占用4个字节–在整常量后加一个字母l或L

,认为该数是longint型实型数据实型常量–十进制形式:123.5、-754.0–指数形式:1.23×103在C语言中应表示为1.23e3注意:e(E)前必须有数字,e(E)后指数必须是整数合法数据:6.28e-3、3.5e4等等非法数据:

e5、6.23e3.5实型变量–单精度实型(float):占4个字节(32位)–双精度实型(double):占8个字节(64位)字符型数据字符型常量–定义:用单引号括起来的单个字符如:‘a‟、’A‟、’3‟以‚\”开头的特殊字符如:‘\n‟、’\t‟、’\b‟等等字符型变量–字

符数据在内存中的存放原则:用一个字节存放字符的ASCII码三、运算符与表达式算术运算算术运算符–‚/”:操作对象不同,含义不同整除:两个数为整型数据,完成整除运算如:5/3=1;3/4=0;实除:两个数中有一个为实型数据,完成实除运算如:5.0/3=1.66

6667;–‚%”:求余运算符,只适用于整型数据如:5%3=2–单目运算符:++和--++:自增运算符,只适用于整型变量如:i++、++i--:自减运算符,只适用于整型变量如:i--、--i用法说明:–对于单独的变量来说,前置和后置运算没有区别

,都是使变量自增1或自减1–前置和后置运算与其他运算符结合•前置运算:先对变量加、减1,再取变量值•后置运算:先取变量值,再对变量加、减1–思考:执行下列程序段以后,i、k的值?i=3;k=(++i)+(++i)+(++i);•设x,y均为int型变量,且x=10,y=3则以下语句

的输出结果是:printf(“%d,%d\n”,x--,--y);(++i):i+1=3+1=4;(++i):i+1=4+1=5;(++i):i+1=5+1=6;k=(++i)+(++i)+(++i);=4+5+6=15??????k=i+i

+i=6+6+6=18复合的赋值运算符–+=、-=、*=、/=、%=例如:a+=b等价于a=a+b;–归纳为aop=exp;(其中:op为运算符,exp为表达式)求值过程:1.求exp的值2.把求出的exp与a作op运算3.把2.的结果再赋给变量a–例:若a=12,则a+=a

-=a*=a的值?逗号运算逗号运算符:,逗号表达式–格式:表达式1,表达式2,…,表达式n–求解过程:依次求出表达式1、表达式2、…,表达式n的值表达式n的值即为整个表达式的值–例如:a=2*3,a*2,a+5表达式的值为11

强制类型转换–格式:(类型名)变量名(或表达式)–例如:(double)a(float)(b*c)–区别:inta;与(int)a(int)x+y与(int)(x+y)–注意:强制类型转换只能对变量或表达式的数

据作暂时性的类型转换,并不能改变变量在程序中定义的数据类型。关系运算和关系表达式运算符优先级<,>,<=,>===,!=高低注意:关系运算符为双目运算符,结合方向自左向右关系运算的结果为整数值:0或1逻辑运算符&&:与||:或!:非–使用时注意:

逻辑运算符的结合性:自左向右运算量的值用0表示‚假‛,用非0的数表示‚真‛表达式的结果为:0代表‚假‛,1代表‚真‛–例:i=0,j=0,a=2;if((++i>0)||(++j>0))a++;printf(“i=%dj=%

da=%d\n”,i,j,a);输出结果为:i=1j=0a=3条件运算符?:–结合性:自右向左–例如:若a=5,b=6,c=7,d=8,求表达式a>b?a:c>d?c:d的值–求解过程:该表达式可改写为

a>b?a:(c>d?c:d)值为8几种运算符的优先级条件运算符—逻辑运算符(!除外)—关系运算符低高例1:在下列各组运算符中,优先级别最高的是:1.A.?:B.++C.&&D.+=2.A.*=B.>=C.(类

型)D.,3.A.||B.%C.!D.==4.A.=B.!=C.*D.()对几种运算符优先级别的归纳:–初等运算符(包括()、[]等)–单目运算符(!、++、--、(类型))–算术运算符(先*、/、%,后+、-)–关系运算符–逻辑运算符(不包括!)–条件运算符–赋值运算符(=、+=、等等)

–逗号运算符高低练习:1.若给定条件表达式:(M)?(a++):(a--),则其中表达式M与:A.(M==0)等价B.(M==1)等价C.(M!=0)等价D.(M!=1)等价分析:M为0时,A中的M==0为1,不等价M

为非1时,B中的M==1为0,不等价C为正确答案M为1时,D中的M!=1为0,不等价四、C常用语句if语句使用注意:–if后面的表达式不限于是关系表达式或逻辑表达式,可以是任意表达式,只要能做出

‚真‛、‚假‛判断即可–if语句中可以嵌套使用if语句,在嵌套的if语句中else子句与最近的,不带else的if相结合(最近配对原则)if(…)if(…)if(…)语句1;{if(…)语句1;}else语句2;else语句2;switch语句使用注意:–switch后面的表达

式和case后的常量表达式可以为任何整型数据(如整型表达式、字符型、枚举型);但不允许是实型数据–每个case后的常量表达式的值应互不相同–switch语句中可以不含default分支,default分支并不限定在最后,几个c

ase分支没有顺序区别,但必须做适当处理,否则会影响执行结果–为了执行某个case分支后跳出switch结构,应在每个case分支后加上break语句,流程图如图所示:写出下面程序的运行结果main(){intx=1,y=0,a=1,

b=1;switch(x){case1:switch(y){case0:a++;break;case1:b--;break;}case2:a++;b++;break;case3:a--;b--;}printf(“a=%d,

b=%d\n”,a,b);}while语句执行过程:表达式循环体语句非00循环出口do-while语句执行情况:循环体语句表达式非00循环出口循环体至少执行一次练习:–若k为整型,则while循环:k=0;while(k=0)k=k-1;A.执行10

次B.无限循环C.一次也不执行D.执行一次分析:因为条件判断表达式k=0是赋值语句,该表达式的结果为0,条件始终为假。C为正确答案。for语句格式:for(e1;e2;e3)循环体;–说明:e1:赋初值,只执行一次;e2:循环条件;e3:使e2有可能不满足的表达

式e1、e2、e3、循环体都可能为空,但不能省略‚;”,若省去e2,则是无限循环;若省去e1、e3,即仅有条件判断,则完全等同于while语句e1、e3可以是逗号表达式for语句的流程图:e1:赋初值e2循环体e3真假循环出口contin

ue、break语句–说明:1.continue、break不能单独使用,只能与循环语句或switch合用2.continue增加循环入口,break增加循环或switch语句的出口例:do{……do{……if(e1)continue;

if(e1)break;…………}while(e2);}while(e2);跳出程序1:main(){inti,j,x=0;for(i=0;i<2;i++){x++;for(j=0;j<=3;j++){if(j%2)continue;x+

+;}x++;}printf(“x=%d\n”,x);}程序2:main(){intk=0;charc=„A‟;do{switch(c++){case„A‟:k++;break;case„B‟:k--;cas

e„C‟:k+=2;break;case„D‟:k=k%2;continue;case„E‟:k=k*10;break;default:k=k/3;}k++;}while(c<„G‟);printf(“k=%d\n”,k);}五、数组一

维数组的定义和引用定义数组类型名数组名[常量表达式];–例:inta[10];–说明:a为数组名,inta[10]表示a数组在内存中开辟了10个连续的存储单元存放a数组的10个变量a[0]、a[1]、…

、a[9],且每个元素均为整型–使用注意:1.数组名是用户自定义标识符2.数组元素下标由0开始,下标值为正整数3.常量表达式定义了数组的长度,长度值不能由变量充当,即不允许对数组大小作动态定义错例:intn;scanf(“%d”,&n);inta[n];数组的引用–地址引用:在C语言中,数

组名代表该数组的首地址,即第0个元素的地址引申:第1个元素地址:a+1第2个元素地址:a+2……第i个元素地址:a+i–元素引用:数组名[下标表达式];(下标由0开始)只能逐个引用数组元素而不能一次引用整个数组数组的初始化–在定义时赋

值inta[10]={0,1,2,3,4,5,6,7,8,9};相当于:a[0]=0;a[1]=1;……;a[9]=9;–只赋值一部分,剩余部分按‚0”处理inta[10]={1,2,3,4};则a[4]

~a[9]为0;–允许通过所赋初值的个数来定义数组长度intb[]={1,2,3,4};等价于:intb[4]={1,2,3,4};判断下列的初始化是否等价:intb[]={1,2,3,4};intb[10]={1,2,3,4};二维数组的定义和引用定义:类型名数组名[常量表达式1][常

量表达式2]例:inta[2][3];–说明:inta[2][3];表示数组a在内存中开辟了6个连续的存储单元,用来存储数组元素a[0][0]、a[0][1]、a[0][2]、a[1][0]、a[1][1]、a[1][2],

每一维的下标由0开始,在内存中按行存放。a[2][3]包含两个元素a[0]、a[1],–a[0]由a[0][0]、a[0][1]、a[0][2]组成;–a[1]由a[1][0]、a[1][1]、a[1][2]组成二维数组的引用–地址引用:在C语言中,一个二维数组可看成一个一维数组,其中每一

个元素又是一个一维数组二维数组元素在内存中按行存放,所以a[0]为第0行的首地址引申:第0行的首地址为:a[0]第1行的首地址为:a[1]……第i行的首地址为:a[i]二维数组任一元素a[i][j]的地址为:&a[i][j]等价表示为a[i

]+j二维数组的初始化–分行初始化:inta[2][3]={{1,3,5},{2,4,6}};–按数组在内存中的排列顺序inta[2][3]={1,3,5,2,4,6};注:根据数组在内存中按行存储顺序进行赋值–可省略第一维的长度说明,长度由初值个数确定inta[][3]={1,

3,5,2,4,6}注意:第二维的长度不能省略–初值个数少与数组元素个数时,未赋值的元素按0处理–例:打印杨辉三角的前十行1111211331…………分析:–二维数组第一列为1,即a[i][1]=1;–二维数组对角线元素为1,即a[i][i]=1;–其余元

素a[i][j]=a[i-1][j-1]+a[i-1][j];–打印时只打印下三角字符数组定义与初始化–chara[10];与其它一维数组说明一样–可采用逐个字符赋值给数组元素,一个元素存放一个字符chara[10]={„I‟,„‟,„

a‟,„m‟,„‟,„h‟,„a‟,„p‟,„p‟,„y‟};空格也作为元素进行赋值注:chara[10]={„I‟,„‟,„a‟,„m‟};其余元素自动赋值为空字符‘\0‟,同样方法初始化二维字符数组比较下列两种初始化:1.charstr[3]={„1

‟,„2‟,„3‟};2.charstr[4]={„1‟,„2‟,„3‟};–程序设计–例1:统计一字符串中空格的个数分析:1.输入字符串放入字符数组中2.判断字符是否为空格,直到‘\0‟为止3.输出空格个数4.流程图

:用gets函数输入字符串(为什么不用scanf)str[i]!=„\0‟str[i]==„‟j++;i++;打印结果–例2:将字符串s左移一个字符,第一个字符放在末尾分析:1.用gets()函数输入一个字符串2.将第一个字符用一

个变量存储起来,通过循环左移字符3.第一个字符放在串尾4.用printf函数进行输出六、函数几点重要说明–函数的定义在程序中都是平行的,即不允许在一个函数的内部再定义另一个函数–函数名是用户自定义标识符,当函数值为整型时类型名可省略,当函数只完成某个操作而不返回值时,可用类型

名void–形参表中的形参是用户自定义标识符,没有参数时,圆括号不能省略,函数为无参函数函数的参数几个定义–函数调用–调用函数–被调函数–形式参数(形参)–实际参数(实参)main(){inta,b,c;scanf(“%d%d”,&a,&b);c=f(

a,b);printf(“c=%d\n”,c);}intf(x,y)intx,y;{intz;z=x+y;return(z);}主调函数函数调用被调函数实际参数形式参数说明–形参在定义时不占内存空间,只在调用函数时为其分

配存储单元,且在调用结束后释放内存空间–实参可以是常量、变量、表达式,但必须预先有确定值–实参变量与形参变量发生‚单向值传递‛,但当数组名作为实参进行传递时,传递的是数组的首地址函数的返回值格式:return(表达式);或return表达式;main(){i

nta,b,c;scanf(“%d%d”,&a,&b);c=f(a,b);printf(“c=%d”,c);}intf(intx,inty){intz;z=x+y;return(z);}调用返回说明–一个函数中可以有多个return语句;当执行到某个return语句时,程序的控制流

程返回到调用函数中,并将return语句中表达式的值作为函数值带回–若没有return,就一直执行到函数体末尾,返回函数时,带回一个不确定值。所以若不带回函数值,应将函数定义为void类型–return语句中表达式的类型应与函数值类型一致。若不一致时,则以函数值的类型为准,并由系统按赋值兼容的

原则进行处理例:以下函数值的类型是:fun(floatx){floaty;y=3*x-4;returny;}A.intB.不确定C.voidD.float函数调用调用函数与被调用函数的相对位置关系–先定义,后调用–若被调函数的定义

在调用函数之后出现,必须在调用函数中对被调函数加以说明,int、char型函数除外格式:类型名被调用函数名();–函数的调用可以嵌套–函数的调用可以递归参数传递的两种方式–传值调用:函数调用时,实参的值一一对应的传递给形参,且发生‚单向值传递‛。即使形参发生了值的变化也不会影响实参。995a

bxy5599abxy5–传址调用:函数调用时,传递的是实参的地址函数的嵌套调用嵌套调用定义:在一个函数的内部调用另一个函数main函数函数a函数b调用a调用b结束返回返回123456789注意:函数不能嵌套定义,但能嵌套调用函数的递归调用定义:在调用一个函数的过程中

又直接或间接调用该函数本身分析递归实例–求n!1(n=0)f(n)=n*(n-1)!(n>0)程序运行分析:main函数f(5)f(4)……f(0)调用f(5)5>0调用f(4)4>0调用f(3)……0!=1程序结束返回返回……返回由此可见:函数的递归调用实际上是一种特殊的函数嵌套调

用数组作为函数参数进行传递数组元素作为函数参数–分析:与普通变量作为函数参数进行传递没有区别,发生单向值传递数组名作为函数参数–例1:求10个学生成绩的平均分,10个成绩用数组存放–分析:求10个数的平均分,不能引入10个形式参数,所以考虑用数组名作为函数参数进行传递,传递数组的首

地址floataverage(b)floatb[10];{inti;floataver,sum=0;for(i=0;i<10;i++)sum+=b[i];aver=sum/10;return(aver);}main(){floata[10],a

ve;inti;for(i=0;i<10;i++)scanf("%f",&a[i]);printf("\n");ave=average(a);printf("averagescoreis%5.2f",ave);}–分析:a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a

[9]a函数调用:ave=average(a);……floataverage(b)intb[10];{……}将a的首地址传递给形参数组b,所以形参、实参共用内存单元ba[0]b[0]a[1]b[1]a[2]b[2]a[3]b[3]a[4]b[4]a[5]b[5]

a[6]b[6]a[7]b[7]a[8]b[8]a[9]b[9]变量的存储类型全局变量与局部变量–定义:局部变量:函数内部定义的变量(包括main函数内部定义的变量)全局变量:函数外部定义的变量–作用域:全局变量作用域从定义处到文件尾局部变量作用域就是

本函数内部如果全局变量与局部变量重名,则以局部为主变量的存储类型–自动变量(auto):动态分配存储空间,存储在内存储器的栈中–外部变量(extern)–静态变量(static)例:intff(intn){staticintf=1;f=f*n;returnf;}main(){in

ti;for(i=1;i<=5;i++)printf(“%d\n”,ff(i));}–寄存器变量(register)七、指针变量的指针和指向变量的指针变量定义–类型名*指针变量名–例:int*p1;float*p2;char

*p3;–说明:p1、p2、p3是用户自定义标识符,‚*‛说明p1、p2、p3是指针类型的变量类型名说明了指针变量所能指向的变量类型指针的使用–&:地址运算符–*:指针运算符–使用说明:‚*‛出现的位置不同含义也不相同main(){inta=100,b=10;int*p1,*p2;p

1=&a;p2=&b;printf(“%d,%d\n”,a,b);printf(“%d,%d”,*p1,*p2);}“*”说明p1、p2是指针变量对p1、p2进行赋值,且只能存放变量的地址“*”在此是一种运算,表示取出指针指向的变量的值一维数组与指针一维数组与指针的关

系–一维数组和数组元素的地址例:inta[10],*p;p=a;/*与p=&a[0]等价*/同理:若p=a+1;则p存放a[1]的地址–通过一维数组名所代表的地址引用数组元素例:inta[10],*p;a代表a[0]的地址;a+i代表a[i]的地址*(a+i)与a[i]等价–通过指针引

用数组元素例:inta[10],*p=a;/*定义的同时初始化*/则a[0]的地址赋给了p,即p指向a[0];p+i与&a[i]等价;则*(p+i)与a[i]等价–通过带下标的指针引用数组元素inta[10],*p=a;p指向a[0],则*(p+i)可写成p[i]总

结:在p=a;的条件下,对a[i]的引用方式还可写为:*(a+i)、*(p+i)、p[i]指针变量的运算–p++:p指向下一元素–*p++:等价与*(p++),++后置,先取p值,做*p的运算后,p再

自加–*(p++)与*(++p)的区别类似于‚++”前置和后置的区别–区别(*p)++、*(p++)(*p)++:表示p指向的元素值加1,*(p++):取出*p后,p指向下一地址单元的元素–同理:p可自减使用注意–a与a

[0]的含义不同,a表示地址,a[0]表示数组元素–p是指针变量,可以对其进行+、-、和赋值运算如:p++;p=a;p=&a[i]等等–数组名a表示一个地址常量,即一个常量指针,不能改变它的值如:a++;a=p;a+=i;是非法的举例说明

–若有以下定义和语句,且0<=i<10,则对数组元素的错误引用是:inta[]={1,2,3,4,5,6,7,8,9,0},*p,i;p=a;A、*(a+i)B、a[p-a]C、p+iD、*(&a[i])–若定义同上,对

数组元素地址的正确表示是:A.&(a+1)B.a++C.&pD.&p[i]字符串的指针和字符串的指针变量字符串的表现形式–字符数组方式1:charstr[]={„c‟,‟h‟,‟i‟,‟n‟,‟a‟};方式2:charstr[]=“china”;–字符指针char*strp=“china

”;说明:定义了一个字符指针变量strp,变量中存放的是字符串中第一个字符的地址–区别:字符数组方式中,若str[]=“Thestring”;其中,每个数组元素都有相应的名字及数值,如str[0]=„T‟,str[1]=„h‟,……,str[10]=

„\0‟字符指针方式中,若有char*strp=“Thestring”;则指针strp存放该字符串的首地址,字符串的每个元素没有具体的名字,但可以通过指针来进行引用,如*(strp+0),*(strp+1),……;但不能误认为字符串‚Thestring”存放在指针strp中字符指针作函数

参数进行传递–与一般数组、指针相同,传递的是数组的首地址–例:下列程序的运行结果是#include<stdio.h>#defineMAX10voidsub();main(){chars[MAX]=“ABCDEF”;sub(s);}voidsub(char*a){char*t;if(*

a){t=a;t++;sub(t);putchar(*a);}}sub(s);s[]=“ABCDEF”a=s;*a=„A‟,条件为真t=a;t++;sub(t);putchar(*a);sub(t);*t=“BCDEF”a=t;*a=„B‟,条件为真t=a;t++;su

b(t);putchar(*a);……t=„\0‟;sub(t);a=t;*a=„\0‟;条件为假,返回到上一层,执行putchar(*a);打印字符‘F‟执行putchar(*a)执行putchar

(*a)二维数组与指针例:inta[2][3]={1,2,3,4,5,6};int*p;p=a;出现问题:a数组名是数组第一元素的地址,即&a[0]而a[0]是一个数组修改:p=&a[0][0]int(*p)[3];p=a;在情况下:a[i][j]等价与*(p+i*3+j)在

情况下:a[i][j]等价与*(*(p+i)+j)悬摆指针错误:错例:int*p=3;注:指针p是悬摆指针,没有分配内存空间更正:1.inta,*p;p=&a;*p=3;2.int*p;p=(int*)malloc(sizeof(int));*p=3;注:malloc

函数:申请地址空间,返回一个void指针,没有任何结果信息,所以在前加上强制类型转换(int*),反悔一指向整型变量的指针八、结构体和共用体结构体–类型定义:structstudent{intnum;charname[20];charsex;};结构体变量定义–structstud

ent{……};structstudentstu1,stu2;–structstudent{…….}stu1,stu2;–struct{……}stu1,stu2;对结构体变量的几点说明–结构体变量的

引用:结构体变量名.成员列表例:stu1.numstu2.sex–结构体变量在内存中的存储空间大小例:structstudent{intnum;intage;charname[20];}stu1,stu2;则变量stu1在内存所占

空间为2+2+20=24字节结构体数组与结构体指针结构体数组structstudent{……}stu[3];变量引用同前:stu[0].name等结构体指针structstudent{……};structstudentstu1,*p;

p=&stu1;变量引用改写为:p->成员列表共用体定义unionun{charc;intnum;}u1,u2;注:变量的引用同结构体,但变量在内存中所占存储空间有区别,u1占用2个字节(char占1个字节,int占2个字节,

取最大值2)例:以下程序的输出结果是unionmyun{struct{intx,y,z;}u;intk;}a;main(){a.u.x=4;a.u.y=5;a.u.z=6;a.k=0;printf(“%d\n”,a.u.x);}A.4B.5C.6D.0用typedef定义数

据类型一般形式:typedef类型名标志符;例1:typedefintINTEGER;typedefcharstr;例2:以下正确的类型定义是:A.typedefv1int;B.typedefv2=int;C.typedefintv3;D.typedefv4:in

t;九、文件C文件的概念–C语言中的文件不是由记录组成,而是被看作一个字符(字节)的序列,称为流式文件–C文件根据数据的组织形式分为ASCII(文本)文件和二进制文件–C语言对文件的处理方式分为缓冲文件系统和非缓冲

文件系统–在缓冲文件系统中,靠文件指针与相应文件建立起联系,一般有几个文件就有几个文件指针–文件指针的定义形式为:FILE*指针变量名;/*文件型指针变量*/有关文件的操作C语言中对文件的操作都由库函数来实现。对这部分内容的基本要求是:掌握以下常用函数的调用方式、

函数的功能、函数的返回值,并能灵活应用。文件的打开和关闭函数–文件的打开:fopen函数调用形式:FILE*fp;/*定义文件指针*/fp=fopen(文件名,使用方式);说明:1.文件名可以是用双引号括起来的字符串,如‚c:\\user\\file

1.dat”,也可以是字符数组名或指向字符串的指针2.文件的使用方式:读、写–文件的关闭:fclose函数形式:fclose(文件指针)打开的文件必须关闭文件单个字符的读、写–单个字符的读:fget

c或getc函数fgetc函数:从指定文件中读出一个字符如:ch=fgetc(fp);/*从文件中读出一个字符赋给字符型变量ch*/–单个字符的写:fputc或putc函数fputc函数:把一个字符写到磁盘文件中去如:fputc(ch,fp);/*把字符变量ch的值写到fp指向

的文件中去*/#include<stdio.h>main(){FILE*fp;charch,filename[10];scanf("%s",filename);if((fp=fopen(filename,"w"))==NULL){printf("Cannotopenthefile.\n

");exit(0);}ch=getchar();while(ch!='.'){fputc(ch,fp);putchar(ch);ch=getchar();}fclose(fp);}字符串的读、写–字符串的读:fgets函数

形式:fgets(str,n,fp)使用说明:从指定文件中读出n-1个字符,并把它们放入str为起始地址的存储空间内,如在读出n-1个字符结束之前遇到换行符或EOF(-1),则读出结束。字符串读出结束后,在最后加上‘\0‟字

符,fgets返回str的地址。–字符串的写:fputs函数形式:fputs(str,fp)使用说明:str可以是字符串常量、字符数组或指向字符串的指针。函数把以str为起始地址的字符串写到fp指定的文件中,最后的‘\

0‟不写入;写入成功返回0,不成功为非0格式化读和写–格式化读:fscanf函数fscanf(文件指针,格式字符串,输入表列);如:fscanf(fp,”%d,%f”,&i,&t);–格式化写:fprintf函数fprintf(文件指针,格式字符串,输出表列);如:fp

rintf(fp,”%d,%f”,i,t);/*将变量i、t的值按照%d,%f的形式写到fp指向的文件中*/其它函数–检测文件是否结束函数(feof)feof(fp)函数:检测文件位置指针fp是否已指向文件的末尾,若已指向文件末尾,函数返回值为1,否

则为0–文件指针复位函数(rewind)rewind(fp):是位置指针fp重新返回到文件的开头,该函数没有返回值。–文件定位函数(fseek)fseek(fp,偏移量,相对位置);–偏移量为long型数据–相对位置的几种表示:SEEK_SET(文件头)SEEK_CUR(当前位置

)SEEK_END(文件尾)

小橙橙
小橙橙
文档分享,欢迎浏览!
  • 文档 25747
  • 被下载 7
  • 被收藏 0
相关资源
广告代码123
若发现您的权益受到侵害,请立即联系客服,我们会尽快为您处理。侵权客服QQ:395972555 (支持时间:9:00-21:00) 公众号
Powered by 太赞文库
×
确认删除?