书名:C编程从入门到实践
ISBN:978-7-115-50068-7
本书由人民邮电出版社发行数字版。版权所有,侵权必究。
您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。
我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。
如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。
编 著 王长青
责任编辑 张 涛
人民邮电出版社出版发行 北京市丰台区成寿寺路11号
邮编 100164 电子邮件 315@ptpress.com.cn
网址 http://www.ptpress.com.cn
读者服务热线:(010)81055410
反盗版热线:(010)81055315
本书循序渐进、由浅入深地讲解了C语言开发的技术。全书共25章。本书不仅介绍了C语言的基础和核心知识(如开发工具、语法、运算符、表达式、输入/输出、流程控制、数组、字符串、函数),还讲解了C语言中的重点和难点(如指针、结构体、共用体和枚举、链表、位运算、预编译、文件操作、调试、内存管理、高级编程技术、算法、数据结构、网络编程技术等)。此外,本书还通过4个综合实例,介绍了C语言在综合项目中的应用。全书内容以“技术解惑”和“范例演练”贯穿全书,引领读者全面掌握C语言。
本书不但适用C语言的初学者,也适合有一定C语言基础的读者学习,还可以作为大专院校相关专业的师生用书和培训学校的教材。
你从开始学习编程的那一刻起,就注定了以后要走的路。从编程初学者开始,依次经历实习生、程序员、软件工程师、架构师、CTO等职位。当你站在职位顶峰蓦然回首时,你会发现自己的成功并不是偶然,在程序员的成长之路上会有不断修改代码,寻找并解决Bug,不停测试程序和修改项目的经历。不可否认,只要你在自己的开发生涯中稳扎稳打,并且善于总结和学习,最终就会得到可喜的成绩。
对于一名想从事程序开发的初学者来说,究竟如何学习才能提高自己的编程技术呢?其中一个答案就是买合适的程序开发书籍进行学习。但是,市面上许多面向初学者的编程书籍都重点讲解基础知识,多偏向于理论。读者读了以后在面对实战项目时还是无从下手。如何从理论平滑地过渡到项目实战,是初学者迫切需要解决的问题,为此,作者特意编写了本书。
本书融合了入门类、范例类和项目实战类图书的内容。另外,对于实战知识,不是点到为止地讲解,而是深入地探讨。用“纸质书+配套资料(视频和源程序)+网络答疑”的方式,提供了“入门+范例+项目实战”的一站式服务,帮助读者从入门平滑过渡到顺利完成项目。
以“从入门到精通”的方法写作,有助于读者快速入门。
为了使读者能够完全看懂本书的内容,本书遵循“从入门到精通”的写法,循序渐进地讲解C语言的基本知识。
破解语言难点,以“技术解惑”贯穿全书,绕过学习中的陷阱。
本书不会罗列式讲解C语言的知识点。为了帮助读者学懂基本知识点,每章都会有“技术解惑”板块,它能让读者知其然又知其所以然,也就是看得明白,学得通。
书中包含大量实例和范例。
本书通过实例、范例和综合实例,讲述C语言中的知识点。每一个实例都有两个与之相关的范例。这些实例及范例有助于读者巩固理论知识,达到举一反三的效果。
通过视频讲解,降低学习难度。
对于本书的每一章,均提供了声图并茂的教学视频,这些视频能够引导初学者快速入门,增强学习信心,从而快速理解所学知识。
提供源程序、视频、PPT,让学习更轻松。
因为本书的内容非常多,不可能用一本书的篇幅囊括“入门+范例+项目案例”的内容,所以本书配套网站toppr不但包含全书的源代码,而且提供实例讲解视频和PPT。
用QQ群+网站论坛实现教学互动,形成互帮互学的朋友圈。
为了方便给读者答疑,作者特提供了网站论坛、QQ群等交流方式,并且随时在线与读者互动,让大家在互学互帮中形成一个良好的编程学习氛围。本书的学习论坛是:toppr网站(网站后缀名是.net)。本书的QQ群是:347459801。
本书循序渐进、由浅入深地讲解了C语言开发技术,并通过具体实例的实现过程演示了各个知识点的具体应用。本书共25章:第1~3章讲解了C语言开发的基础知识,包括C语言之定位、C语言开发工具详解、程序员基本素质的培养;第4~9章讲解了C语言语法、运算符和表达式、输入和输出、流程控制、数组和字符串、函数,这些内容都是C语言技术的核心知识;第10~21章讲解了指针、结构体、共用体和枚举、链表、位运算、预编译处理、文件操作、错误和程序调试、内存管理、C语言高级编程技术、算法、数据结构、网络编程技术,这些内容是C语言开发技术的重点和难点;第22~25章通过4个综合实例的实现过程,介绍了应用C语言开发综合项目的过程。本书内容以“技术解惑”和“范例演练”贯穿全书,引领读者全面掌握C语言。
本书的最大特色是实现了入门知识、实例演示、范例演练、技术解惑、综合实战5大部分的融合。其中各章内容由如下模块构成。
① 入门知识:循序渐进地讲解了C语言开发的基本知识点。
② 实例演示:遵循理论加实践的教学模式,用实例演示了各个入门知识点的用法。
③ 范例演练:为了加深对知识点的理解,为每个实例提供了两个演练范例,多角度演示了各个入门知识点的用法和技巧。
④ 技术解惑:把读者容易混淆的知识点单独用一个板块进行讲解和剖析,进一步解疑释惑。
十分感谢家人在本书的编写过程中给予的巨大支持。由于作者水平有限,书中纰漏之处在所难免,诚请读者提出意见或建议,以便修订并使之更臻完善。
最后感谢您购买本书,希望本书能成为您编程道路上的挚友,祝您阅读快乐!
作者
本书由异步社区出品,社区(https://www.epubit.com/)为您提供相关资源和后续服务。
本书配套资源包括书中示例的源代码。
要获得以上配套资源,请在异步社区本书页面中单击,跳转到下载界面,按提示进行操作即可。注意,为保证购书读者的权益,该操作会给出相关提示,要求输入提取码进行验证。
如果您是教师,希望获得教学配套资源,请在社区本书页面中直接联系本书的责任编辑。
作者和编辑尽最大努力来确保书中内容的准确性,但难免会存在疏漏。欢迎您将发现的问题反馈给我们,帮助我们提升图书的质量。
当您发现错误时,请登录异步社区,按书名搜索,进入本书页面,单击“提交勘误”,输入勘误信息,单击“提交”按钮即可。本书的作者和编辑会对您提交的勘误进行审核,确认并接受后,您将获赠异步社区的100积分。积分可用于在异步社区兑换优惠券、样书或奖品。
我们的联系邮箱是contact@epubit.com.cn。
如果您对本书有任何疑问或建议,请您发邮件给我们,并请在邮件标题中注明本书书名,以便我们更高效地做出反馈。
如果您有兴趣出版图书、录制教学视频,或者参与图书翻译、技术审校等工作,可以发邮件给我们;有意出版图书的作者也可以到异步社区在线提交投稿(直接访问www.epubit.com/selfpublish/submission即可)。
如果您是学校、培训机构或企业,想批量购买本书或异步社区出版的其他图书,也可以发邮件给我们。
如果您在网上发现有针对异步社区出品图书的各种形式的盗版行为,包括对图书全部或部分内容的非授权传播,请您将怀疑有侵权行为的链接发邮件给我们。您的这一举动是对作者权益的保护,也是我们持续为您提供有价值的内容的动力之源。
“异步社区”是人民邮电出版社旗下IT专业图书社区,致力于出版精品IT技术图书和相关学习产品,为作译者提供优质出版服务。异步社区创办于2015年8月,提供大量精品IT技术图书和电子书,以及高品质技术文章和视频课程。更多详情请访问异步社区官网https://www.epubit.com。
“异步图书”是由异步社区编辑团队策划出版的精品IT专业图书的品牌,依托于人民邮电出版社近30年的计算机图书出版积累和专业编辑团队,相关图书在封面上印有异步图书的LOGO。异步图书的出版领域包括软件开发、大数据、AI、测试、前端、网络技术等。
异步社区
微信服务号
C语言是当前所有开发技术中使用较为广泛的一门语言,从它诞生之日起就深受程序员的喜爱。随着C语言的普及,后来的开发语言都或多或少地借鉴或遵循了它的一些模式。另外,C语言是计算机编程领域中使用最早的高级语言之一,它的出现推动了软件行业的迅猛发展。本章将简要介绍C语言的基本知识,为读者学习后面的内容打下基础。
知识点讲解:视频\第1章\计算机应用基础.mp4
计算机(computer)是一种能接收和存储信息,并按照内部存储的程序对输入的信息进行加工、处理,然后把处理结果进行输出的高度自动化的电子设备。本节介绍计算机应用的基础知识,为读者学习后面的知识打下基础。
中央处理器就是我们平常说的CPU(Central Processing Unit),是一块超大规模的集成电路,是计算机的运算核心和控制核心。它主要包括算术和逻辑单元(Arithmetic and Logic Unit,ALU)和控制单元(Control Unit,CU)两大部件。此外,它还包括若干个寄存器和存储器及彼此之间的数据、控制与状态总线。它与内部存储器和输入/输出设备合称为电子计算机的三大核心部件。其功能主要是解释计算机指令以及处理计算机软件中的数据。计算机的性能在很大程度上由CPU的性能所决定,而CPU的性能主要体现在运行程序的速度上。
位(bit)又称为比特,bit是Binary System的缩写。在现实应用中,位有如下两个含义。
(1)它是计算机专业术语,是信息量单位。二进制数的一位所包含的信息就是一位,如二进制数0100就有4位。在计算机应用中,二进制数“0”和“1”是构成信息的最小单位,称作“位”或“比特”。
(2)二进制数字中的位是信息量的度量单位,为信息量的最小单位。数字化音响用电脉冲表达音频信号,“1”代表有脉冲,“0”代表脉冲间隔。如果波形中每个点的信息用4位一组的编码来表示,则每组编码有4位。位数越多,表达的模拟信号就越精确,对音频信号的还原能力越强。
字节(Byte),是计算机信息技术中用于存储容量的一种计量单位,有时在一些计算机编程语言中也表示数据类型和语言字符。
在计算机应用中,由若干位组成1字节。字节由多少位组成取决于计算机的结构。通常来说,微型计算机的CPU多由8位组成1字节,并用此表示一个字符的代码。构成1字节的8位被看作一个整体,字节是存储信息的基本单位。在大多数情况下,计算机存储单位的换算关系如下:
1B=8bit
1KB=1024B
1MB=1024KB
1GB=1024MB
在上述关系中各个单位的具体说明如下:
二进制是计算机技术中广泛采用的一种数制,是使用0和1两个数码来表示的数。二进制的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”,这是由18世纪德国数理哲学大师莱布尼兹发现的。当前的计算机系统使用的基本上都是二进制系统,数据在计算机中主要是以补码的形式进行存储的。计算机中的二进制是一个非常微小的开关,用“开”来表示1,用“关”来表示0。因为它只使用0、1两个数字符号,所以非常简单方便,易于用电子方式来实现。
下面介绍如何将十进制数转换成二进制数。
(1)把正整数转换成二进制。
转换原则是除以2取余,然后倒序排列,高位补零。也就是说,将正的十进制数除以2,得到的商再除以2,依次类推,一直到商为0或1,然后在旁边标出各步的余数,最后倒着写出来,高位补零即可。例如,将十进制数字42转换为二进制的步骤为:42除以2得到的余数连在一起为010101,然后将得到的余数倒着排一下就会得到数字42,所对应的二进制数是101010。但是因为在计算机内部表示数的字节单位是定长的(如8位、16位或32位),所以当位数不够时,需要在高位补零。十进制数42转换成二进制数的结果是101010,它的前面缺少两位,因此将十进制数42转换成二进制数的最终结果是:00101010。
(2)把负整数转换成二进制。
转换原则是先将对应的正整数转换成二进制,最后对二进制数取反,最后将结果加1。以十进制负整数−42为例,将42的二进制形式(00101010)取反得到的结果是11010101,然后再加1的结果是11010110。所以负整数−42转成二进制数的最终结果是:11010110。
(3)把二进制整数转换成十进制。
转换原则是先将二进制数补齐位数。如果首位是0则代表它是正整数;如果首位是1则代表它是负整数。先看首位是0的正整数,补齐位数以后,得到n×2m的计算结果。其中,上标m表示二进制数字的位数,n表示二进制的某个位数。对于二进制数中的各位分别计算n×2m,然后将计算结果相加得到值的就为十进制数。比如将二进制数1010转换为十进制数的过程如下。
二进制 1 0 1 0
补齐位数 0 0 0 0 1 0 1 0
计算n×2m 0×27 0×26 0×25 0×24 1×23 0×22 1×21 0×20
计算结果 0 0 0 0 8 0 2 0
各位求和结果 10
所以将二进制数1010转换为十进制数的结果是10。
如果要转换的二进制数补足位数后首位为1,那么表示这个二进制数是负整数。此时,就需要先取反,然后再进行换算:例如二进制数11101011的首位为1,这时应先取反得到00010100,然后按照上面的计算过程得出10100对应的十进制数20,所以二进制数11101011对应的十进制数为−20。
ASCII(American Standard Code for Information Interchange,美国信息交换标准代码),是基于拉丁字母的一套计算机编码系统,主要用于表示现代英语和其他西欧语言。ASCII码是现今最通用的单字节编码系统,并等同于国际标准ISO/IEC 646。
一个英文字母(不分大小写)占1字节空间,一个中文汉字占2字节空间。一个二进制数字序列在计算机中为一个数字单元,一般为8位二进制数。它的最小值为0,最大值为255。例如,一个ASCII码就是1字节。
Unicode(又称为统一码、万国码、单一码)是计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode编码是为了解决传统字符编码方案的局限性而产生的,它为每种语言中的每个字符都设定了统一并且唯一的二进制编码,以满足跨语言和跨平台进行文本转换、处理的要求。
最初Unicode编码的长度是固定的16位,也就是2字节代表一个字符,这样可以表示65536个字符。显然,若要表示各种语言中的所有字符,这是远远不够的。Unicode 4.0规范考虑到了这种情况,定义了一组附加字符编码。附加字符编码采用两个16位来表示,这样最多可以定义1 048 576个附加字符。目前,Unicode 4.0规范只定义了45 960个附加字符。
Unicode只是一个编码规范。目前实际实现的Unicode编码只要有3种:UTF-8、UCS-2和UTF-16。3种Unicode字符集之间可以按照相关规范进行转换。
UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度的字符编码,又称为万国码。UTF-8由Ken Thompson于1992年创建,现在已经将它标准化为RFC 3629。UTF-8用1~6字节编码Unicode字符。在网页上它可以统一页面显示中文简体/繁体及其他语言(如英文、日文、韩文)。一个UTF-8编码的英文字符占用1字节;一个UTF-8编码的中文(含繁体)字符少数情况下占用3字节,多数情况下占用4字节;一个UTF-8编码的数字占用1字节。
知识点讲解:视频\第1章\C语言的辉煌诞生.mp4
C语言是目前世界上最流行、使用最广泛的程序设计语言之一。由于C语言绘图能力强,可移植性好,并具备很强的数据处理能力,因此它适合编写系统软件、二维和三维图形及动画程序,是一门可进行数值计算的高级语言。C语言的原型是ALGOL 60语言,它也称为A语言。
接下来,我们看一看C语言的发展历程。
知识点讲解:视频\第1章\第一印象的建立.mp4
为了快速迈入C语言的世界,本节将通过一个实例来介绍C语言的特性。
源码路径 daima\1\FIRST.c
实例文件FIRST.c的具体代码如下。
拓展范例及视频二维码!
范例1-1-01:求反余弦 源码路径:演练范例\1-1-01\
范例1-1-02:求反正弦 源码路径:演练范例\1-1-02\
#include //引用头文件
int m; //定义全局变量
int min(int x,int y);
int main(void)
{
int a,b; //定义变量
printf("\nEnter two Number:");//调用库函数中的输出函数
scanf("%d,%d",&a,&b);//调用库函数中的输入函数
m=min(a,b); //调用用户定义的函数
printf("Minimum:%d\n",m);
}
int min(int x,int y) { //定义函数
int t=0; //声明变量
if(xx小,则输出x
else t=y; //如果x大,则输出y
return(t);
}
上述代码的功能是对用户输入的数据x
和y
比较大小,并输出较小的数。从整个程序的实现过程可以看出,通过简短的代码即可实现用户需要的功能。
总体来说,我们对C语言的初步印象很不错,它简单、易于理解。具体来说,C语言的主要特点如下所示。
(1)简洁紧凑、灵活方便。
C语言只有32个关键字、9种控制语句,程序书写自由,它主要用小写字母来表示。C语言把高级语言的基本结构和语句与低级语言的实用性相结合起来,可以像汇编语言一样对位、字节和地址进行操作,这三者是计算机中最基本的工作单元。
(2)运算符丰富。
C语言共有34个运算符。C语言把括号、赋值、强制类型转换等都作为运算符来处理,从而使它的运算类型极其丰富,表达式类型多样化,灵活使用各种运算符可以实现在其他高级语言中难以实现的运算。
(3)数据结构丰富。
C语言的数据类型有整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等,这些数据类型可以实现各种复杂数据类型的运算。C语言引入了指针这一概念,这使程序效率更高。另外,C语言具有强大的图形功能,它支持多种显示器和驱动器,且计算功能、逻辑判断功能强大。
(4)语法限制不太严格,程序设计自由度大。
一般高级语言的语法检查比较严格,能够检查出几乎所有的语法错误。而C语言允许程序编写者有较大的自由度。
(5)允许直接访问物理地址,可以直接对硬件进行操作。
C语言既具有高级语言的功能,又具有低级语言的许多功能。它能够像汇编语言一样对位、字节和地址进行操作,它们可以用来编写系统软件。
(6)生成的代码质量高,程序执行效率高。
C语言比汇编程序生成的目标代码效率高10%~20%。
(7)适用范围大,可移植性好。
C语言不但可以广泛用于计算机项目的程序开发,而且可以独立开发硬件程序。
当然,C语言也有自身的不足,例如语法限制不太严格,对变量类型的约束不严格,影响程序的安全性。另外,从应用开发的角度看,C语言比其他高级语言较难掌握。
知识点讲解:视频\第1章\理解编译系统.mp4
C语言是一门DOS环境下的开发语言,在执行前需要先将其编译,才能正确执行。要真正理解编译系统的原理,重要的是要理解什么是“编译”。编译是一个过程,通过这个过程可以把高级语言变成计算机可以识别的二进制语言。计算机只认识以1和0格式组织的二进制数据,编译程序可以把人们熟悉的语言换成二进制形式。
要通过编译把一个源程序翻译成目标程序,所需的流程如图1-1所示。
图1-1 编译系统的结构流程
在上述过程中,两个主要的阶段是词法分析和语法分析,这又称为源程序分析。如果在分析过程中发现了语法错误,则它会给出对应的提示信息。
接下来开始讲解上述5个阶段的具体过程。
词法分析
词法分析的任务是对由字符组成的单词进行处理,从左至右逐字符地对源程序进行扫描,产生单词符号,把作为字符串的源程序改造成为用单词符号串表示的中间程序。执行词法分析的程序称为词法分析程序或扫描器。
语法分析
编译程序的语法分析器以单词符号作为输入,分析单词符号串是否可形成符合语法规则的语法单位,如表达式、赋值、循环等,最后看是否能构成一个符合要求的程序。按该语言使用的语法规则分析检查每条语句是否有正确的逻辑结构,程序是最终的语法单位。编译程序的语法规则可用上下文无关文法来刻画。语法分析的方法有如下两种。
检查中间代码
中间代码是源程序的内部表示,也称为中间语言。中间代码的作用是使编译程序的结构在逻辑上更为简单明确,特别是更容易实现目标代码的优化。中间代码即中间语言程序,中间语言的复杂性介于源程序语言和机器语言之间。中间语言有多种形式,其中最为常见的有4种:逆波兰记号、四元式、三元式和树。
优化代码
优化代码是指对程序进行多种等价变换,从而使根据变换后的程序能生成更有效的目标代码。所谓等价指的是不改变程序的运行结果。有效是指目标代码运行时间较短,而且占用的存储空间较小。这种变换称为优化。
生成目标代码
生成目标代码是最后一个编译阶段。目标代码生成器可以把经过语法分析或优化后的中间代码变换成目标代码。
另外,还涉及下面两个程序。
表格管理程序
在编译过程中源程序的各种信息会保留在不同的表格中,在编译的各阶段都涉及构造、查找或更新有关的表格。
出错处理程序
如果在编译过程中发现源程序有错误,则编译程序将会报告错误的性质和错误发生的地点,并且将错误所造成的影响限制在尽可能小的范围内,从而使源程序的其余部分能继续编译。有些编译程序还能自动纠正错误,这些工作由错误处理程序完成。
了解了“编译”过程后,整个编译系统的概念便一目了然了。编译系统就是按照编译原理集合而成的一种机制,这种机制能够对程序语言实现上述处理。
系统编译与发布是在系统编码之后执行的一项基本操作。编译生成可执行代码。发布是将编译之后的可运行版本发布到服务器,供用户使用。在编译过程中,编译器将代码翻译成中间语言。运行时会将中间语言翻译成CPU的指令,以便计算机的处理器运行应用程序。编译后的应用程序可以提高代码的运行速度,增加代码的安全性和稳定性。
C语言博大精深,能够应用于多个领域,因此,它一直深受广大程序员的喜爱。作为一名初学者,你肯定会在学习中遇到许多疑问和困惑。为此,在本节中,作者将描述自己的心得体会,以帮助读者解决困惑。
当今各种新技术、新思想、新名词层出不穷,令人眼花缭乱。新与旧混杂在一起,让人有目不暇接之感。
无论是初学者还是高级程序员,他们都在心底藏着一个问题:C语言会不会只是人们学习程序设计的基石,而没有实际的使用价值?答案当然是否定的,作者在此建议读者要牢记:越是基础的语言,能实现的功能就越强大。比如,现在许多的语言都是由C语言开发出来的。在真正高深的编程领域,许多好的软件、系统都是由汇编语言和C语言等语言编写出来的。所以,C语言不仅是软件开发的基石,而且还会有强大的生命力。
C语言比较贴近操作系统,纯C语言在Windows平台上主要用于系统底层驱动的开发(一般会辅以汇编)。特别是在Linux或UNIX系统上,C语言一直到现在都还是主流,以C语言编写的程序可以很方便地与其他程序在shell中配合。C脚本和shell构建了一整套UNIX/Linux开发基础,在此可以简单地总结为如下3点。
(1)C语言语法简单,是学习其他语言的基础。
(2)C语言符合UNIX/Linux系统的开发流程,适合和其他程序以进程方式来构建大型应用。
(3)相对于Windows系统,Linux系统中的进程开销相对较小。
由此可见,C语言现在依旧是当前程序开发中的热门语言,特别活跃于底层驱动开发、Linux系统开发、UNIX系统开发中。当前异常火爆的Android系统的底层源码,便是基于Linux系统使用C语言实现的。而另外异常火爆的苹果手机系统(iOS)和苹果商店中的软件,是用C语言的变种Objective-C来开发的。
关于怎样学好C语言,仁者见仁、智者见智,但是最起码要遵循如下两个原则。
(1)多看代码。
在有一定基础以后,一定要多看别人编写的代码。注意代码中的算法和数据结构。学习C语言的关键是算法和数据结构,而在数据结构中,指针是重要的一环。绝大多数的数据结构都是建立在指针之上的,例如链表、队列、树、图等。由此可见,只有学好指针,才能真正学好C语言。别的方面也要关注一下,诸如变量的命名、库函数的用法等。
(2)多动手实践。
程序开发比较注重实践和演练,光说不练不行。初学者可以多做一些练习,对于不明白的地方,可以亲自编一个小程序实验一下,这样做可以留下一个深刻的印象。在自己动手的过程中,要不断纠正不好的编程习惯和认识错误。在有了一定的基础之后,可以尝试编一些小游戏应用程序。在基础变得扎实以后,可以编一些数据结构方面的应用,例如最经典的学生成绩管理系统。
(1)学习要深入,基础要扎实。
基础的作用不必多说,在大学课堂上老师曾经讲过了很多次,在此重点说明“深入”。职场不是学校,企业要求你高效地完成相关项目,但是现实中的项目种类繁多,我们需要掌握C语言技术的精髓。走马观花式的学习已经被社会所淘汰,入门水平不会被公司所接受,它们需要的是高手。
(2)要有恒心,不断演练,并举一反三。
学习编程的过程是枯燥的,我们要将学习C语言当成乐趣,只有做到持之以恒,才有机学好。另外,编程最注重实践,最怕闭门造车。每一个语法、每一个知识点,都要反复用实例来演练,这样才能加深对知识的理解。只有做到举一反三,才能对知识有深入的理解。
1.将《大学计算机基础》一书通读一遍,要确保完全理解里面的内容。
2.在百度中搜索“在线进制转换器”,尝试使用它实现不同进制间的转换。
3.在百度中搜索“二进制算术在线计算器”,尝试使用它实现不同二进制数据中的四则运算功能。
古人云:工欲善其事,必先利其器。由第1章的内容我们了解到,C语言开发需要使用专门的开发工具,这样才能起到事半功倍的效果。本章将简要介绍常用的几种C语言开发工具,详细介绍它们的安装和使用方法,为读者学习本书后面的知识打下基础。
知识点讲解:视频\第2章\用DOS开发C程序.mp4
由于C语言程序是在DOS下进行编译的程序,所以,需要在DOS环境下开发、编译和调试。但是DOS却是一个十分落后的系统,已经远离当今主流,操作十分不便。正因如此,市面中主流的C语言开发工具都是在Windows、Linux或MacOS操作系统中使用的。本节将介绍一款古老的DOS开发工具Turbo C/C++ 3.0,相信很多读者肯定会问既然Turbo C/C++ 3.0已经落伍了,那么为什么还介绍它呢?这是因为某种原因,国内很多高校和计算机等级考试教程中还在使用Turbo C/C++ 3.0工具,所以本节将用很少的篇幅介绍这款工具的用法。
安装Turbo C 3.0的步骤如下。
(1)在百度中搜索“Turbo C 3.0”(在Win7、8、10系统中可用),然后下载压缩包。
(2)下载后解压缩进行自动安装,安装成功后程序会创建桌面快捷方式,单击桌面快捷方式即可启动Turbo C/C++ 3.0。Turbo C 3.0的主界面,如图2-1所示。
图2-1 Turbo C 3.0主界面
主菜单:这些菜单可以执行创建、保存和调试等操作,从而实现C语言中的应用开发。
编辑区:它是代码编写区域,在这里可以编写自己需要的代码。
信息窗口:显示常用的提示信息,例如“编译成功”和“执行完毕”之类的提示。
参考行:表示操作当前界面的快捷键提示,例如“F1 Help”表示按下F1键将弹出“帮助”界面。
使用Turbo C 3.0实现实例的过程如下所示。
(1)打开Turbo C 3.0,进入编辑界面,编写对应的代码,如图2-2所示。
图2-2 编辑界面
(2)按F9键,进行编译并链接,操作成功后弹出成功提示,如图2-3所示。
图2-3 成功提示
(3)按快捷键Ctrl+F9运行此程序,输出指定的界面,如图2-4所示。
图2-4 运行界面
(4)随便输入两个数字,中间用逗号隔开,然后按Enter键。按快捷键Alt+F5后,输出效果如图2-5所示。
图2-5 输出结果
知识点讲解:视频\第2章\使用Visual Studio 2017.mp4
Microsoft Visual Studio 2017是微软推出的全新的专用开发工具,它是一个集成的开发环境工具。Microsoft Visual Studio 2017是一款功能齐全且可扩展的免费IDE,适用于个人开发、开放源代码项目、学术研究、教育和小型专业团队。它能够创建适用于Windows、Android和iOS的应用程序,以及网络应用程序和云服务。本节将详细讲解使用Microsoft Visual Studio 2017开发C语言程序的基本知识,为读者学习后面的知识打下坚实的基础。
安装Visual Studio 2017的步骤如下。
(1)登录Microsoft Visual Studio官网,如图2-6所示。
图2-6 Microsoft Visual Studio官网
(2)单击“下载Visual Studio”中的“Enterprise 2017”链接开始下载,如图2-7所示。下载后得到一个exe格式的安装文件“vs_enterprise__2050403917.1499848758.exe”,如图2-8所示。
图2-7 “Enterprise 2017”链接
图2-8 安装文件
(3)右击下载文件“vs_enterprise__2050403917.1499848758.exe”,使用管理员模式进行安装。在弹出的界面中单击“继续”按钮,这表示同意了许可条款,如图2-9所示。
图2-9 单击“继续”按钮
(4)在弹出的“正在安装”界面中选择你要安装的模块,本书需要安装如下模块:
上述各模块的具体说明在本界面中也进行了详细介绍,如图2-10所示。在界面的左下角可以设置安装路径,单击“安装”按钮后开始进行安装。
图2-10 “正在安装”界面
(5)单击“安装”按钮后会弹出安装进度界面,这个过程比较耗费时间,读者需要耐心等待,如图2-11所示。
图2-11 安装进度对话框
(6)安装成功后的界面如图2-12所示。
图2-12 安装成功的界面
(7)单击计算机“开始”菜单,从“所有应用”中选择“Visual Studio 2017”就可打开刚安装的Visual Studio 2017,如图2-13所示。
图2-13 从“开始”菜单打开Visual Studio 2017
(8)首次打开Microsoft Visual Studio 2017后,将会弹出“以熟悉的环境启动”界面。因为本书讲解的是C语言开发,所以选择“Visual C#++”开发设置选项,如图2-14所示。然后单击“启动Visual Studio”按钮后开始配置,如图2-15所示。
图2-14 选择“Visual C++开发设置”选项
图2-15 “以熟悉的环境启动”界面
(9)配置完成后将来到Microsoft Visual Studio 2017的集成开发界面,如图2-16所示。
图2-16 Microsoft Visual Studio 2017默认的集成开发界面
要使用Visual Studio 2017开发C语言程序,步骤如下。
源码路径 \daima\2\2-1
(1)打开Visual Studio 2017,依次单击顶部菜单中的“文件”→“新建”→“项目”,如图2-17所示。
图2-17 新建一个项目
(2)在弹出的“新建项目”对话框中,单击左侧“模板”中的“Visual C++”选项,在右侧选中“Win32控制台应用程序”,在下方的“名称”中设置项目名称为“C++1”,如图2-18所示。
注意:
因为C语言和C++语言一直不分家,所以Visual Studio 2017并没有专门为C语言提供模板,而是对C语言和C++语言同时提供了同一个模板“Visual C++”。所以在使用Visual Studio 2017创建C语言项目时,只能在左侧“模板”中选择“Visual C++”选项。
(3)单击“确定”按钮后进入到“欢迎使用Win32应用程序向导”界面,如图2-19所示。
图2-18 “新建项目”对话框
图2-19 “欢迎使用Win32应用程序向导”对话框
(4)单击“下一步”按钮后进入“应用程序设置”界面,在“应用程序类型”中勾选“控制台应用程序”复选框,在下方的“附加选项”中勾选“预编译头”复选框,如图2-20所示。
(5)单击“完成”按钮后系统会创建一个名为“2-1”的项目,并自动生成一个名为“2-1.cpp”的程序文件,如图2-21所示。
图2-20 “Win32应用程序向导”对话框
图2-21 自动生成文件2-1.cpp
(6)将实例1-1中的代码复制到文件2-1.cpp中,具体实现代码如下所示。
拓展范例及视频二维码!
范例2-1-01:获取整型数据的大小 源码路径:光盘\演练范例\2-1-01\
范例2-1-02:获取浮点类型的信息 源码路径:光盘\演练范例\2-1-02\
#include "stdafx.h" //必须使用这个头文件
int m; //定义全局变量
int min(int x, int y);
int main(void){
int a, b; //定义变量
printf("\nEnter two Number:"); //调用库函数中的输出函数
scanf("%d,%d", &a, &b);//调用库函数中的输入函数
m = min(a, b); //调用由用户定义的函数
printf("Minimum:%d\n", m);
}
int min(int x, int y) { //定义函数
int t = 0; //声明变量
if (x<y) t = x; //如果x小,则输出x
else t = y; //如果x大,则输出y
return(t);
}
和前面的实例1-1相比,上述代码只是文件名和引用头文件发生了变化。在Visual Studio 2017环境中是“.cpp”格式的文件,引用的头文件是“stdafx.h”。
(7)开始调试上面的C语言程序,依次单击Visual Studio 2017顶部菜单中的“调试”“开始执行(不调试)(H)”命令,如图2-22所示。
图2-22 开始调试
程序执行后会提示输入两个数字,如图2-23所示。注意,这里只能输入整数,因为程序中设置的变量x和y是整型(int)的,int在C语言中表示整数。输入两个数字,例如分别输入2和3,按下Enter键后会显示较小的值,执行效果如图2-24所示。
图2-23 输入两个数字
图2-24 显示比较小的数值
知识点讲解:视频\第2章\使用轻量级开发工具DEV C++.mp4
DEV C++是一款经典的轻量级C语言开发工具,其安装大小只有几十兆,并且具有图形视图界面,操作比较容易。在DEV C++编码界面中可以使用复制和粘贴等命令,这提高了开发效率。
要安装DEV C++,步骤如下。
(1)在百度中搜索DEV C++安装包,双击可执行的exe文件进行安装,首先弹出选择语言界面,在此选择默认选项“English”,如图2-25所示。
(2)单击“OK”按钮后进入同意协议界面,如图2-26所示,在此单击“I Agree”按钮。
图2-25 选择语言
图2-26 同意协议界面
(3)在弹出的选择组件界面中勾选要安装的组件,如图2-27所示。在此建议按照默认设置进行安装,然后单击“Next”按钮。
(4)在弹出的界面中选择安装路径,如图2-28所示。
图2-27 选择组件界面
图2-28 选择安装路径
(5)单击“Install”按钮开始安装,安装完成后打开DEV C++,开发界面如图2-29所示。
图2-29 DEV C++的开发界面
要使用DEV C++运行C程序,步骤如下。
(1)依次单击顶部菜单中的“文件”“打开项目或文件”命令,然后直接打开文件first.c,打开后的界面如图2-30所示。
(2)单击顶部菜单中的“运行”命令并弹出对应的界面,如图2-31所示。“编译”命令编译当前程序,“编译运行”命令可以对当前文件同时执行编译和运行操作。
图2-30 通过DEV C++打开C程序文件
图2-31 “运行”菜单
(3)使用DEV C++编译并运行文件first.c后,执行效果和在Vsiual Studio 2017中的完全一样。
知识点讲解:视频\第2章\使用Vsiual C++ 6.0开发C语言程序.mp4
在过去一段时间内Vsiual C++ 6.0是C和C++语言首选的开发工具,是微软推出的官方工具。但是随着时间的推移,Vsiual C++ 6.0和前面讲解的Turbo C 3.0一样,只支持32位内核操作系统。而现在很多系统都是64位的,它们不支持Turbo C 3.0和Vsiual C++ 6.0。后来微软推出了Vsiual Studio .NET来代替Vsiual C++ 6.0,并且不再对Vsiual C++ 6.0进行升级和支持,所以Vsiual C++ 6.0一直停留在多年前的版本。当然Vsiual C++ 6.0在市面中还是有一定市场的,例如我们下载的很多C或C++源码都是用Vsiual C++ 6.0开发的,并且大多数计算机考试和大中专院校教学还用Vsiual C++ 6.0。下面将简单讲解使用Vsiual C++ 6.0开发C语言的基本知识。
(1)打开Visual C++ 6.0,依次选择“File”→“New”命令,弹出“New”对话框,在此选择要创建的工程类型、工程文件的保存位置和工程名称,如图2-32所示。
图2-32 设置新建工程
(2)选择Win32 Console Application选项,然后在“Project name”中输入工程名称“first”,在“Location”中输入工程的保存位置。最后单击“OK”按钮,弹出图2-33所示对话框。
图2-33 选择控制台程序类型
在此设置控制台程序的类型,此时会有以下4个选项。
此处选择A “Hello World!” application项,单击“Finish”按钮,弹出图2-34所示对话框。
图2-34 工程摘要
(3)此窗口是摘要说明窗口,它说明了程序里面包含哪些文件。单击“OK”按钮后会成功创建一个简单的控制台程序。此时返回Visual C++ 6.0的主窗口,左侧的“File View”选项卡显示了文件结构,右侧是编写代码的地方,如图2-35所示。
图2-35 Visual C++主界面
(4)建立和编辑C++源程序文件,依次选择“Project”→“Add to Project”→“New”菜单,在“New”对话框的“File”页面中选择“C++ Source File”项,输入文件名“first cpp”,然后单击“OK”按钮,编辑源程序代码。最后将文件first.c的源代码复制到这个新建文件中。
(5)编译程序,生成可执行程序。执行“Build”“Build”命令,它可以建立可执行程序,若有语法错误编译器会在窗口下方的输出窗口中显示错误信息。
(6)单击顶部菜单中的“Bulid”“Execute”命令便可在伪DOS状态下运行程序,执行效果和在Vsiual Studio 2017中的完全一样。
知识点讲解:视频\第2章\使用手机开发C语言程序.mp4
GCC(GNU Compiler Collection,GNU编译器套件),是由GNU开发的编程语言编译器。它是利用GPL许可证发行的自由软件,也是GNU计划的关键部分。GNU包括C、C++、Objective-C、Fortran、Java、Ada和Go语言的前端,也包括了这些语言的库(如libstdc++、libgcj等)。GCC的设计初衷是为GNU专门编写的一款编译器,GNU是彻底的自由软件。在开发C语言方面,GCC和本章前面讲解的DEV C++差不多,所以接下来将不再讲解这款开发工具,而是重点讲解它的变种工具C4droid。C4droid是能够在Android手机上开发C和C++语言的工具,是基于GCC实现的。
(1)在网络中搜索关键字“C4droid”,该软件的各个版本的功能都差不多,到目前为止它都是“.apk”格式的,读者下载后可以直接进行安装。
(2)安装成功后,在第一次打开C4droid时系统会提示安装GCC和SDL,这两项是必须安装的。
(3)安装成功并打开C4droid后,会发现它和计算机中的开发工具类似,也具备编码、打开、编译、运行和保存等常见功能,如图2-36所示。
图2-36 C4droid界面
(4)将文件first.c在C4droid中打开后的效果如图2-37所示。
图2-37 C4droid编码界面
(5)依次单击图2-37右下角的编译和运行按钮后可以查看运行结果,它和在计算机中的运行结果完全一样,如图2-38所示。
图2-38 C4droid调试运行界面
Visual Studio 2017容量巨大,在安装过程中一定要有耐心。如果以前在机器上安装过,那么建议用卸载工具将原来安装的软件完全卸载后再安装,这样会避免很多不必要的麻烦。在安装过程中,系统会多次重新启动,此时读者不要惊慌,计算机重启后将会自动进入安装界面。
另外,因为系统需要安装很多组件(例如数据库和IIS等组件),所以,在安装过程中总会出现这样或那样的问题。比较常见的问题是,在安装Windows组件时不能安装IIS中的Front Page服务器扩展,即使已经插入安装光盘了,但却一直提示“将XP profession service pack 2 CD插入选定的驱动器”。这是因为Windows的系统文件保护不让它通过,解决方法是关闭文件保护功能,关闭方法如下所示。
(1)运行gpedit.msc打开组策略。
(2)依次展开“计算机配置→管理模板→系统→Windows文件保护”。
(3)找到“设置文件保护”双击并修改为“已禁用”,然后重新启动系统就可以了。
上面方法最可行,但是治标不治本,还有一种方法可以彻底修复Windows文件。插入系统安装光盘,运行sfc /scannow命令检测并修复可能损坏和更改的系统文件。这样就不会再出现提示信息了。当遇到上述问题时,建议读者先试第1个方法再试第2个方法。
在Windows 7系统中,安装Visual Studio 2017最常见的问题是弹出一个“无法打开数据文件C:\Users\Administrator\AppData\Local\Temp\SIT16781.tmp\deffactory.dat”的提示。很明显,这是文件Defactory.dat的问题。解决办法是将安装包解压缩,找到“setup”目录中的文件Defactory.dat,用记事本将其打开,删除此文件中的全部内容,然后将下面的内容复制到里面:
[Version]
Signature="$Windows NT$"
Provider="Microsoft Visual Studio Team System 2010 Team Suite - CHS"
Version=900.100.00
NullString=Null String
Lang=2052
[Scenario List]
vsscenario.dll
[Scenario Factory Information]
Default Scenario=11E4C8F3-425E-43b9-B689-8BFDF03342E2
然后保存并关闭这个文件,最后重新安装即可成功。
1.编写一个C程序,在运行时输入a、b、c三个值,使程序输出其中最大值。
2.使用Visual Studio 2017创建一个项目,实现第1题中的功能。
3.编写一个C程序,用“*”输出一个长方形。
4.编写一个C程序,用“*”输出一个三角形。
5.尝试在手机上运行与调试前面4个练习中编写的代码。