请问各位c语言大神,拿到一个编程题目(要求)后,对于复杂功能的编程应该如何下手?画流程图?分模块功能?
比如一串代码10000110000101,要求判断两个连续4个0间非零个数,偶数时将后一个连续4个0的第一个0变成1,例如上面的就变成10000111000101,然后输出时1正负交替输出,对于这种复杂(本人菜鸟觉得复杂)的提该怎么下手
有什么系统设计程序的方法嘛?麻烦给我介绍一下
谢谢大神,用到三种结构,那该如何下手呢?我该如何去思考呢?先想一下具体如何操作,然后划分功能模块嘛?
大神,我现在只看了一本c语言,有什么书教如何去编程的嘛?或者看哪些书会对编程有帮助呢?
只能够经验编程嘛?
追答C语言是一种面向过程的语言,编写程序的时候应该把所有功能模块化,尽量用函数实现。先思考整个程序由哪些模块构成,再思考每个模块的功能和实现过程,然后逐一编写代码实现,最后调试和优化。思路方向应该是由大化小。
拿你说的这个题举例,首先思考需要哪些模块:一个判断两个连续的4个0的模块,一个统计两个4个0之间数字的模块,一个替换数字的模块,最后是输出模块。
接下来考虑这些模块怎么实现。后三个都比较简单就不说了,说一下第一个。首先要思考如何判断连续的4个0。比较典型的方法就是用数组保存每一位数,设置计数器i,判断每一个数a[i],每发现一个0,就将i加1,如果发现1,就将i重置为0。如此一来当i=4时,a[i]一定指向连续的4个0的最后一个0。接下来的问题是如何找到相邻的两个连续的4个0。很容易想到从a[i]的下一个元素开始重复上述判断过程,直到找到下一个4个0就可以了。这个模块就实现了。
作为一个合格的程序员,光写出满足要求的程序是不行的,还要思考如何优化。由于数字只有0和1,容易想到将其转化为对应十进制数字后,通过int型或long型直接存放在内存中。那么判断过程只需要每4位按位或0000判断结果是否为0就可以了。如果为0说明这四位数就是0000。这样相比上面的算法效率提升是数量级的,因为位操作属于底层操作,效率不是循环可以比的。这个优化就要求对C语言和底层硬件有非常扎实的了解才行了。
谢谢,大神!受益匪浅,请问大神,有什么书教如何去编程的嘛?或者看哪些书会对编程有帮助呢?您能推荐一下嘛~
之前一直琢磨变成字符串然后替换,后来发现我想多了。。。正则表达式10{4}1+0{4}1就能匹配然后替换。。。晚上在琢磨琢磨
关键问题是,在我目前的知识范围里,标准c里的正则表达式只有scanf支持,而且只是匹配并获取到匹配到的字符串一部分。