C语言||博客作业01
1.作业头
这个作业属于哪个课程 | https://edu.cnblogs.com/campus/zswxy/CST2020-4 |
这个作业要求在哪里 | https://edu.cnblogs.com/campus/zswxy/CST2020-4/homework/11772 |
这个作业的目标 |
学会文件的使用 |
学号 | 20209067 |
一、本周教学内容&目标
第6章 回顾数据类型和表达式,第12章 文件
二、本周作业(总分:50分)
2.1 题目:给定一个十进制正整数N,写下从1开始,到N的所有整数,然后数一下其中出现的所有“1”的个数。
例如:
N=2,写下1,2。这样只出现了1个”1“。
N=12,我们会写下1,2,3,4,5,6,7,8,9,10,11,12。这样,1的个数是5。
问题是:
1.写出一个函数f(N),返回1到N之间出现的”1“的个数,比如f(12)=5;
2.满足条件”f(N)=N“的最大的N是多少?
要求:
1.贴出代码图片,写出解题思路,列出测试数据(5分)
2.给出不同测试数据的运算时间,如果你的运算时间不变,说明你的测试数据不够大(5分)
3.思考针对足够大的数据,如何减少运算时间,并给出在原有算法基础上的改进算法和改进思路。(10分)
可以使用链表的哈希法。
2.2 将上题中多组测试数据写入文件,并给出测试程序以检测你的代码有没有问题,贴出你的代码、运行结果和文件内容。(5分)
2.3 用自己的语言回答两个问题,并给出所查阅资料的引用(10分)
1.什么是文件缓冲系统?工作原理如何?
我们说缓冲区,它是内存空间的一个部分也就是说在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区。
在整个文件系统中有四种类型的缓冲区:
- dcache
- inodecache
- page cache
- buffer cache
-
那么它们有什么样的作用呢有什么样的区别呢?
首先我们来介绍一下 buffer和cache有什么样的不同。
buffer是内存的缓冲区,是各进程产生的文件临时存储区。在一定的时间内会统一写入到磁盘,减少磁盘碎片或磁盘的反复寻道从而提高系统性能。简单来说buffer中的数据呢,就是要写入磁盘的数据,而cache也是内存的缓冲区,是经常被用在磁盘的I/O请求上。如果有文件频繁的被访问到呢?系统会将文件缓存在cache上,供cpu进程来访问。简单的来说cache中的数据就是,存放磁盘中读出来的数据。我们可以通过查看proc目录下的meminfo文件看到你机子上buffer和cache的大小。
那么buffer cache和page cache有什么不同?
page cache实际上是针对文件系统的,是文件的缓存。在文件层面上的数据呢?会缓存到page cache中。文件的逻辑层需要映射到实际的物理磁盘,这种映射关系由文件系统来完成。当page cache中的数据需要刷新时呢,page cache中的数据就交给buffer cache。
而buffer cache是针对磁盘块的缓冲,也就是在没有文件系统的情况下直接操作的数据会缓存到buffer cache中。例如文件系统的元数据,都会缓存到buffer cache中。那么dcache和inodecache有什么样的作用
dcache是也就是dentry对象的cache,用于把路径转化为索引节点inode。inodecache也就是inode对象的cache,用于表示文件系统中的文件或者目录。
————————————————
版权声明:本文为CSDN博主「土豆西瓜大芝麻」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/jinking01/article/details/10820237
2.什么是文本文件和二进制文件?
文本文件与二进制文件区别
1)文本文件:这类文件以文本的ASCII码形式存储在计算机中。它是以"行"为基本结构的一种信息组织和存储方式。
2)二进制文件:这类文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂它们,只有通过相应的软件才能将其显示出来。二进制文件一般是可执行程序、图形、图像、声音等等。
C++标准库提供了基于输入/输出流机制的文件操作,叫做文件流(File Stream)。打开文件的时候,可以用参数制定按照二进制方式还是文本方式。
然而,可能与你的想象不同的是,这里的二进制或者文本与文件的格式并没有任何关系,而是文件流操作时对数据的表达方式。
文本方式和二进制方式的最大区别在于文本方式对于'\n'换行符的理解不同,在DOS平台下,该字符会被展开成<CR>< LF>两个控制字符(相当于"\r\n"),在ASCII字符集下是0DH,0AH,而在UNIX平台下,仅仅是<LF>,不会展开。而在二进制方式下,不管是什么平台,'\n'都是精确的<LF>。
而类似于一个数学上的数字128,会在文件中以什么样的格式存储,是以数字形式存储(80H),还是对应的可读文本('1','2','8'),却和文件流的打开方式无关。
在C++的文件流中,使用的术语叫做格式化输入输出操作和无格式化操作,前者也就是<<和>>运算符,将数字按照可读文本存储,后者是get/put成员函数,直接存储数字格式。
2.4 请给出本周学习总结(15分)
1 学习进度条(5分)
周数 | 本周所学内容 | 学习时间 | 还存在的问题 |
---|---|---|---|
第一周 | 计算机文件 | 5h | 上个学期还有很多题目不会写,动力不够多 |
2.2累积代码行和博客字数
3 学习内容总结和感悟(5分)
1;复习了上学期的内容3 学习内容总结和感悟(5分)
2;学会了如何创建文件