C语言II博客作业01
这个作业属于哪个课程 | 计科三班 |
---|---|
这个作业要求在哪里 | 作业要求 |
这个作业的目标 | 回顾以前学习的知识并且学会提取文件的数据进行检测 |
学号 | 20209039 |
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.贴出代码图片,写出解题思路,列出测试数据。 | |
1.1 代码图片: | |
1.2 解题思路: |
首先由题意可知我们应该从自定义函数的来解题的思路出发,先定义一个f(n)的函数,再使其函数用于计算十进制正整数n中1到n中含有几个数字“1”,其中我们先利用for语句来输出从1到n的所有正整数;形如“for(i=1;i<=n;i++)”,再从for语句循环中套用一个while循环,再利用if(x%10==1)判断该数的个位数是否为1,最后再将该数除以10,计算非个位数是否为1,最后经过多次计算可得知给定的数字n有几个1。
1.3 测试数据:
输入数据 | 输出数据 | 时间 |
---|---|---|
6 | 1 | 0.997000 |
6666 | 3037 | 1.578000 |
9999 | 4000 | 1.728000 |
1.4 思考针对足够大的数据,如何减少运算时间,并给出在原有算法基础上的改进算法和改进思路: |
分析和剔除代码中的多余水分,把一些简单的无效语句剔除,简化程序中的循环体。
减少变量,精简语句和运算表达式,缩短代码。
2.1 将上题中多组测试数据写入文件,并给出测试程序以检测你的代码有没有问题,贴出你的代码、运行结果和文件内容:
2.2 用自己的语言回答两个问题,并给出所查阅资料的引用:
1.什么是文件缓冲系统?工作原理如何?
为了提高数据存取访问的效率,C程序对文件的处理采用缓冲文件系统的方式进行。根据文件缓冲的特性,把文件系统分为缓冲文件系统与非缓冲文件系统,对于缓冲文件系统,在进行文件操作时,系统自动为每一个文件分配一块文件内存缓冲区(内存单元),当程序要向磁盘文件写入数据时,先把数据存入缓冲区,然后再由操作系统把缓冲区的数据真正存入磁盘。文件缓冲区不是由系统自动分配,而需要编程者在程序中C语句实现分配。
2.什么是文本文件和二进制文件?
缓冲文件系统规定磁盘与内存缓冲区之间的交互由操作系统自动完成,缓冲文件系统将会自动在内存中为被操作的文件开辟一块连续的内存单元(如512B)作为文件缓冲区。当要把数据存储到文件中时 首先把数据写入文件缓冲区,一旦写满了512B,操作系统自动把全部数据写入磁盘一个扇区,然后把文件缓冲区清空,新的数据继续写入到文件缓冲区,当要从文件读取数据时,系统首先自动把一个扇区的文件导入文件缓冲区,供C程序逐个读入数据,一旦512B数据都被读入,系统自动把一个扇区的内容导入文件缓冲区,供C程序继续读入新数据。
3.1 本周学习总结:
1 学习进度条:
周/日期 | 这周所花的时间 | 代码行 | 学到的知识点简介 | 目前比较迷惑的问题 |
---|---|---|---|---|
第一周 | 10h | 64 | 回顾了数据类型和表达式,问文件 | 对于文件这一章的内容还不是特别的清楚了解,尤其是怎么样将文本文件应用到代码中去 |
2 累积代码行和博客字数: | ||||
3 学习内容总结和感悟: | ||||