怎么锻炼程序员头脑?

viewtosay 2011-03-01 03:54:08

const char* strstr(const char* s1,const char* s2)//找s2在s1中第一次出现的位置,
{
assert(s2&&s1);
const char* p = s1,*r = s2;
while (*p!='\0')
{
while (*p+===*r++);
if (*r=='\0')
{
return p;
}
else
{
r = s2;
p = ++s1;
}
}
return NULL;
}

比如上面这段代码,我读它时一般先通过举几个代表性的例子把它读透。(abcde,cd),(abcarcdv,cd)一步一步在草稿上按照它的流程去模拟。但是等我自己去设计这个函数时就有点不知所然了,写出来的很混乱。还有像数据结构里的一个简单的链表,不仅要知道大体思想,还要注重很细微的,比如指针是否指空,是否超出链尾?......等等很头大,更不用说一些复杂的算法了,要多次用数据去模拟。

记得刚毕业参加面试时,有个面试官问我如何设计大数相乘函数,我没答上来。当他知晓我24岁才毕业时,感觉他也摇了摇头,这说明我的天生iq并不佳,想请教大家作为一个程序员如何锻炼工作需要的细微逻辑计算能力?

跟同学聊天时,了解到他们有的做测试,有的加工数据,说对写程序心里有种畏惧感,其实他们有的在大学里学程序学的也挺不错的。他们的畏惧感我也曾有过,毕竟在大学之前没接触过程序,大二才正式学程序,刚学时由于自以为知晓一些电脑软件的有趣应用和一些it英雄,感觉这个很神奇,但学着学着就产生枯燥感和畏怕,尤其是学数据结构的时候心想每一步都要考虑的这么周密,那该多费脑?!
...全文
407 33 打赏 收藏 转发到动态 举报
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
只手破天痕 2011-04-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bdmh 的回复:]
不必着急,都这么过来的,显示能看懂,然后自己摸索着写写,谁也不是一下就学会的,你2岁就能说很多话,但是你不认识一个字,等你去学了,也就认识了
[/Quote]

一言以蔽之啊!
xmu_才盛 2011-04-21
  • 打赏
  • 举报
回复
顺便提示一下, 这段程序已经非常精练了, 我说的那两个问题都不行, 但是为什么不行,lz要思考一下,这个过程就是锻炼逻辑思维的过程。。。
xmu_才盛 2011-04-21
  • 打赏
  • 举报
回复
如果把while (*p+===*r++);
改成 while (*p++==*r++);
就很容易懂了,

顺便考lz一个问题, 加深lz对这段程序的理解(不要拷贝编译, 就用脑子想)
else
{
r = s2;
p = ++s1;
}

1. 因为一开始 声明 char* r = s2了, 这里如果把 r = s2去掉可以吗? 去掉后 会出现什么情况无法判断?
2. p = ++s1; 改成 p++可以吗?

然后lz顺着我的思路考虑一下, 然后你就想通了
Qyee 2011-04-21
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 magisu 的回复:]
信鳳姐得自信
[/Quote]

你太逗啦。。。。
xmu_才盛 2011-04-21
  • 打赏
  • 举报
回复
while (*p+===*r++);
这是什么意思啊? 解释一下行吗??
wesweeky 2011-04-21
  • 打赏
  • 举报
回复
这个程序。。
jianere 2011-04-21
  • 打赏
  • 举报
回复
说到数据结构就头疼。。。想想就云了。。
lzywxm 2011-03-08
  • 打赏
  • 举报
回复
说道程序就头疼啊
hslinux 2011-03-08
  • 打赏
  • 举报
回复
怎么锻炼程序员头脑?--->撞墙去。

大头猫 2011-03-03
  • 打赏
  • 举报
回复
其实数据结构很好的啊,你慢慢看,就会个吸引的,它们的实现都很简单,就是数的排列不同而已,也不需要你背,知道它们的实现原理跟过程就好了,再拿些题练练,以后遇到问题就不禁往那个方向找。在拿数据结构的代码改改就可以了啊。为何写程序会怕呢,难以明白,可能是你们写的东西没有吸引你们的吧
MagiSu 2011-03-02
  • 打赏
  • 举报
回复
信鳳姐得自信
碎碎念 2011-03-02
  • 打赏
  • 举报
回复
看代码->写代码->在看代码->在写代码
pathuang68 2011-03-01
  • 打赏
  • 举报
回复
习惯成自然
谁学逆向工程 2011-03-01
  • 打赏
  • 举报
回复
猜谜语可以锻炼
一根烂笔头 2011-03-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bdmh 的回复:]
不必着急,都这么过来的,显示能看懂,然后自己摸索着写写,谁也不是一下就学会的,你2岁就能说很多话,但是你不认识一个字,等你去学了,也就认识了
[/Quote]
此楼观点我赞同,慢慢来!像我的口号:人牛变成牛人,需要蜕变的!这也是需要过程的!
再一点就是我对天才的定义:脑子里知识多了,懂得多了,事情就能孰能生巧,这就是个天才了!
赵4老师 2011-03-01
  • 打赏
  • 举报
回复
计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构……
赵4老师 2011-03-01
  • 打赏
  • 举报
回复
VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编不就啥都明白了吗。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编。)
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!
qq120848369 2011-03-01
  • 打赏
  • 举报
回复
基础是慢慢搭起来的,没学好数据结构,没学好算法,脑子从何而来.
nand库路泽 2011-03-01
  • 打赏
  • 举报
回复
习惯好的话很有帮助啊,得改改习惯了!!
iambic 2011-03-01
  • 打赏
  • 举报
回复
所以少些这种代码。换一个表达能力强的语言。
加载更多回复(10)

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧