如何用C语言编程实现多层前向BPpython 多层神经网络络,用来解

基于BP神经网络的负载识别和C语言实现_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
基于BP神经网络的负载识别和C语言实现
阅读已结束,下载本文需要
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,同时保存到云知识,更方便管理
还剩2页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢豆丁微信公众号
君,已阅读到文档的结尾了呢~~
浅析BP神经网络基本模型的C语言实现,bp神经网络c语言代码,bp网络的c语言程序,bp算法c语言实现,c语言内存模型,c语言 神经网络,bp神经网络模型,bp人工神经网络模型,bp神经网络预测模型,c语言编程软件
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
浅析BP神经网络基本模型的C语言实现
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='http://www.docin.com/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口虽然不知道TKinter少了哪些,但我们既然是小马过河,大牛们都说有坑。我们就随大流吧。&br&&br&简单UI推荐Enthought的Traits/TraitsUI。简单粗暴有效。&br&&br&如果需要构建大型应用,推荐使用Enthought Tool Suite里面其他的东西,可以构建插件来扩展自己的应用框架。所以从简单到复杂,全程覆盖。不仅限于UI框架。而是桌面应用框架。&br&&br&提一句,Enthought贡献了Scipy等著名的Python package。
虽然不知道TKinter少了哪些,但我们既然是小马过河,大牛们都说有坑。我们就随大流吧。 简单UI推荐Enthought的Traits/TraitsUI。简单粗暴有效。 如果需要构建大型应用,推荐使用Enthought Tool Suite里面其他的东西,可以构建插件来扩展自己的应用框架。所…
&figure&&img src=&https://pic4.zhimg.com/v2-9defd2221263_b.jpg& data-rawwidth=&698& data-rawheight=&371& class=&origin_image zh-lightbox-thumb& width=&698& data-original=&https://pic4.zhimg.com/v2-9defd2221263_r.jpg&&&/figure&&p&(这里是最终成品的 &a href=&https://link.zhihu.com/?target=https%3A//github.com/carefree0910/MachineLearning/tree/master/NN& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&GitHub&/a& 地址) &/p&&p&(这里是本章用到的 &a href=&https://link.zhihu.com/?target=https%3A//github.com/carefree0910/MachineLearning/blob/master/Zhihu/NN/one/Network.py& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&GitHub&/a& 地址)&/p&&p&从这一章开始就要讲第二个核心结构 &b&神经网络(NN)&/b&的实现了。这一部分是个有点大的坑,我会尽我所能地一一说明。在这一章里面,我们会说明如何把整个神经网络的结构搭建起来&br&&/p&&p&援引之前用过的一张图:&/p&&p&&figure&&img src=&https://pic3.zhimg.com/v2-c98afce656bd6beea1fd090_b.jpg& data-rawwidth=&969& data-rawheight=&551& class=&origin_image zh-lightbox-thumb& width=&969& data-original=&https://pic3.zhimg.com/v2-c98afce656bd6beea1fd090_r.jpg&&&/figure&可以看到,如果不去管接口怎么写的话,因为我们已经处理好了 Layer,所以我们还需要&b&处理&/b&的东西其实有一个:&/p&&ul&&li&&b&处理绿箭头的部分!!!&/b&&/li&&/ul&&p&在我们现在准备实现的朴素结构里面,绿箭头的部分只有两个东西:&b&权重 &/b&和 &b&偏置量&/b&&/p&&p&所以我们就来实现它们~&/p&&p&在贴出代码前,需要先说明一下接下来代码里面的 shape 是个什么东西。事实上,它记录了上一层神经元个数与该层神经元个数。具体而言,有:&/p&&ul&&li&shape[0] 是上一层神经元个数&/li&&li&shape[1] 是该层神经元个数&/li&&/ul&&p&从而 shape 这个变量起到了&b&承上启下&/b&的&b&重要作用&/b&,请观众老爷们把它的定义牢记于心 ( σ'ω')σ &/p&&p&接下来是具体实现(这里用到了一些 tensorflow 的函数,可以暂时先用着)(喂):&/p&&br&&ol&&li&根据 shape 获得初始权重&br&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&k&&def&/span& &span class=&nf&&_get_w&/span&&span class=&p&&(&/span&&span class=&bp&&self&/span&&span class=&p&&,&/span& &span class=&n&&shape&/span&&span class=&p&&):&/span&
&span class=&n&&initial&/span& &span class=&o&&=&/span& &span class=&n&&tf&/span&&span class=&o&&.&/span&&span class=&n&&truncated_normal&/span&&span class=&p&&(&/span&&span class=&n&&shape&/span&&span class=&p&&,&/span& &span class=&n&&stddev&/span&&span class=&o&&=&/span&&span class=&mf&&0.1&/span&&span class=&p&&)&/span&
&span class=&k&&return&/span& &span class=&n&&tf&/span&&span class=&o&&.&/span&&span class=&n&&Variable&/span&&span class=&p&&(&/span&&span class=&n&&initial&/span&&span class=&p&&,&/span& &span class=&n&&name&/span&&span class=&o&&=&/span&&span class=&s2&&&w&&/span&&span class=&p&&)&/span&
&/code&&/pre&&/div&&/li&&li&根据 shape 获得初始偏置量&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&k&&def&/span& &span class=&nf&&_get_b&/span&&span class=&p&&(&/span&&span class=&bp&&self&/span&&span class=&p&&,&/span& &span class=&n&&shape&/span&&span class=&p&&):&/span&
&span class=&n&&initial&/span& &span class=&o&&=&/span& &span class=&n&&tf&/span&&span class=&o&&.&/span&&span class=&n&&constant&/span&&span class=&p&&(&/span&&span class=&mf&&0.1&/span&&span class=&p&&,&/span& &span class=&n&&shape&/span&&span class=&o&&=&/span&&span class=&n&&shape&/span&&span class=&p&&)&/span&
&span class=&k&&return&/span& &span class=&n&&tf&/span&&span class=&o&&.&/span&&span class=&n&&Variable&/span&&span class=&p&&(&/span&&span class=&n&&initial&/span&&span class=&p&&,&/span& &span class=&n&&name&/span&&span class=&o&&=&/span&&span class=&s2&&&b&&/span&&span class=&p&&)&/span&
&/code&&/pre&&/div&&/li&&/ol&&p&我们再来想一想,在搭建一个网络时,操作顺序是什么?&/p&&p&还是上面那张图,可以看到搭建顺序应该是:加入一个 Layer → 加入绿箭头 → 加入一个 Layer → 加入绿箭头 → ……&/p&&p&所以我们接下来要做的只有两个:&b&加入 Layer &/b&和 &b&加入绿箭头&/b&(这个人废话怎么这么多)&/p&&p&先讲怎么加入绿箭头、因为加入 Layer 的过程中会用到这一步。相信观众老爷们已经或多或少有些感觉了,这里就直接贴出代码:&/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&k&&def&/span& &span class=&nf&&_add_weight&/span&&span class=&p&&(&/span&&span class=&bp&&self&/span&&span class=&p&&,&/span& &span class=&n&&shape&/span&&span class=&p&&):&/span&
&span class=&n&&w_shape&/span& &span class=&o&&=&/span& &span class=&n&&shape&/span&
&span class=&n&&b_shape&/span& &span class=&o&&=&/span& &span class=&n&&shape&/span&&span class=&p&&[&/span&&span class=&mi&&1&/span&&span class=&p&&],&/span&
&span class=&bp&&self&/span&&span class=&o&&.&/span&&span class=&n&&_tf_weights&/span&&span class=&o&&.&/span&&span class=&n&&append&/span&&span class=&p&&(&/span&&span class=&bp&&self&/span&&span class=&o&&.&/span&&span class=&n&&_get_w&/span&&span class=&p&&(&/span&&span class=&n&&w_shape&/span&&span class=&p&&))&/span&
&span class=&bp&&self&/span&&span class=&o&&.&/span&&span class=&n&&_tf_bias&/span&&span class=&o&&.&/span&&span class=&n&&append&/span&&span class=&p&&(&/span&&span class=&bp&&self&/span&&span class=&o&&.&/span&&span class=&n&&_get_b&/span&&span class=&p&&(&/span&&span class=&n&&b_shape&/span&&span class=&p&&))&/span&
&/code&&/pre&&/div&&p&因为很重要所以再提一下(这人好啰嗦):shape[0] 是上一层神经元个数而 shape[1] 是该层神经元个数。这也是为什么偏置量的形状是 shape[1]&/p&&p&可能观众老爷们注意到了,代码中出现了没见过的 self._tf_weights 和 self._tf_bias。相信大家也都猜到了:这两个列表就是存着所有权重和偏置量的列表,可谓是&b&整个结构的核心之一&br&&/b&&/p&&p&再讲怎么加入 Layer。不考虑接口的话,加入 Layer 是一个平凡的过程:&/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&k&&def&/span& &span class=&nf&&add&/span&&span class=&p&&(&/span&&span class=&bp&&self&/span&&span class=&p&&,&/span& &span class=&n&&layer&/span&&span class=&p&&):&/span&
&span class=&k&&if&/span& &span class=&ow&&not&/span& &span class=&bp&&self&/span&&span class=&o&&.&/span&&span class=&n&&_layers&/span&&span class=&p&&:&/span&
&span class=&bp&&self&/span&&span class=&o&&.&/span&&span class=&n&&_layers&/span&&span class=&p&&,&/span& &span class=&bp&&self&/span&&span class=&o&&.&/span&&span class=&n&&_current_dimension&/span& &span class=&o&&=&/span& &span class=&p&&[&/span&&span class=&n&&layer&/span&&span class=&p&&],&/span& &span class=&n&&layer&/span&&span class=&o&&.&/span&&span class=&n&&shape&/span&&span class=&p&&[&/span&&span class=&mi&&1&/span&&span class=&p&&]&/span&
&span class=&bp&&self&/span&&span class=&o&&.&/span&&span class=&n&&_add_weight&/span&&span class=&p&&(&/span&&span class=&n&&layer&/span&&span class=&o&&.&/span&&span class=&n&&shape&/span&&span class=&p&&)&/span&
&span class=&k&&else&/span&&span class=&p&&:&/span&
&span class=&n&&_next&/span& &span class=&o&&=&/span& &span class=&n&&layer&/span&&span class=&o&&.&/span&&span class=&n&&shape&/span&&span class=&p&&[&/span&&span class=&mi&&0&/span&&span class=&p&&]&/span&
&span class=&bp&&self&/span&&span class=&o&&.&/span&&span class=&n&&_layers&/span&&span class=&o&&.&/span&&span class=&n&&append&/span&&span class=&p&&(&/span&&span class=&n&&layer&/span&&span class=&p&&)&/span&
&span class=&bp&&self&/span&&span class=&o&&.&/span&&span class=&n&&_add_weight&/span&&span class=&p&&((&/span&&span class=&bp&&self&/span&&span class=&o&&.&/span&&span class=&n&&_current_dimension&/span&&span class=&p&&,&/span& &span class=&n&&_next&/span&&span class=&p&&))&/span&
&span class=&bp&&self&/span&&span class=&o&&.&/span&&span class=&n&&_current_dimension&/span& &span class=&o&&=&/span& &span class=&n&&_next&/span&
&/code&&/pre&&/div&&p&
解释一下代码的逻辑:&/p&&ul&&li&如果是第一次加入 Layer 的话,创建一个含有该 Layer 的列表(self._layers),同时用一个变量(self._current_dimension)把 Layer 的 shape[1] 记录下来(当我们第一次加入 Layer 时,shape[0] 代表着输入数据的维度,shape[1] 代表着第一层神经元的个数)&/li&&li&如果不是第一次加入的话,由于没有考虑接口设计,我们需要作这样的约定:&br&&ul&&li&&b&从第二次加入 Layer 开始,Layer 的 shape 变量都是长度为 1 的元组,其唯一的元素记录的就是该 Layer 中神经元的个数&/b&&br&比如说,如果我想设计一个含有一层隐藏层、24 个神经元的结构,我就要这样做:&br&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&n&&nn&/span&&span class=&o&&.&/span&&span class=&n&&add&/span&&span class=&p&&(&/span&&span class=&n&&ReLU&/span&&span class=&p&&((&/span&&span class=&n&&x&/span&&span class=&o&&.&/span&&span class=&n&&shape&/span&&span class=&p&&[&/span&&span class=&mi&&1&/span&&span class=&p&&],&/span& &span class=&mi&&24&/span&&span class=&p&&)))&/span&
&span class=&n&&nn&/span&&span class=&o&&.&/span&&span class=&n&&add&/span&&span class=&p&&(&/span&&span class=&n&&CrossEntorpy&/span&&span class=&p&&((&/span&&span class=&n&&y&/span&&span class=&o&&.&/span&&span class=&n&&shape&/span&&span class=&p&&[&/span&&span class=&mi&&1&/span&&span class=&p&&],&/span& &span class=&p&&)))&/span&
&/code&&/pre&&/div&这里面出现的 CrossEntropy 是&b&损失函数层(CostLayer)&/b&,目前暂时没有讲到、不过它也继承了 Layer,目前来说可以简单地把它看成一个普通的 Layer&br&&/li&&/ul&&br&在该约定下,上面代码的逻辑就比较清晰了;为简洁,我就不再赘述(其实还是懒)(喂&/li&&/ul&&p&那么稍微总结一下:&/p&&ol&&li&朴素的网络结构只需要重复做两件事:加入 Layer 和加入绿箭头。其中,绿箭头的本质是&b&层与层之间的关联&/b&,它根据 shape 生成相应的权重和偏置量&/li&&li&一般来说,shape 记录的是上一层的神经元个数和这一层神经元个数(否则它记录的会是这一层神经元的个数),它起到了重要的承上启下的作用&/li&&/ol&&p&希望观众老爷们能够喜欢~&/p&&p&(&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&猛戳我进入下一章! ( σ'ω')σ&/a& )&/p&&p&(&a href=&https://zhuanlan.zhihu.com/p/?refer=carefree0910-pyml& class=&internal&&猛戳我进入附加章节 ( σ'ω')σ&/a& )&/p&
(这里是最终成品的
地址) (这里是本章用到的
地址)从这一章开始就要讲第二个核心结构 神经网络(NN)的实现了。这一部分是个有点大的坑,我会尽我所能地一一说明。在这一章里面,我们会说明如何把整个神经网络的结构搭建起来 援引之前用…
&figure&&img src=&https://pic2.zhimg.com/v2-c107fda4e9d39ac924b4cf_b.jpg& data-rawwidth=&500& data-rawheight=&313& class=&origin_image zh-lightbox-thumb& width=&500& data-original=&https://pic2.zhimg.com/v2-c107fda4e9d39ac924b4cf_r.jpg&&&/figure&&p&我们的开发环境,选择了一个开源的工具---codeblock,此软件轻快易用,是开源软件,不用费力气去破解,也不用花钱去买正版,非常适合初学者。&/p&&p&&br&&/p&&p&而且我们会结合ege图形库,可以实现图形化界面的开发,可以使我们的程序画面变的强大美观,使编程更有趣!&/p&&p&&br&&/p&&p&&b&(如果在下载软件和ege图形库的时候出现问题,可以到我的网盘下载:&a href=&https://link.zhihu.com/?target=http%3A//pan.baidu.com/s/1slMAsm5& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&pan.baidu.com/s/1slMAsm&/span&&span class=&invisible&&5&/span&&span class=&ellipsis&&&/span&&/a&)&/b&&/p&&p&&br&&/p&&p&&b&1、下载开发工具软件(以下为Windows平台为例)&/b&&/p&&p&&br&&/p&&p&下载
codeblocks&/p&&p&下载网址:&a href=&https://link.zhihu.com/?target=http%3A//www.codeblocks.org/downloads/26& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&codeblocks.org/download&/span&&span class=&invisible&&s/26&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&下载版本codeblocks-16.01mingw-setup.exe,&/p&&p&如下红框内,点击&a href=&https://link.zhihu.com/?target=http%3A//Sourceforge.net& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&Sourceforge.net&/span&&span class=&invisible&&&/span&&/a&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-ac490bbb4c0_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&925& data-rawheight=&707& class=&origin_image zh-lightbox-thumb& width=&925& data-original=&https://pic1.zhimg.com/v2-ac490bbb4c0_r.jpg&&&/figure&&p&&br&&/p&&p&&b&2、安装软件&/b&&/p&&p&下载后,双击安装,按照提示逐步操作就可以,很easy!&/p&&p&如果有困难,参考一下链接:&/p&&p&&a href=&https://link.zhihu.com/?target=http%3A//jingyan.baidu.com/article/fe2.html& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&jingyan.baidu.com/artic&/span&&span class=&invisible&&le/fe2.html&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&&br&&/p&&p&安装完成后,打开软件,显示如下:&/p&&p&&br&&/p&&figure&&img src=&https://pic2.zhimg.com/v2-dcf5181cceff8e3cdf2d812_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1439& data-rawheight=&857& class=&origin_image zh-lightbox-thumb& width=&1439& data-original=&https://pic2.zhimg.com/v2-dcf5181cceff8e3cdf2d812_r.jpg&&&/figure&&p&&br&&/p&&p&&br&&/p&&p&&b&3、Codeblocks新建C/C++项目,并编译、运行、查看&/b&&/p&&p&我已经将内容写在了百度经验中,粘贴以下链接到浏览器,即可查看详细步骤。&/p&&p&&a href=&https://link.zhihu.com/?target=http%3A//jingyan.baidu.com/article/d5c42b.html& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&jingyan.baidu.com/artic&/span&&span class=&invisible&&le/d5c42b.html&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&&br&&/p&&p&&b&4、配置图形库到codeblock中,让程序充满色彩&/b&&/p&&p&&br&&/p&&p&&b&1、&/b& &b&首先下载ege库&/b&&/p&&p&网址:&a href=&https://link.zhihu.com/?target=http%3A//xege.org/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&xege.org/&/span&&span class=&invisible&&&/span&&/a&&/p&&p&打开网址后,点击下方下载按钮,会跳转到一个百度网盘,&/p&&p&下载:ege15.04(For Windows).7z
&/p&&figure&&img src=&https://pic3.zhimg.com/v2-bda08af1cd2c9da5c4cc_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&975& data-rawheight=&756& class=&origin_image zh-lightbox-thumb& width=&975& data-original=&https://pic3.zhimg.com/v2-bda08af1cd2c9da5c4cc_r.jpg&&&/figure&&figure&&img src=&https://pic1.zhimg.com/v2-df1fd4bf09e8_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1021& data-rawheight=&402& class=&origin_image zh-lightbox-thumb& width=&1021& data-original=&https://pic1.zhimg.com/v2-df1fd4bf09e8_r.jpg&&&/figure&&figure&&img src=&https://pic1.zhimg.com/v2-1d448bfff1f3f22975d5d_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1055& data-rawheight=&503& class=&origin_image zh-lightbox-thumb& width=&1055& data-original=&https://pic1.zhimg.com/v2-1d448bfff1f3f22975d5d_r.jpg&&&/figure&&p&&b&2、将文件 ege15.04(For Windows).7z 文件,解压缩,将ege库配置到codeblock中&/b&&/p&&p&在codeblock的安装目录中,你可以看到MinGW和share两个文件夹,如图。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-966ddf33580cd5eefad656eaaf45142e_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&709& data-rawheight=&175& class=&origin_image zh-lightbox-thumb& width=&709& data-original=&https://pic3.zhimg.com/v2-966ddf33580cd5eefad656eaaf45142e_r.jpg&&&/figure&&p&&br&&/p&&p&然后再打开MinGW这个文件夹在里面就会看到有include和lib两个文件夹,如图。&/p&&p&&br&&/p&&figure&&img src=&https://pic2.zhimg.com/v2-bbb558bab823bde01af7_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&705& data-rawheight=&216& class=&origin_image zh-lightbox-thumb& width=&705& data-original=&https://pic2.zhimg.com/v2-bbb558bab823bde01af7_r.jpg&&&/figure&&p&&br&&/p&&p&这时把我们下载的ege图形的压缩包解压,得到ege15.04文件夹如下图:&/p&&figure&&img src=&https://pic1.zhimg.com/v2-d5d7c8af6f6b0f9769eeeb4d_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&676& data-rawheight=&189& class=&origin_image zh-lightbox-thumb& width=&676& data-original=&https://pic1.zhimg.com/v2-d5d7c8af6f6b0f9769eeeb4d_r.jpg&&&/figure&&p&&b&(1)&/b& 把里面的include里面的6个.h文件(button.h,ege.h,fps.h,graphics.h,label.h,sys_edit.h)复制到codeblock安装目录下的MinGW下的include文件夹中&/p&&p&&b&(2)&/b& 同理将ege15.04\lib\mingw4.8.1\lib中的&br&libgraphics.a文件复制到MinGW下lib文件夹中,&/p&&p&&br&&/p&&p&复制完成后,接下来打开codeblock程序,如下图,&/p&&figure&&img src=&https://pic1.zhimg.com/v2-a349f1a24deaef0eb5669_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1254& data-rawheight=&557& class=&origin_image zh-lightbox-thumb& width=&1254& data-original=&https://pic1.zhimg.com/v2-a349f1a24deaef0eb5669_r.jpg&&&/figure&&p&&br&&/p&&p&点击上图红框内的按钮“Open an existing project ”打开一个之前我们创建的工程,如下图:&/p&&p&&br&&/p&&figure&&img src=&https://pic2.zhimg.com/v2-1a542db12ea0f22ff7334e_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&419& data-rawheight=&245& class=&content_image& width=&419&&&/figure&&p&然后打开菜单栏Project的选项,在此菜单下选择build options。打开后如下图:&/p&&figure&&img src=&https://pic2.zhimg.com/v2-c43fa8a5d04abff726652d_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1101& data-rawheight=&383& class=&origin_image zh-lightbox-thumb& width=&1101& data-original=&https://pic2.zhimg.com/v2-c43fa8a5d04abff726652d_r.jpg&&&/figure&&p&&br&&/p&&p&在此窗口中选择linkersetting,如下图:&/p&&figure&&img src=&https://pic2.zhimg.com/v2-fcb8ebe3a65e6ab1ab424_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&430& data-rawheight=&345& class=&origin_image zh-lightbox-thumb& width=&430& data-original=&https://pic2.zhimg.com/v2-fcb8ebe3a65e6ab1ab424_r.jpg&&&/figure&&p&&br&&/p&&p&你会在底部看到add按钮,如下图:&/p&&p&&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-6efccdbe18f8ee38de98d191_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&379& data-rawheight=&130& class=&content_image& width=&379&&&/figure&&p&&br&&/p&&p&单击add,然后将&/p&&p&libgraphics.a&/p&&p&libgdi32.a&/p&&p&libimm32.a&/p&&p&libmsimg32.a&/p&&p&libole32.a&/p&&p&liboleaut32.a&/p&&p&libwinmm.a&/p&&p&libuuid.a&/p&&p&依次都添加进去,如下图所示:&/p&&figure&&img src=&https://pic4.zhimg.com/v2-4fbb67f5996_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&719& data-rawheight=&487& class=&origin_image zh-lightbox-thumb& width=&719& data-original=&https://pic4.zhimg.com/v2-4fbb67f5996_r.jpg&&&/figure&&p&&br&&/p&&p&然后将“-mwindows”添加到右边的Other linker options框框里,如图&/p&&figure&&img src=&https://pic3.zhimg.com/v2-a08af1f8c4903e2badd723c_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&719& data-rawheight=&434& class=&origin_image zh-lightbox-thumb& width=&719& data-original=&https://pic3.zhimg.com/v2-a08af1f8c4903e2badd723c_r.jpg&&&/figure&&figure&&img src=&https://pic2.zhimg.com/v2-cde210d2b7a3dd_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&738& data-rawheight=&497& class=&origin_image zh-lightbox-thumb& width=&738& data-original=&https://pic2.zhimg.com/v2-cde210d2b7a3dd_r.jpg&&&/figure&&p&&b&点击OK按钮,就设置好了。&/b&&/p&&p&&br&&/p&&p&我们来做一个测试,将以下代码复制到程序中,&/p&&p&#include &graphics.h&&/p&&p&int main()&/p&&p&{&/p&&p&initgraph(640, 480);//打开一个长640像素,宽480像素的窗口&/p&&p&&br&&/p&&p&setcolor(GREEN);//设置绘图颜色为绿色&/p&&p&line(100, 100, 500, 200);//以(100,100)为起点,(500,200)为终点划一条直线&/p&&p&&br&&/p&&p&getch();//让屏幕暂停一下&/p&&p&closegraph();//关闭绘图窗口&/p&&p&&br&&/p&&p&return 0;&/p&&p&}&/p&&p&如下图:&/p&&figure&&img src=&https://pic4.zhimg.com/v2-3e60e7f705ff8aa5b97e0b7e_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&844& data-rawheight=&392& class=&origin_image zh-lightbox-thumb& width=&844& data-original=&https://pic4.zhimg.com/v2-3e60e7f705ff8aa5b97e0b7e_r.jpg&&&/figure&&p&保存、编译、运行一下,如果出现以下画面则表示配置成功!&/p&&figure&&img src=&https://pic4.zhimg.com/v2-8cae70bf69e23ca0adebe8_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&637& data-rawheight=&507& class=&origin_image zh-lightbox-thumb& width=&637& data-original=&https://pic4.zhimg.com/v2-8cae70bf69e23ca0adebe8_r.jpg&&&/figure&&figure&&img src=&https://pic4.zhimg.com/v2-b12cfea8ff129c869ccd6b8_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&639& data-rawheight=&398& class=&origin_image zh-lightbox-thumb& width=&639& data-original=&https://pic4.zhimg.com/v2-b12cfea8ff129c869ccd6b8_r.jpg&&&/figure&&p&&br&&/p&&p&我们可以看到屏幕上出现一个窗口,并画有一条绿色的线条&/p&&p&&b&这样我们就可以在程序中画一些图形,上一些色彩,甚至可以把图片放进去,是不是很期待呢。&/b&&/p&&p&&br&&/p&&p&&b&查看专栏:&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&《C语言核心30天突破》&/a&获取更多内容!&/b&&/p&&p&&b&公众号&a href=&https://link.zhihu.com/?target=http%3A//weixin.qq.com/r/h0SEnOvEerYFra--9xGV& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&《肖申克之自由鸟》&/a&:&/b&&a href=&https://link.zhihu.com/?target=http%3A//weixin.qq.com/r/h0SEnOvEerYFra--9xGV& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&weixin.qq.com/r/h0SEnOv&/span&&span class=&invisible&&EerYFra--9xGV&/span&&span class=&ellipsis&&&/span&&/a&&/p&
我们的开发环境,选择了一个开源的工具---codeblock,此软件轻快易用,是开源软件,不用费力气去破解,也不用花钱去买正版,非常适合初学者。 而且我们会结合ege图形库,可以实现图形化界面的开发,可以使我们的程序画面变的强大美观,使编程更有趣! (如…)
来安利一下&br&浙大为了教学使用,用C语言对win32api进行了一个简单的封装&br&&br&纯教学使用,总共300行,隐去了窗口类的实现WinMain和消息循环,学生只需要写写回调函数处理一下鼠标键盘事件就好&br&&br&可以显示窗口和控制台窗口&br&可以画图案&br&画图片&br&处理鼠标和键盘事件&br&但是不能定义控件&br&&br&教学中可以边让学生玩边大致解释一下窗口类消息循环和消息处理函数什么的&br&&br&github地址&a href=&//link.zhihu.com/?target=https%3A//github.com/wengkai/ACLLib& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&wengkai/ACLLib · GitHub&/a&&br&欢迎提出各种修改意见
来安利一下 浙大为了教学使用,用C语言对win32api进行了一个简单的封装 纯教学使用,总共300行,隐去了窗口类的实现WinMain和消息循环,学生只需要写写回调函数处理一下鼠标键盘事件就好 可以显示窗口和控制台窗口 可以画图案 画图片 处理鼠标和键盘事件 但…
&figure&&img src=&https://pic7.zhimg.com/v2-69faec9c4fb409df09d261c5e2b748b5_b.jpg& data-rawwidth=&489& data-rawheight=&291& class=&origin_image zh-lightbox-thumb& width=&489& data-original=&https://pic7.zhimg.com/v2-69faec9c4fb409df09d261c5e2b748b5_r.jpg&&&/figure&&p&正则表达式,一个十分古老而又强大的文本处理工具,仅仅用一段非常简短的表达式语句,便能够快速实现一个非常复杂的业务逻辑。熟练地掌握正则表达式的话,能够使你的开发效率得到极大的提升。&/p&&p&正则表达式经常被用于字段或任意字符串的校验,如下面这段校验基本日期格式的JavaScript代码:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&var reg = /^(\\d{1,4})(-|\\/)(\\d{1,2})\\2(\\d{1,2})$/;
var r = fieldValue.match(reg);
if(r==null)alert('Date format error!');
&/code&&/pre&&/div&&p&下面是&b&技匠&/b&整理的,在前端开发中经常使用到的&b&20&/b&个正则表达式。&/p&&p&&b&1 . 校验密码强度&/b&&/p&&p&密码的强度必须是包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$
&/code&&/pre&&/div&&p&&b&2. 校验中文&/b&&/p&&p&字符串仅能是中文。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&^[\\u4e00-\\u9fa5]{0,}$
&/code&&/pre&&/div&&p&&b&3. 由数字、26个英文字母或下划线组成的字符串&/b&&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&^\\w+$
&/code&&/pre&&/div&&p&&b&4. 校验E-Mail 地址&/b&&/p&&p&同密码一样,下面是E-mail地址合规性的正则检查语句。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&[\\w!#$%&'*+/=?^_`{|}~-]+(?:\\.[\\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\\w](?:[\\w-]*[\\w])?\\.)+[\\w](?:[\\w-]*[\\w])?
&/code&&/pre&&/div&&p&&b&5. 校验身份证号码&/b&&/p&&p&下面是身份证号码的正则校验。15 或 18位。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&15位:
^[1-9]\\d{7}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}$
^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}([0-9]|X)$
&/code&&/pre&&/div&&p&&b&6. 校验日期&/b&&/p&&p&“yyyy-mm-dd“ 格式的日期校验,已考虑平闰年。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&^(?:(?!]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[1])-31)|(?:[0-9]{2}(?:0[48]|[]|[13579][26])|(?:0[48]|[]|[1)-02-29)$
&/code&&/pre&&/div&&p&&b&7. 校验金额&/b&&/p&&p&金额校验,精确到2位小数。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&^[0-9]+(.[0-9]{2})?$
&/code&&/pre&&/div&&p&&b&8. 校验手机号&/b&&/p&&p&下面是国内 13、15、18开头的手机号正则表达式。(可根据目前国内收集号扩展前两位开头号码)&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\\d{8}$
&/code&&/pre&&/div&&p&&b&9. 判断IE的版本&/b&&/p&&p&IE目前还没被完全取代,很多页面还是需要做版本兼容,下面是IE版本检查的表达式。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&^.*MSIE [5-8](?:\\.[0-9]+)?(?!.*Trident\\/[5-9]\\.0).*$
&/code&&/pre&&/div&&p&&b&10. 校验IP-v4地址&/b&&/p&&p&IP4 正则语句。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&\\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\b
&/code&&/pre&&/div&&p&&b&11. 校验IP-v6地址&/b&&/p&&p&IP6 正则语句。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))
&/code&&/pre&&/div&&p&&b&12. 检查URL的前缀&/b&&/p&&p&应用开发中很多时候需要区分请求是HTTPS还是HTTP,通过下面的表达式可以取出一个url的前缀然后再逻辑判断。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&if (!s.match(/^[a-zA-Z]+:\\/\\//))
s = 'http://' +
&/code&&/pre&&/div&&p&&b&13. 提取URL链接&/b&&/p&&p&下面的这个表达式可以筛选出一段文本中的URL。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&^(f|ht){1}(tp|tps):\\/\\/([\\w-]+\\.)+[\\w-]+(\\/[\\w- ./?%&=]*)?
&/code&&/pre&&/div&&p&&b&14. 文件路径及扩展名校验&/b&&/p&&p&验证windows下文件路径和扩展名(下面的例子中为.txt文件) &/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&^([a-zA-Z]\\:|\\\\)\\\\([^\\\\]+\\\\)*[^\\/:*?&&&|]+\\.txt(l)?$
&/code&&/pre&&/div&&p&&b&15. 提取Color Hex
Codes&/b&&/p&&p&有时需要抽取网页中的颜色代码,可以使用下面的表达式。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$
&/code&&/pre&&/div&&p&&b&16. 提取网页图片&/b&&/p&&p&假若你想提取网页中所有图片信息,可以利用下面的表达式。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&\\& *[img][^\\\\&]*[src] *= *[\\&\\']{0,1}([^\\&\\'\\ &]*)
&/code&&/pre&&/div&&p&&b&17. 提取页面超链接&/b&&/p&&p&提取html中的超链接。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&(&a\\s*(?!.*\\brel=)[^&]*)(href=&https?:\\/\\/)((?!(?:(?:www\\.)?'.implode('|(?:www\\.)?', $follow_list).'))[^&]+)&((?!.*\\brel=)[^&]*)(?:[^&]*)&
&/code&&/pre&&/div&&p&&b&18. 查找CSS属性&/b&&/p&&p&通过下面的表达式,可以搜索到相匹配的CSS属性。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&^\\s*[a-zA-Z\\-]+\\s*[:]{1}\\s[a-zA-Z0-9\\s.#]+[;]{1}
&/code&&/pre&&/div&&p&&b&19. 抽取注释&/b&&/p&&p&如果你需要移除HMTL中的注释,可以使用如下的表达式。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&&!--(.*?)--&
&/code&&/pre&&/div&&p&&b&20. 匹配HTML标签&/b&&/p&&p&通过下面的表达式可以匹配出HTML中的标签属性。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&&\\/?\\w+((\\s+\\w+(\\s*=\\s*(?:&.*?&|'.*?'|[\\^'&&\\s]+))?)+\\s*|\\s*)\\/?&
&/code&&/pre&&/div&&h2&&b&正则表达式的相关语法&/b&&/h2&&p&下面是我找到的一张非常不错的正则表达式 Cheat Sheet,可以用来快速查找相关语法。&/p&&figure&&img src=&http://pic4.zhimg.com/v2-2f43be36dd2dd45848e28ddfe430f333_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1024& data-rawheight=&768& class=&origin_image zh-lightbox-thumb& width=&1024& data-original=&http://pic4.zhimg.com/v2-2f43be36dd2dd45848e28ddfe430f333_r.jpg&&&/figure&&h2&&b&学习正则表达式&/b&&/h2&&p&我在网上看到了一篇相当不错的正则表达式&a href=&http://link.zhihu.com/?target=https%3A//msdn.microsoft.com/en-us/library/az24scfc%28v%3Dvs.110%29.aspx& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&快速学习指南&/a&,有兴趣继续深入学习的同学可以参考。&/p&&figure&&img src=&http://pic1.zhimg.com/v2-99cdd76a777a8a2b3767cbe3566dc45c_b.png& data-caption=&& data-size=&normal& data-rawwidth=&705& data-rawheight=&413& class=&origin_image zh-lightbox-thumb& width=&705& data-original=&http://pic1.zhimg.com/v2-99cdd76a777a8a2b3767cbe3566dc45c_r.png&&&/figure&&h2&&b&正则表达式在线测试工具&/b&&/h2&&p&&a href=&http://link.zhihu.com/?target=https%3A//regex101.com/%23javascript& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&regex101&/a&是一个非常不错的正则表达式在线测试工具,你可以直接在线测试你的正则表达式哦。&/p&&figure&&img src=&http://pic2.zhimg.com/v2-0c8bf3fc322f9824b0cbd_b.png& data-caption=&& data-size=&normal& data-rawwidth=&746& data-rawheight=&423& class=&origin_image zh-lightbox-thumb& width=&746& data-original=&http://pic2.zhimg.com/v2-0c8bf3fc322f9824b0cbd_r.png&&&/figure&&p&另外,我也网上找到几本不错的正则表达式方面的教程和书籍,并将它们分享到了&a href=&https://zhuanlan.zhihu.com/p//jijiangshe.com& class=&internal&&技匠社jijiangshe.com&/a&,如果你有兴趣学习欢迎访问获取。^_^&/p&&p&作者:技匠&/p&&p&&a href=&http://link.zhihu.com/?target=http%3A//www.jianshu.com/p/e7bb& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&jianshu.com/p/e7bb97218&/span&&span class=&invisible&&946&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&——————————————————————————————————————&/p&&p&你想更深入了解学习Python知识体系,你可以看一下我们花费了一个多月整理了上百小时的几百个知识点体系内容:&/p&&p&&a href=&http://link.zhihu.com/?target=http%3A//www.magedu.com/73198.html%3FPython_wenzhang_zhihu_jinke_zhidaozhe20gezhengzebiaodashinengrangnishaoxie1000hangdaima_& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【超全整理】《Python自动化全能开发从入门到精通》笔记全放送&/a&&/p&
正则表达式,一个十分古老而又强大的文本处理工具,仅仅用一段非常简短的表达式语句,便能够快速实现一个非常复杂的业务逻辑。熟练地掌握正则表达式的话,能够使你的开发效率得到极大的提升。正则表达式经常被用于字段或任意字符串的校验,如下面这段校验基…
&figure&&img src=&https://pic1.zhimg.com/v2-f50d882ff1a5d5e1ae67aa4b4b357f2a_b.jpg& data-rawwidth=&631& data-rawheight=&348& class=&origin_image zh-lightbox-thumb& width=&631& data-original=&https://pic1.zhimg.com/v2-f50d882ff1a5d5e1ae67aa4b4b357f2a_r.jpg&&&/figure&&p&前言&/p&&p&你是否觉得自己从学校毕业的时候只做过小玩具一样的程序?走入职场后哪怕没有什么经验也可以把以下这些课外练习走一遍(朋友的抱怨:学校课程总是从理论出发,作业项目都看不出有什么实际作用,不如从工作中的需求出发)&/p&&p&建议:&/p&&ul&&li&不要乱买书,不要乱追新技术新名词,基础的东西经过很长时间积累而且还会在未来至少10年通用。&/li&&li&回顾一下历史,看看历史上时间线上技术的发展,你才能明白明天会是什么样。&/li&&li&一定要动手,例子不管多么简单,建议至少自己手敲一遍看看是否理解了里头的细枝末节。&/li&&li&一定要学会思考,思考为什么要这样,而不是那样。还要举一反三地思考。&/li&&/ul&&p&&b&注&/b&:你也许会很奇怪为什么下面的东西很偏Unix/Linux,这是因为我觉得Windows下的编程可能会在未来很没有前途,原因如下:&/p&&ul&&li&现在的用户界面几乎被两个东西主宰了,1)Web,2)移动设备iOS或Android。Windows的图形界面不吃香了。&/li&&li&越来越多的企业在用成本低性能高的Linux和各种开源技术来构架其系统,Windows的成本太高了。&/li&&li&微软的东西变得太快了,很不持久,他们完全是在玩弄程序员。详情参见《Windows编程革命史》&/li&&/ul&&p&所以,我个人认为以后的趋势是前端是Web+移动,后端是Linux+开源。开发这边基本上没Windows什么事。&/p&&p&启蒙入门&/p&&p&&b&1、 学习一门脚本语言,例如Python/Ruby&/b&&/p&&p&可以让你摆脱对底层语言的恐惧感,脚本语言可以让你很快开发出能用得上的小程序。实践项目:&/p&&ul&&li&处理文本文件,或者csv (关键词 python csv, python open, python sys) 读一个本地文件,逐行处理(例如 word count,或者处理log)&/li&&li&遍历本地文件系统 (sys, os, path),例如写一个程序统计一个目录下所有文件大小并按各种条件排序并保存结果&/li&&li&跟数据库打交道 (python sqlite),写一个小脚本统计数据库里条目数量&/li&&li&学会用各种print之类简单粗暴的方式进行调试&/li&&li&学会用Google (phrase, domain, use reader to follow tech blogs)&/li&&/ul&&p&为什么要学脚本语言,因为他们实在是太方便了,很多时候我们需要写点小工具或是脚本来帮我们解决问题,你就会发现正规的编程语言太难用了。&/p&&p&&b&2、 用熟一种程序员的编辑器(不是IDE) 和一些基本工具&/b&&/p&&ul&&li&Vim / Emacs / Notepad++,学会如何配置代码补全,外观,外部命令等。&/li&&li&Source Insight (或 ctag)&/li&&/ul&&p&使用这些东西不是为了Cool,而是这些编辑器在查看、修改代码/配置文章/日志会更快更有效率。&/p&&p&&b&3、 熟悉Unix/Linux Shell和常见的命令行&/b&&/p&&ul&&li&如果你用windows,至少学会用虚拟机里的linux, vmware player是免费的,装个Ubuntu吧&/li&&li&一定要少用少用图形界面。&/li&&li&学会使用man来查看帮助&/li&&li&文件系统结构和基本操作 ls/chmod/chown/rm/find/ln/cat/mount/mkdir/tar/gzip …&/li&&li&学会使用一些文本操作命令 sed/awk/grep/tail/less/more …&/li&&li&学会使用一些管理命令 ps/top/lsof/netstat/kill/tcpdump/iptables/dd…&/li&&li&了解/etc目录下的各种配置文章,学会查看/var/log下的系统日志,以及/proc下的系统运行信息&/li&&li&了解正则表达式,使用正则表达式来查找文件。&/li&&/ul&&p&对于程序员来说Unix/Linux比Windows简单多了。(参看我四年前CSDN的博文《其实Unix很简单》)学会使用Unix/Linux你会发现图形界面在某些时候实在是太难用了,相当地相当地降低工作效率。&/p&&p&&b&4、 学习Web基础(HTML/CSS/JS) + 服务器端技术 (LAMP)&/b&&/p&&p&未来必然是Web的世界,学习WEB基础的最佳网站是W3School。&/p&&ul&&li&学习HTML基本语法&/li&&li&学习CSS如何选中HTML元素并应用一些基本样式(关键词:box model)&/li&&li&学会用 Firefox + Firebug 或 chrome 查看你觉得很炫的网页结构,并动态修改。&/li&&li&学习使用Javascript操纵HTML元件。理解DOM和动态网页(&a href=&https://link.zhihu.com/?target=http%3A//oreilly.com/catalog/2& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&oreilly.com/catalog/978&/span&&span class=&invisible&&&/span&&span class=&ellipsis&&&/span&&/a&) 网上有免费的章节,足够用了。或参看 DOM 。&/li&&li&学会用 Firefox + Firebug 或 chrome 调试Javascript代码(设置断点,查看变量,性能,控制台等)&/li&&li&在一台机器上配置Apache 或 Nginx&/li&&li&学习PHP,让后台PHP和前台HTML进行数据交互,对服务器相应浏览器请求形成初步认识。实现一个表单提交和反显的功能。&/li&&li&把PHP连接本地或者远程数据库 MySQL(MySQL 和 SQL现学现用够了)&/li&&li&跟完一个名校的网络编程课程(例如:&a href=&https://link.zhihu.com/?target=http%3A//www.stanford.edu/%7Eouster/cgi-bin/cs142-fall10/index.php& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&stanford.edu/~ouster/cg&/span&&span class=&invisible&&i-bin/cs142-fall10/index.php&/span&&span class=&ellipsis&&&/span&&/a& ) 不要觉得需要多于一学期时间,大学生是全职一学期选3-5门课,你业余时间一定可以跟上&/li&&li&学习一个javascript库(例如jQuery 或 ExtJS)+ Ajax (异步读入一个服务器端图片或者数据库内容)+JSON数据格式。&/li&&li&HTTP: The Definitive Guide 读完前4章你就明白你每天上网用浏览器的时候发生的事情了(proxy, gateway, browsers)&/li&&li&做个小网站(例如:一个小的留言板,支持用户登录,Cookie/Session,增、删、改、查,上传图片附件,分页显示)&/li&&li&买个域名,租个空间,做个自己的网站。&/li&&/ul&&p&进阶加深&/p&&p&&b&1、 C语言和操作系统调用&/b&&/p&&ul&&li&重新学C语言,理解指针和内存模型,用C语言实现一下各种经典的算法和数据结构。推荐《计算机程序设计艺术》、《算法导论》和《编程珠玑》。&/li&&li&学习(麻省理工免费课程)计算机科学和编程导论&/li&&li&学习(麻省理工免费课程)C语言内存管理&/li&&li&学习Unix/Linux系统调用(Unix高级环境编程),,了解系统层面的东西。&/li&&ul&&li&用这些系统知识操作一下文件系统,用户(实现一个可以拷贝目录树的小程序)&/li&&li&用fork/wait/waitpid写一个多进程的程序,用pthread写一个多线程带同步或互斥的程序。多进程多进程购票的程序。&/li&&li&用signal/kill/raise/alarm/pause/sigprocmask实现一个多进程间的信号量通信的程序。&/li&&li&学会使用gcc和gdb来编程和调试程序(参看我的《用gdb调试程序》)&/li&&li&学会使用makefile来编译程序。(参看我的《跟我一起写makefile》)&/li&&li&IPC和Socket的东西可以放到高级中来实践。&/li&&/ul&&li&学习Windows SDK编程(Windows 程序设计 ,MFC程序设计)&/li&&ul&&li&写一个窗口,了解WinMain/WinProcedure,以及Windows的消息机制。&/li&&li&写一些程序来操作Windows SDK中的资源文件或是各种图形控件,以及作图的编程。&/li&&li&学习如何使用MSDN查看相关的SDK函数,各种WM_消息以及一些例程。&/li&&li&这本书中有很多例程,在实践中请不要照抄,试着自己写一个自己的例程。&/li&&li&不用太多于精通这些东西,因为GUI正在被Web取代,主要是了解一下Windows 图形界面的编程。@virushuo 说:“ 我觉得GUI确实不那么热门了,但充分理解GUI工作原理是很重要的。包括移动设备开发,如果没有基础知识仍然很吃力。或者说移动设备开发必须理解GUI工作,或者在win那边学,或者在mac/iOS上学”。&/li&&/ul&&/ul&&p&&b&2、学习Java&/b&&/p&&ul&&li&Java 的学习主要是看经典的Core Java 《Java 核心技术编程》和《Java编程思想》(有两卷,我仅链了第一卷,足够了,因为Java的图形界面了解就可以了)&/li&&li&学习JDK,学会查阅Java API Doc &a href=&https://link.zhihu.com/?target=http%3A//download.oracle.com/javase/6/docs/api/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&download.oracle.com/jav&/span&&span class=&invisible&&ase/6/docs/api/&/span&&span class=&ellipsis&&&/span&&/a&&/li&&li&了解一下Java这种虚拟机语言和C和Python语言在编译和执行上的差别。从C、Java、Python思考一下“跨平台”这种技术。&/li&&li&学会使用IDE Eclipse,使用Eclipse 编译,调试和开发Java程序。&/li&&li&建一个Tomcat的网站,尝试一下JSP/Servlet/JDBC/MySQL的Web开发。把前面所说的那个PHP的小项目试着用JSP和Servlet实现一下。&/li&&/ul&&p&&b&3、Web的安全与架构&/b&&/p&&ul&&li&学习HTML5,网上有很多很多教程,以前酷壳也介绍过很多,我在这里就不罗列了。&/li&&li&学习Web开发的安全问题(参考新浪微博被攻击的这个事,以及Ruby的这篇文章)&/li&&li&学习HTTP Server的rewrite机制,Nginx的反向代理机制,fast-cgi(如:PHP-FPM)&/li&&li&学习Web的静态页面缓存技术。&/li&&li&学习Web的异步工作流处理,数据Cache,数据分区,负载均衡,水平扩展的构架。&/li&&li&&b&实践任务:&/b&&/li&&ul&&li&使用HTML5的canvas 制作一些Web动画。&/li&&li&尝试在前面开发过的那个Web应用中进行SQL注入,JS注入,以及XSS攻击。&/li&&li&把前面开发过的那个Web应用改成构造在Nginx + PHP-FPM + 静态页面缓存的网站&/li&&/ul&&/ul&&p&&b&4、学习关系型数据库&/b&&/p&&ul&&li&你可以安装MSSQLServer或MySQL来学习数据库。&/li&&li&学习教科书里数据库设计的那几个范式,1NF,2NF,3NF,……&/li&&li&学习数据库的存过,触发器,视图,建索引,游标等。&/li&&li&学习SQL语句,明白表连接的各种概念(参看《SQL Join的图示》)&/li&&li&学习如何优化数据库查询(参看《MySQL的优化》)&/li&&li&&b&实践任务&/b&:设计一个论坛的数据库,至少满足3NF,使用SQL语句查询本周,本月的最新文章,评论最多的文章,最活跃用户。&/li&&/ul&&p&&b&5、一些开发工具&/b&&/p&&ul&&li&学会使用SVN或Git来管理程序版本。&/li&&li&学会使用JUnit来对Java进行单元测试。&/li&&li&学习C语言和Java语言的coding standard 或 coding guideline。(我N年前写过一篇关C语言非常简单的文章——《编程修养》,这样的东西你可以上网查一下,一大堆)。&/li&&li&推荐阅读《代码大全》《重构》《代码整洁之道》&/li&&/ul&&p&高级深入&/p&&p&&b&1、C++ / Java 和面向对象&/b&&/p&&p&我个人以为学好C++,Java也就是举手之劳。但是C++的学习曲线相当的陡。不过,我觉得C++是最需要学好的语言了。参看两篇趣文“C++学习信心图” 和“21天学好C++”&/p&&ul&&li&学习(麻省理工免费课程)C++面向对象编程&/li&&li&读我的 “如何学好C++”中所推荐的那些书至少两遍以上(如果你对C++的理解能够深入到像我所写的《C++虚函数表解析》或是《C++对象内存存局》,或是《C/C++返回内部静态成员的陷阱》那就非常不错了)&/li&&li&然后反思为什么C++要干成这样,Java则不是?你一定要学会对比C++和Java的不同。比如,Java中的初始化,垃圾回收,接口,异常,虚函数,等等。&/li&&li&&b&实践任务:&/b&&/li&&ul&&li&用C++实现一个BigInt,支持128位的整形的加减乘除的操作。&/li&&li&用C++封装一个数据结构的容量,比如hash table。&/li&&li&用C++封装并实现一个智能指针(一定要使用模板)。&/li&&/ul&&li&《设计模式》必需一读,两遍以上,思考一下,这23个模式的应用场景。主要是两点:1)钟爱组合而不是继承,2)钟爱接口而不是实现。(也推荐《深入浅出设计模式》)&/li&&li&&b&实践任务:&/b&&/li&&ul&&li&使用工厂模式实现一个内存池。&/li&&li&使用策略模式制做一个类其可以把文本文件进行左对齐,右对齐和中对齐。&/li&&li&使用命令模式实现一个命令行计算器,并支持undo和redo。&/li&&li&使用修饰模式实现一个酒店的房间价格订价策略——旺季,服务,VIP、旅行团、等影响价格的因素。&/li&&/ul&&li&学习STL的用法和其设计概念 – 容器,算法,迭代器,函数子。如果可能,请读一下其源码。&/li&&li&&b&实践任务:&/b&尝试使用面向对象、STL,设计模式、和WindowsSDK图形编程的各种技能&/li&&ul&&li&做一个贪吃蛇或是俄罗斯方块的游戏。支持不同的级别和难度。&/li&&li&做一个文件浏览器,可以浏览目录下的文件,并可以对不同的文件有不同的操作,文本文件可以打开编辑,执行文件则执行之,mp3或avi文件可以播放,图片文件可以展示图片。&/li&&/ul&&li&学习C++的一些类库的设计,如: MFC(看看候捷老师的《深入浅出MFC》) ,Boost, ACE, CPPUnit,STL (STL可能会太难了,但是如果你能了解其中的设计模式和设计那就太好了,如果你能深入到我写的《STL string类的写时拷贝技术》那就非常不错了,ACE需要很强在的系统知识,参见后面的“加强对系统的了解”)&/li&&li&Java是真正的面向对象的语言,Java的设计模式多得不能再多,也是用来学习面向对象的设计模式的最佳语言了(参看Java中的设计模式)。&/li&&li&推荐阅读《Effective Java》 and 《Java解惑》&/li&&li&学习Java的框架,Java的框架也是多,如Spring, Hibernate,Struts 等等,主要是学习Java的设计,如IoC等。&/li&&li&Java的技术也是烂多,重点学习J2EE架构以及JMS, RMI, 等消息传递和远程调用的技术。&/li&&li&学习使用Java做Web Service (官方教程在这里)&/li&&li&&b&实践任务:&/b& 尝试在Spring或Hibernate框架下构建一个有网络的Web Service的远程调用程序,并可以在两个Service中通过JMS传递消息。&/li&&/ul&&p&C++和Java都不是能在短时间内能学好的,C++玩是的深,Java玩的是广,我建议两者选一个。我个人的学习经历是:&/p&&ul&&li&深究C++(我深究C/C++了十来年了)&/li&&li&学习Java的各种设计模式。&/li&&/ul&&p&&b&2、加强系统了解&/b&&/p&&p&重要阅读下面的几本书:&/p&&ul&&li&《Unix编程艺术》了解Unix系统领域中的设计和开发哲学、思想文化体系、原则与经验。你一定会有一种醍醐灌顶的感觉。&/li&&li&《Unix网络编程卷1,套接字》这是一本看完你就明白网络编程的书。重要注意TCP、UDP,以及多路复用的系统调用select/poll/epoll的差别。&/li&&li&《TCP/IP详解 卷1:协议》- 这是一本看完后你就可以当网络黑客的书。了解以太网的的运作原理,了解TCP/IP的协议,运作原理以及如何TCP的调优。&/li&&li&&b&实践任务:&/b&&/li&&ul&&li&理解什么是阻塞(同步IO),非阻塞(异步IO),多路复用(select, poll, epoll)的IO技术。&/li&&li&写一个网络聊天程序,有聊天服务器和多个聊天客户端(服务端用UDP对部分或所有的的聊天客户端进Multicast或Broadcast)。&/li&&li&写一个简易的HTTP服务器。&/li&&/ul&&li&《Unix网络编程卷2,进程间通信》信号量,管道,共享内存,消息等各种IPC…… 这些技术好像有点老掉牙了,不过还是值得了解。&/li&&li&&b&实践任务:&/b&&/li&&ul&&li&主要实践各种IPC进程序通信的方法。&/li&&li&尝试写一个管道程序,父子进程通过管道交换数据。&/li&&li&尝试写一个共享内存的程序,两个进程通过共享内存交换一个C的结构体数组。&/li&&/ul&&li&学习《Windows核心编程》一书。把CreateProcess,Windows线程、线程调度、线程同步(Event, 信号量,互斥量)、异步I/O,内存管理,DLL,这几大块搞精通。&/li&&li&&b&实践任务:&/b&使用CreateProcess启动一个记事本或IE,并监控该程序的运行。把前面写过的那个简易的HTTP服务用线程池实现一下。写一个DLL的钩子程序监控指定窗口的关闭事件,或是记录某个窗口的按键。&/li&&li&有了多线程、多进程通信,TCP/IP,套接字,C++和设计模式的基本,你可以研究一下ACE了。使用ACE重写上述的聊天程序和HTTP服务器(带线程池)&/li&&li&&b&实践任务:&/b&通过以上的所有知识,尝试&/li&&ul&&li&写一个服务端给客户端传大文件,要求把100M的带宽用到80%以上。(注意,磁盘I/O和网络I/O可能会很有问题,想一想怎么解决,另外,请注意网络传输最大单元MTU)&/li&&li&了解BT下载的工作原理,用多进程的方式模拟BT下载的原理。&/li&&/ul&&/ul&&p&&b&3、系统架构&/b&&/p&&ul&&li&负载均衡。HASH式的,纯动态式的。(可以到Google学术里搜一些关于负载均衡的文章读读)&/li&&li&多层分布式系统 – 客户端服务结点层、计算结点层、数据cache层,数据层。J2EE是经典的多层结构。&/li&&li&CDN系统 – 就近访问,内容边缘化。&/li&&li&P2P式系统,研究一下BT和电驴的算法。比如:DHT算法。&/li&&li&服务器备份,双机备份系统(Live-Standby和Live-Live系统),两台机器如何通过心跳监测对方?集群主结点备份。&/li&&li&虚拟化技术,使用这个技术,可以把操作系统当应用程序一下切换或重新配置和部署。&/li&&li&学习Thrift,二进制的高性能的通讯中间件,支持数据(对象)序列化和多种类型的RPC服务。&/li&&li&学习Hadoop。Hadoop框架中最核心的设计就是:MapReduce和HDFS。MapReduce的思想是由Google的一篇论文所提及而被广为流传的,简单的一句话解释MapReduce就是“任务的分解与结果的汇总”。HDFS是Hadoop分布式文件系统(Hadoop Distributed File System)的缩写,为分布式计算存储提供了底层支持。&/li&&li&了解NoSQL数据库(有人说可能是一个过渡炒作的技术),不过因为超大规模以及高并发的纯动态型网站日渐成为主流,而SNS类网站在数据存取过程中有着实时性等刚性需求,这使得目前NoSQL数据库慢慢成了人们所关注的焦点,并大有成为取代关系型数据库而成为未来主流数据存储模式的趋势。当前NoSQL数据库很多,大部分都是开源的,其中比较知名的有:MemcacheDB、Redis、Tokyo Cabinet(升级版为Kyoto Cabinet)、Flare、MongoDB、CouchDB、Cassandra、Voldemort等。&/li&&/ul&&p&原文“酷壳” &/p&&p&用这篇文章告诉自己需要学习的方向和自己的欠缺 &/p&
前言你是否觉得自己从学校毕业的时候只做过小玩具一样的程序?走入职场后哪怕没有什么经验也可以把以下这些课外练习走一遍(朋友的抱怨:学校课程总是从理论出发,作业项目都看不出有什么实际作用,不如从工作中的需求出发)建议:不要乱买书,不要乱追新技…
&figure&&img src=&https://pic4.zhimg.com/v2-23ff4ec8a93efae0eacf17_b.png& data-rawwidth=&606& data-rawheight=&450& class=&origin_image zh-lightbox-thumb& width=&606& data-original=&https://pic4.zhimg.com/v2-23ff4ec8a93efae0eacf17_r.png&&&/figure&&p&这代码开过光的&/p&&p&&br&&/p&&p&-----------------------分享代码--------------------&/p&&p&//
_ooOoo_&/p&&p&//
o8888888o&/p&&p&//
88& . &88&/p&&p&//
(| -_- |)&/p&&p&//
/O&/p&&p&//
____/`---'\____&/p&&p&//
`.&/p&&p&//
\&/p&&p&//
_||||| -:- |||||-
\&/p&&p&//
|&/p&&p&//
|&/p&&p&//
___/-. /&/p&&p&//
`. . __&/p&&p&//
`.___\_&|&_/___.'
&'&&.&/p&&p&//
`- \`.;`\ _ /`;.`/ - ` : | |&/p&&p&//
\_ __\ /__ _/
/&/p&&p&//======`-.____`-.___\_____/___.-`____.-'======&/p&&p&//
`=---='&/p&&p&//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^&/p&&p&//
永无BUG&/p&&p&//
本模块已经经过开光处理,绝无可能再产生bug&/p&&p&//=============================================&/p&
这代码开过光的 -----------------------分享代码--------------------// _ooOoo_// o8888888o// 88" . "88// (| -_- |)// O\ = /O// ____/`---'\____// .' \\| |// `.// / \\||| : |||// \// / _||||| -:- |||||- \// | | \\\ - /// | |// | \_| ''\---/''…
&figure&&img src=&https://pic1.zhimg.com/aef9d152adc44c7ac6cd77_b.jpg& data-rawwidth=&572& data-rawheight=&403& class=&origin_image zh-lightbox-thumb& width=&572& data-original=&https://pic1.zhimg.com/aef9d152adc44c7ac6cd77_r.jpg&&&/figure&&p&计算机行业发展非常快,大学里的教育基本都跟不上实际的社会需求。如果你所在的学校还在指定大家使用谭浩强的教材,或使用VC6.0来教大家上机实验,那你不妨看看本文,这里有一些建议可以帮助你不会脱离社会太远。&/p&&p&考虑到这是一个过来人感觉很基础,但是对于初学者又觉得困难重重的问题,我想如果这篇文章要想写得不让你觉得专业名词扎堆,内容高深莫测,读完还是不知所云,那最好的办法也许是,我们通过沟通的方式把整个「C语言应该怎么学」的问题由小及大的展开,慢慢来谈。&/p&&p&在开始之前,我们先来做一个小测试。&/p&&br&&p&&strong&一、小测试,你准备好学习C语言了吗?&/strong&&/p&&br&&ol&&li&你是否听说过二进制数,他们是如何进行运算的?(基本的数的进制知识) &/li&&li&你能说出一个最小的计算机系统由哪些部分构成吗?(基本的计算机结构知识)&/li&&li&计算机是如何存储图像的? (数字化原理)&/li&&/ol&&p&上面这三个问题,能回答的同学举手。如果你举手了,那么我们进入下阶段的讨论,否则,我将告诉你,你现在最重要的事情,是赶紧找一本《计算机科学导论》把预备知识补充好。&/p&&p&因为——&/p&&p&C语言说到底是一门以&strong&内存&/strong&为中心的编程语言,你能不能学懂它,其实很大程度上不是取决于你智商高低,而是你是否拥有扎实的计算机结构、存储、运算原理方面的知识!! &/p&&p&&strong&在这里,我想强调,任何新知识的学习都是有一定的前提条件的。C语言学习的前提条件就是,对计算机系统要有一个整体的,科学的基础认识。 脱离了这个基础认识,一切都很困难。&/strong&&/p&&p&所以,有些同学学不会C语言,不是因为他们智商不行,而是因为他们没有准备好。&/p&&p&我花时间写这篇文章来给大家讲C语言的学习,当然是希望大家真正的学会、学懂C语言,并能够真正感觉到它的用处,所以很抱歉我不会像培训机构那样,告诉你“零基础”就能够开始学。但如果你真的按照我说的去做,那么至少从现在起,你确实是开始有点“学院派”的认真了。&/p&&p&在这篇文章的最后,我推荐了一本我曾经读过的《计算机科学导论》。这本书可以说是我的启蒙书,我读过,真心觉得好,所以推荐给需要的同学。&/p&&p&好了,接下来我们进入C语言的学习过程。 &/p&&br&&p&&strong&二、学C语言到底学些什么—— 「语法」和「函数库」&/strong&&/p&&br&&p&C语言学习的关键,是要先搞明白,学C语言到底是在学些什么?&/p&&p&我这么一问,有的同学就要翻开课本,指着目录说,我知道我知道,有变量,数据类型,循环语句,函数,哦哦哦,还有指针等等!&/p&&p&很遗憾,如果你以为学习C语言就是学习这些东西,那你得赶紧纠正一下看法,否则接下来的学习会困难重重。因为我曾经就是这么掉到坑里的,这种狭隘的观点让我浪费了大量的时间去学习琐碎的细节,又让我迟迟不能接触到更重要的知识,结果是眼高手低——知道许多别人不知道的无用知识,但是又写不出什么真正像样的程序来。&/p&&p&所谓「语法」,就是入门教材里最着重讲解的内容。也就是那些所谓的变量、数据类型、分支判断、循环、函数、指针等等。&/p&&p&这些内容比较枯燥,但是好消息是这些内容并不难,都是一些格式化的东西。只要你多练习,就会自动的刻在你的脑子里,成为一种下意识的习惯。&/p&&p&但是 「语法」本身其实没什么用。因为它只是一种格式规范,你学得再好,也不能引导你写出厉害的程序。因为在软件设计中,实际上最核心的部分还是在于其 「函数库」部分。&/p&&p&什么是 「函数库」?&/p&&p&简单来说,函数库就是别人编写好的C函数,直接提供给你用,你只要调用里面的函数,就能实现一定的功能。例如 printf() 函数,你肯定知道,只要调用这个函数,你就能够在那个黑糊糊的窗口里显示一段文字。你并不明白 printf() 的内部工作原理,但是你知道你只要按照说明去调用,就能够实现对应的功能。&/p&&p&这就是函数库——别人写好的,打包送到你面前,你可以自由调用来做各种各样的事情的函数集合。&/p&&p& 我来说几个来自函数库的函数,例如 CreateWindowEx() 函数可以用来创建一个窗体(这个函数由微软提供),例如 GaussianBlur() 函数可以用来对一个图像进行高斯模糊处理(这个函数由 OpenCV 提供),再比如 evhttp_new() 函数可以创建一个 HTTP 服务程序(这个函数由 libevent 提供)……&/p&&p& 其他还有什么库函数?太多了。从控制网络通信,到截取视频画面并分析其中的人脸位置,到加解密本地文件,甚至包括微信收发消息,抓取淘宝商品信息……库函数的数量和有用程度远远超乎大家的想象。&/p&&p&诶?你从来没听说过还有这些东西?课本里也没提到?&/p&&p&那是因为你看的是入门教材,着重讲解语法,顺带提到了少量的 C 语言自带的库函数而已。事实上 C 语言包含的库函数本身就有不少,但是更多更强大的还是许多第三方库函数,例如我上面提到的这些。&/p&&p&重点是在于,我想告诉你,库函数才是你学习C语言并将其应用于实际的关键!!&/p&&p&&strong&学会调用别人的库函数,甚至写出自己的库函数,都是极其重要的。因为一个函数,本质上就是一个功能单位。你拥有的基础设施越多,你的发挥空间越大。道理就是这么简单。这就是我需要向大家强调的第二个观点,要想写出实用的C程序,一大关键就是研究并学会使用各种库函数。&/strong&&/p&&p&你看见隔壁王二写了个三维程序能让一个彩色的立方体在空中旋转?快找 OpenGL 库函数来用。什么?刘大宝写了个网络软件能在局域网里聊天?快找 Socket 库来用。&/p&&p&看见了吗?库函数有多重要? &/p&&p&&strong&但是,函数库的学习并不是孤立的。许多库函数背后需要一定的领域知识支撑。同样如我第一个观点所述,需要预备知识。学懂一个函数库,代表的不仅仅是明白如何调用那么简单, 而更反映了我们对一个特定领域——网络、数字图像、密码学、操作系统等的认识。&/strong&&/p&&br&&p&&b&三、基本的学习过程与一般规律&/b&&/p&&br&&p&如我前面所述,C语言学习主要是以语法入门,然后到函数库。再具体一些来说,包括以下阶段:&/p&&ol&&li&学习基础语法&/li&&li&学习简单的少数几个C语言自带的函数&/li&&li&学习一些程序设计的基础知识(数据结构,算法)&/li&&li&学习更多更强大的C语言自带的函数&/li&&li&学习一些特定应用领域的基本理论知识(操作系统,数据库,网络,图像……)&/li&&li&应用上一阶段学习的到知识进一步学习其他人提供的函数库(网络处理、操作系统管理、图像、密码学等等)&/li&&/ol&&p&对于本科阶段的同学来说,着重学好1-4,有选择的学习一下5-6,做一些小作品出来,就已经非常非常不错了。这就是一般的学习规律。说得很简短,但是要做到真的很不容易。&/p&&br&&p&&b&四、参考书籍&/b&&/p&&br&&p&首先第一本,也是我认为最重要的书,是这本《计算机科学导论》。亚马逊地址:&a href=&http://link.zhihu.com/?target=http%3A//www.amazon.cn/%25E8%25AE%25A1%25E7%25AE%%259C%25BA%25E7%25A7%%25AD%25A6%25E5%25AF%25BC%25E8%25AE%25BA-%25E4%25BD%259B%25E7%25BD%%25B5%259E/dp/product-description/B001O4WS1U/ref%3Ddp_proddesc_0%3Fie%3DUTF8%26s%3Dbooks& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&《计算机科学导论(原书第2版)》 佛罗赞 (Behrouz A.Forouzan), 莫沙拉夫 (Firouz Mosharraf), 刘艺【摘要 书评 试读】图书&/a&&/p&&p&可以说,这本书是对我人生影响最大的两本书之一。这本书通俗易懂,知识面广,但又具有一定的深度。真是因为读了这本书,才让我建立了对计算机科学合理的基本认识。在不涉及太多的数学原理的情况下,这本书清晰的揭示了包括计算机的基本构成,CPU运算的原理,内存、硬盘、光盘是如何存储数据的,编程的基本原理(机器语言、汇编语言,结构化编程语言,面向对象编程语言),以及网络、数据压缩等。&/p&&p&说白了,就是一本科普书。但是是一本伟大的科普书。入门者的福音书。&/p&&figure&&img src=&http://pic1.zhimg.com/e12a7dfdeeb_b.jpg& data-rawwidth=&389& data-rawheight=&550& class=&content_image& width=&389&&&/figure&&br&&p&然后,第二本,就是关于C语言语法的书籍了,说实话这部份我已经没有印象看的什么书了。因为我这个人有个毛病,就是喜欢东翻翻,西翻翻,哪里不懂就到处找书。可见这个部分其实没有大家想象的那么固定,你只要找到一本自己看得懂的书,就是好书!不必太过于拘泥于书与书之间的优劣比较。&/p&&p&&b&最经典的C语言入门书籍许多人肯定要说是 K&R 的那本。但是其实这本书对大多数初学者来说还是略难,如果有兴趣也可以读一读。但我更建议你了解一些C语言之后再转过来看看会更好。&/b&&br&&/p&&p&柴田望洋的《明解C语言》最近是一本广受欢迎的亲切的C语言入门书。&a href=&http://link.zhihu.com/?target=http%3A//www.amazon.cn/%25E6%E8%25A7%25A3C%25E8%25AF%25AD%25E8%25A8%%259F%25B4%25E7%%25E6%259C%259B%25E6%25B4%258B/dp/B00CMD4IIS/ref%3Dsr_1_1%3Fie%3DUTF8%26qid%3D%26sr%3D8-1%26keywords%3D%25E6%E8%25A7%25A3c%25E8%25AF%25AD%25E8%25A8%2580& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&《明解C语言》 柴田望洋, 管杰, 罗勇【摘要 书评 试读】图书&/a&&br&&/p&&p&昨天我专门到书店翻了一下,这本书确实很不错,亲切,谦虚,易懂。但我想也未必适合所有人。如果你是希望学习曲线平缓一些的,可以考虑看看。&/p&&p&&figure&&img src=&http://pic2.zhimg.com/a86f52cb9d043e1b0a971_b.jpg& data-rawwidth=&412& data-rawheight=&550& class=&content_image& width=&412&&&/figure&啊,差点忘了,还有一本咱们国内的赵岩先生写的《C语言点滴》也有不错的反响,也许大家也可以找来看看。&a href=&http://link.zhihu.com/?target=http%3A//www.amazon.cn/C%25E8%25AF%25AD%25E8%25A8%%%25E6%25BB%25B4-%25E8%25B5%25B5%25E5%25B2%25A9/dp/product-description/B00FG1RWJA/ref%3Ddp_proddesc_0%3Fie%3DUTF8%26s%3Dbooks& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&《C语言点滴》 赵岩【摘要 书评 试读】图书&/a&&/p&&p&&figure&&img src=&http://pic2.zhimg.com/77be63311ebe5a23f269_b.jpg& data-rawwidth=&437& data-rawheight=&550& class=&origin_image zh-lightbox-thumb& width=&437& data-original=&http://pic2.zhimg.com/77be63311ebe5a23f269_r.jpg&&&/figure&基本上,上面这些书就能帮助你比较轻松的入门了。其他书籍推荐,我会陆续也写出来。今天实在写不了这么多了。&/p&&p&但是,再补充一本,如果对于那些已经学得差不多的同学,必须得看看下面这本,这是我的至爱之一啊!^_^ 那就是吊炸天的《C Standard Library》,china-pub链接:&a href=&http://link.zhihu.com/?target=http%3A//product.china-pub.com/195624& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&C标准库(C标准库“圣经”)[按需印刷]&/a&&/p&&p&好好看看这本书,它是真正的顶级教材,因为——里面包含了标准库实现的完整源码,以及作者在实现时的思路讲解。是一本值得收藏的超级力作。让我们一睹顶级程序员的思维杰作。(吐嘈:这本书的翻译还是有一些值得修正的地方,所以能收英文版的同学就直接收英文版了)&/p&&p&&figure&&img src=&http://pic3.zhimg.com/dde822cf0c85cfda5da3a_b.jpg& data-rawwidth=&438& data-rawheight=&550& class=&origin_image zh-lightbox-thumb& width=&438& data-original=&http://pic3.zhimg.com/dde822cf0c85cfda5da3a_r.jpg&&&/figure&这几本书其实并未涵盖C语言学习的所有重要方面。稍后我会再放上一些来。今天打字打到手疼,就不继续了。&/p&&p&&b&五、晋级——通向更高境界之路&/b&&/p&&p&学无止境。更专业的学习至此其实才刚刚开始。&/p&&p&(待续)&/p&
计算机行业发展非常快,大学里的教育基本都跟不上实际的社会需求。如果你所在的学校还在指定大家使用谭浩强的教材,或使用VC6.0来教大家上机实验,那你不妨看看本文,这里有一些建议可以帮助你不会脱离社会太远。考虑到这是一个过来人感觉很基础,但是对于…
&p&这是一位黑客写的,拜读他的文章后,非常认同他对黑客的理解。(是位美国人,原来文章是英文版。这里的链接是中文版。禁止商业转载)&/p&&p&&a href=&//link.zhihu.com/?target=http%3A//idarkside.org/docs/hacker-howto.html%23hacker_already& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&idarkside.org/docs/hack&/span&&span class=&invisible&&er-howto.html#hacker_already&/span&&span class=&ellipsis&&&/span&&/a&&/p&&br&&p&更新&/p&&p&文章较长 以下为原文:&/p&&p&&a href=&//link.zhihu.com/?target=http%3A//www.0x08.org/docs/hacker-howto.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&如何成为黑客 · Dark Side&/a&&/p&&p&&b&如何成为黑客&/b&&/p&&p&如何成为黑客&/p&&p&How To Become A Hacker&/p&&p&Eric Steven Raymond, &a href=&//link.zhihu.com/?target=http%3A//catb.org/%257Eesr/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Thyrsus Enterprises&/a&, & &a href=&mailto:&&&/a& &&/p&&p&Copyright (C) 2001 Eric S. Raymond&/p&&p&翻译:柯非, & &a href=&mailto:&&&/a& &&/p&&p&这篇译文基于更新的&a href=&//link.zhihu.com/?target=http%3A//catb.org/%257Eesr/faqs/hacker-howto.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&原文&/a&修订版1.50。&/p&&p&如果对译文有任何意见或者建议,&b&请&a href=&//link.zhihu.com/?target=https%3A//github.com/zer4tul/hacker-howto/issues/new& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&发Issue&/a&,或直接&a href=&//link.zhihu.com/?target=https%3A//github.com/zer4tul/hacker-howto/compare/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&发Pull Request&/a&给我。&/b&&/p&&h2&目录&/h2&&br&&ul&&li&&a href=&//link.zhihu.com/?target=http%3A//www.0x08.org/docs/hacker-howto.html%23%25E4%25B8%25BA%25E4%25BD%%25BC%259A%25E6%259C%%25BF%%25AF%%E6%25A1%25A3& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&为何会有这篇文档&/a&&/li&&li&&a href=&//link.zhihu.com/?target=http%3A//www.0x08.org/docs/hacker-howto.html%23%25E4%25BB%%25B9%%2598%25AF%25E9%25BB%%25AE%25A2& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&什么是黑客&/a&&/li&&li&&a href=&//link.zhihu.com/?target=http%3A//www.0x08.org/docs/hacker-howto.html%23%25E9%25BB%%25AE%25A2%25E7%259A%%25B2%25BE%25E7%25A5%259E& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&黑客的精神&/a& &/li&&ul&&li&&a href=&//link.zhihu.com/?target=http%3A//www.0x08.org/docs/hacker-howto.html%23believe1& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&1. 世上仍有大量迷人的事情等待解决&/a&&/li&&li&&a href=&//link.zhihu.com/?target=http%3A//www.0x08.org/docs/hacker-howto.html%23believe2& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&2. 同样的问题不应被重复处理两次&/a&&/li&&li&&a href=&//link.zhihu.com/?target=http%3A//www.0x08.org/docs/hacker-howto.html%23believe3& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&3. 拒绝重复和沉闷的事情&/a&&/li&&li&&a href=&//link.zhihu.com/?target=http%3A//www.0x08.org/docs/hacker-howto.html%23believe4& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&4. 自由万岁&/a&&/li&&li&&a href=&//link.zhihu.com/?target=http%3A//www.0x08.org/docs/hacker-howto.html%23believe5& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&5. 精神不能代替能力&/a&&/li&&/ul&&li&&a href=&//link.zhihu.com/?target=http%3A//www.0x08.org/docs/hacker-howto.html%23%25E5%259F%25BA%25E6%259C%25AC%25E9%25BB%%25AE%25A2%25E6%258A%%2583%25BD& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&基本黑客技能&/a& &/li&&ul&&li&&a href=&//link.zhihu.com/?target=http%3A//www.0x08.org/docs/hacker-howto.html%23skill1& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&1. 学习编程&/a&&/li&&li&&a href=&//link.zhihu.com/?target=http%3A//www.0x08.org/docs/hacker-howto.html%23skill2& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&2. 获取一个开源的Unix并学习运行和使用它&/a&&/li&&li&&a href=&//link.zhihu.com/?target=http%3A//www.0x08.org/docs/hacker-howto.html%23skill3& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&3. 学习使用万维网(World Wide Web,WWW)和HTML(超文本标记语言)&/a&&/li&&li&&a href=&//link.zhihu.com/?target=http%3A//www.0x08.org/docs/hacker-howto.html%23skill4& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&4. 学习实用英语&/a&&/li&&/ul&&li&&a href=&//link.zhihu.com/?target=http%3A//www.0x08.org/docs/hacker-howto.html%23%25E9%25BB%%25AE%25A2%25E7%25A4%25BE%25E5%258C%25BA%25E7%259A%%25BA%25AB%25E4%25BB%25BD& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&黑客社区的身份&/a& &/li&&ul&&li&&a href=&//link.zhihu.com/?target=http%3A//www.0x08.org/docs/hacker-howto.html%23respect1& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&1. 编写开源软件&/a&&/li&&li&&a href=&//link.zhihu.com/?target=http%3A//www.0x08.org/docs/hacker-howto.html%23respect2& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&2. 帮助测试和调试开源软件&/a&&/li&&li&&a href=&//link.zhihu.com/?target=http%3A//www.0x08.org/docs/hacker-howto.html%23respect3& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&3. 发布有用的信息&/a&&/li&&li&&a href=&//link.zhihu.com/?target=http%3A//www.0x08.org/docs/hacker-howto.html%23respect4& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&4. 帮助维护基础设施运转&/a&&/li&&li&&a href=&//link.zhihu.com/?target=http%3A//www.0x08.org/docs/hacker-howto.html%23respect5& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&5. 为黑客社区服务&/a&&/li&&/ul&&li&&a href=&//link.zhihu.com/?target=http%3A//www.0x08.org/docs/hacker-howto.html%23%25E9%25BB%%25AE%25A2%25E4%25B8%258E%25E4%25B9%25A6%25E5%E5%25AD%2590%25EF%25BC%2588Nerd%25EF%25BC%%259A%%%25E7%25B3%25BB& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&黑客与书呆子(Nerd)的关系&/a&&/li&&li&&a href=&//link.zhihu.com/?target=http%3A//www.0x08.org/docs/hacker-howto.html%23%25E9%25A3%258E%25E6%25A0%25BC& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&风格&/a&&/li&&li&&a href=&//link.zhihu.com/?target=http%3A//www.0x08.org/docs/hacker-howto.html%23%25E5%258E%%258F%25B2%25E8%25AE%25B0%25E5%25BD%2595%25EF%25BC%259A%25E9%25BB%%25AE%25A2%25E6%25B4%25BB%25E5%258A%25A8%25EF%25BC%258C%25E5%25BC%%25BA%2590%25EF%25BC%258C%25E5%E8%2587%25AA%25E7%%25E8%25BD%25AF%25E4%25BB%25B6& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&历史记录:黑客活动,开源,和自由

我要回帖

更多关于 多层感知神经网络 的文章

 

随机推荐