1、C语言学习与应用教学课件学习任务12位运算与文件操作一复制文件任务说明数据在计算机内是以二进制形式存储的,程序设计能够操纵二 进制的位,位运算多用在控制和运算中,将程序的输入和输出与文 件挂钩,悄悄地完成数据处理任务更能显示出程序设计的魅力。本 任务主要讨论流式文件的打开、关闭、读、写、定位等各种操作。本学习任务重点掌握各种位运算符及运算规则,能够从文件读 写数据。学习任务12位运算与文件操作一复制文件微课(&J华暄数肓R l-flUATEIMCiC语言学习与应用教学课件大珅现代班嚎战衔辔疙国家示范性高等职业院校建设成果精品课件任务说明学习任务12位运算与文件操作一复制文件知识要求。掌握各种位
2、运算符。掌握位运算规则。掌握文件的读写知识。了解打开文件的各种方式。了解文件操作的相关函数。学习任务12位运算与文件操作一复制文件能力要求。能够依据要求设计位运算。能够依据规则救出位运算的结果。能够打开 关闭指定文件。能够运用函数正确的操作文件。能够排查文件操作中的错误。学习任务12位运算与文件操作一复制文件位运算位运算的作用很多,效率很高,所以一般能用位运算的 就不用其他运算,程序中的所有数在计算机内存中都是以二 进制的形式储存的,位运算就是直接对整数在内存中的二进 制位进行操作。在c语言中,位运算的对象只能是整型或字符 型数据,不能是其他类型的数据。学习任务12位运算与文件操作一复制文件位
3、运算1 位运算符按优先级由高到低的顺序:(位取反,单目运算符)(右移)&(与)人(异或)I(或)学习任务12位运算与文件操作一复制文件位运算2.位运算符的运算功能(1)按位取反。按位取反()是单目运算符,运算对象位于运算符右边,如a的运算功能是将a的每一位翻转,1变为0,0变为1。学习任务12位运算与文件操作一复制文件应用举例12-1取反,求0115分析:0115就是八进制数115按位取反,先将其转换为二进制数,再按位取反。01001101按位取反为:10110010就是0262即:0115的值为:0262o程序代码:#incIude stdio.h vo i d ma i n()unsign
4、ed cha r x=0115,y;用unsigned cha r类型,是 1 个字节均是正数。y 二x;pr intf(%o,y);按八进制形式输出程序输出:262学习任务12位运算与文件操作一复制文件微课cO 项目 12-1-Microsoft Visual Studio.文件(F)编辑(E)视图(V)项目(P)生成(B)调试(D)团队(M)数据(A)工具(T)测试 W(W)帮助(H);上)二/Debug Win32 _|匕A*-窜串二?一 彳解决方案资源管理器 X 13后比D解决方案”项目12-1”(1个项E/邛项目12T3.J外部依赖项口头文件/匕源文件5 1201.cpp-i资源文件
5、1201.cpp x.(全局通围|.日应用举例12-1:取良,求:0115/*X*分析:0115就是八进制数115技位取反,先将其转换为二进制数(001 001 101),用一个字节存储全部数值为(01 001 101)再按位取反 01001101 按位取反为:10110010就是0262即,0115的值为:0262 o*/幸,#include stdio.hHvoid nainOunsigned char x=0U5,y;用unsigned char类型,是1个字节8个位均是正数,无符号位。y=x,printfC%o y);/按八迸制形式输出8个位的二进制数(01 001 101)的取反二进
6、制数(10 110 010)为262。)曰/*H*程序输出;262 I*/端娜描幽 AH)ID曲100%一字符32笠限觥M W力Ins0:13 2020/7/8应用举例 12-1学习任务12位运算与文件操作一复制文件位运算2.位运算符的运算功能(2)左移()。形式:a 2;a 的原码:10000000a 的补码:11111111 a 2 后:11111111a右移两位,右端移出,b 的补码:11111111b 的原码:10000000b的值为:79000000001111111111111111高端补1,11111111 000000000000000011111111111111110100
7、11001011010011101101得到b的补码。11111111 1110110100000000 00010011验证:十进制数79乘以4的值为十进制数-76,即-76右移2位,就是其除以4后的值为-19o学习任务12位运算与文件操作一复制文件问题12-2编写程序验证应用举例12-3的右移功能。运行后输出:.学习任务12位运算与文件操作一复制文件位运算2.位运算符的运算功能(4)位与(&)o按位进行“与”运算,有。出0,全1出1。和。进行 与运算具有屏蔽作用,和1进行与运算具有保留其原值 的作用。学习任务12位运算与文件操作一复制文件应用举例12-4位与分析:cha r a二 12,b
8、=10,c;c=a&b;a:0000 1100b:0000 1010c:0000 1000 跟1“与”其值不变,跟0 与”其值为0。c值为8。用程序实现:#incIude stdio.h vo i d ma i n()cha r a=12,b=10,c;c=a&b;pr i ntf(a=%d,b=%d,c=%dn,a,b,c);getcha r();)运行程序输出:a=12,b=10,c=8学习任务12位运算与文件操作一复制文件微课g 项目 12-4-Microsoft Visual Studio文件(F)编冢E)视图(V)项目(P)生成(B)调试(D)团队(M)数据(A)I(T)测试(S)窗
9、口(W)帮助(H)解决方案资源管理器013恒昌力解决方案”项目12-4”(1个项目,京项目12-4)镇外部依赖项 口头文件/,源文件12O4.cpp*x(全局范围)Debug Win32的 12O4.cpp 口资源文件-/应月举例12-4:与运算/*分析 1 char a=12,b=10,c;c=a&b;a:0000b:0000c 0000*/110010101000 跟1“与”其值不变,跟0与”其值为0。C值为8.9 X和第次爵整呢陶般4 H加苗#include“stdio.hvoid main()(char a=12,b=10,c,c=a&b,printf(wa=%d,b=%d,c=%dn
10、,z,a,b,c);)曰/*运行程序输出:a=12,b=10,c=8*/100%输出显示输出来源(S):IX3八l司代码定义窗口二i输出w|行14列35字符35OVR A 就T 2oS/8应用举例 12-4学习任务12位运算与文件操作一复制文件应用举例12-5获取某位信息问题:cha r a=0322,b;若使b获得a的第5位(从低位向高位计算)信息,应进行怎样的 操作?分析:让a与某数进行“与”运算,这个数只第五位的值是1,其余位的值均为0,则 计算结果只第5位的值由a决定,其余位均为0,这个数是:00010000,即020。a:011010010020:000010000执行:b=a&02
11、0后,b的值为020表示a的第5位信息为1;如b的值为0,表示a的第5位 信息为0。学习任务12位运算与文件操作一复制文件问题12-3编写实现功能输入小于256的正整数,输出该数在内存中的第5位值。学习任务12位运算与文件操作一复制文件01位运算2.位运算符的运算功能(5)异或)。相同出0,不同出1,与“0”异或其值不变,与“1”异或,其值翻转。学习任务12位运算与文件操作一复制文件应用举例12-6异或分析:cha r 0152;若使a的高四位不变,低四位按位取反,执行:a=a OxOf;a:01101010OxOf:00001111异或后a的值:01100101与原值相比,高4位不变,低4位
12、翻转了。学习任务12位运算与文件操作一复制文件问题12-4为应用举例12-6编写程序代码。问题12-5分析以下程序片断的作用。#include stdio.h void ma in()cha r a=3,b=4;a=a b;b=ba;a=a b;pr i ntf(a=%d,b=%d n,a,b);)输出.运算a=a b;b=b a;a=a b;作用是.运算后a的值./运算后b的值.运算后a的值.学习任务12位运算与文件操作一复制文件位运算2.位运算符的运算功能(6)或(|)。有1出1,全。出0。与1或具有置1作用,与0或具有 保留原值的作用。学习任务12位运算与文件操作一复制文件问题12-6怎
13、样运算?使字符型变量a的高四位值不变,低四位值置1,如何运算?可进行的操作是:注意:位运算是按位进行的操作,当两个参与运 算的数具有不同的位数,如cha r和i nt型运算,系统自 动进行如下处理:先将两个数右对齐,再将位数少的 数往高位扩充(无符号数和正数左侧用0补全,负数左 侧用1补全),然后就可以按位运算。学习任务12位运算与文件操作一复制文件文件操作1.与文件相关的概念文件是记录在外部存储介质上的数据的集合,便于长久的保存和携带数据。(1)输入与输出。当调用函数从外部文件向程序中的变量赋值时,称为输入或读。当调用函数 把程序中变量的值输出到外部文件时,称为输出或写。(2)数据流。C语言
14、中对输入/输出的数据都按照数据流的形式处理,输出时系统不加任何 信息,输入时逐一读入数据,直到遇到EOF结束标志。(3)存取方式。C语言对文件的输入/输出有两种存取方式:顺序存取和直接存取(随机存取)o(4)文本文件与二进制文件。以整型数123456为例,若以文本文件存储,占六个字节,分别存的是1、2、3、4、5和6的ASCII码,而以二进制文件存储,占一个整型变量的字节数,即四个 字节。当数据以二进制形式输出到文件中时,数据不经任何转换直接存到磁盘,但不能将二进制数据直接输出到终端屏幕,也无法从键盘输入二进制数据。学习任务12位运算与文件操作一复制文件微课学习任务十二 位运算与文件操作 复制
15、文件an年例敦同知识四效传触副文件操作与文件相关的概念文件输入与输出数据流方取方式U文中二进榭记录在外部存储介质上的数据集合 便于长久保存和携带当调用函数从外部文件向程序中的变量赋值 时,称为输入或读。当调用函数把程序中变嫩蹶 输出时系统不加任何信息输入时逐一读其数据 直到遇到EOF结束标志:顺海后取狗直接商取我森行随机存取:I123456以文本存储占6字节存的是各位教 字的ASCII码 二进制文件存储占一个融型变量的字节数四个字节 1文件相关的概念学习任务12位运算与文件操作一复制文件文件操作2.打开文件与关闭文件(1)文件指针。文件指针是指向一个结构体类型的指针变量,此结构体中包含有缓冲区
16、地址,当前存取的位置,是读还是写,是否出错,是否遇到文件结束标志等信息。这一切 已在stdio.h头文件中定义,并称此结构体的类型名为FIL E。文件指针的定义。形式:FIL E*指针变量名;例:FIL E*fp1,*fp2;(2)打开文件的函数。形式:f open(文件名,文件使用方式)函数返回一个指向FIL E类型的指针,如打开文件出错,返回NUL L。例:FIL E*fp;fp=fopen(file_a“,r);以“读”方式打开文件 Mfile_a 常用打开文件的语句形式:if(fp=fopen(Mfile_aM,M r,5)=NUL L)printf(ca nnot open this
17、 fiIe!nM);exit(0);/exit(0)是强行终止程序,须包含头文件“stdI ib.h”学习任务12位运算与文件操作一复制文件文件操作(3)打开文件的方式。:为读而打开文本文件,只能读,当文件不存在或不允许读时,返回NUL L。:为读而打开一个二进制文件,其他同“r”方式。:为写而打开文本文件,如文件不存在,会按指定的文件名建一个文件;若文件存 在将从开始位置写,文件原有内容丢失。“wb”:为写打开一个二进制文件,其余功能与”相似,可以指定位置进行写操作。“a”:为在文件后面添加数据而打开文本文件,如文件不存在,会按指定的文件名建一 个文件。“a b”:为在文件后面添加数据而打开
18、一个二进制文件,其余功能与“a”相同。:为读和写而打开文本文件,要求指定的文件已存在。“rb+”:为读和写而打开一个二进制文件,功能与,+”相同。:首先建立一个新文件写,然后可以从头开始读,如指定的文件已存在,原有内具若%+”功能,在读写时可由函数设置读写的起始位置。:具有“a”功能,在添加数据后可以从头开始读。“a b+”:具有“a+”功能,可由位置函数设置开始读的位置。学习任务12位运算与文件操作一复制文件文件操作(4)关闭文件。形式:fclose(文件指针)成功关闭文件时,函数返回。值,否则返回非。值。关闭正在被读 的文件,则指针变量与文件脱离关系,关闭被写的文件,先将缓 冲区的内容写到
19、文件中,然后指针与文件脱离关系。学习任务12位运算与文件操作一复制文件文件操作3.putc(fputc)和getc(fgetc)函数(1)putc(fputc)函数。调用形式:putc(ch,fp);或fputc(ch,fp);功能:将ch写到fp所指的文件中去,ch是字符常量或变量,输出成功,函数返回值为输出的字符,输出失败返回EOF(7)。(2)getc(fgetc)函数。调用形式:ch二getc(fp);或ch=fgetc(fp);功能:从fp所指的文件中读入一个字符赋给变量ch。学习任务12位运算与文件操作一复制文件应用举例12-7:向文件输出信息从键盘输入一些文本存入C:a.TXT中
20、,以作为结束标志。#incIude stdio.h#i ncIude stdIi b.hvo i d ma i n()FIL E*fpout;cha r ch;i f(fpout=fopen(tlc:a.txt,J,uw)=NUL L)反斜杠的转义字符是“pr intf(不能打开文件!n);exit(0);1ch=getcha r();while(ch!=)fputc(ch,fpout);ch=getcha r();1fcIose(fpout);)获取一个输入字符向文件写入字符继续获取输入字符关闭文件输入 TIANJIN XIANDAir后按Enter键,打开c:a.txt文件,文件中的内容正
21、是“TIANJIN XI ANDA I学习任务12位运算与文件操作一复制文件微课oO 项目 12-7-Microsoft Visual Studio文件(F)编箱(E)视图(V)项目(P)生成(B)m(D)团队(M)数据(A)工具(T)测试窗口四帮助(H);上u)-1二6 Debug Win32 二:-3匕a*二,琴理工?:一彳解决方案资源管理器 13后比D解决方案”项目12-7”(1个项目/茅项目12-7球外部依赖项口头文件/匕源文件 12O7.cpp口资源文件Q12O7.cpp X(全局通围j-应用举例12-7,向文件输出宿息/*X*从键盘输入一些文本存入E:A.TXT中,以作为结束标志。
22、*x*/#include stdio.h#include/,stdlib.hSvoid nain 0FILE*fp;char ch;if(fp=fopenC*e:a.txt*,*w*)=NULL)printf(不能打开文件!n);反斜杠的转义字符是:hireturn;)ch=getchar(),while(ch!=)fputc(ch,fp);ch二getchar 0;)fclose(fp);)获取一个输入字符向文件写入字符继续获取输入字符关闭文件臼/*生彳亍程序100%输出显示簿出来源(S):1 正在对“Debug、项目 12-7.lastbuildstate”执行 Touch 任务。11生成
23、成功。11已用时间 00:00:01,48=生成:成功1个,失败0个,最新0个,跳过0个inzi输出InsR代码日窗口行25列9就绪担5日解.二网才23 39 z:用二I 柒邮幅翡4 1加翻Q x,33 一应用举例 12-7学习任务12位运算与文件操作一复制文件问题12-7将代码补充完整将“c:a.txt”文件中的内容输出到屏幕,将程序代码补充完整。#i ncIude.#i ncIude.vo i d ma i n()FIL E pin;cha r ch;if(fpin=fopen(u.,.)二二NUL L)pr i ntf(ca nt open th i s fi le!n);ex i t(
24、0);1ch二fgetc(fp i n);whi Ie(ch!=7)文本文件的结束标志是EOF或7putcha r(.);输出到屏幕ch 二.;1fc I ose(.);1 运行程序,屏幕显示:.学习任务12位运算与文件操作一复制文件文件操作4.feof函数feof函数可用于判断二进制文件和文本文件是否结束。形式:feof(fp)若文件结束,函数返回值为1,否则为0。学习任务12位运算与文件操作一复制文件文件操作5.fsca nf函数和fpr i ntf函数(1)fsca nf函数。调用形式:fsca nf(文件指针,格式控制字符串,输入项表)功能:只能从文本文件中按格式读入数据。如:f sc
25、a nf(f p,%d%d”,&a,&b);要求文件中两个整数之间已用空格键或Enter键等断开。(2)fprintf函数。调用形式:fpr intf(文件指针,格式控制字符串,输出项表)功能:将内存中的数据转换成对应的字符,并以ASCII码的形式输出 至 中 o如:fpr intf(fp:d%d”,a,b);为便于以后读入数据将两数之 间用空格隔开。学习任务12位运算与文件操作一复制文件文件操作6.fgets函数和fputs函数(1)fgets函数。调用形式:fgets(str,n,fp)从文件中读入字符串,fp是文件指针,str是存放字符串的起 始地址,n是一个整型的值。函数功能:从fp所
26、指文件中读入丁1个字符,放在以str为起始 地址的内存中。遇EOF结束,最多只能读n-1个字符,读入结束后自动加0 o函数返回值为str。(2)fpiits函数。调用形式:fputs(str,fp)把字符串输出到文件中,str是字符串常量、数组名等,输出 遇0结束,不自动换行。学习任务12位运算与文件操作一复制文件应用举例12-8向文件写入字符串#i ncIude stdio.h#incIude stdI ib.h vo i d ma i n()cha r a 10 80,i;FIL E*fp;if(fp=fopen(c:a a.txt,w)!=NUL L)(for(i=0;i2;i+)get
27、s(a 0);fputs(a 0,fp);fputs(n,fp);1)fcIose(fp);运行程序输入:天津现代职业技术学院回车 笃学立信淬砺成人回车 检查程序执行结果:打开c:a a.txt文件,查看其中内容,正是此输入的内容。学习任务12位运算与文件操作一复制文件问题12-8请将代码补充完整。将c:a a.txt文件中的内容输出到屏幕。#i ncIude.#i ncIude.vo i d ma i n()cha r a 10 80,i;if(fp二.)(for(i=0;i3)pr i ntf(the file na mes too ma ny!n);I _e I se pr i ntf(
28、there a re no file na mes for i nput or、output!n);)学习任务12位运算与文件操作一复制文件编程训练12-2-1补充代码并运行程序。vo i d f i I ecopy(FIL E*fp i n,FIL E*fpout)cha r ch;ch=getc(fp i n);wh i Ie(.)/调用feof(fpin)函数,判断文件是Mputc(ch,fpout);ch=getc(fp i n);)学习任务12位运算与文件操作一复制文件编程训练12-2-2回答以下问题并执行程序。如果源文件名为:mycopy.cpp,生成的可执行文件名是:.运行可执行文件前,需做哪些准备?.将c:a.txt文件复制为:c:b.txt,应在命令提示符下输入:如何检测程序运行情况?.学习任务12位运与文件操作一复制文件祝你进步!谢谢!