C语言程序设计实用教程.ppt_第1页
C语言程序设计实用教程.ppt_第2页
C语言程序设计实用教程.ppt_第3页
C语言程序设计实用教程.ppt_第4页
C语言程序设计实用教程.ppt_第5页
已阅读5页,还剩146页未读 继续免费阅读

下载本文档

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

文档简介

E-Mail:yangliu4575,C语言程序设计实用教程,第1章C语言概述,第2章数据及其运算,第3章程序的流程控制,第4章数组,第5章模块化程序设计,第6章结构体、共用体和枚举类型,第7章文件,第8章综合实训,目录,C语言发展及特点,TurboC的操作环境,VC+6.0的操作环境,简单的C程序介绍,C程序的上机执行过程,第1章C语言概述,本章小结,返回,1.1C语言发展及特点,返回,1C语言的发展C语言是在早期的B语言的基础上发展起来的。1960年出现的ALGOL-60是一种面向问题的语言,过于抽象,难以描述系统,没有得到真正的推广。1963年由英国剑桥大学推出了CPL(CombinedProgrammingLanguage)语言。1967年英国剑桥大学的MatinRichards对CPL作了简化,推出了BCPL(BasicCombinedProgrammingLanguage)语言。1970年由美国贝尔实验室的KenThompson设计的B语言又对BCPL进一步简化。1972年至1973年,贝尔实验室的D.M.Ritchie在B语言基础上设计出了C语言,取BCPL中的第二个字母来命名。1990年国际标准化组织ISO(InternationalStandardOrganization)接受87ANSIC为ISOC的标准(ISO98991990)。,返回,2C语言的特点(1)语言简洁、紧凑,使用方便、灵活。(2)数据类型丰富。C语言的数据类型包括整型、实型、字符型、枚举型、结构体、共用体、数组和文件类型、指针类型、空类型等。(3)运算符丰富。一共有44种运算符。(4)函数是程序的主体。(5)语法检查不太严格,程序书写自由度大。(6)C语言允许直接访问物理地址。(7)生成的目标代码质量高,程序执行效率高。(8)可移植性好。,1.1C语言发展及特点,1.2TurboC运行环境,返回,1TurboC的系统配置TurboC只要求很少的系统资源。它仅占用384KB内存,其系统文件占用的磁盘空间不到3MB。TurboC一般要求微机有两个驱动器(一个硬盘驱动器和一个软盘驱动器),对显示器无特殊要求,也不要求有鼠标器。TurboC是基于DOS平台的C编译系统,要求在计算机上安装DOS2.0或更高的DOS版本。2进入TurboC在Windows操作系统下,进入TurboC环境可以用以下两种方法进行操作。(1)可以在桌面上选择“开始”菜单中的“所有程序”,选择“附件”中的“命令提示符”,(2)通过“资源管理器”找到文件夹TC中的tc.exe文件,双击该文件名,即可进入TurboC环境。,1.2TurboC运行环境,返回,TurboC操作界面,1.3Visualc+6.0运行环境,返回,打开VC6环境,选择VC6运行程序,1.3Visualc+6.0运行环境,返回,VC6操作环境,1.3Visualc+6.0运行环境,返回,“新建”对话框,1.4简单的C程序介绍,返回,例1-1一个简单的C程序示例。main()printf(ThisisaCprogram.n);运行结果:ThisisaCprogram.说明:main()表示主函数。每个C程序都必须有一个且只有一个main()函数。函数体由大括号括起来。printf()是C语言的输出函数。n是转义字符,表示换行符。语句最后有分号;。,1.4简单的C程序介绍,返回,例1-2求两个数的和。#includestdio.h/*文件包含*/main()/*主函数*/inta,b,c;/*定义变量,int表示整型*/a=4;/*给变量赋值*/b=6;c=a+b;printf(sum=%dn,c);/*调用输出函数printf()输出结果*/运行结果:sum=10说明:使用变量时要先定义再使用。printf()是系统函数,包含在stdio.h头文件中。由于printf()函数经常使用,因此文件包含可以省略,如:例1-1。/*/表示注释,非执行部分。,1.4简单的C程序介绍,返回,例1-3通过自定义函数实现计算三个数的平均值。#includestdio.hfloataverage(floatx,floaty,floatz)/*自定义函数头部定义部分*/floataver;/*定义变量,float表示实型*/aver=(x+y+z)/3;return(aver);/*函数通过return语句返回函数值*/main()floata,b,c,ave;a=3.5;b=4.6;c=7.9;ave=average(a,b,c);/*调用自定义函数average(),同时将a,b,c的值传给x,y,z,得到函数的值赋给变量ave*/printf(average=%f,ave);运行结果:average=5.333333说明:程序中可以使用系统函数,也可以使用自定义函数。return是函数返回语句,没有返回值时可以省略,返回,从上面的程序可以看出以下几点:(1)一个C程序可以由多个文件构成,每个文件可以由几个函数构成。每个函数完成一个特定的功能,它由一组语句组成。自定义函数的一般形式:函数返回值类型函数名(函数形参表)声明部分执行部分return表达式;(2)一个完整的C程序必须有一个主函数,名为main(),(3)程序中用到的变量要先定义后使用。(4)由#开头的行称为宏定义或文件包含,末尾无分号。(5)语句必须以分号(;)结束。(6)可以用/*/对C程序中的任何部分作注释,以增强程序的可读性。可以在任何允许插入空格符的地方插入注释,但注释不能嵌套。(7)C语言本身没有输入输出语句。输入和输出的操作是由库函数scanf()和printf()等来完成。,1.4简单的C程序介绍,1.5C程序的执行过程,返回,1程序执行过程,键盘输入源程序f.c磁盘文件f.objf.exe结果,2常见错误分析(1)语法错误。(2)逻辑错误。(3)运行错误。,本章小结,本章主要介绍了C语言的发展、C语言的特点、C语言的运行环境、简单的C程序的组成、C程序的运行过程。通过本章的学习,使学生对C语言有个大致的了解,熟悉C语言的运行环境,了解如何使用C语言编写简单的程序来解决实际问题。,返回,关系运算,逻辑运算,位运算,第2章数据及其运算,本章小结,返回,数值型数据的特征,数据常量,数据变量,算术运算,返回,2.1数值型数据的特征,返回,1数值的表示形式定点表示和浮点表示是C语言基本数据类型的重要特征。凡不带指数部分的数称为定点数。如:3.14,10,-12等。整数都属于定点数。如果数值以指数形式表示,小数点的位置可以是浮动的,称之为浮点数形式。在C语言中采用科学记数法,即e或E加或减一个整数的方法来表示,如:31.4E-1。2整数的有符号类型与无符号类型数值是以补码形式存放的。一个正数的补码就是该数的二进制数,负数补码的求解过程为:先取该数的绝对值;然后以二进制数的形式表示;再对其按位取反;然后末尾加1。无符号数的含义是指最高位不表示符号,也是数值的一部分。因此,无符号的整数与有符号的整数差别比较大。如:-12的存储形式如果表示无符号数,则为65524。注意:在C语言中,实数都是有符号数。,2.2常量与变量,返回,常量分为不同的数据类型,如整型常量、实型常量、字符常量和字符串常量等。整型常量整型常量即是整数,包括正整数、负整数和0。在语言中整型常量有三种表示形式:十进制整数:有效数字为09。如20、-123。八进制整数:有效数字为07,且以0开头。如020表示八进制数20。十六进制整数:有效数字为09和af(或AF),且以0 x开头。如0 x20表示十六进制数20,等价于十进制数32。浮点型常量浮点型常量也称“浮点数”,即实型常量,也就是带小数点的数浮点型常量有两种表示形式:十进制小数形式。由正、负号、数字09和小数点组成指数形式(或称科学记数法)。由正、负号、数字09、小数点和字母e(或E)组成,它的表示形式为:men或mEn,表示m10n,,2.2数据常量,返回,字符常量用一对单引号括起来的一个字符称为字符常量。如:a、7、#等。以“”开头的字符序列,称为“转义字符”,用来表示一些难以用一般形式表示的字符。,2.2常量与变量,2.2数据常量,返回,字符串常量字符串常量是用一对双引号括起来的一个字符序列。字符序列中含有字符的个数称为字符串的长度。说明:字符串常量在存储时除了存储双引号中的字符序列外,系统还会自动在最后一个字符的后面加上转义字符0,所以一个字符串常量在内存中所占的字节数是字符串长度加1。如china的长度为5,而在内存中占的字节数为6。0是ASCII码为0的空操作字符,C语言规定用0作为字符串的结束标志,以便系统根据它来判断字符串是否结束。字符串常量中的字符可以是转义字符,但它只代表一个字符。如:字符串abncd的长度是6,而不是8。在C语言中没有专门的字符串类型,需要使用字符型数组,即用一个字符型数组来存放一个字符串,数组中的每个单元存放该字符串中一个字符。也可以用一个标识符代表一个常量的符号,称为符号常量。符号常量定义的一般形式:#define标识符常量值,2.2常量与变量,2.2数据常量,2.3数据变量,返回,在程序运行过程中,其值可以变化的量称为变量。变量代表内存中具有特定属性的一个存储单元,它用来存放数据,也就是变量的值。,2.3数据变量,返回,1标识符的命名规则给变量、符号常量、函数、数组、数据类型等对象命名的有效字符序列统称为标识符。语言规定标识符只能由字母、数字和下划线组成,且第一个字符必须为字母或下划线。变量使用之前要先定义类型。变量定义的一般形式:类型标识符变量名如:inta;说明:(1)变量名不能是关键字(即保留字,是C编译程序中保留使用的标识符)。(2)可以同时定义两个或两个以上的变量,变量名之间用逗号间隔。(3)尽可能做到变量名“见名知义”。(4)C语言区分英文大小写字母。如:a1和A1是两个不同的标识符。(5)对所有用到的变量做强制定义,也就是“先定义,后使用”。(6)语言允许在函数内部或函数外部定义变量同时给变量赋初值,称为变量的初始化。,2.3数据变量,返回,2基本数据类型(1)整型变量(2)浮点型变量,2.3数据变量,返回,(3)字符型变量(4)指针变量指针即是地址,是常量。指针变量是一种特殊类型的变量,即存放指针(地址)的变量,而这个地址往往是其他变量的地址(其在内存中的存储位置)。指针变量定义的一般形式:类型标识符*变量名如:inta=10,*p;p=含义是把变量a的地址赋给指针变量p,此时称指针变量p“指向”整型变量a,见下图。,2.4算术运算,返回,1算术运算符在C语言中,用算术运算符和圆括号将运算对象连接起来的,并且符合C语言语法规则的式子称为算术表达式。(1)双目算术运算符+加法运算符-减法运算符*乘法运算符/除法运算符%取余(模)运算符(2)单目运算符-负号运算符,取操作对象的负数。+自增运算符,使变量的值增1。j=+i;/*前缀式,先将i的值加1,然后再赋给j*/j=i+;/*后缀式,先把i的值赋给j,然后将i的值加1*/-自减运算符,使变量的值减1。-(取负)、+和-的结合性为右结合,+、-、*、/和%的结合性为左结合。当运算符+、-和运算符+、-进行混合运算时,C语言规定,自左向右尽可能多的组成运算符。,2.4算术运算,返回,2数据类型转换(1)自动数据类型转换转换的规则是:若为字符型必须先转换成整型,即其对应的ASCII码值;若为单精度型必须先转换成双精度型;若运算对象的类型不相同,将低精度类型转换成高精度类型。精度从低到高的顺序是:intunsignedlongdouble(2)强制数据类型转换强制类型转换的一般形式:(类型标识符)(表达式)如:(int)(x+y):将x+y的值转换成整型(int)x+y:将x的值转换成整型说明:类型标识符必须用圆括号括起来。强制数据类型转换只是得到一个所需类型的中间值,原来说明的数据类型并没有改变。由高精度类型转换成低精度类型可能会损失精度,2.4算术运算,返回,3赋值运算符(1)赋值运算符基本赋值运算符:=它的作用是将赋值运算符“=”右侧的数据赋给左侧的变量。如:a=12;的作用是将常量12赋给变量a。也可以将一个表达式的值赋给一个变量。如:a=3+5;把3+5的和8赋给变量a。复合赋值运算符+=如:a+=3,表示a的值加上3的结果再赋给a。-=如:a-=3,表示a的值减去3的结果再赋给a。*=如:a*=3,表示a的值乘以3的结果再赋给a。/=如:a/=3,表示a的值除以3的结果再赋给a。%=如:a%=3,表示a的值除以3的余数再赋给a。赋值运算符都是双目运算符,用赋值运算符实现对变量进行赋值运算。,2.4算术运算,返回,(2)赋值表达式基本赋值表达式基本赋值表达式的一般形式:变量名=表达式其求解过程是:先计算赋值运算符右侧表达式的值,然后将其赋给左侧的变量。复合赋值表达式复合赋值表达式的一般形式:变量op=表达式其中:op+,-,*,/,%,b=ba;a=ab;,2.7位运算,返回,4.求反运算求反运算符()为单目运算符,具有右结合性。其功能是对参与运算的数的各二进制位按位求反。运算规则为:10;01;5.左移运算左移运算符()的功能与左移运算符相反,它是把“”左边的操作数的各二进制位全部右移“”右边指定的位数。右移时,右端移出的二进制数舍弃;左端移入的二进制数分两种情况:对于无符号整数和正整数,高位补0;对于负整数,高位补1。如:设a=15,a2;表示把00001111右移2位后为00000011(十进制3)。它在右移时,符号位将随同移动。它为正数时,最高位补0。若a=-15,a2;表示把11110001右移2位后为11111100(十进制-4)。它在右移时,最高位补1。,2.7位运算,返回,7复合赋值运算符位运算符与赋值运算符可以组成复合赋值运算符。有:类型2成员2;类型n成员n;,6.1结构体类型概述,返回,说明:结构体类型并非只有一种,用户可以根据需要来定义。一个结构体类型的标志由两个单词组成,一个是关键字struct,另一个是结构体类型名。结构体类型中定义各成员的类型。声明一个结构体类型,并不意味着系统分配一段内存空间来存放各数据项成员。只有定义变量为该类型,才为变量分配存储空间。系统未预先声明结构体类型。凡需要使用结构体类型数据的,都必须在程序中自己定义。,6.2结构体类型变量的定义与初始化,返回,1定义结构体类型变量(1)定义结构体类型后再定义结构体类型变量(2)定义结构体类型同时定义结构体类型变量(3)定义无名结构体类型同时定义结构体类型变量2结构体成员的引用结构体变量名.成员名3结构体变量的输入和输出C语言不允许把一个结构体变量作为一个整体进行输入或输出。如果想输出结构体变量,必须一个成员一个成员输出。输入也是如此。,6.3结构体数组,返回,结构体数组的定义和结构体变量的定义相似,也有三种情况。和普通数组一样,可以定义一维结构体数组,也可以定义多维数组。结构体数组变量的定义与结构体变量一样,也有三种方法。如:声明结构体数组变量,并赋初值。structstudentcharnum7,name7;intcom,eng,total;structstudentstu3=202149,王利,77,45,0,203120,张言,67,86,0,201034,刘洋,92,89,0;,6.4结构体与指针,返回,1结构体指针变量的定义结构体指针变量的定义形式:struct结构体类型名*结构体指针变量名;如:structstudenta,*p;定义一个结构体指针变量p后,必须使之指向一个具体的结构体变量:p=引用结构体指针变量所指向的结构体变量中的成员可以通过指针运算符*和-。引用方法如下:(*结构体指针变量名).成员名结构体指针变量名-成员名如:(*p).name或p-name,6.4结构体与指针,返回,2指向结构体数组的指针一个指针变量可以指向一个结构体数组。如:structinta;33.544.555.5floatb;arr3,*p;p=arr;p指向数组arr的首地址,若执行p+;,则此时指针变量p指向arr1的首地址。注意:结构体数组名代表的存储数组的首地址,不能实现自增或自减,如:arr+;,是错误的语句。3结构体指针和变量作为函数参数与普通变量一样,结构体指针和变量也可以作为函数的参数进行传递。函数的返回值也可以是结构体类型的数据。,6.5链表,返回,1链表含义在链表中,每一个数据元素以一个结点的形式存在,结点有数据域和指针域两大部分。数据域上根据定义形式可以由一个或多个数据组成;指针域上存储与该结点链接的下一个结点的首地址。head12491356127810212常用函数C语言中提供了几个用于分配和回收存储空间的函数,在使用这些函数时必须加头文件“alloc.h”。(1)存储空间分配函数malloc()(2)连续空间分配函数calloc()(3)空间再分配函数realloc()(4)空间释放函数free(),6.6位段,返回,1什么是位段位段是C语言特有的数据结构,它允许我们在结构体中以位为单位来指定其成员所占内存的长度,这种以位为单位的成员称为“位段”或称“位域”。利用位段能够用较少的空间存储数据。2位段的定义structpacked_structunsignedinta1:1;unsignedinta2:1;unsignedinta3:1;unsignedintb:4;unsignedintc:9;,6.6位段,返回,3位段的引用可以同结构体成员中的数据引用一样引用位段结构体成员。但应注意位段的最大取值范围不要超出二进制位数规定的范围,否则超出部分会丢弃。假设已经有了上面关于位段结构体类型packed_struct的定义,有如下变量定义:structpacked_structpacked_data;/*定义位段变量packet_data*/packed_data.b=7;/*把packed_data的b位段赋值为7*/,6.6位段,返回,4位段数据使用的注意事项(1)可以通过定义长度为0的位段使下一位段从下一字节开始存储。如:unsignedinta1:2;unsignedinta2:4;unsignedinta3:0;unsignedinta4:4;由于a3的长度为0,则a1和a2存储在一个存储单元中,a4存储在下一个字节中。(2)可以定义无名位段。如:unsignedinta1:2;unsignedint:4;unsignedinta2:3;unsignedinta3:1;在a1后面定义一个无名位段,其所占的4个位空着不用。,6.6位段,返回,(3)位段的长度不能大于存储单元的长度(通常为两个字节)。(4)位段无地址,不能对位段进行取地址运算,也不能定义位段数组。(6)位段若出现在表达式中,将被系统自动转换成整数。(7)位段的类型必须指定为unsignedint。,6.7共用体类型,返回,1共用体类型定义共用体类型定义的一般形式:union共用体类型名类型1成员1;类型2成员2;类型n成员n;2共用体类型变量的定义(1)定义共用体类型之后再定义共用体类型变量。(2)定义共用体类型同时定义共用体类型变量。(3)定义无名共用体类型同时定义共用体类型变量。注意:共用体类型变量所占的字节数是各成员所占字节数的最大值。,6.7共用体类型,返回,3共用体成员的引用形式共用体是对多个变量共享同一段内存的定义,因此单独使用共用体变量没有任何意义,只能通过引用共用体成员来使用共用体变量,共用体成员的引用形式为:共用体类型变量名.成员名4共用体数据特点(1)共用体变量中起作用的成员是最后一次存储的成员,在存入一个新的成员后原有的成员就失去作用。(2)与结构体变量不同,共用体变量不能初始化。如:unioninti;charch;floatf;a=1,A,3.4;(3)共用体变量的地址和它的各成员的地址都是同一个地址值。如:2枚举变量的定义(1)定义枚举类型之后再定义枚举类型变量。如:enumweekdayyesterday;(2)定义枚举类型同时定义枚举类型变量。如enumweekdaysun,mon,tue,wed,thu,fri,satyesterday;(3)定义无名枚举类型同时定义枚举类型变量。如:enumsun,mon,tue,wed,thu,fri,satyesterday;,6.8枚举类型,返回,3几点说明(1)枚举元素是常量,默认情况下元素的值是其枚举值表中的顺序号。第一个枚举元素的序号默认为0。(2)枚举值是常量,不是变量。不能在程序中用赋值语句再对它赋值。如:sun=2;(3)在定义枚举类型时,可以指定枚举常量的数值。如:enumweekdaysun,mon=6,tue,wed,thu=20,fri,sat;则7个枚举元素的序号依次为:0、6、7、8、20、21、22。(4)整型与枚举类型是不同的数据类型,但仍可以用一个整数直接为枚举变量赋值。如:today=2;或today=(enumweekday)2(5)枚举元素的符号值是不能直接输出的,通常要用到switch语句与字符串输出语句结合起来才行。,本章小结,本章主要介绍了结构体类型、共用体类型和枚举类型的定义及其应用。通过本章的学习,使学生对C语言有了更深入的了解,熟悉更多的数据类型,有利于解决更复杂的问题。,返回,文件概述,文件的打开与关闭,字符读写函数:fgetc()和fputc(),第7章文件,本章小结,返回,字符串读写函数:fgets()和fputs(),数据块读写函数:fread()和fwrite(),格式化读写函数:fscanf()和fprintf(),文件的随机读写,文件的出错检测和处理,7.1文件概述,返回,1.文件概念所谓“文件”是指存储在外部介质(如磁盘等)上的一组相关数据的集合。2文件的分类从用户的角度看,文件可分为普通文件和设备文件两种。从文件编码的方式来看,文件可分为ASCII码文件和二进制文件两种。,二者的区别:存储12这个数。ASCII码文件:是由一个一个字符组成,每个字符用ASCII码表示。二进制文件是以数据在内存中的存储形式原样输出到磁盘上去。,7.1文件概述,返回,3缓冲文件系统和非缓冲文件系统进行文件的读/写,首先要为文件建立一个相应的缓冲区。,7.1文件概述,返回,4文件指针要对文件进行操作,首先要建立一个流。建立了与文件相应的流,与该文件相应的文件结构体变量才会有具体的值,FILE类型的指针才会指向相应文件的结构体变量。FILE是在头文件“stdio.h“中给出声明。typedefstructshortlevel;/*缓冲区使用程度*/charfd;/*文件描述符*/shortbsize;/*缓冲区大小*/unsignedchar*buffer;/*缓冲区的位置*/unsignedflags;/*文件状态标志*/unsignedcharhold;/*如无缓冲区则不读字符*/unsignedchar*curp;/*指针,当前指向*/unsignedistemp;/*临时文件,指示器*/shorttoken;/*有效性检查*/FILE;声明FILE类型变量:FILEfp1;,7.1文件概述,返回,5文件的一般操作过程文件的一般操作步骤是:打开文件操作文件关闭文件。(1)打开文件:建立用户程序与文件的联系,系统为文件开辟缓冲区。(2)操作文件:指对文件的读、写、追加和定位等操作。读操作:从文件中读出数据,即将文件中的数据输入到计算机内存。写操作:向文件中写入数据,即将计算机内存中的数据输出到文件。追加数据:将新的数据写到文件原有数据的后面。定位操作:移动文件读/写位置指针。(3)关闭文件。切断文件与程序的联系,将文件缓冲区的内容写入磁盘,并释放文件缓冲区。,7.2文件的打开与关闭,返回,1文件打开函数fopen()函数调用形式为:文件指针=fopen(文件名,使用文件方式)说明:(1)“文件名”是指被打开的文件名,可以是绝对路径也可以是相对路径的目录路径。(2)“文件操作方式”指明文件允许的读/写方式。如:FILE*fp;fp=fopen(“f1.txt,r);当打开文件时出现错误,fopen()函数返回NULL。为了避免在打开文件时出错,建议用以下的程序段,当在打开文件发生错误时,使程序停止运行。if(fp=fopen(f1.txt,r)=NULL)printf(Cannotopenfilen);exit(0);,返回,7.2文件的打开与关闭,返回,2文件关闭函数fclose()fclose()函数可用来关闭一个文件,其调用格式为:fclose(文件指针);如:fclose(fp);它表示的意义是通过fp把文件关闭,即它不再指向该文件。当正常完成关闭文件操作时,fclose()函数返回值为0;否则返回EOF(1)。可以用ferror()函数来测试。,7.3字符读写函数:fgetc()和fputc(),返回,1读字符函数fgetc()函数调用格式:字符变量=fgetc(文件指针);功能:从打开的文件中读一个字符并送入字符变量中。说明:(1)在调用fgetc()函数时,文件必须是以读或读写方式打开的。(2)读的字符也可以不向字符变量赋值,如:fgetc(fp);,此时读出的字符不能保存。(3)在文件内部有一个位置指针。用来指向文件当前读写的位置。在文件打开时,该指针总是指向文件的第一个字节。使用fgetc()函数后,该位置指针将向后移动一个字节。因此可连续多次使用fgetc()函数,可读多个字符。,7.3字符读写函数:fgetc()和fputc(),返回,2写字符函数fputc()函数调用格式:fputc(字符量,文件指针);功能:把字符量写入文件指针所指向的文件中。其中,字符量可以是字符常量也可以是字符变量。说明:(1)文件可以以写、读写、追加方式打开,用写或读写方式打开一个已存在的文件时将清除原有的文件内容,写入字符从文件首开始。如需保留原有文件内容,希望写入的字符从文件尾开始存放,必须以追加方式打开文件。被写入的文件若不存在,则创建该文件。(2)每写入一个字符,文件内部的位置指针向后移动一个字节。(3)fputc()函数有一个返回值,如写入成功,则返回写入的字符,否则返回EOF(-1)。可用此来判断写入是否成功。,7.4字符串读写函数:fgets()和fputs(),返回,1读字符串函数fgets()函数调用格式:fgets(字符数组,n,文件指针);功能:从指定的文件中读一个字符串到字符数组中,从文件中读出的字符个数不超过n-1个字符,因为要在最后加上串结束标志0。说明:(1)在读出n-1个字符之前,遇到换行符n或文件结束符EOF,则读操作结束,并将读到的n连同结束符0一起写入数组中。因此,可以通过fgets()返回的值是否为NULL确定文件是否读到尾。(2)fgets()函数有返回值,读取成功,返回值是字符数组的首地址,失败返回空指针NULL。2写字符串函数fputs()函数调用格式:fputs(字符串,文件指针);功能:向文件指针所指向的文件写入一个字符串。若调用成功返回零值,否则返回EOF(即1)。,7.5数据块读写函数:fread()和fwrite(),返回,1.读数据块函数fread()函数调用格式:fread(buffer,size,count,fp);功能:从指针fp当前指向的文件中连续读出count*size个字节的内容(即连续读出count个size字节的数据块),并存入首地址为buffer的内存区域中。如:fread(f,4,2,fp)其中f是一个实型数组名。一个实型变量占4个字节。这个函数从fp所指向的文件读入2个(每个数据4个字节)数据,存储到数组f中。,7.5数据块读写函数:fread()和fwrite(),返回,2.写数据块函数fwrite()函数调用格式:fwrite(buffer,size,count,fp);功能:将首地址为buffer的连续count*size个字节的值(即count个size字节大小的数据块)写入由指针fp指向的文件中。说明:(1)在对数据块的读写函数中,buffer虽都是一个指针,但代表不同的意义,在fread()函数中,它表示存放输入数据的首地址;在fwrite()函数中,它表示存放输出数据的首地址。size表示要读写的数据块的字节数。count表示要读写的数据块的块数。fp表示文件指针。(2)如果文件以二进制文件打开,用fread()函数和fwrite()函数就可以读写任何类型的息。(3)若这两个函数调用成功,则函数返回值是写入或读出的数据块的个数,即count的值;否则,返回值为0,表示出错。(4)判断字符文件是否已经读结束可以根据所读的字符是否为EOF(1)来确定。,7.6格式化读写函数:fscanf()和fprintf(),返回,1fprintf()函数函数调用格式:fprintf(文件类型指针,格式控制字符串,输出表列);功能:将“输出表列”中相应变量中的数据,经过“格式控制字符串”的格式转换后,输出到“文件类型指针”所指向的文件中。如:fprintf(fp,%d,%s,%d,num,name,score);它的作用是将整型变量num、字符数组name和整型变量score的值按%d、%s和%d的格式写到fp所指向的文件中。如果num=5,name=wang,score=85,则输出到磁盘文件上的数据是:5,wang,85,7.6格式化读写函数:fscanf()和fprintf(),返回,2fscanf()函数函数调用格式:fscanf(文件类型指针,格式控制字符串,地址表列);功能:从“文件类型指针”所标识的文件读入一字符流,经过“格式控制字符串”的格式转换后,存入“地址表列”中的对应变量中。其中格式控制部分的内容与scanf()完全一致。如:fscanf(fp,%d,%s,%f,num,name,score);它的作用是将fp所指向的文件中的数据按%d、%s和%f的格式读到整型变量num、字符数组name和实型变量score中。如果fp所指向的数据是5,wang,85.5,则读到num、name、score变量中的数据分别是5、wang、85.5。,7.7文件的随机读写,返回,1rewind()函数rewind()前面已多次用过。函数调用格式:rewind(文件指针);功能:把位置指针移到文件首。2fseek()函数函数调用格式:fseek(文件指针,位移量,起始点);功能:用来将位置指针移到指定位置。说明:(1)“文件指针”指向被移动的文件。(2)“位移量”可正可负,表示向前或向后移动的字节数,要求位移量是long型数据,以便在文件长度大于64KB时不会出错。当用常量表示位移量时,要求加后缀“L”,来表示long型数据。,7.7文件的随机读写,返回,(3)“起始点”表示从何处开始计算位移量,规定的起始点有三种:文件首、当前位置和文件尾。,7.7文件的随机读写,返回,3ftell()函数函数调用格式:ftell(文件指针);功能:测试并返回位置指针指向的、相对于文件首的位移量。说明:(1)文件指针为FILE类型指针变量。(2)ftell()的返回值为long型整数,若返回值为-1L,表示出错。如:if(ftell(fp)=-1L)printf(errorn);它表示调用函数出错(如不存在此文件),则在终端输出“error”。,7.8文件的出错检测和处理,返回,1ferror()函数函数调用格式:ferror(fp);功能:检查文件读写操作是否出错。说明:(1)如果ferror()函数返回值为0(假),表示未出错。如果返回一个非零值,表示出错。(2)对同一文件每一次调用输入输出函数,均产生一个新的ferror()函数返回值,因此,对文件每执行一次读、写操作,都应及时检查ferror()函数返回值,以免数据丢失。(3)在执行fopen()函数时,ferror()函数返回值自动置为0,7.8文件的出错检测和处理,返回,2clearerr()函数函数调用格式:clearerr(fp);功能:使fp所指向的文件出错标志置为0。说明:(1)调用clearerr()函数后,ferror()函数返回值变为0。(2)只要出现错误标志,就一直保留,直到对

温馨提示

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

评论

0/150

提交评论