Re: [请益] C++观念参考书选择

楼主: tinlans ( )   2018-06-27 04:42:59
※ 引述《powenyu (powen0706)》之铭言:
: 小弟不才 打算在暑假选一本C++的书来啃
: 我本身有稍微碰过C,但是观念非常不扎实,像是指标、阵列、递回之类的
: 我目前是计画把zerojudge的题目A在暑假做完,但是还是希望能配著书来读
我花了十分钟用 Google 爬完你发过的文。
大致上可以知道去年已经是大一,原本是读高中,然后考台科读。
其它私事就先不提,总之光从 IP 看你都是用台科无线网络,所以查不到科系。
但根据读完大一以后只是“稍微碰过 C”和“指标、阵列、递回观念不扎实”,
研判应该不是电资类的科系,不然应该至少已经被资料结构这门课操过了。
因为没什么力气再去翻台科的电资科系的课表,姑且就先当你是个非相关科系学生。
如果你是非相关科系的学生,在学 C++ 之前,你得先搞清楚你为什么要学 C++。
你未来想从事什么方面的研究要用到 C++?你未来想从事什么样的工作会用到 C++?
你现在是大学生,不再是高中生,很快就要出社会工作,要尽量确立目标再决定学什么。
先确立你的目标再来决定要学什么东西,不要觉得自己时间还有很多,剩下三年很快的。
你把你的目标和动机还有自己背景都好好讲出来,我再认真回技术方面的东西。
: 因为我以前的学习方式是拿到题目就写,不会就问同学,或是去网络上看大神的程式码
: 再依题目自己修改,可是常常就会忽略这个用法的观念,招致错误的用法或没效率的
: 用法
先讲这些的原因是因为看到你还是以解题为目标,进行着很国中化、高中化的学习方式。
你没有一个想要制作的作品,而且也没尝试过从无到有写出一支程式,都是透过模仿。
问同学固然跟上网查一样可以快速得到答案,但是你的知识就是片片段段无系统性。
把网络切掉,只给你 C 语言教科书和函式库工具书,你能不能写出个什么来?
是不是没有人问,没有办法透过网络或一堆范例的书抄程式码来改,你就什么都做不到?
你先设法逼自己只有 C 语言教科书和函式库工具书就能写出程式,之后再来谈其它。
C++ 对现在的你来说还是太庞大了,特别是现在这种学习方式,根本没办法把 C++ 学好。
: 想问大神们对这种状况有什么推荐的书籍吗,像有一本:插画学C语言 我觉得图解对我的
: 观念有很大的帮助,但是我觉得他讲太少了,例题不够内文不连贯,蛮可惜的,但是如
: 果有类似的书,欢迎大家推荐。
会找到适合自己的书是好的开始。
学程式的前几本书我从来都不建议叫人推荐,毕竟每个人适合的入门学习法不同。
你先多找到几本可以厘清你观念的书,自学到入了门了,再找人推荐经典书籍才有意义。
你得天独厚人在台北,自己去重庆南路逛一下天珑书局,现场去挑适合你自学的书。
很多县市的学生没有这种环境,只能网络上没看过就买,搞到选书跟抽签一样碰运气。
图书馆也是一个可以利用的地方,但这很看学校及馆藏,去专业电脑书店选书绝对没错。
你也不一定要去选 C 或 C++ 的书,有兴趣的题材跟程式语言你都能翻来看看有无兴趣。
会一直跟你强调这个是因为 C/C++ 在泛软件业里不是大宗,很多公司并不使用 C/C++。
如果你是电资类的本科系学生,因为常需要写中低阶程式,学 C/C++ 我就会觉得还好。
但即使是这类学生跑来问,我一样还是会先问你将来想干嘛。
如果你不想思考或回答我这些问题,你可以直接杀去 C_and_CPP 板再发问一次。
既然你发在 Soft_Job 这种社会人士板,那我会先以入社会后想干嘛为考量来回文。
当然不管你是什么科系,未来想干嘛,想透过 C/C++ 来学程式,有些东西可以在这先讲。
首先,你需要的书只有两种。
一种是打稳基础观念的 C 语言教科书。
另一种就是罗列 C 语言标准函式库所有函式及简易使用范例的工具书。
你需要的书就只有这两种,其它速成类、纯范例类的书,你可以全部跳过。
靠着这两种书写出你想写的东西,解你想解的题目,不要上网查或问人。
如果做不到,那代表你的个性根本就不适合以写程式为业,当日常生活工具玩玩就好。
只是要把程式当日常生活工具玩玩就好,你有更好的选择,C/C++ 绝对不是首选。
你去学个按键精灵的命令稿语言搞不好在把妹上还比较有利,我是很认真在说。
当你用这些方法去土砲实作东西和解题时遇到方法或效能上的障碍,那才需要读其它书。
所谓其它书,就是资工本科系的两大必修课,资料结构和算法。
如果你对背后的数学原理有兴趣,想要自己设计算法,还需要读一下离散数学。
但是这几种书对现在的你来说都还太早,你连程式语言的基础都还没系统化学习过。
说真的如果你是好好读书从基础学起,我不清楚阵列跟指标到底有什么难懂。
阵列名称跟指标名称都是识别字 (identifier),使用前需要先宣告 (declare)。
这些识别字在被定义 (define) 后会在内存被配置一块空间,里面可以存资料。
当这些识别字被拿来当变量 (variable) 使用时,同时也会是算子 (operand)。
而针对算子进行操作的符号称为运算子 (operator),功能当然就是拿算子来运算。
由算子和运算子构成运算式 (expression),譬如 a + b 这样的东西。
由一条运算式再加上分号做结尾,就构成一条简单叙述 (simple statement)。
而使用大括号把好几条叙述包起来的就叫复合叙述 (compound statement)。
叙述 (statement) 在 C/C++ 是真正的基本单位,整个程式由各种叙述完成。
一般人讲的什么 if 语法、switch 语法等等,真正的名称是叫 if 叙述、switch 叙述。
讲这些干嘛?因为程式语言也是语言,只是限制比较多,学起来比自然语言简单而已。
你学英文一样要学文法,要知道如名词、动词、形容词、副词等各种词性。
运算式在英文的文法里如同子句 (clause) 或词组 (phrase),
而叙述在英文的当中就是更浅显易懂的东西,称为句子 (sentence)。
就如同文章是由段落组成,段落是由句子组成一样,
你的整个程式也是由一段一段的叙述所组合出来的。
当然就像一本著作甚至还会区分章节一样,程式其实也有编译单元、模组等概念。
不过这种东西对你现阶段来说还太早,因为你写程式的主要方法还是拿现成的来改。
你要先学的东西,就只是怎么在一张完全空白的白纸上写出无语法错误的一支支小程式。
阵列名称说穿了丢到程式上就是个算子及变量,然后它有特殊的运算子可以对它操作,
也就是下标运算子 (subscript operator),就是中括号 [] 这种东西。
指标名称说穿了丢到程式上还是个算子和变量,它也有个特殊的运算子可以对它操作,
称为提领运算子 (dereference operator),也就是星号 * 这种东西。
这东西你只要稍微了解一下是在干嘛,就算看到 N 个提领运算子在一起,也不会怕它。
N 个提领运算子在一起就是做 N 次提领而已,也没什么,本质都是不变的。
除此之外,运算子作用在不同型别的算子上也有不同意义,
譬如你对一个指标型别的算子做 + 1,实际上运算结果常常不是只是多了 1 而已。
你必须先搞清楚不同型别 (type) 的算子有哪些运算子可以用,它们的作用是什么。
什么叫型别?阵列和指标本身就是一种型别,当然你常看到的 int、float 等等也是。
型别影响到编译器怎么去看待运算子跟算子,转译出来的机械指令也有差别。
两个 double 变量相加,编译器转译出来的是浮点运算指令,
因此这种加法的两个算子里的位元排列方式,CPU 会以浮点数特有的格式来做解读。
两个 int 变量相加,编译器转译出来的是整数运算指令,
因此这种加法的两个算子里的位元排列方式,CPU 会以整数格式来做解读。
当运算子两边的算子型别不同时,编译器还得先暗中把它们转成同型别再决定指令。
其它东西要一口气在这讲完就太多了,多到可以写一本来卖,就留给你自己看吧。
递回是一种程式结构,它的原理就是数学,但是这边可以先不管。
在程式上递回就是一种叫电脑暴力反复做一样的事,直到你设定的条件发生为止的东西。
所以递回的构成元素就只有两项:1. 继续往下用力算的执行部分 2. 终止条件
所以你想要写一个把传入的变量不断递减到 0 的递回函式的话,首先就要放终止条件。
就像我一开始问你想学 C++ 是什么目的,你有什么目标?
程式总是为某个目的而写的,所以你一开始要决定的就是目标。
void decrease_until_zero(unsigned v)
{
if(v == 0) return; /* 终止条件是让 v 变成 0 */
}
然后达到目的的过程是“不断递减”,所以你得加上一行递减的动作:
void decrease_until_zero(unsigned v)
{
if(v == 0) return;
v
作者: beaprayguy (小羊快跑啊)   2018-06-27 06:27:00
你真的太佛系了
作者: s29940 (阿赐)   2018-06-27 06:30:00
感谢高人指点,推
作者: beaprayguy (小羊快跑啊)   2018-06-27 06:30:00
专业领域方面,这gap真的不是1 2年认真可以跨过。我非本科很能认同目的导向。在达成目的持续学习并用有效率的学习。才是最重要非本科会经过很多垃圾路。
作者: dannypsnl (秦书)   2018-06-27 06:56:00
作者: jack85408540 (小贱)   2018-06-27 08:03:00
作者: HAKUKE (亚流师)   2018-06-27 08:22:00
好文推
作者: vi000246 (Vi)   2018-06-27 08:28:00
超认真文
作者: tkhan (脑残绿吱吱)   2018-06-27 08:29:00
太强..
作者: cphe (魔鬼藏在垃圾筒里)   2018-06-27 08:37:00
好文推
作者: loveflames (咕啾咕啾魔法阵)   2018-06-27 08:55:00
如果学C++是目的取向,非本科的还是不要学比较好一来是学习困难,二来是C++的工作难找
作者: chupiggy (機器人)   2018-06-27 09:07:00
好心人
作者: final01 (牛顿运动定律)   2018-06-27 09:07:00
c++工作不难找,如果敢在履历上写过精通c++有非常多工作可选吧!XD
作者: shvanta (vant)   2018-06-27 09:21:00
超棒的观念诠释
作者: angel00540 (小杀白)   2018-06-27 09:28:00
话说台科电资上完确实C只有基础 所以可能是本科系的好像只有资工有演算跟资料结构
作者: y2468101216 (芸)   2018-06-27 09:48:00
认真推
作者: g5637128 (帮QQ)   2018-06-27 10:05:00
作者: yamakazi (大安吴彦祖)   2018-06-27 10:13:00
遇到贵人了
作者: jn840129 (jn840129)   2018-06-27 10:24:00
作者: Elaine0530 (小阿喵)   2018-06-27 10:32:00
作者: GameHeven (Mark Williams)   2018-06-27 10:49:00
无敌认真
作者: transforman   2018-06-27 10:53:00
超认真文给推
作者: lu1626 (啪庆)   2018-06-27 11:18:00
愿意花时间打这一长篇 给推
作者: popcool (我不懂)   2018-06-27 11:21:00
认真教学给推
作者: turkeyonly (逼逼)   2018-06-27 11:41:00
请受我一拜
作者: benben994 (晨宇)   2018-06-27 11:47:00
你怎么可以解释的这么好
作者: cool9203 (看我翘翘的)   2018-06-27 11:50:00
推超认真
作者: kerkerhaha (交大林志杰)   2018-06-27 12:04:00
这个Diu
作者: cphe (魔鬼藏在垃圾筒里)   2018-06-27 13:19:00
半路出家的真的不用坚持初学要选C/C++,现在不是十几二十年前,现今现代化的语言很多可以学,学起来也有成就感
作者: jojojen (JJJ)   2018-06-27 13:23:00
作者: uly (游历)   2018-06-27 13:39:00
每次听到初学者说要学好C++就好想吐槽 时代变了
作者: s89162504 (阿本)   2018-06-27 13:50:00
平衡一下 人家只是想问本书而已你贴个c++ reference的网站都比这样碎念一堆有用吧
作者: aszx4510 (wind)   2018-06-27 13:56:00
楼上 人家Andes你敢嘴?
作者: stfang925 (司马铃薯)   2018-06-27 14:10:00
回答一篇文也可以帮助无数有类似问题的人 为何不要要书关键字google10秒钟就有答案了 而且如果整篇文看完还能理解成碎念也是有点惨...
作者: eva19452002 (^^)   2018-06-27 14:24:00
本篇让我快速复习了程式语言
作者: bnd0327 (阿噗噗)   2018-06-27 15:17:00
推认真
作者: xsion (Xsion)   2018-06-27 15:47:00
你Google原po发过的文应该会先看到一堆八卦废文吧
作者: justben (BEN)   2018-06-27 15:55:00
认真推
作者: Ekmund (是一只小叔)   2018-06-27 16:04:00
从方向到范例都解析一遍了...你真的是个好人 (递
作者: kikilalagirl (kikilala)   2018-06-27 16:04:00
留在学术界的大都剩嘴砲王 XDDD
作者: Ekmund (是一只小叔)   2018-06-27 16:07:00
C我现在定位成一个接触程式的进入点 它和电脑的运作逻辑贴合得比较密 不一定要将它发展成谋生工具 实际上也大多不是 现在是web面需求满天飞 讲到"学好"什么 先有方向吧
作者: cphe (魔鬼藏在垃圾筒里)   2018-06-27 16:20:00
嘘的人根本想红,这篇可以留给非本科或觉得C/C++学不会人生就失败的人看,何乐而不为?想知道书,专版爬一下就很多了
作者: Ekmund (是一只小叔)   2018-06-27 16:22:00
我现在才注意到发文时间凌晨四点...
作者: beaprayguy (小羊快跑啊)   2018-06-27 16:30:00
我是电子科系。非常懂原po表达的电子科大教授就像版大讲的
作者: BigHeadDoggy (大头狗仔)   2018-06-27 16:48:00
作者: Eric0605 (我还有点饿)   2018-06-27 17:09:00
作者: keke0421 (zrae)   2018-06-27 17:16:00
热心推...你也打太多了 @[email protected]
作者: greenstar27 (star)   2018-06-27 17:40:00
大推!!!也受教了
作者: TitanEric (泰坦)   2018-06-27 18:32:00
推超级认真文
作者: RadiationXen (Xen)   2018-06-27 19:44:00
热心推
作者: E33258 (E33258)   2018-06-27 20:11:00
认真推
作者: Raymond0710 (雷门)   2018-06-27 20:18:00
太认真啦 推
作者: pttrAin (rAin)   2018-06-27 20:26:00
你怎么可以这么专业这么佛心qq
作者: MyNion (Nion Lee)   2018-06-27 20:54:00
好猛,原PO你花了多少时间打这篇文啊?
作者: es8603 (绯色之翼)   2018-06-27 20:58:00
超级热心好人 还去google他的po文做分析 推
作者: sa074463 (垒包)   2018-06-27 21:41:00
原PO热心又超强 推
作者: s06yji3 (阿南)   2018-06-27 22:31:00
跪着推
作者: scps950707   2018-06-27 22:46:00
推晶心
作者: qpalwosk ( )   2018-06-27 23:29:00
意图使人求内投andes..XD
作者: ketrobo (猫萝卜)   2018-06-28 00:25:00
这好文
作者: qwe85158 (xine)   2018-06-28 00:30:00
推! 值得学习
作者: king37937 (忆~)   2018-06-28 01:21:00
推!有目的地学习才能持续下去
作者: Lhmstu (lhmstu)   2018-06-28 03:03:00
推用心
作者: oxlittle (牛牛)   2018-06-28 04:28:00
我觉得蚂蚁书不错
作者: becca945 (频果芽子)   2018-06-28 08:52:00
我喜欢蚂蚁书
作者: wuliou (wuliou)   2018-06-28 09:13:00
这篇必须推
作者: ralfer   2018-06-28 10:50:00
推 当年入门自己啃C++ primer超痛苦的...
作者: chouanhsu (ALSniper)   2018-06-28 11:34:00
推u文
作者: swinds24 (阿肾)   2018-06-28 11:40:00
推荐,觉得写得非常好!
作者: zonppp (冷凉卡好)   2018-06-28 15:10:00
推~动机真的很重要,没有实际要完成的东西真的会不知道在学什么
作者: suninrain (低潮)   2018-06-28 15:45:00
推推~真佛心~学C++有文主带入门真的很有方向啊~
作者: BlazarArc (Midnight Sun)   2018-06-28 16:03:00
作者: NCTU87 (八七)   2018-06-28 19:04:00
对详细推==
作者: hakosaki (hakosaki)   2018-06-28 19:28:00
详细推 嘘文哈哈哈哈哈
作者: akito117 (宗益)   2018-06-29 10:05:00
好文推
作者: gowellplayer (gowellplayer)   2018-06-29 10:08:00
作者: hotahaha (hey you ROCK MAN!)   2018-06-30 09:38:00
作者: zenuo (坚持到底永不放弃)   2018-06-30 09:47:00
佛系神人 推
作者: Dreamerrr (芋鸭芋鸭欧)   2018-07-02 02:55:00
获益良多 真的感激不尽 谢谢原Po 推!
作者: jellyfishuan (风雪漫天)   2018-07-02 13:52:00
跟原原po有类似的背景然后是资工升大三 看到这篇让我有方向知道暑假要怎么精进自己了QQ有时候真的很不适应现在这种教学方式哈哈
作者: CJhang (Civil Jobs)   2018-07-04 03:19:00
优文 以前走过 帮推个
作者: A1ch3mi5t (波霸奶绿微糖去冰)   2018-07-06 23:48:00

Links booklink

Contact Us: admin [ a t ] ucptt.com