C语言程序设计核心详解 第十章:位运算和c语言文件操作详解_文件操作函数

简介: 本文详细介绍了C语言中的位运算和文件操作。位运算包括按位与、或、异或、取反、左移和右移等六种运算符及其复合赋值运算符,每种运算符的功能和应用场景都有具体说明。文件操作部分则涵盖了文件的概念、分类、文件类型指针、文件的打开与关闭、读写操作及当前读写位置的调整等内容,提供了丰富的示例帮助理解。通过对本文的学习,读者可以全面掌握C语言中的位运算和文件处理技术。

位运算和c语言文件操作详解

1. 位运算

位运算的操作对象只能是整型或字符型数据
C语言提供6种位运算符:
& 按位与
| 或
^ 异或
~ 取反
<< 左移
>> 右移

复合赋值运算符:
&=,|= ,^=,<<=,>>=

1.1 按位与运算

1&1=111
1&0=000
0&1=0
0&0=0
作用:清零

1.2 按位或运算

11=111
10=100
01=1
00=0
作用:将特定位置1

1.3 按位异或运算

1^1=0 相异为1
1^0=1 相同为0
0^1=1
0^0=0
作用:将特定位置1

1.4 按位取反运算

按位取反运算符是一个单目运算符。按位取反后0变1,1变0
计算机流程是将按位取反的数转换为2进制数,这个2进制数按位取反,然后再转换回原来的进制

速算技巧:对一个数按位取反得到的值为该数+1后再乘以-1

1.5 按位左移运算(<<)

格式:数<<n
功能:将二进制位按位依序左移n位

速算技巧:对一个十进制数左移n位后得到的值为该数乘以2^n^的积

1.6 按位右移运算(>>)

格式:数>>n
功能:将二进制位按位依序右移n位

速算技巧:若该数为一个负数并且不能被2^n^整除得到的数为商加-1

例题分析:

a)100  b)80 c) 64 d)32
main()
{
   
    char x=040;
    printf("%O\n",x<<1);
}

x=0408进制
%O是8进制输出 
x=040转换为2进制,再转10进制 是32
左移动 *264
64转换为8进制是100

2. 文件

2.1 文件概念

1.文件:记录在外部存贮介质(外存)上的数据的集合。

2.文件的分类:
文件文本(ASCII码文件):每个字符存储到文件中。
二进制文件:以二进制存储
c语言中对文件的存取是以字符(字节)为单位的。

3.文件类型指针
考试中,记住FILE就是文件类型名,它是一个结构体类型。对一个文件进行操作,通过文件指针进行的,定义如下:
FILE fp,in,*out;

2.2 文件的打开与关闭

2.2.1 文件的打开(fopen()函数)

格式:fopen(文件名,文件使用方式)
功能:按指定的"使用方式"打开文件,函数返回所打开==文件的指针==,该指针的基类型为文件类型。文件名和文件使用方式均为字符串。

如:以只读的方式打开文件data.txt,并用指针变量fp指向它。

FILE *fp;    //FILE可以理解为一种类型名,是文件的类型名
fp=fopen("data.txt","r")

格式:open(文件名,文件使用方式)
打开文件的“使用方式”:

12种,4种基本的,9种混合的
"r":打开已存在文件
"w":刷新写 创建写
"a":追加写 创建写
"+":r+ 增强

"r+" "w+" "a+"
"rb" "wb" "ab"
"rb+" "wb+" "ab+"

注意的点:

(1)文件使用方式只能用小写字母,文件名用大写或小写均一样。
如:
FLIE *fp;
fp=fopen("c:\\tc\\data.txt","w");
其中的\\是转义
(2)在"文件使用方式"中若含有字母b,则打开的是一个二进制文件(bit)
(3)当fopen"打开"失败时,函数返回NULL.
if((fp=fopen(文件名,文件使用方式))==NULL)
{
printf("can not open this file\n");
exit(0);
}
上述代码中,要注意的点是括号,==运算符号,优先级高于=

2.2.2 文件的打开(fclose()函数)

文件使用完后应该关闭该文件
格式:fclose(文件指针)
如:fclose(fp);

2.3 文件的写入读出

2.3.1 fputc()与fgetc()

(1)fputc()
格式:fputc(字符,文件指针)
功能:把一个字符写到文件指针所指的文件中。其中字符可以是字符常量也可以是字符变量。若输出成功则返回输出的字符,失败则返回EOF(stdio.h中定义为-1)

(2)fgetc(文件指针)
功能:从文件指针所指文件中读取一个字符。若读取成功则函数返回读取的字符,失败(遇到文件结束)则返回EOF

2.3.2 fgets()与fputs()

(3)fgets()
格式:fgets(str,n,fp)
功能:其中str表示一个字符指针,可以是字符数组名也可以是字符指针变量名。从fp所指文件中读取n-1个字符(不是n个字符),并在这些字符最后加一个字符串结束符'\0'后赋给str
函数返回str的首地址

(4)fputs()
格式:fputs(str,fp)
功能:向fp所指文件中写出(输出)str中的字符串,str可以是字符串,str可以是字符串常量,字符数组或字符指针变量。在输出时字符串的结束符'\0'不输出。若输出成功则返回0,失败返回EOF

2.3.3 fread()与fwrite()

(5)fread(),fwrite()
格式:
fread(buffer, size, count,fp);
fwrite(buffer, size, count,fp);

其中:
buffer是数据的地址
size是每次读写的字节数
count表示让函数进行多少次的读写
fp是要进行读写的文件指针变量
功能:用来读写一个连续的数据块
注:
(1)这两个函数按二进制方式进行读写

2.3.4 fprintf()与fscanf()

(6)fprintf(),fscanf()
格式:
fprintf(文件指针,格式说明符,输出列表);
fscanf(文件指针,格式说明符,输入列表);
功能:按格式说明符所指定的格式向文件中读写(输入输出)数据。其中格式说明符河输入(输出)列表的用法与scanf和printf函数相同。

补充:feof(文件指针)
作用是测试文件的当前读写位置是否在文件末尾,若是则返回非0值(真),否则返回0(假)。

while(!feof(fp))
{
   /写 文件
}

2.4 文件当前读写位置函数

2.4.1 rewind()

(1)rewind()
格式:rewind(文件指针)
作用:使当前的读写位置重新指向文件的开头。函数无返回值。

2.4.2 fseek()

(2)fseek()
格式:fseek(文件指针,位移量,起始点)
功能:将当前的读写位置从"起始点"开始按"位移量"所指定的移动字节数向后移动。

起始点有:
SEEK_SET 或0 (表示“文件的开始”)
SEEK_CUT 或1 (表示“当前位置”)
SEEK_END 或2 (表示文件末尾)

SEEK_SET 是宏名 0是宏内容

位移量:要在数值后加字母l或L
如:

fseek(fp,100L,SEEK_SET)

给出例题:
将位置指针定位到离文件头50个字节的地方
fseek(fp,50L,0)
将位置指针定位到离文件尾50个字节的地方
fseek(fp,-50L,2)
将位置指针定位到离文件头0个字节的地方
三种方法:
方法1:fp=fopen();
方法2:rewind(fp);
方法3:fseek(fp,0L,0);

2.4.3 ftell()

(3)ftell()
格式:ftell(文件指针)
功能:返回当前文件的位置,用相对于文件头的位移量表示。若返回-1L表示出错

相关文章
|
2月前
|
C语言 C++
C语言 之 内存函数
C语言 之 内存函数
36 3
|
18天前
|
C语言
c语言调用的函数的声明
被调用的函数的声明: 一个函数调用另一个函数需具备的条件: 首先被调用的函数必须是已经存在的函数,即头文件中存在或已经定义过; 如果使用库函数,一般应该在本文件开头用#include命令将调用有关库函数时在所需要用到的信息“包含”到本文件中。.h文件是头文件所用的后缀。 如果使用用户自己定义的函数,而且该函数与使用它的函数在同一个文件中,一般还应该在主调函数中对被调用的函数做声明。 如果被调用的函数定义出现在主调函数之前可以不必声明。 如果已在所有函数定义之前,在函数的外部已做了函数声明,则在各个主调函数中不必多所调用的函数在做声明
31 6
|
1天前
|
存储 缓存 算法
【C语言】内存管理函数详细讲解
在C语言编程中,内存管理是至关重要的。动态内存分配函数允许程序在运行时请求和释放内存,这对于处理不确定大小的数据结构至关重要。以下是C语言内存管理函数的详细讲解,包括每个函数的功能、标准格式、示例代码、代码解释及其输出。
19 6
|
2月前
|
存储 缓存 C语言
【c语言】简单的算术操作符、输入输出函数
本文介绍了C语言中的算术操作符、赋值操作符、单目操作符以及输入输出函数 `printf` 和 `scanf` 的基本用法。算术操作符包括加、减、乘、除和求余,其中除法和求余运算有特殊规则。赋值操作符用于给变量赋值,并支持复合赋值。单目操作符包括自增自减、正负号和强制类型转换。输入输出函数 `printf` 和 `scanf` 用于格式化输入和输出,支持多种占位符和格式控制。通过示例代码详细解释了这些操作符和函数的使用方法。
43 10
|
1月前
|
存储 算法 程序员
C语言:库函数
C语言的库函数是预定义的函数,用于执行常见的编程任务,如输入输出、字符串处理、数学运算等。使用库函数可以简化编程工作,提高开发效率。C标准库提供了丰富的函数,满足各种需求。
|
1月前
|
存储 C语言
【c语言】玩转文件操作
本文介绍了C语言中文件操作的基础知识,包括文件的打开和关闭、文件的顺序读写、文件的随机读写以及文件读取结束的判定。详细讲解了`fopen`、`fclose`、`fseek`、`ftell`、`rewind`等函数的使用方法,并通过示例代码展示了如何进行文件的读写操作。最后,还介绍了如何判断文件读取结束的原因,帮助读者更好地理解和应用文件操作技术。
35 2
|
2月前
|
机器学习/深度学习 C语言
【c语言】一篇文章搞懂函数递归
本文详细介绍了函数递归的概念、思想及其限制条件,并通过求阶乘、打印整数每一位和求斐波那契数等实例,展示了递归的应用。递归的核心在于将大问题分解为小问题,但需注意递归可能导致效率低下和栈溢出的问题。文章最后总结了递归的优缺点,提醒读者在实际编程中合理使用递归。
63 7
|
2月前
|
存储 编译器 程序员
【c语言】函数
本文介绍了C语言中函数的基本概念,包括库函数和自定义函数的定义、使用及示例。库函数如`printf`和`scanf`,通过包含相应的头文件即可使用。自定义函数需指定返回类型、函数名、形式参数等。文中还探讨了函数的调用、形参与实参的区别、return语句的用法、函数嵌套调用、链式访问以及static关键字对变量和函数的影响,强调了static如何改变变量的生命周期和作用域,以及函数的可见性。
32 4
|
2月前
|
存储 编译器 C语言
C语言函数的定义与函数的声明的区别
C语言中,函数的定义包含函数的实现,即具体执行的代码块;而函数的声明仅描述函数的名称、返回类型和参数列表,用于告知编译器函数的存在,但不包含实现细节。声明通常放在头文件中,定义则在源文件中。
|
2月前
|
C语言
c语言回顾-函数递归(上)
c语言回顾-函数递归(上)
34 2