请问各位c语言大神,拿到一个编程题目(要求)后,对于复杂功能的编程应该如何下手?画流程图?分模块功

请问各位c语言大神,拿到一个编程题目(要求)后,对于复杂功能的编程应该如何下手?画流程图?分模块功能?
比如一串代码10000110000101,要求判断两个连续4个0间非零个数,偶数时将后一个连续4个0的第一个0变成1,例如上面的就变成10000111000101,然后输出时1正负交替输出,对于这种复杂(本人菜鸟觉得复杂)的提该怎么下手
有什么系统设计程序的方法嘛?麻烦给我介绍一下

大多数程序是不需要画流程图的,比较复杂的题目需要在纸上画一下数据结构,推导一下递推公式、动规公式等。程序该怎么入手只有详细掌握C语言、数据结构、算法后才能熟练。
你说的这种题目属于模拟题,就是考基本操作,应该算是基础级别的题目。这类题目只要熟练掌握顺序、循环、选择三种结构就行。按照题目的每个要求在脑海中模拟一下对应操作方法,然后把几个部分组装起来即可。追问

谢谢大神,用到三种结构,那该如何下手呢?我该如何去思考呢?先想一下具体如何操作,然后划分功能模块嘛?

大神,我现在只看了一本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语言和底层硬件有非常扎实的了解才行了。

追问

谢谢,大神!受益匪浅,请问大神,有什么书教如何去编程的嘛?或者看哪些书会对编程有帮助呢?您能推荐一下嘛~

温馨提示:内容为网友见解,仅供参考
第1个回答  2016-04-02
mark追答

之前一直琢磨变成字符串然后替换,后来发现我想多了。。。正则表达式10{4}1+0{4}1就能匹配然后替换。。。晚上在琢磨琢磨

关键问题是,在我目前的知识范围里,标准c里的正则表达式只有scanf支持,而且只是匹配并获取到匹配到的字符串一部分。

相似回答