书名:C语言完全自学教程
ISBN:978-7-115-59430-3
本书由人民邮电出版社发行数字版。版权所有,侵权必究。
您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。
我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。
如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。
编 著 明日科技
责任编辑 赵祥妮
人民邮电出版社出版发行 北京市丰台区成寿寺路11号
邮编 100164 电子邮件 315@ptpress.com.cn
网址 http://www.ptpress.com.cn
读者服务热线:(010)81055410
反盗版热线:(010)81055315
本书系统、全面地介绍了有关C语言程序设计所涉及的重要知识。全书分为基础篇、提高篇、高级篇和项目篇,共18章。基础篇包括迈进C语言的大门、C语言的开发环境、初识C语言、C语言基本数据类型、数据输入与输出、运算符与表达式、条件判断语句、循环语句。提高篇包括数组、字符串处理函数、输入验证、函数、指针的使用。高级篇包括复合数据类型及链表、预处理命令、文件操作、内存管理。最后,项目篇是开发一个俄罗斯方块游戏。每章内容都与实例紧密结合,有助于读者理解知识、应用知识,达到学以致用的目的。
本书附有配套资源,包括源码及教学视频。其中,源码全部经过精心测试,能够在Windows XP、Windows 7、Windows 8、Windows 10系统下编译和运行。
本书可作为大中专院校计算机专业、软件专业及相关专业的教材,同时也适合C语言爱好者、初级C语言读者参考使用。
C语言是Combined Language(组合语言)的中文简称,它作为一种计算机程序设计语言,具有高级语言和汇编语言的特点,受到广大编程人员的喜爱。C语言的应用非常广泛,既可以用于编写系统程序,也可以用于编写应用程序,还可以具体应用到单片机以及嵌入式系统的开发中。这正是大多数学习者选用C语言的原因。
在当前的教育体系下,实例教学是计算机语言教学的有效方法之一,本书将C语言知识和实用的实例结合,一方面,跟随C语言的发展方向,适应市场需求,精心选择内容,突出重点、强调实用,使知识的讲解全面、系统;另一方面,将知识融入实例讲解,使知识与实例相辅相成,既有利于学生学习知识,又有利于教师指导学生实践。
本书配套提供源码和讲解视频,读者可登录异步社区(https://www.epubit.com),按书名搜索,进入本书页面下载和观看。
如果您在学习或使用本书的过程中遇到问题或疑惑,可以通过如下方式与我们联系,我们会在1~5个工作日内给您提供解答。
服务网站:www.mingrisoft.com。
服务电话:0431-84978981/84978982。
企业QQ:4006751066。
服务邮箱:mingrisoft@mingrisoft.com。
由于编者水平有限,书中难免存在疏漏和不足之处,敬请广大读者批评指正,使本书得以改进和完善。书中使用的案例,包括产品型号、人物信息等内容均为虚构,如有雷同,纯属巧合。
编 者
2023年5月
第1章 迈进C语言的大门
第2章 C语言的开发环境
第3章 初识C语言
第4章 C语言基本数据类型
第5章 数据输入与输出
第6章 运算符与表达式
第7章 条件判断语句
第8章 循环语句
你想做计算机程序开发吗?你想开发属于自己的游戏吗?你想学习编程语言吗?如果你的答案是“是”,就从学习C语言开始吧!因为学习C语言能够让你了解编程的基本概念,让你感受编程带来的成就感,让你轻松地踏进编程的大门。C语言是学习编程的众多入门语言中的首选。赶快开始你的C语言编程之旅吧!
学习C语言之前,首先搞清楚语言是什么。
语言是人类重要的交际工具,也是人类进行沟通的主要方式。因为我们生在中国,所以大多数人从小就讲汉语,但由于地域不同,也产生了不同的地方方言。
人与人交流用人类语言,人要与计算机交互就需要用计算机语言。下面介绍计算机语言的发展。
计算机只“认”指令。在很多年前就有了机器语言,它以一种指令集体系结构存在,数据能够被计算机CPU直接解读,不需要进行任何翻译。计算机使用的是由二进制数0和1组成的一串指令,如图1.1所示。
机器语言的存在正好满足了计算机的需求,不过编程人员直接使用机器语言通常会很麻烦,于是汇编语言应运而生。用英文字母或符号串来替代机器语言的二进制码,就把不易理解和使用的机器语言变成了汇编语言。因此,使用汇编语言编写的程序代码比使用机器语言编写的更易于阅读和理解。图1.2所示是汇编指令。
图1.1 机器指令
汇编语言也有弊端,它的助记符多且难记,而且汇编语言依赖于硬件系统,于是人们又发明了高级语言。高级语言的语法和格式类似于英文的语法,避免了对硬件的直接操作。高级语言并不是某一种具体的语言,其包括流行的C语言、Java、C++等,如图1.3所示,本节不详细介绍其他编程语言,主要介绍C语言。
图1.2 汇编指令
图1.3 高级语言
1970年,UNIX的研发者丹尼斯•里奇[Dennis Ritchie,图1.4(a)]和肯尼思•汤普森[Ken-neth Thompson,图1.4(b)]研制出BCPL(简称B语言),而C语言是在B语言的基础上发展和完善而来的。20世纪70年代初期,丹尼斯•里奇第一次把B语言改为C语言。至此,C语言就诞生了。C语言完整的发展历程如图1.5所示。
(a) (b)
图1.4 丹尼斯•里奇和肯尼思•汤普森
图1.5 C语言完整的发展历程
C语言是一种面向过程的语言,同时具有高级语言和汇编语言的优点。对于大多数程序员来说,C语言是学习编程的首选语言。C语言使用起来简单,容易上手。所以,C语言一直备受初学者的青睐,曾在编程语言排行榜排名第二。图1.6所示的是2021年11月的编程语言排行榜前5名,增长值最多的就是C语言,达到5.10%,由此可见,C语言是许多程序员入门的首选编程语言。
图1.6 编程语言排行榜前5名
C语言是一种通用的程序设计语言,主要用来进行系统程序设计,其具有如下特点。
从C语言的发展历史可以看出,它继承了低级语言的优点,能产生高效的代码,并且代码具有较好的可读性和可编写性。一般情况下,C语言生成的目标代码的运行效率只比汇编程序的低10%~20%。
C语言中的语法“不拘一格”,可在原有语法基础上进行创造、复合,从而给程序员更多的想象和发挥空间。
除了本身所具有的类型,C语言还可以通过丰富的运算符和自定义的结构类型来表示几乎任何复杂的数据类型,实现所需要的功能。
C语言的主要特点体现在它的语法形式与人们所使用的日常语言的语法形式相似,书写形式自由,结构规范,并且只需简单的控制语句即可轻松控制程序流程,满足烦琐的程序要求。
C语言具有良好的可移植性,这使得C语言程序在不同的操作系统下,只需要简单的修改或者不修改即可进行跨平台的程序开发操作。
正是由于C语言拥有上述特点,因此它在程序员群体中备受青睐。
C语言诞生于20世纪70年代,是“标准的70后”,为出现较早的编程语言。它可以做到“一次编写,处处编译”,而且在很多平台上都有强大的编译器支持,也有强大的集成开发环境支持,例如Windows平台上有微软公司的Visual Studio,iOS平台上有Xcode。
C语言应用广泛, 接下来简单介绍一些应用C语言的领域。
首先介绍C语言应用于单片机系统领域的情况。提到单片机,电子/电气相关专业的同学可能知道,单片机开发应用的语言主要有两种:一种是汇编语言,另一种是C语言。汇编语言程序比C语言程序更容易控制单片机,但是C语言的可移植性比较好。就算不太了解硬件的内部结构,编译器也能为这个系统设计合理地分配内存单元,设计出简单的单片机程序。当将C语言应用于单片机系统领域时,只要实现好代码优化功能,用C语言开发单片机系统就会提高工作效率,所以目前C语言是开发单片机系统的主流语言。单片机和C语言结合能够控制许多简单的系统,例如图1.7所示的控制台灯、控制鱼缸自动加氧气等系统。
图1.7 单片机和C语言结合实现控制系统
Linux操作系统大部分就是用C语言编写的(见图1.8),当然Linux操作系统中的应用软件大多也是用C语言编写的,且这些应用软件的安全性非常高。
图1.8 Linux操作系统
不仅如此,C语言还会应用于嵌入式系统领域,嵌入式系统涉及生活中的方方面面,例如汽车、家电、工业机器人等。如图1.9所示,我们熟悉的智能家居控制系统、五彩斑斓的霓虹灯以及航拍飞行器系统等,都是能用C语言来实现的。
图1.9 嵌入式系统
其实,C语言还应用到了游戏领域,说不定你玩的游戏就是由C语言编写的呢。如图1.10所示,无论是简单的小游戏(例如五子棋),还是复杂的大型游戏(例如《Quake》,即《雷神之锤》),都是可以用C语言编写的。
图1.10 游戏领域
C语言具有很强的绘画能力、数据处理能力和可移植性,所以可以用C语言编写系统软件、制作动画、绘制二维图形和三维图形等。不仅如此,C语言的数值计算能力也很强,所以它也能用于进行数据分析。
可见,C语言的应用十分广泛,涉及我们生活的各个领域、各个方面。
随着时代的发展,人类的需求也越来越多,C语言的功能在某些方面就显得“不吃香”了,计算机领域的优秀人员在C语言的基础上发展了C++、VC++以及C#语言等。究竟C语言与其他语言有什么内在联系呢?下面就介绍C语言与C++、VC++、Java和Python的比较。
C语言和C++主要的区别就是,C语言是面向过程的语言,C++是面向对象的语言。C++引入了重载、内联函数以及异常处理等,还涉及类、继承、模板以及包容器类等。图1.11所示的是C语言代码,图1.12所示的是C++代码。
图1.11 C语言代码
图1.12 C++代码
比较图1.11和图1.12可知,两种语言的输出语句不同,同时C++代码引用了类的概念,而C语言代码不能引用类,这是C和C++代码的区别。
说明
面向过程和面向对象是编程思想。面向过程是一种以过程为中心的编程思想,是一种实现过程的思考方式;面向对象是把现实的事物抽象成对象的编程思想。
VC++(又称VC或Visual C++)是微软公司开发的集成开发环境(Integrated Development Environment,IDE),也就是在Windows平台上使用C++的编程环境。严格来说,VC++不是一门语言,它是由C++扩展而来的,VC++就是可视化的C++。图1.13所示的是VC++代码。
图1.13 VC++代码
VC++代码最终实现的是一个窗体,运行结果如图1.14所示;而C语言代码最终的结果是显示在控制台上的,如图1.15所示。
图1.14 运行VC++代码实现的窗体
图1.15 C语言代码运行结果
C语言和Java的区别就在于一个是面向过程的,一个是面向对象的。C语言有指针的概念,指针也是C语言的精髓。想要学好C语言,就必须学好指针。Java是没有指针的。
总的来说,C语言是基础语言,Java是面向对象的一门语言,在学习Java语言前,建议最好还是先学习C语言。而 Java更利于开发应用,比较实用。Java可以应用于网站后台开发、Android开发、PC开发,近年又“涉足”大数据领域。图1.16所示的是Java代码。
图1.16 Java代码
将图1.16中的Java代码与图1.11中的C语言代码相比,就能看出Java代码和C语言代码的区别。Java和C语言的输出语句不同,主方法(C语言中称主函数)定义的形式也不同,这些都是C语言和Java的不同之处。
C语言是编译型语言,C语言程序经过编译后生成机器码,再运行时执行速度快,一般用于操作系统、驱动等底层开发。而Python是编译型还是解释型语言的界限并不明显,但大致上可以理解为解释型语言。 Python高度集成,适合软件的快速开发,主要用于系统运维、数据分析、人工智能、云计算等领域,是近几年比较“火”的语言。图1.17所示的是Python代码。
从图1.17可知,Python代码使用的是print输出语句,且代码的句末没有分号,这是Python的友好之处。
图1.17 Python代码
(1)C语言程序总是从( )开始执行。
A.第一行代码
B.第一个定义的函数
C.主函数
D.第一个被调用的函数
(2)有关C语言的描述,以下选项错误的是( )。
A.C语言是一种面向过程的语言
B.C语言程序的书写格式自由,一条语句可以写在多行上
C.C语言程序的基本单位是函数
D.C语言中字母大小写通用
(3)运行C语言程序,若成功运行且编译器没有提示任何错误或警告信息,说明( )。
A.源程序正确无误
B.源程序无编译和运行错误,但无法确定运行结果的正确性
C.源程序有运行错误
D.源程序有语法错误
(4)众所周知,C语言是在B语言的基础上发展和完善而来的,那么在20 世纪70 年代初期,是谁第一次把B 语言改为C 语言的呢?( )
A.詹姆斯•戈斯林
B.丹尼斯•里奇
C.肯尼思•汤普森
D.马克•扎克伯格
(1)C
(2)D
(3)B
(4)B
编写文字需要使用Word,制作表格需要使用Excel,设计演示文稿需要使用PowerPoint,编写程序同样也需要工具。可能有人知道,Java语言常使用的开发环境是Eclipse,Python常使用的开发环境是PyCharm,C语言常使用的开发环境是Visual Studio 和Visual C++,本章将详细介绍C语言的这两个开发环境。
C语言的开发环境有很多种,有刚开始的Turbo C,后来有Visual C++,还有由Bloodshed 团队推出的Dev-C++,另外有Visual Studio系列,这些软件都可以用来编写C语言程序,且它们都是在Windows系统下安装的。在Linux系统下,用于C语言程序开发的有GCC(GNU Compiler Collection,GNU编译器套件)等。因此C语言有很多的开发环境。接下来就简单介绍这几种开发环境。
说明
本书会详细介绍Visual C++ 6.0和Visual Studio 2019两个开发环境,但读者选择安装一个开发环境即可。
Turbo C (简称TC)是常见的一种运用C语言的集成开发环境,图2.1所示的是Turbo C的工作界面。Turbo C的优点是它使用了一系列下拉式菜单,将文本编辑、程序编译、链接以及程序运行集于一身,它还拥有图形库和文本窗口函数库。Turbo C 2.0又增加了查错功能,还增设了仿真功能,这方便了程序的开发。Turbo C虽然功能很强大,但是也有弊端。它的弊端是不能使用鼠标控制,这就给开发者带来了麻烦,因为大家平常习惯于用鼠标,所以一些开发者不喜欢使用Turbo C。
图2.1 Turbo C的工作界面
Visual C++ 6.0(简称VC、VC++、VC6)是微软公司的产品,图2.2所示的是Visual C++ 6.0的工作界面。Visual C++ 6.0诞生于1998年,与Windows系统一样,有标准版(Standard Edition)、专业版(Professional Edition)与企业版(Enterprise Edition)3种,同时还分英文版和中文版。Visual C++ 6.0是微软公司最成功的产品之一,但现在微软已经不支持Visual C++ 6.0,安装包无法在网上下载,而且Visual C++ 6.0在Windows 7、Windows 8、Windows 10系统下都存在兼容性问题,所以目前很少用Visual C++ 6.0来开发,取而代之的是微软公司推出的一系列Visual Studio产品。
图2.2 Visual C++6.0的工作界面
Dev-C++也是一种开发环境,适合初学者使用,因为它是一种集成开发环境,不需要安装,直接打开dev-c++.exe就可以使用。尽管如此,它却没有在商业级的软件开发中使用。Dev-C++刚开始是由Bloodshed 该团队推出的,后由于资金等原因该团队在开发完 4.9.9.2版本后停止更新,后来Orwell等团队继续更新了几个版本,目前最新版本是由Embarcadero公司资助推出的5.11版本。
Visual Studio(简称VS)是微软公司的开发工具包。本书使用Visual Studio 2019开发C语言程序,图2.3所示的是Visual Studio 2019界面。Visual Studio是一个基本完整的开发工具集,用Visual Studio写的代码适用于微软支持的所有平台。Visual Studio不仅可以编写C语言代码,还可以开发C++、C#、ASP.NET程序等,可见Visual Studio很强大。Visual Studio是目前流行的Windows系统下的应用程序的集成开发环境。
图2.3 Visual Studio 2019界面
Linux是类UNIX的操作系统,而GCC是一个用于编程开发的自由编译器。“GCC”最初是GNU C Compiler的英文缩写,因为它最开始只是C语言程序的编译器,如今它已经是众多语言程序的编译器,如C、C++、Ada、Java等,所以GCC的全称也由原来的GNU C Compiler变为GNU Compiler Collection。GCC功能很强大、性能好,它可以在多种硬件平台上编译出可执行的超级编译器,效率高。
安装Visual Studio 2019的系统及硬件要求如表2.1所示。
表2.1 安装Visual Studio 2019的系统及硬件要求
系统及硬件 |
要求 |
---|---|
处理器 |
2.0 GHZ双核处理器 |
RAM |
4GB,建议使用8GB内存 |
可用硬盘空间 |
系统盘上最少需要10GB的可用空间 |
显示器 |
1024像素×768像素,增强色16位 |
操作系统及所需补丁 |
Windows 7(SP1)、Windows 8、Windows 8.1、Windows Server 2008 R2 SP1(x64)、Windows Server 2012(x64)、Windows 10 |
下面以Visual Studio 2019社区版的安装与启动为例来讲解具体的步骤。
说明
Visual Studio 2019社区版是完全免费的。
安装与启动Visual Studio 2019社区版的步骤如下。
(1)Visual Studio 2019社区版的安装文件是.exe可执行文件,其命名格式为“vs_community__编译版本号.exe”,本书中下载的安装文件为vs_community__1230733315.1531385802.exe文件,双击该文件开始安装。
说明
安装Visual Studio 2019开发环境要求计算机上必须安装了.NET Framework 4.6框架,如果没有安装,请先到微软官方网站下载并安装。
(2)双击文件后会跳转到Visual Studio 2019安装界面,在该界面中单击“继续”按钮,会自动跳转到安装选择项界面,如图2.4所示。在该界面中将“使用C++的桌面开发”这个复选框选中,其他的复选框读者可以根据自己的开发需要确定是否选中。设置完要安装的功能后,在界面下方的“位置”处选择要安装的路径,这里建议不要安装在系统盘上,可以选择一个其他磁盘进行安装,这里将其安装到了D盘。设置完成后,单击“安装”按钮。
注意
在安装Visual Studio 2019开发环境时,读者计算机界面中“使用C++的桌面开发”这一复选框的位置可能会与本书中介绍的位置不同,一定要看清楚再勾选。
图2.4 安装选择项界面
注意
在安装Visual Studio 2019开发环境时,一定要确保计算机处于联网状态,否则无法正常安装。
(3)接着会跳转到图2.5所示的安装进度界面,该界面会显示当前的下载及安装进度,当进度达到100%后会自动进入安装完成页。
图2.5 安装进度界面
(4)在Windows的“开始”菜单中找到Visual Studio 2019开发环境,如图2.6所示,双击“Visual Studio 2019”,如果是第一次打开Visual Studio 2019,会出现图2.7所示的界面,直接单击“以后再说”按钮。
图2.6 打开Visual Studio 2019
(注:图中“帐”应为账,后文同。)
图2.7 欢迎界面
(5)进入Visual Studio 2019环境的开发设置界面,如图2.8所示,在“开发设置”中选择“Visual C++”,颜色可选择自己喜欢的颜色,最后单击“启动Visual Studio”按钮。
图2.8 开发设置界面
(6)进入Visual Studio 2019环境的启动界面,等待几秒后,会进入图2.9所示的界面。
图2.9 启动之后的界面
至此,Visual Studio 2019就安装成功了,并且已经启动了。
Visual C++ 6.0是一个功能强大的可视化软件开发工具,它将程序的代码编辑、编译、链接和调试等功能集于一身。
如今微软公司已经停止了对Visual C++ 6.0的技术支持,并且在官网无法下载其安装包。由于兼容性的问题,在Windows 10系统中需要安装Visual C++ 6.0的英文版,本书中介绍的就是Visual C++ 6.0的英文版。
Visual C++ 6.0的具体安装步骤如下。
(1)双击打开Visual C++ 6.0的安装文件夹中的“SETUP.EXE”文件,如图2.10所示。
图2.10 双击安装文件开始安装Visual C++6.0
(2)进入安装向导界面,如图2.11所示,单击“Next”按钮(下一步按钮)。进入最终用户许可协议界面,如图2.12所示,首先选择“I accept the agreement”选项(接受协议选项),然后单击下一步按钮。
图2.11 安装向导界面
图2.12 最终用户许可协议界面
(3)进入产品号和用户ID界面,如图2.13所示。在安装包内找到“CDKEY.txt”文件,填写产品ID。姓名和公司名称根据情况填写,可以采用默认设置,不对其进行修改,单击“Next”按钮。
图2.13 产品号和用户ID界面
(4)进入Visual C++ 6.0 企业版界面,如图2.14所示。在该界面选择第一项“Install Visual C++ 6.0 Enterprise Editi”(安装Visual C++ 6.0 企业版),然后单击“Next”按钮。
图2.14 Visual C++ 6.0 企业版界面
(5)进入选择公用安装文件夹界面,如图2.15所示。公用文件默认是存储在C盘中的,单击“Browse”按钮(浏览按钮),选择安装路径,这里建议安装在磁盘剩余空间比较大的磁盘中,单击“Next”按钮。
图2.15 选择公用安装文件夹界面
(6)进入安装程序的欢迎界面,如图2.16所示,单击“继续”按钮。
图2.16 安装程序的欢迎界面
(7)进入产品ID确认界面,如图2.17所示。此界面中会显示要安装的Visual C++ 6.0软件的产品ID(在向微软公司请求技术支持时,需要提供此产品ID),单击“确定”按钮。
图2.17 产品ID确认界面
(8)如果读者的计算机中安装过Visual C++ 6.0,尽管已经卸载了,但是在重新安装时还是会出现图2.18所示的提示信息。安装软件检测到系统之前安装过Visual C++ 6.0,如果想要覆盖安装的话,单击“是”按钮;如果要将Visual C++ 6.0安装在其他位置,单击“否”按钮。这里单击“是”按钮,继续安装。
图2.18 重新安装的提示信息
(9)进入选择安装类型界面,如图2.19所示。此界面中的第一项“Typical”为传统安装,第二项“Custom”为自定义安装,这里选择“Typical”安装类型,即单击“Typical”对应的图标。
图2.19 选择安装类型界面
(10)进入注册环境变量界面,如图2.20所示。在此界面中选中“Register Environment Variables”复选框,注册环境变量,单击“OK”按钮。
图2.20 注册环境变量界面
(11)进入数据更新提示界面,如图2.21所示,单击“是”就会开始安装Visual C++ 6.0,并会显示安装进度,如图2.22所示。
图2.21 数据更新提示界面
图2.22 安装进度
(12)当进度达到100%时,则会进入图2.23所示的界面,提示Windows NT Debug Symbols错误标志,这是Windows 10系统的兼容性问题,单击“确定”即可。
图2.23 系统NT错误界面
(13)完成以上操作后,会进入图2.24所示的界面,出现未响应的情况。这同样是Windows 10系统的兼容性问题,这时单击鼠标就会弹出图2.25所示的界面,单击“关闭程序”即可。然后在系统的“开始”菜单中找到Visual C++ 6.0的图标,单击图标就可以打开Visual C++ 6.0,即可正常使用Visual C++ 6.0。
图2.24 未响应界面
图2.25 关闭程序界面
本节会对Visual Studio 2019开发环境中的菜单栏、工具栏、解决方案资源管理器、“选项”界面和错误输出界面等进行介绍,并会对Visual C++ 6.0的菜单栏、工具栏、Workspace界面、选项界面和错误输出界面进行介绍。
初期学习C语言编程主要在Windows控制台应用程序环境下进行,下面将按步骤介绍控制台应用程序的创建过程,具体如下。
(1)安装Visual Studio 2019之后,打开Visual Studio 2019开发环境,进入Visual Studio 2019开发环境界面,然后单击右侧栏中的“创建新项目”,如图2.26所示。
图2.26 单击“创建新项目”
(2)完成步骤(1)就会自动跳转到图2.27所示的创建新项目界面,首先选中“空项目”,然后单击“下一步”按钮。
图2.27 创建新项目
(3)完成步骤(2)就会自动跳转到图2.28所示的配置新项目界面,在“项目名称”文本框中输入要创建的项目名称(文件夹名称),例如Dome;在“位置”文本框中设置文件夹的保存地址,可以通过单击右边的按钮修改源文件的存储位置;最后单击“创建”按钮即可。
图2.28 配置新项目
(4)完成步骤(3)就会自动跳转到图2.29所示的创建项目界面。
图2.29 创建项目界面
(5)选择“解决方案资源管理器”中的源文件,右击“源文件”,选择“添加”中的“新建项”,如图2.30所示,或者使用快捷键<Ctrl+Shift+A>,进入添加项目界面。
图2.30 选择“添加”中的“新建项”
(6)完成步骤(5)就会自动跳转到图2.31所示的添加项目界面。
图2.31 添加项目界面
添加项目时首先选择“Visual C++”选项,这时右侧列表框中会显示可以创建的不同文件。因为要创建C源文件,所以这里选择“C++文件(.cpp)”选项,在下方的“名称”文本框中输入要创建的C源文件的名称,例如Dome.c。“位置”文本框中的是文件夹的保存地址,这里默认是步骤(3)中创建的文件夹的位置,不更改。
注意
因为要创建的是C源文件,所以在文本框中要将默认的扩展名.cpp改为.c。例如创建名称为Dome的C源文件,那么在文本框中应该显示“Dome.c”。
(7)单击“添加”按钮,这样就添加了一个C源文件,如图2.32所示。
图2.32 完成添加C源文件
菜单栏显示了所有可用的Visual Studio 2019命令,除了“文件”“编辑”“视图”“窗口”和“帮助”菜单之外,还提供了编程专用的功能菜单,如“项目”“生成”“调试”“工具”和“测试”等,如图2.33所示。
图2.33 Visual Studio 2019菜单栏
每个菜单中都包含若干菜单命令,分别用于执行不同的操作,例如,“调试”菜单中有调试程序的各种命令,包括“开始调试”“开始执行(不调试)”和“新建断点”等,如图2.34所示。
图2.34 “调试”菜单
为了操作更方便、快捷,菜单中常用的命令按功能分组分别放入了相应的工具栏。通过工具栏可以快速使用常用的菜单命令。常用的工具栏有标准工具栏和调试工具栏,下面分别介绍。
(1)标准工具栏包括大多数常用的命令按钮,如新建项目、打开文件、保存、全部保存等。标准工具栏如图2.35所示。
图2.35 Visual Studio 2019标准工具栏
(2)调试工具栏包括对程序进行调试的快捷按钮,如图2.36所示。
图2.36 Visual Studio 2019调试工具栏
说明
在调试程序或运行程序的过程中,通常可用以下4种快捷键来操作:
(1)按快捷键〈F5〉实现调试运行程序;
(2)按快捷键〈Ctrl+F5〉实现不调试运行程序;
(3)按快捷键〈F11〉实现逐语句调试程序;
(4)按快捷键〈F10〉实现逐过程调试程序。
解决方案资源管理器(见图2.37)提供了项目及文件的视图,并且提供了对项目和文件相关命令的便捷访问。与解决方案资源管理器关联的工具栏提供了适用于列表中突出显示项的常用命令。若要访问解决方案资源管理器,可以选择“视图”→“解决方案资源管理器”菜单来打开。
图2.37 解决方案资源管理器
选项界面可以对环境进行设置,选择菜单栏中的“工具”→“选项”,就能打开图2.38所示的选项界面。可以在其中设置开发环境主题等。
图2.38 选项界面
错误输出界面对程序中的错误进行及时提示,并提供了可能的解决方法。例如,当运行某行末尾未输入分号的代码时,错误输出界面中会显示错误信息,如图2.39所示。错误输出界面就好像一个错误提示器,它可以将程序中的错误代码及时显示给开发人员,并帮助开发人员通过提示信息找到相应的错误代码。
图2.39 错误输出界面
说明
双击错误输出界面中的某项,Visual Studio 2019开发环境会自动定位到发生错误的代码。
首先介绍使用Visual C++ 6.0创建C项目的方法,步骤如下。
(1)安装Visual C++ 6.0之后,选择“开始”菜单中的“Microsoft Visual C++ 6.0”命令,如图2.40所示。
图2.40 单击“Microsoft Visual C++ 6.0”命令
(2)打开Visual C++ 6.0开发环境,进入Visual C++ 6.0界面。在编写程序前,首先要创建一个新文件。在Visual C++ 6.0界面中选择“File”(文件)菜单中的“New”(新建)命令,或者按快捷键<Ctrl+N>,这样就可以创建一个新文件,如图2.41所示。
图2.41 创建一个新文件
(3)此时会出现一个选择创建文件的对话框,如图2.42所示,在其中可以选择要创建的文件的类型。
图2.42 选择创建文件
要创建一个C源文件,首先选择“Files”选项卡,这时会在列表框中显示可以创建的不同文件。选择其中的选项,在右边的“File”文本框中输入要创建的文件的名称。
注意
因为要创建的是C源文件,所以在文本框中要将C源文件的扩展名一起输入。例如创建名称为Demo的C源文件,应该在文本框中输入“Demo.c”。
“File”文本框的下面还有一个“Location”(位置)文本框,该文本框中是源文件的保存地址,可以通过单击右边的按钮修改源文件的保存位置。
(4)当指定好C源文件的保存位置和名称后,单击“OK”按钮。此时可以看到在开发环境中指定创建的C源文件,如图2.43所示。
图2.43 新创建的文件
菜单栏显示了所有可用的Visual C++ 6.0命令,除了“File”(文件)、“Edit”(编辑)、“View”(视图)、“Window”(窗口)和“Help”(帮助)菜单之外,还提供了编程专用的功能菜单,如“Project”(项目)、“Build”(组建)、“Tools”(工具)等,如图2.44所示。
图2.44 Visual C++ 6.0菜单栏
每个菜单中都包含若干菜单命令,分别用于执行不同的操作,例如,“Build”菜单中包括调试程序的各种命令,如“Compile”(编译)、“Build”(组建)和“Execute”(执行)等,如图2.45所示。
图2.45 “Build”菜单
Visual C++ 6.0的标准工具栏包括大多数常用的命令按钮,如新建项目、打开文件、保存、全部保存等。标准工具栏如图2.46所示。
图2.46 Visual C++ 6.0标准工具栏
Workspace窗口类似于Visual Studio 2019环境中的解决方案资源管理器,如图2.47所示,它提供了项目及文件的视图,并且提供了对项目和文件相关命令的便捷访问。与此窗口关联的工具栏提供了适用于列表中突出显示项的常用命令。若要访问Workspace窗口,可以选择“View”→“ Workspace”(或者按快捷键<Alt+0>)来打开。
图2.47 Workspace窗口
选项界面(Options界面)可以对环境进行设置,选择菜单栏中的“Tools” →“Options”,就能打开图2.48所示的选项界面,可以在其中设置代码文字、颜色等。
图2.48 选项界面
Visual C++ 6.0的错误输出界面能够显示程序中的错误。它可以将程序中的错误代码及时显示给开发人员,帮助开发人员找到相应的错误代码。若要访问错误输出界面,可以选择“View”→“Output”(或者按快捷键<Alt+1>)。例如,当运行某行末尾未输入分号的代码时,错误输出界面中会显示图2.49所示的错误信息。
图2.49 错误输出界面显示的错误信息
一般学习编程的目的就是做开发,让自己成为优秀的开发人员,本节会利用一个小程序来介绍开发C语言程序的过程,让你真真正正感受到C语言程序的魅力和价值。整个开发的步骤如图2.50所示。
图2.50 C语言程序开发步骤
本实例的目的是让读者实际动手操作,设计的程序“简单而不失内涵”,该程序实现的是输出图2.51所示的“学无止境,C位出道”内容。
图2.51 输出“学无止镜,C位出道”
程序的流程图如图2.52所示。
图2.52 程序的流程图
基本的功能已经设定完成,接下来就是按照设定的功能编写代码。
使用Visual Studio 2019编写程序,然后在相应的项目文件中输入代码。
具体代码如下:
注意
安装的是2.2节中介绍的哪个开发环境,就在哪个环境中编写代码。
按照2.3.1小节介绍的创建项目的步骤完成一个新项目的创建,将上面的代码输入到Dome.c文件中,如图2.53所示,按快捷键<Ctrl+S>进行保存。
图2.53 输入代码
注意
输入代码时对输入法是有要求的,输入法需要是英文(半角)字符状态的。我们来用搜狗输入法举个例子,图2.54所示的输入设置是错误的,图2.55所示的输入设置是正确的。
图2.54 错误输入设置
图2.55 正确输入设置
(1)在Visual Studio 2019菜单栏上选择“生成”,就会出现下拉菜单,其中有一个“编译”选项,如图2.56所示。
图2.56 “生成”菜单
(2)使用快捷键<Ctrl+F7>编译程序。
如果编译程序之后,在输出工作空间的位置输出如图2.57所示的“生成:成功1个,失败0个,最新0个,跳过0个”,则表示编译成功。
图2.57 Visual Studio 2019编译成功界面
(1) 如果此时运行程序,则会出现图2.58所示的对话框,询问用户是否创建.exe可执行文件。如果单击“是”按钮,则会链接生成.exe文件,即可运行程序并观察程序的运行结果。
图2.58 询问用户是否创建.exe可执行文件
(2)在Visual Studio 2019的菜单栏上选择“调试”,在下拉菜单中有“开始执行(不调试)”选项,单击该选项(或使用快捷键<Ctrl+F5>),如图2.59所示,运行程序,结果如图2.60所示。
图2.59 单击“开始执行(不调试)”选项
图2.60 运行结果
说明
如果你觉得程序没有错误,可以直接运行程序。
控制台颜色的修改过程如下。
(1)按快捷键<Ctrl+F5>运行程序,在控制台的标题栏上右击,在弹出的快捷菜单中选择“属性”命令,如图2.61所示。
图2.61 选择“属性”命令
(2)此时会弹出“属性”对话框,在“颜色”选项卡中对“屏幕文字”和“屏幕背景”进行修改,如图2.62所示。读者可以根据自己的喜好设定颜色并显示。
图2.62 “属性”对话框中的“颜色”选项卡
本小节程序的目标和2.4.1小节介绍的一样,这里不赘述,输出的内容依然是“学无止境,C位出道”。
设计程序的流程图和2.4.1小节介绍的一样,如图2.52所示。
按照2.3.2小节介绍的创建项目的步骤完成一个C源文件的创建,将程序代码输入其中,如图2.63所示。按快捷键<Ctrl+S>进行保存。
图2.63 输入程序代码
(1)程序已经编写完成,可以对写好的程序进行编译。选择“Build”菜单中的“Compile Dome.c”命令,如图2.64所示。
图2.64 选择“Compile Dome.c”命令
(2)使用快捷键<Ctrl+F7>编译程序。
使用上述2种方法都会出现图2.65所示的对话框,询问用户是否创建默认项目工作环境,单击“是” 按钮即可。
图2.65 询问用户是否创建默认项目工作环境
输出工作空间出现图2.66所示的“0 error(s) ,0 warning(s)”,表示没有错误,编译成功。
图2.66 Visual C++ 6.0编译成功界面
(1)此时程序已经被编译,但是还没有链接生成.exe可执行文件,如果此时运行程序则会出现图2.67所示的提示对话框,询问用户是否要创建.exe可执行文件。如果单击“是”按钮,则会链接生成.exe文件,即可运行程序并观察运行结果。
图2.67 询问用户是否要创建.exe可执行文件
(2)当然也有直接创建.exe文件的操作方法。可以选择“Build”菜单中的“Build Demo.exe”命令,执行创建.exe文件的操作,如图2.68所示。
图2.68 选择“Build Demo. exe”命令
注意
在编译程序时可以直接选择“Build Demo. exe”命令进行编译、链接,这样就不用进行编译操作,而可以直接将编译和链接操作一起执行。
(3)只有运行程序才可以看到有关程序运行的结果,选择“Build”菜单中的“Execute Demo. exe”命令(或按快捷键<Ctrl+F5>)运行程序,即可观察到运行结果,如图2.69所示。
图2.69 程序运行结果
Visual C++ 6.0提供了许多有用的工具栏按钮和快捷键,简单介绍如下。
● :编译(Compile)操作。
● :组建(Build)操作。
● :执行(Execute)操作。
● Ctrl+N:创建一个新文件。
● Ctrl+]:检测程序中的括号是否匹配。
● F7:组建(Build)操作。
● Ctrl+F5:执行(Execute)操作。
● Alt+F8:整理多段不整齐的源码。
● F5:进行调试。
注意
本书只介绍Visual Studio 2019中出现错误的解决方法,Visual C++ 6.0中出现同样错误的解决方法是类似的。
程序能顺利运行是非常好的一件事,不过有时不是所有事情都是一帆风顺的,学习过程中不可避免会遇到问题,学习编程也一样。当你开始学习编程时就要做好解决问题的准备。
在C语言的开发环境中编译程序时,如果程序出现语法错误,该环境就会提示错误的位置,例如图2.70所示的是Visual C++ 6.0中提示的“1 error(s),0 warning(s)”,图2.71所示的是Visual Studio 2019中提示的“生成:成功0个,失败1个,最新0个,跳过0个”。
图2.70 Visual C++ 6.0编译失败界面
图2.71 Visual Studio 2019编译失败界面
图2.70和图2.71都表示编译失败。我们将鼠标指针移动到图2.71提示错误的位置并双击,其就会变成蓝色,如图2.72所示,在代码错误的位置会有一个,表示此时附近的代码是有错的,在这段代码中错误的位置在第6行。
图2.72 错误提示
从图2.72中也可以看到,如果出现错误,代码的下面会有红色的波浪线。这个错误提示表示第6行语法错误。经过仔细观察发现,是第5行puts()函数后面忘记加“;”,在puts()函数后加上“;”,再次编译就会通过,然后运行程序。
这里发现了一个问题,明明是第5行puts()函数出现语法错误,为什么提示错误在第6行的位置?这是因为在C语言中,每行要有“;”来表示此句结束,在第5行漏写了“;”,编译器就认为第5行和第6行是一句话,所以就会在第6行提示语法错误。如果在提示错误的位置没有找到错误,那一般会在上一行中找到。
这只是常见的错误之一,接下来我们来列举一下初学者常遇到的问题以及对应的调试方法。
说明
Visual Studio 2019编译程序出现错误,在错误位置双击就会出现箭头提示,Visual C++ 6.0中也可使用类似的方法来找到程序的错误。
所有的代码都是在英文(半角)输入法状态下编写的。编写代码时往往要实现输出中文的提示,这样在切换输入法时容易出现错误,符号可能会被误输成中文符号,这样编译器编译程序时就会出现错误,例如图2.73所示的错误提示。
图2.73 中英文符号混淆错误提示
从图2.73可以看到提示错误在代码的第6行,出现了未声明的标识符“;”,根据图2.73的内容可知,我们应该在代码的第6行寻找错误,会发现第6行的语句结束符号是中文分号,将其改为英文分号,修改之后再次运行。
未声明标识符也是初学者常犯的错误,出现该错误时,编译器会提示“XXX未声明的标识符”,如图2.74所示。从错误提示可以看出,i这个标识符未声明,也就是这个字母的含义在此程序中未被声明,提示在代码的第6行出现错误,那就去第6行找到字母i,分析出现此错误的原因,修改之后再重新运行。
图2.74 未声明标识符错误提示
格式输入输出错误也是初学者常犯的错误,例如定义的变量是整型的,输入输出时却用浮点型或者字符型的,编译器会报告出错,程序虽然能运行,但是在输入输出数据时会出现错误,如图2.75所示。
图2.75 格式输入输出错误提示
从图2.75可以看出,是代码的第8行出现错误,因此调试程序时在代码的第8行寻找错误,将格式%f改为%d,再次运行程序。
说明
以上是初学者编写程序时常遇到的问题,当然还会有其他一些问题,请仔细编写代码。
(1)试输出“贵有恒,何必三更起五更睡;最无益,只怕一日曝十日寒”,效果如图2.76所示。[提示:使用puts()函数]
图2.76 输出结果
(2)已知正方形的边长为4,计算正方形的周长,并将结果输出,运行结果如图2.77所示。(提示:使用乘法)
图2.77 输出计算出的正方形周长
(3)世界知名互联网公司一般都有比较独特的企业文化,如在Facebook(现更名为Meta)的办公室中挂着这样一条充满野心和奋斗的标语:Go Big Or Go Home!(要么出众,要么出局!)。旁边还配上了哥斯拉的照片,让这条标语显得格外“炫酷”。下面就用C语言实现这条标语,实现效果如图2.78所示。(提示:使用特殊符号)
图2.78 实现效果
(4)丹尼斯·里奇是“计算机时代的无形之王”,计算机及网络技术的奠定者,也是C语言之父、UNIX之父。1973年,Multics项目失败后,闲来无聊,丹尼斯·里奇和肯尼思·汤普森想玩模拟在太阳系航行的电子游戏——《Space Travel》,但当时的机器没有操作系统。于是,得益于二人的工作,出现了C语言,以及用C语言开发的UNIX操作系统,从而拉开了“程序开发时代”的序幕。请编写一个程序,输出C语言之父——丹尼斯·里奇的传奇吧,实现效果如图2.79所示。
图2.79 实现效果
(5)IT界的“领头羊”——微软公司采用“eat our own dog food”(吃我们自己的狗粮)的方法来检测其研究的软件。这种方法传达的观点是,研发人员在使用自己开发的软件时能够很快发现漏洞或者不对的地方,也就是研发人员通过试用自己研发的产品来确保其功能完美展现,以满足用户的使用要求。请用C语言来实现图2.80所示的效果。
图2.80 实现效果