一、作业头
这个作业属于哪个课程 | 2020计算机3班 |
---|---|
这个作业要求在哪里 | C语言II—作业01 |
这个作业的目标 | 回顾上学期所学内容,学会使用文件,在自己使用文件的同时,学会调节自己代码的复杂程度以及运算时间 |
学号 | 20209032 |
二、本周作业(总分: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。
2.2 问题
1.写出一个函数f(N),返回1到N之间出现的”1“的个数,比如f(12)=5;
2.满足条件”f(N)=N“的最大的N是多少?
2.3 要求
要求一:贴出代码图片,写出解题思路,列出测试数据(5分)
解题思路:先判断位数,决定后续在循环体中循环的次数,每次测试都从1开始,循环到N,一个一个数判断中间含有多少个一,再在主函数中对这些数进行统计。其中第一个for循环是用于循环从1到N,第二个for循环用于统计在n的位数,其中自定义函数中的循环体用于判断其有多少个1,每次判断完毕即返回此时的1,每循环一次,就会与前面所得出的1的个数叠加,从而达到统计总共有多少个1的目的。
N | f(N) |
---|---|
21 | f(N)= 13 |
999 | f(N)= 300 |
9999 | f(N)= 4000 |
999999 | f(N)= 600000 |
99999999 | f(N)= 80000000 |
要求二:给出不同测试数据的运算时间,如果你的运算时间不变,说明你的测试数据不够大(5分)
要求三:思考针对足够大的数据,如何减少运算时间,并给出在原有算法基础上的改进算法和改进思路。(10分)
改进思路:在开始循环体使用过多,会加重其负担,所以改进了主函数与自定义函数中的循环体,将其简化,把一开始的判断位数的for循环,直接用while循环体代替,减少循环次数。
2.4 文件及检测程序
2.5 用自己的语言回答两个问题,并给出所查阅资料的引用(10分)
问题一:什么是文件缓冲系统?工作原理如何?
文件缓冲系统:文件缓冲区即系统在读写程序时在内存中开辟的数据源与数据目标中间的一个用于保存完整数据内容的缓冲区域。
工作原理:电脑系统会为正在使用的文件开辟一个内存空间,当从磁盘向内存读入数据时,就会一次从磁盘文件将一些数据输入到内存缓冲区,然后把从缓冲区接受到的数据传递给文件中的变量;其中缓冲区就是文件的缓冲系统的核心。
问题二:什么是文本文件和二进制文件?
文本文件:文本文件是指以ASCII码方式存储的文件,他只能存储ASCII码中规定的有效信息,除了这些信息,其他的信息就不能存储。
二进制文本:文本文件是一种由很多行字符构成的计算机文件,含有特殊的格式及计算机代码。
2.6 本周学习总结
1 学习进度条(5分)
周/日期 | 这周所花的时间 | 代码行 | 学到的知识点简介 | 目前比较迷惑的问题 |
---|---|---|---|---|
1 3.1~3.7 | 9h | 204 | 文件的使用,以及文件的分类 | 在vs中文件的打开以及使用上存在问题 |
2 累积代码行和博客字数(5分)
3 学习内容总结和感悟(5分)
- 在vs中由于规则较多,所以存在的问题也较多,这里还需要自己探寻。
- 文件的使用中需要注意的事情较多,比如不能打开文件该怎么搞,不能正常关闭该怎么搞,这些都是要考虑的事情,要找到正确的地址。
- 在减少自己所运行的代码时间时,要考虑的就是其空间以及时间,本次由于用的循环体较多,导致运行的速度有所影响,但是,相比直接用主函数处理改问题,自定义函数能减少所使用的变量,也就可以减少系统要为此变量开辟的空间