这个作业属于哪个课程 | https://edu.cnblogs.com/campus/zswxy/SE2020-2 |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/zswxy/SE2020-2/homework/11769 |
这个作业的目标 | <复习、巩固上一期所学过的内容,并在本周自行探索使用C语言计算代码运行时间的方法> |
学号 | <20209150> |
一、本周教学内容&目标
第6章 回顾数据类型和表达式,第12章 文件
二、本周作业(总分:50分)
2.1 题目:给定一个十进制正整数N,写下从1开始,到N的所有整数,然后数一下其中出现的所有“1”的个数。
要求一、贴出代码图片,写出解题思路,列出测试数据(5分)
2.1.1贴出代码图片(问题一答案)和计算运行时间的代码;
问题二答
F(N)= N最大的数为1111111110
2.1.2写出解题思路:
①题目的解题思路:
因为要计算“从1开始,到一个十进制正整数N中的所有整数,其中出现的所有“1”的个数”。可以分三步解决。
第一步、把“从1开始,到一个十进制正整数N中的所有整数”一个个提取出来,这一步可以先使用scanf输入此N,再使用for循环语句“for(i=1;i<=N;i++){}”来实现。
第二步、把“其中出现的所有“1”的个数”计算出来,可以在第一步的基础上内嵌一个循环语句,对出现的每一个“i”提取出它的每一位数,然后判断它是否为1。
第三步、调试程序的bug,看代码的运行过程是否与自己的思路相同,一步一步改进,最终成型。
④计算代码运行时间的解题思路:
第一步、查找网络,看是否有能计算时间的代码,剖析它的结构,分析它是如何计算代码运行时间的
第二步、将自己之前已经打出的代码嵌入其中,并删去无用的结构,改动部分说明词
附(网络查找的代码,引用自“菜鸟教程”):
2.1.3列出测试数据
输入数据 | 输出数据 | 说明 | 代码运行时间(单位:秒) |
---|---|---|---|
12 | f(12)=5 | 两位数 | 1.749 |
121 | f(121)=55 | 三位数 | 2.187 |
12321 | f(12321)=8095 | 五位数 | 3.156 |
123111 | f(123111)=93043 | 六位数 | 4.093 |
1234321 | f(1234321)=1058695 | 七位数 | 3.421 |
123454321 | f(123454321)=130586695 | 九位数 | 18.173 |
附:图
要求二、给出不同测试数据的运算时间,如果你的运算时间不变,说明你的测试数据不够大(5分)
已在要求一的“2.1.3”写出
要求三、思考针对足够大的数据,如何减少运算时间,并给出在原有算法基础上的改进算法和改进思路。(10分)
算法改进(附代码)
思路改进
把主函数里的判断优化,把在循环内判断改为在循环本身判断“是否跳出程序”
2.2 将上题中多组测试数据写入文件,并给出测试程序以检测你的代码有没有问题,贴出你的代码、运行结果和文件内容。(5分)
代码如下
备注:上面这个“检测代码有无错误”的代码是错误的
输入数据 | 输出数据 | 说明 | 代码运行时间(单位:秒) |
---|---|---|---|
12 5 | 无法运行 | 两位数 | 没有数据 |
121 55 | 无法运行 | 三位数 | 没有数据 |
12321 8095 | 无法运行 | 五位数 | 没有数据 |
123111 93043 | 无法运行 | 六位数 | 没有数据 |
1234321 1058695 | 无法运行 | 七位数 | 没有数据 |
123454321 130586695 | 无法运行 | 九位数 | 没有数据 |
2.3 用自己的语言回答两个问题,并给出所查阅资料的引用(10分)
1.什么是文件缓冲系统?工作原理如何?
缓冲文件系统的特点是:在内存开辟一个“缓冲区”,为程序中的每一个文件使用,当执行读文件的操作时,从磁盘文件将数据先读入内存“缓冲区”,装满后再从内存“缓冲区”依此读入接收的变量。执行写文件的操作时,先将数据写入内存“缓冲区”,待内存“缓冲区”装满后再写入文件。由此可以看出,内存“缓冲区”的大小,影响着实际操作外存的次数,内存“缓冲区”越大,则操作外存的次数就少,执行速度就快、效率高。一般来说,文件“缓冲区”的大小随机器 而定。
————————————————
版权声明:本文为CSDN博主「qcz_nuist」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qcz_nuist/article/details/79920048
2.什么是文本文件和二进制文件?
文本文件是一种计算机文件,它是一种典型的顺序文件,其文件的逻辑结构又属于流式文件。
特别的是,文本文件是指以ASCII码方式(也称文本方式)存储的文件,更确切地说,英文、数字等字符存储的是ASCII码,而汉字存储的是机内码。文本文件中除了存储文件有效字符信息(包括能用ASCII码字符表示的回车、换行等信息)外,不能存储其他任何信息。
二进制文件:包含在 ASCII及扩展 ASCII 字符中编写的数据或程序指令的文件。计算机文件基本上分为二种:二进制文件和 ASCII(也称纯文本文件),图形文件及文字处理程序等计算机程序都属于二进制文件。这些文件含有特殊的格式及计算机代码。ASCII 则是可以用任何文字处理程序阅读的简单文本文件。
————————————————
引用自《二进制文件_百度百科》和《文本文件_百度百科》
2.4 请给出本周学习总结(15分)
1 学习进度条(5分)
周/日期 | 这周所花的时间 | 代码行 | 学到的知识点简介 | 目前比较疑惑的问题 |
---|---|---|---|---|
第一周/21年3月5日 | 20 | 147 | 用C语言读取文本文件 | 如何更好地计算代码运行时间 |
2 累积代码行和博客字数(5分)
3 学习内容总结和感悟(5分)
学习内容总结
学习感悟
1、C/C++中的计时函数clock()可以用于计算代码运行的时间
2、有两个和计算执行时间相关的函数。
clock()
返回程序到目前的CPU执行时间,这个值需要除以CLOCKS_PER_SEC才能得到真正的用户时间,即秒。
gettimeofday()
得到当前的时间精确到微秒。用这个得到的数据更真实。