精通C语言程序设计2-C语言基础_第1页
精通C语言程序设计2-C语言基础_第2页
精通C语言程序设计2-C语言基础_第3页
精通C语言程序设计2-C语言基础_第4页
精通C语言程序设计2-C语言基础_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精通C语言程序设计2-C语言基础 第一个C C语言输入法 C语言编译器 C语言文件概念 C C语言的空白符目录 我们有两种方式从计算机获得信息:一是看屏幕上的文字、图片、视频等,二是听从喇叭发出来的声音。让喇叭发出声音目前还比较麻烦,我们先来看看如何在屏幕上显示一些文字吧。 在屏幕上显示文字非常简单,只需要一个语句,例如,下面的代码会让屏幕显示出“helloworld!”: puts(helloworld!); 这里有一个生疏的词汇puts,用来让计算机在屏幕上显示文字。语句示例 更加专业的称呼: 在屏幕上显示文字叫做输出(Output); 每个文字都是一个字符(Character); 多个字

2、符组合起来,就是一个字符序列,叫做字符串(String)。 puts 是 output string 的缩写,意思是“输出字符串”。语句解析 在C语言中,字符串需要用双引号 包围起来,helloworld!什么也不是,计算机不认识它,helloworld!才是字符串。 Puts 在输出字符串的时候,需要将字符串放在( )内。 在汉语和英语中,分别使用。和.表示一句话的结束,而在C语言中,使用;表示一个语句的结束。puts(helloworld!)表达了完整的意思,是一个完整的语句,需要在最后加上;,表示当前语句结束了。语句解析 总结起来,上面的语句可以分为三个部分: puts( )命令计算机输

3、出字符串; helloworld!是要输出的内容; ;表示语句结束。语句解析 puts 可以在显示器上输出内容,但是仅有 puts 是不够的,程序不能运行,还需要添加其他代码,构成一个完整的框架。完整的程序如下: #include int main三 puts(helloworld!); return 0; C程序框架 第 13 行、第 56 行是固定的,所有C语言源代码都必须有这几行。你暂时不需要理解它们是什么意思,反正有这个就是了,以后会慢慢讲解。 但是请记住,今后我们写的所有类似 puts 这样的语句,都必须放在 之间才有效。 上面的代码,看起来枯燥无趣,不好区分各个语句,我们不妨来给它

4、们加上颜色和行号,如下所示:C程序框架 #include int main三 puts(helloworld!); return 0; 这就是我们的第一个C语言程序,它非常简单,带领我们进入了C语言的大门。C程序框架 计算机起源于美国,C语言、C+、Java、JavaScript 等很多流行的编程语言都是美国人发明的,所以在编写代码的时候必须使用英文半角输入法,尤其是标点符号,初学者一定要引起注意。 例如,上节我们使用 puts 语句在显示器上输出内容: puts(helloworld!); 这里的括号、双引号、分号都必须是英文符号,而且是半角的。下图演示了如何将搜狗输入法切换到英文半角状态:

5、输入法 中文分号;和英文分号;; 中文逗号,和英文逗号,; 中文冒号:和英文冒号:; 中文括号讲义和英文括号三; 中文问号?和英文问号?; 中文单引号和英文单引号 ; 中文双引号“ ”和英文双引号 。 初学者请务必注意标点符号的问题,它们在视觉上的差别很小,一旦将英文符号写成中文符号就会导致错误,而且往往不容易发现。相似的中英文标点符号 全角和半角的区别主要在于除汉字以外的其它字符,比如标点符号、英文字母、阿拉伯数字等,全角字符和半角字符所占用的位置的大小不同。 在计算机屏幕上,一个汉字要占两个英文字符的位置,人们把一个英文字符所占的位置称为“半角”,相对地把一个汉字所占的位置称为“全角”。全

6、角和半角输入法的区别 标点符号、英文字母、阿拉伯数字等这些字符不同于汉字,在半角状态它们被作为英文字符处理,而在全角状态作为中文字符处理,请看下面的例子。 半角输入: helloworld!!Hello C,I like! 全角输入: helloworld!!,!全角和半角输入法的区别 我们知道,在编程时要使用英文半角输入法。为了加强练习,出个选择题,请大家判断下面哪一种描述是正确的: A) 编程的时候不用在意中英文符号的区别。 B) 在源代码的任何地方都不能出现中文汉字、字符等。 C) 感叹号没有中文和英文的区别。 D) 编程时,使用的英文引号,也有左引号和右引号的区别。 E) 中文和英文模

7、式下的制表符(键盘tab键)输入效果一致。复习题 我们平时所说的程序,是指双击后就可以直接运行的程序,这样的程序被称为可执行程序(Executable Program)。在 Windows 下,可执行程序的后缀有 .exe 和 (其中 .exe 比较常见);在类 UNIX 系统(Linux、Mac OS 等)下,可执行程序没有特定的后缀,系统根据文件的头部信息来判断是否是可执行程序。 可执行程序的内部是一系列计算机指令和数据的集合,它们都是二进制形式的,CPU 可以直接识别,毫无障碍;但是对于程序员,它们非常晦涩,难以记忆和使用。C语言语言编译器编译器 例如,在屏幕上输出“VIP会员”,C语言

8、的写法为: puts(VIP会员); 二进制的写法为: 你感受一下,直接使用二进制是不是想撞墙,是不是受到一吨重的伤害? 在计算机发展的初期,程序员就是使用这样的二进在计算机发展的初期,程序员就是使用这样的二进制指令来编写程序的,那个拓荒的年代还没有编程制指令来编写程序的,那个拓荒的年代还没有编程语言。语言。二进制编程示例 直接使用二进制指令编程对程序员来说简直是噩梦,尤其是当程序比较大的时候,不但编写麻烦,需要频繁查询指令手册,而且除错会异常苦恼,要直接面对一堆二进制数据,让人眼花缭乱。另外,用二进制指令编程步骤繁琐,要考虑各种边界情况和底层问题,开发效率十分低下。 这就倒逼程序员开发出了编

9、程语言,提高自己的生产力,例如汇编、C语言、C+、Java、Python、Go语言等,都是在逐步提高开发效率。至此,编程终于不再是只有极客能做的事情了,不了解计算机的读者经过一定的训练也可以编写出有模有样的程序。二进制编程示例 C语言代码由固定的词汇按照固定的格式组织起来,简单直观,程序员容易识别和理解,但是对于CPU,C语言代码就是天书,根本不认识,CPU只认识几百个二进制形式的指令。这就需要一个工具,将C语言代码转换成CPU能够识别的二进制指令,也就是将代码加工成 .exe 程序;这个工具是一个特殊的软件,叫做编译器(编译器(Compiler)。 编译器能够识别代码中的词汇、句子以及各种特

10、定的格式,并将他们转换成计算机能够识别的二进制形式,这个过程称为编译(编译(Compile)。什么是编译器 编译也可以理解为“翻译”,类似于将中文翻译成英文、将英文翻译成象形文字,它是一个复杂的过程,大致包括词法分析、语法分析、语义分析、性能优化、生成可执行文件五个步骤,期间涉及到复杂的算法和硬件架构。对于学计算机或者软件的大学生,“编译原理”是一门专业课程,有兴趣的读者请自行阅读编译原理一书,这里我们不再展开讲解。 注意:不了解编译原理并不影响我们学习注意:不了解编译原理并不影响我们学习C语言,我语言,我也不建议初学者去钻研编译原理,贪多嚼不烂,不也不建议初学者去钻研编译原理,贪多嚼不烂,不

11、要把自己绕进去。要把自己绕进去。什么是编译器 C语言的编译器有很多种,不同的平台下有不同的编译器,例如: Windows 下常用的是微软开发的 ,它被集成在 Visual Studio 或 Visual C+ 中,一般不单独使用; Linux 下常用的是 GUN 组织开发的 GCC,很多 Linux 发行版都自带 GCC; Mac 下常用的是 LLVM/Clang,它被集成在 Xcode 中(Xcode 以前集成的是 GCC,后来由于 GCC 的不配合才改为 LLVM/Clang,LLVM/Clang 的性能比 GCC 更加强大)。常见编译器 你的代码语法正确与否,编译器说了才算,我们学习C语

12、言,从某种意义上说就是学习如何使用编译器,让编译器生成可执行程序(例如 Windows 下的 .exe 程序)。 编译器可以 100% 保证你的代码从语法上讲是正确的,因为哪怕有一点小小的错误,编译也不能通过,编译器会告诉你哪里错了,便于你的更改。编译器功能实际开发中,除了编译器是必须的工具,我们往往还需要很多其他辅助软件,例如: 编辑器:用来编写代码,并且给代码着色,以方便阅读; 代码提示器:输入部分代码,即可提示全部代码,加速代码的编写过程; 调试器:观察程序的每一个运行步骤,发现程序的逻辑错误; 项目管理工具:对程序涉及到的所有资源进行管理,包括源文件、图片、视频、第三方库等; 漂亮的界

13、面:各种按钮、面板、菜单、窗口等控件整齐排布,操作更方便。什么是集成开发环境 这些工具通常被打包在一起,统一发布和安装,例如 Visual Studio、Dev C+、Xcode、C-Free、Code:Blocks 等,它们统称为集成开发环境(IDE,Integrated Development Environment)。 集成集成开发环境就是一系列开发工具的组合套装。开发环境就是一系列开发工具的组合套装。这就好比台式机,一个台式机的核心部件是主机,有了主机就能独立工作了,但是我们在购买台式机时,往往还要附带上显示器、键盘、鼠标、U盘、摄像头等外围设备,因为只有主机太不方便了,必须有外设才能

14、玩的爽。 集成开发环境也是这个道理,只有编译器不方便,所以还要增加其他的辅助工具。什么是集成开发环境 C语言的集成开发环境有很多种,尤其是 Windows 下,多如牛毛,初学者往往不知道该如何选择。 当然,你不用全部都了解,如果你使用 Windows,那么请忽略 Mac OS 和 Linux;如果你使用 Mac OS,那么请忽略 Windows 和 Linux。选择集成开发环境 上节我们介绍了编译器和 IDE 的概念,大家肯定希望赶紧实践一下,用 IDE 真正地运行一段C语言代码来看看效果,这样能够更快地获得成就感。 但是,使用 IDE 的过程中会涉及到一些与编程有关的概念,这些概念如果不提前

15、了解,即使能够运行出程序来,也是雾里看花,知其然不知其所以然。本节的目标就是让大家对这些概念有一个简单的了解。 在开发软件的过程中,我们需要将编写好的代码代码(Code)保存到一个文件中,这样代码才不会丢失,才能够被编译器找到,才能最终变成可执行文件。这种用来保存代码的文件就叫做源文件(源文件(Source File)。 每种编程语言的源文件都有特定的后缀,以方便被编译器识别,被程序员理解。源文件后缀大都根据编程语言本身的名字来命名,例如: C语言源文件的后缀是.c; C+语言(C Plus Plus)源文件的后缀是.cpp; Java 源文件的后缀是.java; Python 源文件的后缀是

16、.py; JavaScript 源文件后置是.js1) 源文件(Source File) 源文件其实就是纯文本文件源文件其实就是纯文本文件,它的内部并没有特殊格式,能证明这一结论的典型例子是:在 Windows 下用记事本程序新建一个文本文档,并命名为,输入一段C语言代码并保存,然后将该文件强制重命名为(后缀从.txt变成了.c),发现编译器依然能够正确识别其中的C语言代码,并顺利生成可执行文件。 源文件的后缀仅仅是为了表明该文件中保存的是某种语言的代码(例如.c文件中保存的是C语言代码),这样程序员更加容易区分,编译器也更加容易识别,它并不会导致该文件的内部格式发生改变。源文件(Source

17、 File) C+ 是站在C语言的肩膀上发展期来的,是在C语言的基础上进行的扩展,C+ 包含了C语言的全部内容,将C语言代码放在.cpp文件中不会有错,很多初学者都是这么做的,很多大学老师也是这么教的。但是,我还是强烈建议将C语言代码放在.c文件中,这样能够更加严格地遵循C语言的语法,也能够更加清晰地了解C语言和C+的区别。源文件(Source File) 一个真正的程序(也可以说软件)往往包含多项功能,每一项功能都需要几十行甚至几千行、几万行的代码来实现,如果我们将这些代码都放到一个源文件中,那将会让人崩溃,不但源文件打开速度极慢,代码的编写和维护也将变得非常困难。 在实际开发中,程序员都是

18、将这些代码分门别类地放到多个源文件中。除了这些成千上万行的代码,一个程序往往还要包含图片、视频、音频、控件、库(也可以说框架)等其它资源,它们也都是一个一个地文件。2) 工程/项目(Project) 为了有效地管理这些种类繁杂、数目众多的文件,我们有理由把它们都放到一个目录(文件夹)下,并且这个目录下只存放与当前程序有关的资源。实际上 IDE 也是这么做的,它会为每一个程序都创建一个专门的目录,将用到的所有文件都集中到这个目录下,并对它们进行便捷的管理,比如重命名、删除文件、编辑文件等。 这个为当前程序配备的专用文件夹,在 IDE 中也有一个专门的称呼,叫做“Project”,翻译过来就是“工

19、程工程”或者“项目项目”。在 VC 6.0 下,这叫做一个“工程”,而在 VS 下,这又叫做一个“项目”,它们只是单词“Project”的不同翻译而已,实际上是一个概念。工程/项目(Project)“程序”是一个比较宽泛的称呼,它可以细分为很多种类,例如: 有的程序不带界面,完全是“黑屏”的,只能输入一些字符或者命令,称为控制台程序(控制台程序(Console Application),),例如 Windows 下的 ,Linux 或 Mac OS 下的终端(Terminal)。 有的程序带界面,看起来很漂亮,能够使用鼠标点击,称为GUI程序(Graphical User Interface

20、Program),例如 QQ、迅雷、Chrome 等。 有的程序不单独出现,而是作为其它程序的一个组成部分,普通用户很难接触到它们,例如静态库、动态库等。3) 工程类型/项目类型 不同的程序对应不同的工程类型(项目类型),使用 IDE 时必须选择正确的工程类型才能创建出我们想要的程序。换句话说,IDE 包含了多种工程类型,不同的工程类型会创建出不同的程序。 不同的工程类型本质上是对 IDE 中各个参数的不同设置;我们也可以创建一个空白的工程类型,然后自己去设置各种参数(不过一般不这样做)。3) 工程类型/项目类型 控制台程序对应的工程类型为控制台程序对应的工程类型为“Win32控制台程序控制台

21、程序(Win32 Console Application)”,GUI程序对应的程序对应的工程类型为工程类型为“Win32程序(程序(Win32 Application)”。 控制台程序是 DOS 时代的产物了,它没有复杂的功能,没有漂亮的界面,只能看到一些文字,虽然枯燥无趣,也不实用,但是它非常简单,不受界面的干扰,所以适合入门,我强烈建议初学者从控制台程序学起。等大家对编程掌握的比较熟练了,能编写上百行的代码了,再慢慢过渡到GUI程序。3) 工程类型/项目类型 上节我们讲到,源代码经过编译(Compile)后就变成了可执行文件,其实这种说法有点笼统,甚至从严格意义上来讲是错误的。源代码要经过

22、编译(Compile)和链接(Link)两个过程才能变成可执行文件。 编译器一次只能编译一个源文件,如果当前程序包含了多个源文件,那么就需要编译多次。编译器每次编译的结果是产生一个中间文件(可以认为是一种临时文件),而不是最终的可执行文件。中间文件已经非常接近可执行文件了,它们都是二进制格式,内部结构也非常相似。4) 链接(Link) 将当前程序的所有中间文件以及系统库(暂时可以理解为系统中的一些组件)组合在一起,才能形成最终的可执行文件,这个组合的过程就叫做链接链接(Link)。完成链接功能的软件叫做链接器链接器(Linker)。 如果程序只包含了一个源文件,是不是就不需要链接了呢?不是的!

23、 经过编译后程序虽然只有一个中间文件,不再需要和其它的中间文件组合了,但是这个唯一的中间文件还需要和系统库组合,这个过程也是链接。也就是说,不管有多少个源文件,都必须经过编译和链接两个过程才能生成可执行文件。4) 链接(Link) (简称)是微软开发的一款经典的 IDE,很多高校都以 VC 6.0 为教学工具来讲解C和C+。但是202X年的产品,很古老了,在 Win7、Win8、Win10 下会有各种各样的兼容性问题,甚至根本不能运行,所以不推荐使用。 VC 6.0 早就该扔进垃圾桶了,可是依然有很多大学把它作为教学工具,并且选用的教材也以 VC 6.0 为基础来讲解C语言和 C+,可见教学体

24、制的极端落后,课程体系的更新远远跟不上技术的进步。 前面我们给出了一段最简单的C语言代码,并演示了如何在不同的平台下进行编译,这节我们来分析一下这段代码,让读者有个整体的认识。代码如下: #include int main三 puts(helloworld!); return 0; 分析第一个C语言程序 先来看第4行代码,这行代码会在显示器上输出“helloworld!”。前面我们已经讲过,puts 后面要带( ),字符串也要放在( )中。 在C语言中,有的语句使用时不能带括号,有的语句必须带括号。带括号的称为函数(函数(Function)。 C语言提供了很多功能,例如输入输出、获得日期时间、

25、文件操作等,我们只需要一句简单的代码就能够使用。但是这些功能的底层都比较复杂,通常是软件和硬件的结合,还要要考虑很多细节和边界,如果将这些功能都交给程序员去完成,那将极大增加程序员的学习成本,降低编程效率。函数的概念 好在C语言的开发者们为我们做了一件好事,他们已经编写了大量代码,将常见的基本功能都完成了,我们可以直接拿来使用。但是现在问题来了,那么多代码,如何从中找到自己需要的呢?一股脑将所有代码都拿来显然是非常不明智的。 这些这些代码,早已被分门别类地放在了不同的文件中,代码,早已被分门别类地放在了不同的文件中,并且每一段代码都有唯一的名字。使用代码时,只要并且每一段代码都有唯一的名字。使

26、用代码时,只要在对应的名字后面加上在对应的名字后面加上( )就可以。这样的一段代码能就可以。这样的一段代码能够独立地完成某个功能,一次编写完成后可以重复使够独立地完成某个功能,一次编写完成后可以重复使用,被称为函数(用,被称为函数(Function)。读者可以认为,函数)。读者可以认为,函数就是一段可以重复使用的代码。就是一段可以重复使用的代码。函数的概念 函数的一个明显特征就是使用时必须带括号( ),必要的话,括号中还可以包含待处理的数据。例如puts(helloworld!)就使用了一段具有输出功能的代码,这段代码的名字是 puts,helloworld! 是要交给这段代码处理的数据。使用

27、函数在编程中有专业的称呼,叫做函数调用(函数调用(Function Call)。)。 如果函数需要处理多个数据,那么它们之间使用逗号,分隔,例如: pow(10, 2); 该函数用来求10的2次方。函数的概念 需要注意的是,C语言中的函数和数学中的函数不是同一个概念,不要拿两者对比。函数的英文名称是 Function,它还有“功能”的意思。大陆将 Function 翻译为“函数”,而台湾地区翻译为“函式”,读者要注意区分。函数的概念 C语言自带的函数称为库函数(库函数(Library Function)。库(Library)是编程中的一个基本概念,可以简单地认为它是一些列函数的集合,在磁盘上往

28、往是一个文件夹。C语言自带的库称为标准库标准库(Standard Library),其他公司或个人开发的库称为第三方库第三方库(Third-Party Library)。 除了库函数,我们还可以编写自己的函数,拓展程序的功能。自己编写的函数称为自定义函数。自定义函数和库函数在编写和使用方式上完全相同,只是由不同的机构来编写。自定义函数和main函数 示例中第26行代码就是我们自己编写的一个函数。main 是函数的名字,( ) 表明这是函数定义, 之间的代码是函数要实现的功能。 函数可以接收待处理的数据,同样可以将处理结果告诉我们;使用return可以告知处理结果。示例中第5行代码表明,main

29、 函数的处理结果是整数 0。return 可以翻译为“返回”,所以函数的处理结果被称为返回返回值(值(Return Value)。 第2行代码中,int 是 integer 的简写,意为“整数”。它告诉我们,函数的返回值是整数。自定义函数和main函数 需要注意的是,示例中的自定义函数必须命名为 main。C语言规定,一个程序必须有且只有一个 main 函数。main 被称为主函数,是程序的入口函数,程序运行时从 main 函数开始,直到 main 函数结束(遇到 return 或者执行到函数末尾时,函数才结束)。 也就是说,没有 main 函数程序将不知道从哪里开始执行,运行时会报错。自定义

30、函数和main函数 综上所述:第26行代码定义了主函数 main,它的返回值是整数 0,程序将从这里开始执行。main 函数的返回值在程序运行结束时由系统接收。 有的教材中将 main 函数写作: void main三 / Some Code. 这在 VC6.0 下能够通过编译,但在 C-Free、GCC 中却会报错,因为这不是标准的 main 函数的写法,大家不要被误导,最好按照示例中的格式来写。自定义函数和main函数 还有最后一个问题,示例中第1行的#include 是什么意思呢? C语言开发者们编写了很多常用函数,并分门别类的放在了不同的文件,这些文件就称为头文件(头文件(header

31、 file)。每个头文件中都包含了若干个功能类似的函数,调用某个函数时,要引入对应的头文件,否则编译器找不到函数。 实际上,头文件往往只包含函数的说明,也就是告诉实际上,头文件往往只包含函数的说明,也就是告诉我们函数怎么用,而函数本身保存在其他文件中,在我们函数怎么用,而函数本身保存在其他文件中,在链接时才会找到。对于初学者,可以暂时理解为头文链接时才会找到。对于初学者,可以暂时理解为头文件中包含了若干函数。件中包含了若干函数。头文件的概念 引入头文件使用#include命令,并将文件名放在中,#include 和 之间可以有空格,也可以没有。 头文件以.h为后缀,而C语言代码文件以.c为后缀,它们都是文本文件,没有本质上的区别,#include 命令的作用也仅仅是将头文件中的文本复制到当前文件,然后和当前文件一起编译。你可以尝试将头文件中的内容复制到当前文件,那样也可以不引入头文件。 .h中代码的语法规则和.c中是一样的,你也可以#include ,这是完全正确的。不过实际开

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论