关于我们
书单推荐
新书推荐
|
C语言其实很简单
《C语言其实很简单》是为零基础的C语言初学者量身定做的,特别适合非计算机专业的读者自学C语言。本书尽量避免使用专业术语,利用大量贴近生活的实例,用通俗易懂的方式讲解C语言的基本概念和基本编程方法,并提供许多独特的小窍门、小技巧、小口诀等,使读者在轻松的环境中花费很少的时间就能掌握C语言,并应用自如。《C语言其实很简单》兼顾了全国计算机等级考试二级C语言程序设计考试大纲的相关要求,可以作为等级考试辅导教材和培训班教材使用。对于大、中专院校师生、各类C语言应试备考人员、广大C语言编程爱好者,都具有很好的学习参考价值。
最接地气的C语言图书,拥有3个最显著的特点,那就是——不用啃,不用啃,真的不用啃!
为零基础的初学者量身定做,让读者在十分轻松的环境中花费最少的时间掌握C语言。通过本书学习C语言,读者会很快抓住知识的“根”,因而事半功倍!
你是否以前尝试学习过C语言但又放弃了,或者是学习得一知半解,或者还是一位对C语言“一窍不通”的初学者?那么本书正适合你!
C语言功能强大,内容繁多,最容易让初学者摸不到“门”。因此,本书并不像大多专业C语言教科书那样“板起面孔教人”,不罗列知识点,不使用专业术语来云山雾罩地分析问题,而是引用大量贴近生活的实例,用通俗易懂的方式与读者交流。同时,本书还提供了许多独特的小窍门、小技巧、小口诀、顺口溜等,用句流行话说,那是比较“接地气”的。目的只有一个:让不是科班出身的零基础初学者在轻松的环境中花费很少的时间来掌握C语言。 “大凡是讲编程的书,一定不好啃。”这恐怕是许多初学者和正在应对各种C语言考试的读者在学习道路上困惑的心声。笔者这里要告诉读者的是,本书拥有3个最显著的特点,那就是——不用啃,不用啃,真的不用啃!笔者已在C语言教学一线从教多年,深谙初学者的学习弱点。为此,从初学者角度出发,本书精炼了C语言教学的内容,在保证知识体系完整的基础上省去了许多无关紧要又晦涩难懂的专业知识,使本书内容既不过于复杂,又能满足一般编程的实际需要,更主要的是可以满足大多C语言考试(如全国计算机等级考试)的要求。尤其针对从一线教学中搜集到的许多初学者普遍认为的学习困难和容易误解的知识点,本书都用通俗易懂的方式做了大量的分析解读,尽最大努力帮助读者理清头绪、澄清概念,将对知识的误解消弭于无形。因此通过本书来学习C语言,读者会很快抓住知识的“根”,因而能达到事半功倍的效果! 学好C语言,方法是关键。本书会教给读者许多独特、有效的学习方法,但在这里笔者希望再强调一点:不少读者像学习英语一样来学习C语言,他们花大把的时间用来背诵程序,认为解决一个问题只对应着一个固定的程序:“熟读唐诗三百首,不会吟诗也会吟”,我“熟背程序三百篇,焉能还得不会编?”,这是大错特错的!因为实际问题千变万化,背诵的程序和实际问题不可能完全一样,因此纵使背下上千个程序,遇到实际问题还是难以下手。程序的运行是动态的,解决同一个问题不同的人编出的程序也不会完全相同。因此,学习程序设计实际是学习程序设计的思路和方法,完全没有必要背程序。而初学者的这种错误认识,究根溯源还是因为“照本宣科”的教科书。很多C语言的教科书,其中的程序例子确实很像“英文小短文”,一个问题对应着一个程序,并且在静态的纸上讲出程序运行的动态过程着实不易。为此,本书为典型程序例子都配有内存空间及变量值变化的插图,这些插图是比较“另类”的,以清晰反映程序的运行过程和变量值的变化为初衷,而不是只截个图给出程序的运行结果。这使读者可以更多地关注程序运行的过程,而不是只关注程序运行的结果。在“运动”中掌握程序,这也算是本书与大众化教科书所不同的另一个特点吧。 如何能掌握程序设计的方法,在遇到五花八门的实际问题时都能应对自如,编出对应的程序?不要和我讲“融会贯通”“灵活运用”,那是颇有经验的编程高手们的事,而本书所关注的是初学者。为此,本书提供了许多编程“套路”,从典型的程序例子中理出“套路”,就能应对一大批的实际问题。学习武术有套路,没想到学习编程也有套路吧!用套路学习编程,让初学者迅速掌握编程方法,很快就能具有解决实际问题的编程能力,这也算是本书与大众化教科书所不同的又一个特点。 本书还抛砖引玉地介绍了数据结构、软件设计、数据库等最基本的知识,使读者在C语言学习之后向更高层次迈进。这些内容兼顾了全国计算机等级考试二级《公共基础》的相关考点。由于公共基础的考试内容对各类科目的二级考试都是相同的,不只局限于二级C语言,因此它们也可作为参加各类科目二级考试的读者备考《公共基础》的复习参考资料。 在本书最后还配有索引,“索引在手,遗忘不愁”。纵使有些学过的知识忘记了,也可以通过索引很快地找回来并复习巩固。本书索引既可以对C语言的基本概念进行速查,也可以对C语言的语句、关键字、运算符进行速查,还可以对基本的程序设计方法进行速查。 希望读者读过本书后,真正能把C语言用起来,让它成为我们身边的好朋友、好伙伴。倘能达到这个目的,笔者就感到心满意足了。 本书的独特栏目 在本书正文中,将穿插有以下栏目: 【脚下留心】针对初学者最容易犯的错误,或是在学习过程中,在编程实践时最应该引起注意的地方,都用“脚下留心”给出强调。零基础的初学者,紧紧抓住这些方面,就能在学习和编程实践中减少或避免很多不必要的弯路,为学习节省大量的时间。如果你正在应试,更要注意,这些内容往往都是高频出题但稍不留神就要丢分的。 脚下留心 忘记分号是初学者最易犯的错误之一。每条语句后的分号“;”千万别忘掉! 【高手进阶】是进一步提高水平的知识,一般比较深入或有些难度。“高手进阶”中的内容读者都可以根据兴趣选择阅读,跳过这些内容对后续章节知识体系的连贯性和整个C语言的学习都不会有影响。 高手进阶 数字字符与对应整数的二进制只有2位之差,例如字符'5'(即53)的二进制为0011 0101,整数5的二进制为0000 0101。前者第4、5位均为1(最右端为第0位),后者这两位均为0,而两者后4位是一致的0101,都表示十进制的5。还有,为什么'A'的ASCII码是65,'a'的ASCII码是97呢?作为字母表的第一个字母,为何大写从5开始,小写从7开始,似乎都不太“整”。把它们转换为二进制,答案立显!65的二进制是0100 0001,97的二进制是0110 0001,后5位0 0001都表示十进制的1,说明'A'、'a'是第一个字母。试着把字母表的第二个字母'B'或'b'的ASCII码转换为二进制,你会发现后5位都表示十进制的2。 【窍门秘笈】学习重在方法,方法得当,既可以节省学习时间,又能加深印象。“窍门秘笈”是学习方法的汇总,或是学习的小技巧、小窍门,或是概念的总结,还有轻松记忆知识点的顺口溜。我们的编程套路也将在窍门秘笈中给出。对于初学者,这些都是快速掌握C语言的捷径。 窍门秘笈 以变量类型为准的自动类型转换规则可总结为口诀如下: 变量定空间,塑身再搬迁。 若为空间窄,舍点也情愿。 【小游戏】编程不只是枯燥的工作,它也能充满乐趣。寓学于乐,寓编于乐,倘能达到这个境界,俨然不就是一位高手了吗?本书在正文中还穿插了一些小游戏,映衬相关的知识点,让读者在游戏中掌握编程! 小游戏 现有一架天平和4种重量的砝码,分别重8克、4克、2克、1克,每种重量的砝码只有一个。现要用此天平称重13克的物体,物体放在左盘上,如图1-20所示。请问在右盘上应该怎样选放4种砝码,才能使天平左右两盘重量相同天平平衡呢? 程序示例和习题 【程序示例】学习编程,程序例子是必不可少的。对于程序示例,本书都精心做了安排。在突出知识点的基础上,本书程序示例所遵循的原则是:或者让趣味指数都在三星 ★★★以上,旨在提高读者的编程兴趣;或者让难度都在一星★以下,旨在简单明了、一针见血地说明问题。 【随讲随练】是本书的习题,这些都是针对大多C语言考试的高频考点精心设计的,其中一部分为全国计算机等级考试二级C语言程序设计的历年考试真题或无纸化考试改革后的题库真题,供读者巩固复习之用。本书习题的特色是“随讲随练”,每道题都安排在相应知识点讲解的正文之后,并在题后直接给出了答案。这避免了在章后统一安排习题所带来的向前查阅知识、向后查看答案的弊端,减少了读者反复翻书的无用功。读者可一气呵成,通读本书,就能有学有练。 【小试牛刀】这些不作为正式习题,而主要是思考题的性质,也将穿插在相应知识点的讲解中。读者利用刚刚所学知识可以马上试一试身手,或是巩固所学知识,或是举一反三,每试一次“牛刀”,都是一次能力的提高。 本书的卡通形象 在本书中,还有两个卡通形象,将陪伴读者整个的学习过程: 【小博士形象】是始终陪伴在我们身边的老师。或是学习的小贴示,或是需要注意的问题,“小博士”都会侃侃道来。这些都是比较关键的内容,请读者一定悉心体会。 用空格缩进无可厚非,但用Tab键而不用一连串的空格,是更简便的做法。Tab(又称跳格、水平制表)和空格是两种不同的字符,但对于在程序中起的“空白间隔”作用是相同的。我们可以随意使用空格或Tab甚至空格和Tab的组合来作为程序中元素间的“空白间隔”。 【大零蛋形象】它是初学者的代言人,时不时地“冒出来”,或是提出初学者的常见疑问,或是以简单通俗的方式表达对知识的领悟。“零”就是零基础的意思,“我对C语言一窍不通,将伴随您一起从零开始学习!”。有大零蛋在身边,零基础的读者非但不必畏惧学习C语言,反而可以从中获得乐趣。随读者一起,随着学习的深入,“大零蛋”的水平也会逐步提高,由一窍不通的“大零蛋”最终摇身变为满腹经纶的“大灵蛋”!零基础的初学者们,请跟随它一起成长,相信读过本书之后,你也会由零基础的菜鸟摇身变成一位编程高手的。 我明白了:printf函数的输出就是把" "中的内容原封不动地“抄”在屏幕上就可以了,但其中若遇到带%的“警察”则不要照原样抄,而要用后面的数据替换它。注意替换时要按照%所规定的“手势”,按相应格式替换。 有时候,大零蛋与小博士还会对起话来: 致谢 感谢天津大学精密仪器与光电子工程学院的冯远明教授和课题组全体成员对本书写作的大力支持,没有他们的帮助和支持,不可能写出这样一部作品。特别感谢学院的何峰老师对C语言的知识介绍提供了许多有益的素材,这使很多枯燥乏味的概念讲解变得更为生动、有趣。 感谢赵佳为本书绘制或加工制作了全部精美的插图,这使本书更加妙趣横生,尤其是她设计的小博士和大零蛋形象,别有一番特色。 由于笔者水平有限,错谬之处在所难免,恳请专家和广大读者不吝赐教、批评指正。笔者的E-mail是:zhni2011@163.com,QQ号码是:1307573198。
张宁,南开大学生物信息学博士和博士后,现任职于天津大学精密仪器与光电子工程学院,主要从事生物医学信息相关的数据分析、数据库、软件开发等工作。在C语言一线教学多年,精通C语言、Visual Basic、Windows编程等,有19年编程和软件开发的实践经验,在国内外高水平刊物发表论文50余篇,多次在各类编程竞赛和讲课大赛中获奖。著有《老兵新传:VisualBasic核心编程及通用模块开发》(清华大学出版社)等。
第1章 从这里爱上编程——程序设计和C语言概述1
1.1 水面下的冰山——计算机程序和计算机语言1 1.2 第一次亲密接触——纵览C语言3 1.2.1 一窥程序之美——C语言程序的结构3 1.2.2 循序渐进,快乐学习——语句的光和影4 1.2.3 程序里的说明书——注释6 1.2.4 免费翻译服务——编译和链接8 1.3 先其利器——Visual C++ 6.0上机指导10 1.4 天平称物问题——进制转换15 1.4.1 这些进制是哪来的——二进制、八进制、十六进制15 1.4.2 你还应知道这几招——不同进制之间的转换15 第2章 色彩斑斓的积木——数据类型、运算符和表达式21 2.1 标识符、常量和变量21 2.1.1 给我起个名字吧——标识符21 2.1.2 有一说一——常量22 2.1.3 程序里的储物盒——变量23 2.2 追根“数”源——细说数据类型25 2.2.1 整型数据用C语言怎样说25 2.2.2 实型数据用C语言怎样说28 2.2.3 字符型数据用C语言怎样说32 2.2.4 字符串型常量用C语言怎样说36 2.3 诸算达人——运算符和表达式39 2.3.1 再谈加减乘除——算术运算39 2.3.2 走,给我进去!——赋值45 2.3.3 加加和减减——自增、自减48 2.3.4 神秘的倒数第一——逗号运算50 2.4 位在我心中——位运算52 2.4.1 按位与and52 2.4.2 按位或 |52 2.4.3 按位异或 ^53 2.4.4 按位求反 ~54 2.4.5 按位左移 <<54 2.4.6 按位右移 >>54 2.4.7 位运算的复合赋值55 第3章 一战到底——顺序结构56 3.1 整装待发——C语言中的语句56 3.2 别急,一个一个来——单个字符的输出与输入57 3.2.1 拿好了钥匙进仓库——输出与输入概述57 3.2.2 向屏幕开火——单个字符的输出58 3.2.3 饭要一口一口地吃——单个字符的输入59 3.3 更过瘾的输出与输入——格式输出与输入62 3.3.1 我有私人警察——格式输出函数printf62 3.3.2 我是快乐的快递员——格式输入函数scanf68 3.4 常用系统数学函数73 3.5 是不是有点专业级软件的意思了——顺序结构程序举例74 第4章 程序也能跑捷径——选择结构76 4.1 计算机的判断力——关系运算和逻辑运算76 4.1.1 判断真假的符号——关系运算符和逻辑运算符76 4.1.2 火眼金睛断真假——关系表达式和逻辑表达式78 4.1.3 挑剔的“吗+否则”——条件运算82 4.2 如果——if语句83 4.2.1 教室停电就不上课了——if语句的基本形式83 4.2.2 一朝天子一朝臣——if语句的完整形式88 4.2.3 如果里的如果——if语句的嵌套94 4.3 多路开关——switch语句98 4.3.1 司令的锦囊——switch语句的一般形式99 4.3.2 我爱读小说——switch语句的执行过程100 4.4 goto去哪?想去哪就去哪!——goto语句105 第5章 不必亲手愚公移山——循环结构107 5.1 看好了情况再下手——while语句107 5.2 先下手干了再说——do...while语句110 5.3 我勤奋?我劳动?我光荣——for语句112 5.3.1 按劳分配——for语句的基本形式112 5.3.2 劳动者的工作模式——for语句的常见应用114 5.3.3 有人接班我偷懒——表达式的变化119 5.4 循环里的循环——循环的嵌套122 5.5 埋头干活中的抬头看路——continue语句和break语句125 5.5.1 来源于生活——continue语句和break语句概述125 5.5.2 下一个上——continue语句127 5.5.3 前方施工请绕行——break语句129 5.6 轻车熟路——程序控制结构小结和综合举例130 第6章 把平房升级为高楼大厦——数组137 6.1 直线升级——一维数组137 6.1.1 一维数组的定义和引用137 6.1.2 一维数组的初始化(定义时赋初值)144 6.1.3 一维数组的应用147 6.2 找东西和整理东西的艺术——查找和排序152 6.2.1 这个经常有——查找技术152 6.2.2 混乱之治——排序技术156 6.3 立体升级——二维数组163 6.3.1 二维数组的定义和引用163 6.3.2 二维数组在内存中的存储形式164 6.3.3 二维数组的初始化(定义时赋初值)164 6.3.4 二维数组可被看做是由一维数组组成的169 第7章 蒙着面干活——函数171 7.1 从讲故事开始——函数概述171 7.2 该是学写多段文章的时候了——函数定义和调用173 7.2.1 自己创造函数——函数的定义173 7.2.2 把自己写的“段落”用起来——函数的调用175 7.2.3 你歇着,我劳动——函数调用的过程177 7.2.4 做好的菜端出来——函数的返回值179 7.3 喂!听到了吗——函数的声明185 7.3.1 函数声明的形式186 7.3.2 函数声明的位置187 7.4 函数的嵌套调用和递归调用189 7.4.1 函数里的函数——函数的嵌套调用189 7.4.2 克隆函数——函数的递归调用190 7.5 变量的时空范围——变量的作用域及存储类别196 7.5.1 空间范围——局部变量和全局变量196 7.5.2 时间范围——变量的存储类别202 7.5.3 时空统一——局部变量和全局变量的存储类别206 7.6 给编译做点儿手脚——预编译处理207 7.6.1 潜伏代号——宏定义207 7.6.2 程序的自动复制粘贴——文件包含211 7.6.3 早知当初,何必如此——条件编译212 第8章 璀璨的星星——指针213 8.1 内存里的门牌号——地址和指针的基本概念213 8.2 别拿地址不当值——指针变量214 8.2.1 找张字条记地址——定义指针变量215 8.2.2 这可不是说我——指针变量的基类型217 8.2.3 把地址记下来——为指针变量赋值218 8.2.4 指针运算俩兄弟——两个运算符220 8.3 原来咱俩是一个朋友圈的——数组与指针223 8.3.1 下一站到哪了——指针变量的运算223 8.3.2 我原来是指针变量——一维数组的指针227 8.3.3 我是你的上级——二维数组的指针和行指针232 8.3.4 来自星星的数组——指针数组和指针的指针238 8.3.5 指针三家人——指针小结242 8.4 有了地址也可以找我帮忙啊——函数与指针244 8.4.1 地址给我,我来帮忙——指针变量做函数参数244 8.4.2 吃葡萄不抓葡萄粒,抓住葡萄的把柄——数组做函数参数249 8.4.3 指针私房菜——返回地址值的函数256 8.4.4 函数遥控器——函数的指针256 8.5 一两拨千斤——字符串的指针259 8.5.1 字符串的存储259 8.5.2 字符串的输出和输入263 8.5.3 字符串处理技术267 8.6 另类运行程序——main函数的参数286 第9章 我的类型我做主——结构体与共用体289 9.1 多功能收纳盒——结构体289 9.1.1 绘制收纳盒设计图——定义结构体类型289 9.1.2 收纳盒制作——使用结构体变量290 9.1.3 一本通讯录——结构体类型的数组294 9.1.4 结构体的弓箭手——结构指针变量296 9.1.5 重口味与轻口味——结构体类型数据做函数参数297 9.1.6 大收纳盒里套小收纳盒——结构体类型的嵌套301 9.2 公路桥洞——共用体302 9.3 给类型起个“绰号”——类型定义符typedef304 9.4 内存空间的批发和零售——动态存储分配306 9.5 电影院里的座次问题——链表310 9.5.1 链表的建立和遍历311 9.5.2 链表结点的插入和删除317 9.5.3 链表的高级兄弟——高级链表简介320 第10章 得文件者得天下——文件322 10.1 一针hold住全文件——文件指针322 10.1.1 与文件牵手——文件的打开322 10.1.2 与文件分手——文件的关闭326 10.1.3 文件操作流程326 10.2 搬运流水线——文件的读写327 10.2.1 手指和笔尖——文件位置指针327 10.2.2 文本文件的读写328 10.2.3 二进制文件的读写332 10.3 这是手工活儿——文件的随机读写337 第11章 编程的经验财富——算法与数据结构基础345 11.1 “一招鲜”——算法345 11.1.1 何谓算法345 11.1.2 算法的控制结构346 11.1.3 算法复杂度346 11.2 数据结构概述347 11.2.1 何谓数据结构347 11.2.2 数据结构的类型348 11.3 早出晚归的勤快人——栈(堆栈)349 11.3.1 何谓栈(堆栈)349 11.3.2 堆栈的基本运算350 11.3.3 堆栈的逻辑结构和存储结构350 11.3.4 堆栈的应用351 11.4 先来后到——队列352 11.4.1 何谓队列352 11.4.2 队列的逻辑结构和存储结构352 11.4.3 循环队列的基本运算353 11.5 倒置的树——树与二叉树354 11.5.1 树和树的基本概念354 11.5.2 二叉树的基本概念355 11.5.3 二叉树的存储结构356 11.5.4 二叉树的遍历356 第12章 程林高手武功秘籍——软件开发基础360 12.1 编程之道——程序设计方法360 12.1.1 编程Style——程序设计风格360 12.1.2 组装零件——结构化程序设计361 12.1.3 这个feel,爽!——面向对象程序设计361 12.2 不懂门道看热闹,看完咱也吊一吊——软件工程基础364 12.2.1 何谓软件364 12.2.2 软件生命周期365 12.2.3 需求分析及其方法366 12.2.4 软件设计及其方法367 12.2.5 我是来找茬的——软件测试369 12.2.6 谁来改正——程序的调试371 12.3 信息时代是怎样炼成的——数据库和数据库设计初步371 12.3.1 关系型数据库及相关概念372 12.3.2 关系代数374 12.3.3 数据库系统378 12.3.4 数据库设计者眼里的世界——E-R模型380 12.3.5 数据库设计381 附录一 常用字符ASCII码对照表383 附录二 C语言中的关键字384 附录三 C语言运算符的优先级和结合性385 索引386 参考文献 391
第8章 璀璨的星星——指针
当你从网页复制一段文本,再到你想要的地方随意粘贴的时候;当你在Excel表格中插入几行数据的时候;当你不知怎的突然遭到被弹出“xx程序错误,单击确定立即关闭”的时候;当你用游戏修改软件锁定生命值,让游戏中的角色成为“金刚不死之躯”的时候……知道吗,这些都与指针息息相关! 指针可是程序设计的一个强大工具,使用指针,不仅可以表示很多重要的数据结构、高效地使用数组、方便地处理字符串、另类地调用函数……而且可以直接访问内存,赋予我们广大的自由度和“至高无上”的权利!编程高手们常说“无指针,不自由”,就是这个道理。因此指针也是学习C语言最重要的一环,可以说如果不会使用指针编程,就不是真正掌握了C语言。 有人说指针也是学习C语言最困难的一部分,但本书持相反意见。只要学习方法得当,实际上指针也并没有听起来那么难学!请读者不要畏惧,在本章我们会教给你很多技巧和方法,一步步带领大家攻克指针的壁垒。让我们现在就出发,一起体会这一次精彩、充满刺激挑战和富有乐趣的指针之旅!
你还可能感兴趣
我要评论
|