2024-2025-1 20241416 《计算机基础与程序设计》第十二周学习总结
这个作业属于哪个课程 2024-2025-1-计算机基础与程序设计
这个作业要求在哪里 2024-2025-1计算机基础与程序设计第十二周作业
这个作业的目标 复习巩固前面所学的内容
作业正文 https://www.cnblogs.com/rockytyh/p/18608075
教材学习内容总结
《C语言程序设计》第11章内容概括
一、位运算相关
位运算的概念
位运算实际就是对表示计算机中的数进行操作的运算符,其是对二进制进行运算,C语言可通过位运算操作计算机硬件,这是C语言的重要特色,适合编写系统软件,在检测和控制领域会用到位运算知识,例如存储单元二进制数的移位、按位相加等操作。
基本位运算符
文档未详细提及具体的基本位运算符内容,但提到了相关应用示例,如循环右移操作的程序示例,其中涉及到位运算操作数的定义(如unsigned a,b,c; int n;)以及通过scanf函数输入操作数,然后进行位运算操作(如b = a << n、c = c | b等)。
位运算符的应用
包含循环右移等应用,在循环右移操作中,有具体的算法分析,如先将原数的右端n位放到另一个数的高n位,再进行按位或运算等操作步骤,并且给出了相应的程序示例。
位段
C语言允许结构体中以位为单位指定成员所占内存长度,这样以位为单位的成员称为“位段”或“位域”,还给出了位段定义的结构体示例(如struct packed{unsigned a:2; unsigned b:6; unsigned c:4; unsigned d:4; int i; }data;),其存储形式按照定义的位进行存储。
二、文件操作相关
文件概念
便于对字符进行逐个处理,也便于输出字符;存在一个字节不对应一个字符,不能直接输出字符形式的情况。
C文件系统
C语言把每一个文件都看成一个连续、有序的称为“流”的字节序列,流中的每个字节可单独存取。其中正文流是以行为单位组织的字符序列,行以特定字符结束。还提到了标准高级I/O函数。
利用高级I/O库函数存取文件
打开文件
一般调用形式为fopen(文件名,存取方式),“文件名”可以是字符串、字符数组名或指向文件名的指针,且允许包含路径,其形式和要求与C所在环境有关。“存取方式”以字符串形式给出,如打开只读正文文件、仅追加正文文件、读/写正文文件等多种方式,不同方式有不同的文件存在性和读写操作的要求,同时对于二进制文件也有对应的打开方式(如rb、wb、ab等)。打开文件成功会返回一个FILE型指针用于后续操作,失败则返回NULL空指针,还介绍了FILE结构类型的组成成员。
读/写文件
介绍了读/写字符函数getc和putc,getc函数用于从已打开文件的当前位置读出一个字符,但文档未详细提及putc函数具体内容及读写文件的其他操作内容。
关闭文件
文档未详细阐述关闭文件相关操作内容。
文件结尾检测与读/写错误检测
文档未详细阐述此部分内容。
文件定位
文档未详细阐述此部分内容。
其他文件操作函数
文档未详细阐述此部分内容。
三、指针相关
变量的指针
内存区每个字节都有编号即地址,为了正确访问内存单元,根据地址能找到内存单元,内存单元的地址与内容是不同概念,地址相当于旅馆房间号,内存单元中存放的数据相当于房间中的旅客。
指针变量
文档未详细阐述指针变量相关内容。
指针变量的使用
文档未详细阐述指针变量使用相关内容。
指针与数组
文档未详细阐述指针与数组相关内容。
字符串与指针
文档未详细阐述字符串与指针相关内容。
指向函数的指针
文档未详细阐述指向函数的指针相关内容。
返回指针值的函数
文档未详细阐述返回指针值的函数相关内容。
指针数组
文档未详细阐述指针数组相关内容。
链表
文档未详细阐述链表相关内容。
有关指针的数据类型小结
文档未详细阐述有关指针的数据类型小结相关内容。
四、格式化输入/输出功能相关
printf函数
一般调用格式:printf(控制格式,输出列表)。
功能:按照控制格式进行输出,输出到屏幕上。
需要注意的问题:
控制格式:如%d/%i表示无符号十进制(用于各种进制的整数输出)、%ld表示长整型十进制、%o表示无符号八进制、%x/%X表示无符号十六进制、%u表示无符号整数等。
教材学习中的问题和解决过程
问题1:位运算的实际作用都有什么?
答案1:位运算的实际作用
位运算在计算机科学和编程中扮演着至关重要的角色,特别是在处理二进制数据时。以下是位运算的一些实际作用:
数据处理和优化
位运算可以用于高效地处理数据,如设置、清除或检查某位标志,以及计算掩码。例如,在代码段中的~index=(index+1)&(MAX-1),这个表达式实际上也起到了与取模运算类似的效果,但通常被认为效率更高。
加密与编码
位运算在哈希函数、循环移位等加密技术中有重要作用,如AES加密算法就大量使用位操作。
硬件控制
在微控制器和嵌入式系统中,位运算用于配置寄存器、控制引脚状态等。
数据存储
位运算在数据存储中扮演着重要的角色。在计算机内存中,数据以二进制形式存储,每个二进制位表示一个数据单元。通过位运算,可以对存储的数据进行读取、修改和处理。例如,在位图存储中,每个像素点的颜色信息可以用几个二进制位来表示,通过位运算可以快速对图像进行处理和操作。
数学运算的替代
位运算可以用来替代一些数学运算,如乘法和除法。例如,左移一位相当于乘以2,右移一位相当于除以2。这种操作通常比传统的乘法和除法更快,因为它们是更底层的操作。
位段
位段允许结构体中以位为单位指定成员所占内存长度,这样以位为单位的成员可以节省内存空间,提高数据存储的效率。
位运算的其他应用
位运算还可以用于判断一个数是否为2的幂、交换两个数的值、计算绝对值、取模运算转化成位运算等。
问题2:为什么指针如此重要?
答案2:指针是C语言中的一个重要概念,它允许程序直接访问和操作内存,这是C语言的特色和精华所在。掌握指针是真正掌握C语言的关键,因为使用指针可以带来多种好处,包括提高程序的编译效率和执行速度,使程序更加简洁;通过指针被调用函数可以向调用函数处返回除正常的返回值之外的其他数据,从而实现两者间的双向通信;利用指针可以动态地在运行时分配和释放内存,这对于创建灵活大小的数据结构(如链表、树等)和处理不确定大小的输入非常重要。
直接访问内存
指针允许程序直接访问和操作内存,这使得程序能够与硬件直接交互,提供了对底层数据结构的更精细控制,这在系统编程中尤其重要。例如,通过传递指向大型数据结构的指针(而不是整个结构的副本)给函数,可以减少内存使用和处理时间。
动态内存分配
在C语言中,使用指针可以动态地在运行时分配和释放内存。这对于创建灵活大小的数据结构(如链表、树等)和处理不确定大小的输入非常重要。在C中,字符串实际上是字符数组,通常通过字符指针来操作。数组名本身在大多数上下文中退化为指向其第一个元素的指针,这使得使用指针遍历数组变得很自然。
函数指针
指针还可以用来指向函数。这允许动态地选择要调用的函数,使得程序更加灵活和模块化。
引用传递
虽然C语言中的函数参数是通过值传递的,但可以通过传递指针来实现引用传递。这样,函数能够修改其外部变量的值。
指针的使用需要注意
尽管指针有许多优点,但它们的使用也需要小心,因为错误的指针操作可能导致内存泄露、无效内存访问和其他难以追踪的问题。