| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5800 人关注过本帖
标题:学写程序,先把《Hello,world!》写好
取消只看楼主 加入收藏
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
结帖率:100%
收藏
已结贴  问题点数:100 回复次数:36 
学写程序,先把《Hello,world!》写好
教程上的《Hello,world!》,本质上是一个文本输出程序。学写程序,确实应从文本输出开始。现在,我们通过修改这个程序来学习。

在屏幕上输出字符串"Hello,world!",你会了,那么,如何输出一个数字呢?假定我们将来要写一个代替资源管理器的软件,在文件列表中,文件的大小即字节数是很有必要关心的数据,现在,某个文件的大小是543147018Byte,我们已经有这个数值,请你把它输出给用户看,但要按照常人的阅读习惯,输出格式是"543,147,018 Byte"。

提示:建议你不要假定自己知道这个具体的数值,写好的程序,要求是对任意的整数(我们知道现代的文件可能有很巨大的尺寸)都能以类似的格式输出。printf()似乎指望不上了,不过……看你的灵活性了。
搜索更多相关主题的帖子: 资源管理器 字符串 world 软件 用户 
2011-08-01 19:09
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用a9517495424在2011-8-1 19:23:31的发言:

技术没到家


开动脑筋,学过Hello,world!,要解决这个问题,跳一跳就够得着,这只是带引你向深处进入的案例罢了。

授人以渔,不授人以鱼。
2011-08-01 19:27
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
是的,可以不用指针。事实上,实现这个功能的方法有很多,条条大路通罗马。学习编程,是充分发挥现有的知识实现所需功能的过程,精有精的法子,笨有笨的法子,但最终必须要做对。先完成了功能,随着以后提出新的要求,不断地完善,你才会发现那么多方法之中,怎样才是最好的。

我再强调一遍:编程的第一宗旨是正确,其次是可维护性(即可修改性和可扩充性)。对现代计算机系统,速度已经是不需要重点考虑的内容,笨法子再慢,也不比最快速度的程序慢1秒以上,争那种时间是多余的,没错才是正路。

授人以渔,不授人以鱼。
2011-08-01 19:42
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
回复 10楼 风生钧起


你看看Windows的资源管理器,人家的文件大小就这种格式(不过是用KB为单位)。Total Commander是软件界的巅峰之作,其文件显示格式也是这样的。在其它高级编程语言,已经有这种功能的现成函数,比如在FoxPro(最早期的dBASE III)就已经实现了,那个函数叫TRANSFORM(Var, cFormat)。我们现在的目标,用C实现这个功能,把TRANSFORM()函数做个C/C++版的。事实上,实现这个东西,是每个C程序员的必备功课,写通了,学程序就七七八八了,奇经八脉基本上通了。

下一步是把BASIC的文本框输入功能做出来,才能叫可以用C写实用的程序。

再提示:调动积极性寻找解决路径,写程序就是修炼解决问题的办法的,不是学那些华而不实的东西的。算法在需要的时候随时都可以临急抱佛脚地学,但思维方式是要培养的。

[ 本帖最后由 TonyDeng 于 2011-8-1 20:35 编辑 ]

授人以渔,不授人以鱼。
2011-08-01 20:31
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用编译中。。在2011-8-1 20:21:33的发言:
请问你刚学的时候 也想过这问题吗?


我一向是需要解决问题才学什么,没有现实动力的东西从来不学。而且又从来没读过计算机课程,典型的无证作业。

授人以渔,不授人以鱼。
2011-08-01 20:34
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
没挨边。

无法用printf()直接写到屏幕,不会先写到字符串中再逐个加逗号上去么?printf()函数是一个系列,随便查一查帮助都能见到sprintf()这个函数,还有很多不同前缀的,自己看看都是什么用途,懂得这样找工具就通向成功之道了。

以后用各种版本的设计再实现几次,时刻带着这个问题在脑中,学到新知识的时候,想一想这新知识对解决这个问题有什么帮助吗?如果有好的主意,马上动手做。一直都是这样学习,你就有实质性的进步了。

只有你需要,才学的牢!学希尔排序,现在对你有什么帮助?恐怕暂时没有这方面的需要吧,学了有什么用呢?不用一个月还给老师了。你学过数列,如果不是现在有人争论,你都一样记错,那叫学会了?所以,记住:寻找动力!

你未必以这个案例为动力,但必须有动力。

[ 本帖最后由 TonyDeng 于 2011-8-1 20:57 编辑 ]

授人以渔,不授人以鱼。
2011-08-01 20:49
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用风生钧起在2011-8-1 20:55:56的发言:

又学到知识了 sprintf_s()  我去弄弄 估计弄的出了


sprintf()是printf()内部调用的东西,哈哈~
同样scanf()也源自sscanf()……

你弄过这些函数,回头想想所谓的控制台(stdio)流输入输出是什么概念,那根本就是字符串序列,内存、文件、控制台等等,都是同一个模型。这个才是原理,这个原理才是真正要知道的,将来碰到不管什么语言、什么应用,都可以用这个基本原理去测量它们的动作,知道人家是怎么实现功能的,你又可以怎样做。你真以为学C语言是拿着它去写程序啊?不要那么傻,现实中真需要用C写程序的场合极为稀罕,除非你铁了心肠要应聘微软公司的核心代码程序员。

授人以渔,不授人以鱼。
2011-08-01 21:06
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
回复 23楼 lz1091914999
可以实现需要的效果,只是做了太多无用功。会给分的。

授人以渔,不授人以鱼。
2011-08-01 21:22
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用lz1091914999在2011-8-1 21:24:32的发言:

你能指出来吗?


1.你其实没有读题,我是说构造一个函数,接收一个数值,按照指定的格式返回字符串,不是要你真正去读一个文件的大小。
2.就算是取文件的大小,你也没有必要真的打开它,还要移动指针求尺寸,文件不是你专用的,说打开就能打开。你见资源管理器打开每个文件来列表的吗?
3.题目本身是整数类型(不管是多少字节的),但你函数中用到了double数据类型转换,长精度的数据转回短精度的时候,会有丢失数据风险的,应慎用。

[ 本帖最后由 TonyDeng 于 2011-8-1 21:31 编辑 ]

授人以渔,不授人以鱼。
2011-08-01 21:30
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
我已经说了,实现这个功能的方法有很多种,是练程序设计的好素材,没有也不需要标准答案,修炼在每个人的过程中。不用sprintf()当然可以,直接分析数据取位就可以即时构造字符串输出,而且是最快最直接的方法,sprintf()仍然占用大量内存和代码,而这个不用。不过,我们还要考虑不同数据类型的情况,未必要区分参数设计不同的实现版本(在C++可以重载函数使用相同的函数名,但C不能),此时的实现机制仍然要综合衡量。总之,留着它练手吧,做到(自觉也好)完美了,写程序的功夫就算是过关了,这可不是骗人,信不信随你(写下去,还会发现面向对象的需要)。

授人以渔,不授人以鱼。
2011-08-01 21:40
快速回复:学写程序,先把《Hello,world!》写好
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.029303 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved