[ 键入文字 ] [ 键入文字 ] [ 键入文字 ]
开发者智慧 之 c 语言
程序设计
作者: TelesLi
思想有多远,就可以走多远
2010
2010-12-30
《开发者智慧之 c 语言程序设计》 TelesLi
2
《开发者智慧之 c 语言程序设计》 TelesLi
前言
过去我在学习软件开发的各方面知识的时候 , 总是感到迷惑不解 , 各种教材
和教程都好像是在和我捉迷藏似的 , 让我总是抓不住问题的本质所在 , 而且知识
介绍的相当隐晦 。 这样一来给读者 , 特别是入门不久的软件开发学习人员带来了
相当大的困难,这也是开发者智慧系列书籍撰写的必要因素。
本书一共包括两大部分 , 一是 c 语言入门基础 , 该部分囊括了 c 语言的基本
知识帮助读者直观地理清学习思路,让初学的读者轻松自然地踏入 c 语言的大
门 , 也将成为读者软件开发之旅的启程 。 二是 c 语言本质剖析 , 这部分将从计算
机本质层面来去学习 c 语言,让读者能够知其所以然,彻底地打破困惑的局面 。
《开发者智慧 c 语言程序设计 》 这本书是开发者智慧系列书籍之中的核心书
籍之一 , 首先它将带领我们走入软件开发的大门 , 其次更是为以后的各种技术学
习奠定坚实的基础, c 语言的地位及其在软件开发中的重要性是不言而喻的 , 有
些程序甚至竭尽一生也无法真正懂得 c 语言的本质 , 这是非常可悲的事情 , 这本
书将从本质是去避免此种局面的产生。
现有的大多教程大多滔滔不绝地讲述着理论概念 , 让本该充满刺激和欣喜的
程序设计变得枯燥乏味 , 本书将彻底扭转这种局面 , 本书主要采用实例教学的方
法来陪同大家公共学习,本书中所有的实例都是在 linux 系统中的 gcc 编译器下
编译通过而且运行正确的 , 但是书中代码都是采用截图的方式呈现的 , 这有两方
面的语言 , 一是以此证实书中代码的可靠性 , 也是说明书中代码都是本人一行行
敲出来的,希望读者看在本人辛苦的份上,能够认真学习,不会畏惧写程序 ; 二
是我不希望读者将我的代码粘贴复制 , 这样的学习作用微乎其微 , 我更希望读者
自己动手写代码。
在这里我感谢读者,因为是读者才让我开始撰写开发者智慧这系列书籍的
,
谢谢你们 , 希望可以帮助你 , 而且书中或多或少有些难以避免的错误存在 , 希望
读者可以和我交流,共同学习。
作者: TelesLi e_mail:telesli1013@gmail.com
QQ:407303939
171356970
个人技术主页: www.telesli.uqc.cn
http://telesli1013.blog.51cto.com
《开发者智慧之 c 语言程序设计》 TelesLi
3
《开发者智慧之 c 语言程序设计》 TelesLi
第一部分 c
c
c
c 语言入门基础篇
第一章 程序的基本概念
1.1
1.1
1.1
1.1 程序和编程语言
程序和编程语言
程序和编程语言
程序和编程语言
程序( program )告诉计算机该如何完成程序员给其的一项具体计算任务 , 这
里计算可以是数学计算 , 也可以是处理声音和图像的计算 , 计算机本来就是数字
电路组成的运算机器 , 当然可以进行数学计算 , 至于处理声音和图像 , 是这样的
,
他们在计算机内部也是通过数字来表示的 , 但是通过一些专门的硬件设备 , 又可
以将数字转换为我们所需要的声音和图像。
这似乎是在说程序是用来干什么的,我应该先说说什么是程序才对,那么什
么是程序呢?程序是由一系列的指令(
instruction
)组成的,指令就是让计算机
执行任务的命令,这种命令一般分为以下几种:输入( input ) 、输出( output ) 、
基本运算、测试和分支、循环。
既然说到程序 , 那么我们不得不说到编程语言 ( program language ) , 编程语
言分为低级语言( low-level-language )和高级语言( high-level-language ) 。机器
语言 (
machine language
) 和汇编语言 (
assembly language
) 是低级语言 , 直接用
指令编写程序 。 而像 C 、 C++ 、 Java 等语言属于高级语言 , 他们采用语句 ( statement
)
编写程序。
1.2
1.2
1.2
1.2
高级语言
高级语言
高级语言
高级语言
我们要看看为什么非要引入高级语言,有什么必要性?首先低级语言编写程
序极为困难,只有极少数的计算机专家才掌握,不仅不利于技术的普及推广 , 更
是严重的降低工作的效率 。 重要的是对于不同机器 , 低级语言的指令有着较大的
差别 , 给移植带来了相当大的困难 。 而
c
语言不同 ,
c
语言编写的程序需要通 过
c 语言编译器来现将其转换为低级的机器语言 , 然后执行 , 那么只有针对不同的
机器有一个专门 的 c 语言编译器就可以将同一或者稍加修改后 的 c 语言程序运行
在不同种类的机器上了,实现了程序的移植。说了这么多,大家可能有点晕 , 那
《开发者智慧之 c 语言程序设计》 TelesLi
4
《开发者智慧之 c 语言程序设计》 TelesLi
么我们来看一个例子。
Example 001 :
C 语言源程序
汇编语言源程序
这两段程序的作用是相同的 , 我们看到 c 语言和汇编语言指令绝非一一对应的 , 因此我们可
以将同一 c 语言程序转换为不同机器上的汇编程序 , 从而实现移植 。 我想这足够说明高级语
言引入的重要性了。
1.3
1.3
1.3
1.3 c
c
c
c 语言的历史和特点
语言的历史和特点
语言的历史和特点
语言的历史和特点
我没有忘记本书是一本 c 语言书籍 , 那么现在就让我们开始说说 c 语言吧 , 我们先看看 c
语言的历史 .
197 2 年 , 美国贝尔实验室 的 D.M.Ritchi e 在 B 语言的基础上最终设计出了一种新的语言
,
他取了 BCPL 的第二个字母作为这种语言的名字,这就是 C 语言。 (New B)
1978 年由美国电话电报公司 (AT&T) 贝尔实验室正式发表了C语言。同时 由
B.W.Kernighan 和 D.M.Ritchie 合著了著名的《 The C Programming Language 》一书。 (K &
R)
1990 年,国际标准化组织 ISO 接受了 89 ANSI C 为 ISO C 的标准( ISO9899-1990 ) ( 标
准 C) 目前流行的 C 语言编译系统大多是以 ANSI C (标准 C )为基础进行开发的,但不同版
《开发者智慧之 c 语言程序设计》 TelesLi
5
《开发者智慧之 c 语言程序设计》 TelesLi
本的 C 编译系统所实现的语言功能和语法规则有略有差别。
这不是历史书,所以历史我就简要的简绍这一点,如果你对此非常感兴趣,我非常愿意
和你分享和交流,当然我为此感到荣幸,下面我们罗列一下 c 语言的特点:
低级的高级语言、小型语言、包容性语言、语言简洁、紧凑,使用方便、灵活 、高效性、
可移植性 、低级的编译器、可能难以理解、可能难以修改。
1.4
1.4
1.4
1.4 优秀的
优秀的
优秀的
优秀的 c
c
c
c 语言编译器
语言编译器
语言编译器
语言编译器
一、 DOS 平台下 ,Borland 公司的 Turbo C 2.0
Turbo C 2.0 是该公司 1989 年出版的 , 功能很强大 .
优点
:
DOS 平台下的很优秀的编译器 , 为什么强调是 DOS 平台 , 顾名思义 , 用它所生成的程序可以
在 纯 DO S 环境下跑 .. 例如你机器中病毒 ,WINDOW S 进不去了 , 现在 用 DO S 启动盘进 入 DO S
系统 , 就可运行你自己编写的程序 . 如果你再牛逼一点 , 平常用 TC 编写个杀毒的程序 , 到关键
时刻可是能发挥巨大作用的 .
缺点
:
1. 由于是 1989 年就出来了 , 所以对最新的 C 语言标准不能完全支持 , 会养成恶劣的编程习
惯 .( 例如 , 经常不包 含 stdio. h 头文件 , 在未定义和声明前使用函数 , 定义函数时参数不加类型等
等 )
2. 无法支持中文 . 把这个问题归咎于 TC 是不公平的 , 不是 TC 不支持中文 , 而是 DOS 不支持
中文 . 如果你把你 TC 编写的程序运行在中文 DOS 环境中 , 例如 UCDOS, 那么发现中文全 部
OK!.
3. 很多 TC 专门的函数 ( 造成了代码移植困 难 ), 这很难说是优点还是缺点 .
二 、 linux 平台下的 GCC(MinGW 2.95)
由 GNU 之父 Stallman 所开发的 linux 下的编译器,全称为 GNU Compiler Collection , 目
前可以编译的语言包括: C, C++, Objective-C, Fortran, Java, and Ada, 可以在其官方页面找到
更加详细的信息
GC C 是一个原本用 于 Unix-lik e 系统下编程的编译器 。 不过 , 现 在 GC C 也有了许 多 Win3 2
下的移植版本 (MinGW) 。
优点
:
1. 完全支持 C 语言最新标准 , 能养成良好编程风格 .