回 帖 发 新 帖 刷新版面

主题:写了2年的初学者C++基础教程,今天终于出版了《易学C++》

[img]http://www.tomatostudio.net.cn/images/front2ss.jpg[/img]

[size=3][color=FF0000]本书已交由人民邮电出版社出版发行。[/color]

[b][size=4][color=0000FF]购买《易学C++》网址:[url]http://www.china-pub.com/39862[/url],欢迎大家捧场![/color] [/size][/b]

前 言

高级语言程序设计是各大院校计算机专业的一门专业基础必修课,主要是学习一些程序设计的基础知识和基本思路。学好高级语言程序设计对后继的一些数据结构、软件工程等课程有着重大的影响。而如果一名计算机专业的学生将来想在软件行业有所发展,也需要有着扎实的高级语言程序设计基础。因为高级语言是众多计算机语言中使用最多的。

然而,由于中学里的一些学习问题,各中学毕业的学生在计算机水平方面良莠不齐,有些甚至连一点点程序设计的基础也没有。到了大学里,老师们却因为课时紧张,难以把一些很基本的知识很详细地给学生们解释清楚,以至于日积月累之后,学生们还是觉得什么都不懂。于是,如何能够提高学生的专业水平,更快地把大家领进计算机的世界就显得尤为重要。

本书作者自幼接触并自学了BASIC语言,从初高中开始自学PASCAL语言和Visual Basic,对如何学习和掌握高级语言有一些自己的想法,在帮助一些没有程序设计基础的同学更快入门有一些自己的方法。于是就把这些想法和方法一一罗列出来,编著成书。

学习程序设计是一个循序渐进的漫长过程,在短短的几个学期内是不可能很好地掌握的。在学习过程中要求精求全实在是很有难度。而且
对初学者来说,知道得越多往往就越是迷茫。所以本书将其他教材中一些不常用的知识和原来的一些C语言的知识删去,添加了一些平时常用的算法介绍和一些可能和后继课程有部分关联的知识,以帮助大家更快地掌握高级语言程序设计的精髓。

本书作者也只是一名普通的大学生,在考虑一些非常专业的问题上可能尚有欠缺。而且由于时间较为仓促,书中难免有一些错误或不合理的地方,希望各位高人能够不吝赐教。如果您对本书有什么建议或者意见,请发送邮件到tomatostudio@126.com。

使用指南

本书主要是依照计算机本科专业的实际教学需要来编排内容的。虽然内容的条理可能不及某些专业的C++工具书那么清晰,但是这样的次序让初学者比较容易上手。毕竟那些工具书是面向一些已经掌握C++或有较高的高级语言程序设计基础的读者。编写此书的主旨就是不要一下子把什么都说出来,而是一点一点循序渐进地增长读者的能力。这样,读者就不会一下子被那么多难以接受的概念吓住,以至于失去了继续学习的信心。

本书的主要论述对象是Microsoft Visual C++,对于以前的C语言和Borland的C++不作讨论,以免初学者把各种语言的概念混淆起来,也有效降低了学习的压力。对于一些VC++中存在却不常用的内容,本书一般一笔带过或不予提及。因为这些内容在应试方面不作要求,在实际使用上也可以由其他方法代替。但是,如果你是一位初学者,那么就请务必要看到本书的每一个角落。你所遗落的一句话就有可能是一个知识的关键点。

本书的内容有四个特点:

1、粗体字:读者必须掌握理解的内容,也是每个知识点的精髓或要点。很多初学者容易犯的错误也在粗体字中予以提醒。

2、试试看:把一些可能与一般情况不符甚至矛盾的情况列举出来,鼓励读者上机试验,以得到深刻的结论。这些结论可能对以后的学习有所帮助。所以建议所有有条件的读者务必去试试看。对于没有条件的读者,则需要牢记本书给出的结论。

3、算法时间:向大家介绍一些程序设计的常用算法。其实很多时候一个程序就是把这些算法以不同形式搭建起来。能够掌握这些算法不论是对阅读别人的代码还是自己设计程序都有着很大的帮助。

4、习题:帮助大家巩固已经学习的知识。有些题型则是符合应试的要求。从难度上来说,都算适中。如果读者已经掌握了章节中的知识,那么做这些习题也不会有什么困难。

本书的定位是C++程序设计的教学辅导书,而不是C++的工具书或语法书。如果你想要了解更多深层的内容,请查阅C++的专业工具书。

如果大家感兴趣,可以到[url]http://www.tomatostudio.net.cn[/url]查看。
QQ:149883760
E-mail:tomatostudio@126.com
MSN Space:http://spaces.msn.com/members/OOTTMA/

希望能够结交高手。

回复列表 (共61个回复)

11 楼

C++ 入门群:16302142

12 楼

对不起,好久没有更新了。不是我把写书忘了,也不是我偷懒了,前一段时间都在应付考试。好在最后成绩还算可以,也对得起我耽误下来的这些工作。

言归正传,这次我写的是指针。大家一直都说指针是最难学的部分,其实我也这样认为。我觉得这次有些地方还是写得有些不清不楚,所以还希望大家能够多多提意见。如果觉得哪里模糊了概念、难以理解或者不太合理,欢迎来和我交流。

在内容取舍方面,我把字符串和函数指针去掉了。因为C++主要是面向对象的,把C-String放进来讲得很深就有把C和C++风格混淆之嫌。所以我想等到面向对象了,把string和vector一起说。至于函数指针,基本上没什么大用处,大家还没学汇编,对指令什么的还不熟悉,所以不说也罢。

堆内存其实一直是指针里的重头戏,我把关于堆内存到底处在什么位置省略了,我觉得这个只会让初学者更迷茫。大家只要知道堆内存是动态申请的就可以了。要知道什么是堆内存,需要知道什么是堆什么是栈什么是段等等,对初学者来说没必要。对于C里面的malloc和free我也不说了,这个对初级C++程序员来说完全是增加负担,多此一举。

大家如果觉得有哪些重要的地方被我忽略了,希望能够提出来,我再斟酌一下,有必要的话我会补写。最后还是要感谢大家支持!下面给出本章一些节选:

什么是指针

在我们的桌面上,往往有这样一些图标:在它们的左下角有个小箭头,我们双击它,可以调出本机内的一些程序或文件。然而我们发现这些图标所占的存储空间很小,一般也就几百到几千字节。可是那么小的文件怎么会让上百兆的程序执行起来的呢?
后来,我们知道那些有小箭头的图标文件称为快捷方式。它所存储的内容并不是所要调用的程序本身,而是所要调用的程序在本机磁盘上的位置。(比如D:\Tencent\QQ\QQ.exe,如图8.1所示)使用快捷方式的目的就是为了快捷方便,不用去查找程序就能去执行它。不过如果所要调用的程序不存在或位置不正确,那么双击了这个快捷方式就会导致错误发生。
在内存中,可能会有一些数据,我们不知道它的变量名,却知道它在内存中的存储位置,即地址。我们能否利用快捷方式的原理对这些数据进行调用和处理呢?
很幸运,在C++中,也可以给内存中的数据创建“快捷方式”,我们称它为指针(Pointer)。它和整型、字符型、浮点型一样,是一种数据类型。指针中存储的并不是所要调用的数据本身,而是所要调用的数据在内存中的地址。我们可以通过对指针的操作来实现对数据的调用和操作。

更灵活的存储——堆内存

家里要来客人了,我们要客人们泡茶。如果规定只能在确定来几位客人之前就把茶泡好,这就会显得很尴尬:茶泡多了会造成浪费,泡少了怕怠慢了客人。所以,最好的方法就是等客人来了再泡茶,来几位客人泡几杯茶。
然而,我们在使用数组的时候也会面临这种尴尬:数组必须在程序运行前声明,即数组的大小在编译前必须是已知的常量表达式。空间申请得太大会造成浪费,空间申请得太小会造成数据溢出而使得程序异常。所以,为了解决这个问题,我们需要能够在程序运行时根据实际情况申请内存空间。
在C++中,允许我们在程序运行时根据自己的需要申请一定的内存空间,我们把它称为堆内存(Heap)空间。

13 楼

感激之情,无以言表!

14 楼

这几天又收到不少来信,QQ的好友数也增加了不少。甚至有一位高龄网友说想按正式出版计价,寄一些钱给我。在此,我感谢各位对我长期以来的支持和鼓励!也感谢各位细心地阅读了我的作品,给我提出了一些非常好的建议。

这次更新花了三周的时间。本来结构这个东西就包含了链表这些内容,我原认为链表应该交给数据结构的,不过考虑到学校里还是要求这个的,我就说一下吧,这次选用自行车链条作为比喻,图画得比较难看,请多包涵。枚举本来在学校里一带而过的,不过发现Java也都开始支持枚举了,可见这个类型还是蛮有用的。这次我花了一个小节来说枚举。两周半就用在了枚举、结构、链表上了。还有半周呢我对前面作了一些修改,在第一章添加了程序设计到底要做什么,在第三章添加了常用数据类型的简介。如果大家觉得哪里还写得欠妥,请给我建议,谢谢!
本次内容节选:

很多初学者会不解:程序设计到底是要做什么呢?我们该如何教会电脑解决问题呢?
其实,要解决一些看似不同的问题,我们可以将其归结为一种确定的过程和方法。我们把这种能够解决一类问题的过程和方法称为算法(Algorithm)。下面,我们以解一元二次方程为例,介绍求解的算法:
(1)输入二次项系数a,一次项系数b和常数项c。
(2)计算△=b2-4ac。
(3)判断△的大小,如果△≥0,则有实数解,否则就没有实数解。
(4)如果有实数解,就利用求根公式求出两个解。
(5)输出方程的两个实数解,或告知无解。
以上便是用自然语言描述的求解一元二次方程的算法。程序设计所要做的便是探求这种能解决一类问题的算法,并且要将这种算法用计算机能够“看懂”的语言表达出来。

在基本的数据类型中,无外乎就是些数字和字符。但是某些事物是较难用数字和字符来准确地表示的。比如一周有七天,分别是Sunday、Monday、Tuesday、Wednesday、Thursday、Friday和Saturday。如果我们用整数0、1、2、3、4、5、6来表示这七天,那么多下来的那些整数该怎么办?而且这样的设置很容易让数据出错,即取值超出范围。我们能否自创一个数据类型,而数据的取值范围就是这七天呢?
C++中有一种数据类型称为枚举(Enumeration)类型,它允许用户自己来定义一种数据类型,并且列出该数据类型的取值范围。

我们把变量比作为箱子。在现实生活中,如果小箱子太多太杂乱了,我们会拿一个大收纳箱来,把小箱子一个个有序地放到收纳箱里面。这样一来,在我们视线里的箱子就变少了,整理起来也会比较方便。那么,我们能否把这么多凌乱的变量整理到一个变量当中呢?
C++中有一种数据类型称为结构(Structure)类型,它允许用户自己定义一种数据类型,并且把描述该类型的各种数据类型一一整合到其中。

相信很多人都玩过即时战略游戏(RTS),比如时下流行的魔兽争霸、曾红极一时的红色警戒。可是大家有没有考虑过,每个战斗单位都有它们各自的属性,电脑又是如何为我们造出来的部队分配内存的呢?
显然,部队的数量在程序执行之前是未知的。如果用数组来存储这些数据,那么就会造成游戏前期浪费内存(没有那么多的部队),游戏后期存储空间不够(战斗单位数大大增加)的情况。
那么使用数组的动态分配行不行呢?还是不行。因为部队的数量在程序执行的时候仍然是未知的。甚至连玩家自己也不知道要造多少战斗单位,只是根据战斗的实际情况来发展自己的势力。所以,这时候最合理的内存分配方式就是每造一个战斗单位分配一个内存空间。
然而,新问题又出现了:建造各单位的时间一般不可能是完全连续的,根据不同时刻程序运行的实际情况,每个单位分配到的内存空间也不是连续的了。空间不连续就意味着没有了方便的数组下标。我们就很难把这些零零散散的内存空间集中起来管理。
链表的出现改变了这个情况。它可以在程序运行时根据实际需要一个个分配堆内存空间,并且用它的指针可以把一系列的空间串联起来,就像一条链子一样。这样一来,我们就能够利用指针对整个链表进行管理了。

15 楼

好,不错,顶一下

16 楼

第11章内容节选:

我们已经说明,变量可以使用的范围是由变量的作用域决定。不同层次的变量的作用域,就好像大小不一的纸片。把它们堆叠起来,就会发生部分纸片被遮盖的情况。我们把这种变量作用域的遮盖情况称为变量的可见性(Visibility)。然而,当两张纸处于同一个层次,显然两者就不可能发生遮盖了。所以,如果我们在同一个层次中声明两个名字相同的变量,那么他们的作用域就不是遮盖,而是冲突了。因此,在某个函数的同一语法层次内不能声明多个名字相同的变量。

#include是一条编译预处理命令。什么叫编译预处理命令呢?我们知道,程序中的每一句语句会在运行的时候能得到体现。比如变量或函数的声明会创建一个变量或者函数,输出语句会在屏幕上输出字符。然而编译预处理命令却不会在运行时体现出来,因为它是写给编译器的信息,而不是程序中需要执行的语句。编译预处理命令不仅仅只有#include一条,在C++中,所有以#开头的命令都是编译预处理命令,比如#if、#else、#endif、#ifdef、#ifndef、#undef和#define等等。

调试主要分四个步骤和两种处理方式。我们把程序的编译和连接统称为编译阶段,把程序的运行和测试统称为运行阶段。在编译阶段发生的错误称为编译错误(Compile Error),在运行阶段发生的错误称为运行时错误(Runtime Error)。对于编译错误,我们通过检查并修正语法错误来解决;对于运行时错误,我们通过检查并修正语意(程序设计思想)错误来解决。

在介绍如何使用Debug工具之前,我们要介绍一下什么是断点(Breakpoint)。当程序运行到断点的时候,它会暂时停止运行后面的语句,供用户观察程序的运行情况,并等待用户发出指令。断点不是语句,而是附在某条语句上的一个标志。

17 楼


作为专业管理软件解决方案提供商,百年创业公司本着“创新成就梦想,可靠铸就辉煌”的产品开发

方针,推出了百年知识管理平台、百年协同办公平台、百年信息门户平台等一系列平台性管理系统。百年

采用的是最稳定的系统开发架钩技术——JZEE体系,支持多平台使用,能运行在各种操作系统上,与各类

大型数据库都能无缝组合。通过建立内部通讯和电子协作平台,帮助客户对机构相关的信息资源、知识资

源进行明晰化、系统化的管理,实现流程信息化和决策信息化,从而提高工作的规范性、高效性和完整性

,降低运营成本,提高客户的满意度,加快创新,增强应变能力。
    北京百年创业技术有限公司(简称:百年创业)是一家以管理软件研发推广为主发展方向,致力于知

识型信息化解决方案研究的高新技术企业。公司奉行“百川海纳,年轻无畏,创新永远,业精于勤”的市

场创业理念,力求软件产品长效保持高可用性的优秀品质,服务周全于“贴人、贴心、贴事、贴时”四个

方面,踏实的人才队伍与饱满的创新激情,力促百年创业的快速发展,自主知识产权产品的不断推陈出新

,为百年创业的用户和合作伙伴从周边地区逐步拓展到全国各地提供了保证.
    网站:www.e80.com.cn 联系邮箱:services@vip.sina.com 公司电话:010-51265611

18 楼

作为专业管理软件解决方案提供商,百年创业公司本着“创新成就梦想,可靠铸就辉煌”的产品开发

方针,推出了百年知识管理平台、百年协同办公平台、百年信息门户平台等一系列平台性管理系统。百年

采用的是最稳定的系统开发架钩技术——JZEE体系,支持多平台使用,能运行在各种操作系统上,与各类

大型数据库都能无缝组合。通过建立内部通讯和电子协作平台,帮助客户对机构相关的信息资源、知识资

源进行明晰化、系统化的管理,实现流程信息化和决策信息化,从而提高工作的规范性、高效性和完整性

,降低运营成本,提高客户的满意度,加快创新,增强应变能力。
    北京百年创业技术有限公司(简称:百年创业)是一家以管理软件研发推广为主发展方向,致力于知

识型信息化解决方案研究的高新技术企业。公司奉行“百川海纳,年轻无畏,创新永远,业精于勤”的市

场创业理念,力求软件产品长效保持高可用性的优秀品质,服务周全于“贴人、贴心、贴事、贴时”四个

方面,踏实的人才队伍与饱满的创新激情,力促百年创业的快速发展,自主知识产权产品的不断推陈出新

,为百年创业的用户和合作伙伴从周边地区逐步拓展到全国各地提供了保证.
    网站:www.e80.com.cn 联系邮箱:services@vip.sina.com 公司电话:010-51265611

19 楼

bs楼上的,顶楼主。

我的一些意见:
void main, #include "iostream.h", 没有using namespace std;会带坏newbie的。即便你选择的编译器支持这些,还是建议按c++标准编写教材。
3.1数据类型 表格内long double占用字节在vc6和vc7.1下都是8。
3.1变量的初始化,试试看(11页)2的结论我觉得"不确定的数值"更妥当。
btw.建议页眉或页角添加当前章节号。

20 楼

[quote]另考虑到pdf文件中的程序代码无法复制出来,而且手工输入有很麻烦,现在考虑过几天把代码文件都打包发上来,请需要的朋友记得关注一下。 
[/quote]

怎么可能?

难道说帖上去的是图片?

再次佩服一下楼主!


虽然用 void main 承接了以前的大多的书本,保留了一定的读者!

但是,偶建议还是一切以标准为写作的紧绳!


然后,建议做一个支持超连结的电子版的 -- 最好不是pdf中的超连结,建议用chm格式!

我来回复

您尚未登录,请登录后再回复。点此登录或注册