C语言开发从入门到精通

978-7-115-42016-9
作者: 王长青 韩海玲
译者:
编辑: 张涛
分类: C语言

图书目录:

详情

从初学者的角度出发,通过通俗易懂的语言,丰富多彩的实例,详细介绍了使用VisualC++6.0(部分使用TurboC)进行C语言应用程序开发应该掌握的各方面技术,共分14章,包括初识C语言、C语言基础、顺序与选择结构程序设计、循环控制、数组、函数、指针、结构体与共用体、算法、位运算、预处理、文件。书中所有知识都结合具体实例进行介绍,可以使读者轻松领会C语言应用程序开发的精髓,快速提高开发技能。

图书摘要

版权信息

书名:C语言开发从入门到精通

ISBN:978-7-115-42016-9

本书由人民邮电出版社发行数字版。版权所有,侵权必究。

您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。

我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。

如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。

• 著    王长青 韩海玲

  责任编辑 张  涛

• 人民邮电出版社出版发行  北京市丰台区成寿寺路11号

  邮编 100164  电子邮件 315@ptpress.com.cn

  网址 http://www.ptpress.com.cn

• 读者服务热线:(010)81055410

  反盗版热线:(010)81055315


本书循序渐进、由浅入深地详细讲解了C语言开发的技术,并通过具体实例的实现过程演练了各个知识点的具体使用流程。全书共22章,第1~4章分别讲解了C语言开发的基础知识,包括C语言简介,安装开发工具等;第5~10章分别讲解了函数、输入/输出、流程控制、数组操作等知识,这些内容都是C语言技术的核心知识;第11~20章分别讲解了指针、结构体、共用体和枚举、链表、位运算、预编译、文件操作、错误调试和高级编程技术的知识,这些内容是C语言开发技术的重点和难点;第21~22章分别通过2个综合实例的实现过程,介绍了C语言在综合项目中的开发过程。全书内容以“技术解惑”和“范例演练”贯穿全书,引领读者全面掌握C语言。

本书不但适用C语言的初学者,也适合有一定C语言基础的读者学习,还可以作为大专院校相关专业的师生用书和培训学校的教材。


从你开始学习编程的那一刻起,就注定了以后所要走的路:从编程学习者开始,依次经历实习生、程序员、软件工程师、架构师、CTO等职位的磨砺;当你站在职位顶峰的位置蓦然回首,会发现自己的成功并不是偶然,在程序员的成长之路上会有不断修改代码、寻找并解决Bug、不停测试程序和修改项目的经历;不可否认的是,只要你在自己的开发生涯中稳扎稳打,并且善于总结和学习,最终将会得到可喜的收获。

对于一名想从事程序开发的初学者来说,究竟如何学习才能提高自己的开发技术呢?其一的答案就是买一本合适的程序开发书籍进行学习。但是,市面上许多面向初学者的编程书籍中,大多数篇幅都是基础知识讲解,多偏向于理论,读者读了以后面对实战项目时还是无从下手。如何实现从理论平滑过渡到项目实战,是初学者迫切需要的书籍,为此,作者特意编写了本书。

本书用一本书的容量讲解了入门类、范例类和项目实战类3类图书的内容。并且对实战知识不是点到为止地讲解,而是深入地探讨。用“纸质书+光盘资料(视频和源程序)+网络答疑”的方式,实现了“入门+范例演练+项目实战”的完美呈现,帮助读者从入门平滑过渡到适应项目实战的角色。

1.以“入门到精通”的写作方法构建内容,让读者入门容易

为了使读者能够完全看懂本书的内容,本书遵循“入门到精通”基础类图书的写法,循序渐进地讲解这门开发语言的基本知识。

2.破解语言难点,“技术解惑”贯穿全书,绕过学习中的陷阱

本书不是编程语言知识点的罗列式讲解,为了帮助读者学懂基本知识点,每章都会有“技术解惑”板块,让读者知其然又知其所以然,也就是看得明白,学得通。

3.全书共计330个实例,和“实例大全”类图书同数量级的范例

书中一共有330个实例,其中110个正文实例,2个综合实例,并赠送两大综合案例(www.toppr.net下载)。每一个正文实例都穿插加入了2个与知识点相关的范例,即220个拓展范例。通过对这些实例及范例的练习,实现了对知识点的横向切入和纵向比较,让读者有更多的实践演练机会,并且可以从不同的角度展现一个知识点的用法,真正实现了举一反三的效果。

4.视频讲解,降低学习难度

书中每一章节均提供声、图并茂的语音教学视频,这些视频能够引导初学者快速入门,赠强学习的信心,从而快速理解所学知识。

5.贴心提示和注意事项提醒

本书根据需要在各章安排了很多“注意”“说明”和“技巧”等小板块,让读者可以在学习过程中更轻松地理解相关知识点及概念,更快地掌握个别技术的应用技巧。

6.源程序+视频+PPT丰富的学习资料,让学习更轻松

因为本书的内容非常多,不可能用一本书的篇幅囊括“基础+范例+项目案例”的内容,所以,需要配套DVD光盘来辅助实现。在本书的光盘中不但有全书的源代码(赠送的两大案例以23和24编号的源程序和视频也在光盘中),而且还精心制作了实例讲解视频。本书配套的PPT资料可以在网站下载(www.toppr.net)。本书赠送的两大综合案例也可在此网站下载。

7.QQ群+网站论坛实现教学互动,形成互帮互学的朋友圈

本书作者为了方便给读者答疑,特提供了网站论坛、QQ群等技术支持,并且随时在线与读者互动。让大家在互学互帮中形成一个良好的学习编程的氛围。

本书的学习论坛是:www.toppr.net。

本书的QQ群是:347459801。

本书循序渐进、由浅入深地详细讲解了 C语言开发的技术,并通过具体实例的实现过程演练了各个知识点的具体应用。全书共22章,分别讲解了C语言开发工具,C语言语法,运算符和表达式,输入和输出,流程控制,数组和字符串,函数——C语言的核心,指针,数据的熔炉——结构体、共用体和枚举,链表,位运算,预编译处理,文件操作,错误和程序调试,组件技术,C语言高级编程技术,网络编程技术,初入江湖——游戏项目设计,风云再起——网络项目设计等内容。并赠送学生成绩管理系统和C51实现跑马灯程序,可从www.toppr.net下载两案例文档、程序和视频。全书以“技术解惑”和“范例演练”贯穿全书,引领读者全面掌握C语言开发。

本书的最大特色是实现了入门知识、实例演示、范例演练、技术解惑、综合实战5大部分内容的融合。其中各章内容由如下模块构成。

① 入门知识:循序渐进地讲解了C语言开发的基本知识点。

② 实例演示:遵循理论加实践的教学模式,用110个实例演示了各个入门知识点的用法。

③ 范例演练:为了加深对知识点的融会贯通,为每个实例另外配套了2个演练范例,全书共计220个拓展范例,多角度演示了各个入门知识的用法和技巧。

④ 技术解惑:把读者容易混淆的部分单独用一个板块进行讲解和剖析,对读者所学的知识实现了“拔高”处理。

下面以本书第7章为例,演示本书各章内容版式的具体结构。

① 入门知识

7.2.1 谈谈putchar函数(字符输出函数)

函数putchar是字符输出函数,功能是在显示器上输出单个字符。使用函数putchar的格式如下所示。

putchar(字符参数)

其中,字符参数可以是实际的参数,也可以是字符变量。

在使用函数putchar前,必须使用如下所示的文件包含命令。

#include<stdio.h>

或:

#include “stdio.h”

函数putchar的作用等同于“printf("%c",字符参数)”,函数putchar可以输出整型变量,也可以输出控制字符,并且执行控制字符时执行的是控制功能,而不是在屏幕上显示某个字符。

② 实例演示+③ 范例演练

实例015 使用putchar函数输出指定的字符

源码路径 光盘\daima\7\1    视频路径 光盘\视频\实例\第7章\015

本实例的实现文件为“putchar.c”,具体实现代码如下所示。

#include<stdio.h> 
void main(){ 
char a='c',b='d',c='e';    //定义3个字符变量
//输出字符
putchar(a);putchar(b);putchar(b);putchar(c);putchar('\t');
putchar(a);putchar(b); 
putchar('\n');
putchar(b);putchar(c);
}
范例029:使用putchar函数
源码路径:光盘\演练范例\029\
视频路径:光盘\演练范例\029\
范例030:演示putchar函数的格式和用法
源码路径:光盘\演练范例\030\
视频路径:光盘\演练范例\030\

上述代码的具体实现流程如下所示。

(1)分别定义3个char型变量abc

(2)通过“putchar(a)”在屏幕中输出一个“m”,通过第一个“putchar(b)”在屏幕中输出一个“n”,通过第二个“putchar(b)”在屏幕中输出一个“n”,通过“putchar(c)”在屏幕中输出一个“z”,通过“putchar('\t')”跳转到下一个制表符。

(3)通过“putchar(a)putchar(b)”分别输出字符“m”和“n”。

(4)通过“putchar('\n')”进行换行处理。

(5)通过“putchar(b)、putchar(c)”分别输出字符“n”和“z”。

按下【F9】键编译并链接上述代码,按下【Ctrl+F9】组合键运行上述代码,然后按下【Alt+F5】组合键后运行程序,将分别在界面中输出指定的字符,如图7-2所示。

图7-2 输出结果

在上述实例代码中,通过使用putchar函数来输出指定的字符。并且在使用putchar函数时,可以直接将ASCII作为参数。

④ 技术解惑

7.3 技术解惑

7.3.1 函数gets和函数scanf的区别

7.3.2 克服函数gets的缺陷

7.3.3 一个C语言的输入/输出问题

初学编程的自学者        编程爱好者

大中专院校的教师和学生     相关培训机构的教师和学员

做毕业设计的学生        初、中级程序开发人员

软件测试人员          参加实习的初级程序员

在职程序员           

本书在编写过程中,十分感谢我的家人给予的巨大支持。本人水平毕竟有限,书中存在纰漏之处在所难免,诚请读者提出意见或建议,以便修订并使之更臻完善。编辑联系邮箱:zhangtao@ptpress.com.cn。

最后感谢您购买本书,希望本书能成为您编程路上的领航者,祝您阅读快乐!

作者  


实例001:通过一段简单的C语言代码来认识C语言

范例001:求反余弦

范例002:求反正弦

实例002:提示用户输入圆的半径,根据输入的半径值计算圆的周长和面积

范例003:计算正方形的面积

范例004:计算矩形的面积

实例003:计算两个整型变量的和

范例005:求整数的绝对值

范例006:求长整数的绝对值

实例004:对一个很大的数和一个很小的数进行加法运算

范例007:求浮点数的绝对值

范例008:对浮点数进行舍入

实例005:通过转义字符输出指定的文本字符

范例009:使用转义字符输出整数

范例010:二级C笔试选择题

实例006:将字符变量和整型变量进行相互赋值,并输出运算结果

范例011:字符变量的定义与使用

范例012:获取浮点数的整数和小数

实例007:定义变量并对变量进行各种类型的算数操作

范例013:基本算数运算符的应用

范例014:自加自减运算符的应用

实例008:使用求模运算符获取任意小于1000正整数的个位、十位、百位和千位的数字

范例015:求直角三角形的边长

范例016:演示复数乘法

实例009:将字符型数据或数值型数据赋给不同的数值型和字符型变量

范例017:赋值运算符的基本应用

范例018:获取随机数

实例010:实现基本的赋值表达式运算处理

范例019:赋值表达式的类型转化

范例020:复合赋值运算符的应用

实例011:比较两个数值并返回比较的结果

范例021:使用关系运算符

范例022:使用关系表达式运算

实例012:对变量进行逻辑运算处理,并输出运算后的结果

范例023:使用逻辑运算符

范例024:演示逻辑运算符的特性

实例013:通过逗号将两个表达式连接起来,并输出运算后的结果

范例025:使用逗号运算符

范例026:实现逗号运算

实例014:获取当前系统各基本数据类型所在内存中占用的空间大小

范例027:使用sizeof运算符和取值运算符

范例028:演示类型的强制转换

实例015:使用putchar函数输出指定的字符

范例029:使用putchar函数

范例030:演示putchar函数的格式和用法

实例016:使用getchar函数让用户从键盘输入一个字符,然后输出/输入的字符

范例031:使用getchar函数获取计算结果

范例032:使用getchar函数获取数值型常量

实例017:使用printf函数输出不同格式变量a和b的数据

范例033:使用printf函数输出存储的变量

范例034:使用printf函数输出变量的赋值

实例018:通过printf格式字符输出指定格式的数据

范例035:在表达式中使用printf函数

范例036:使用printf函数输出数值

实例019:通过函数scanf输出用户输入字符的ASCII码和对应的大写字母

范例037:演示文本的输入和输出

范例038:使用scanf()函数

实例020:通过puts函数输出指定的字符串

范例039:使用puts函数(1)

范例040:使用puts函数(2)

实例021:询问用户的姓名和身高,最后通过gets函数获取输入的信息,然后通过puts函数输出对应的信息

范例041:使用gets函数

范例042:一段复杂点的程序

实例022:通过输入的边长a和b以及夹角的大小计算此三角形的面积

范例043:实现两个变量的交换

范例044:输出字符串的前驱和后继

实例023:获取用户输入的3个数字,并按从大到小的顺序进行排列

范例045:演示单条件单分支选择语句

范例046:实现小数的四舍五入

实例024:根据用户在键盘输入的字符,输出此字符所属的类别

范例047:使用单条件双分支if语句

范例048:由小到大排列数字

实例025:提示用户输入数字,然后将用户输入的数字输出

范例049:演示多条件if语句的用法

范例050:判断整数的正负和奇偶

实例026:提示用户输入两个数字,然后将两者中大的数字输出

范例051:使用条件运算符

范例052:判断是否是闰年

实例027:提示用户输入一个整数,然后输出这个整数的阶乘

范例053:输出1~20能被3整除的数

范例054:统计指定数的平均值

实例028:在窗口中依次输出1×1、1×2…到1×20的积

范例055:实现一个简单的猜数游戏

范例056:最大公约数和最小公倍数

实例029:猜数游戏

范例057:加密和解密

范例058:逆序输出整数

实例030:定义一个数组并分别赋值,最后输出数组内的各元素值

范例059:定义一个一维数组

范例060:初始化一维数组

实例031:实现一个由小到大排列的冒泡程序

范例061:统计各个分数段的人数

范例062:实现选择排序

实例032:在屏幕中实现20行杨辉三角的效果

范例063:处理学生的成绩

范例064:实现矩阵转置处理

实例033:提示用户分别输入用户编号和3科考试成绩,并在窗体界面中输出总分最高用户的编号和总分成绩

范例065:实现两个矩阵相乘

范例066:一个简单的成绩管理系统

实例034:提示用户输入2个字符串,然后输出其中的较大者

范例067:下三角的问题

范例068:二维数组每一行的最大值

实例035:使用strlen函数输出程序中数组字符串的长度

范例069:逐个输入和输出字符串中的字符

范例070:整体输入和输出字符串

实例036:提示用户输入字符串,然后分别输出输入字符串的小写形式和大写形式

范例071:去掉字符串的尾空格

范例072:计算字符串的长度

实例037:使用strcpy函数和strncpy函数复制用户输入的字符串

范例073:复制字符串

范例074:字符串的逆序赋值

实例038:使用strcmp和函数strncmp比较用户输入的字符串

范例075:比较两个字符串

范例076:自定义字符串比较函数

实例039:使用strcat函数和strncat函数 连接用户输入的字符串

范例077:计算字符串的长度

范例078:自定义字符串连接

实例040:将用户输入的字符串转换为数值类型的值

范例079:对字符串进行定位

范例080:演示子串的插入

实例041:提示用户输入一段字符串,然后使用字符检测函数来判断字符串中各字符所占用的个数

范例081:删除多个连续的字符串

范例082:字符串的升序排序

实例042:提示用户输入需要大小写转换的字符串,然后分别输出转换为大写和小写的形式

范例083:整数转换为字符串

范例084:删除字符串中的指定字符

实例043:提示用户输入两个数字,然后输出较大的数字

范例085:定义一个函数

范例086:演示函数的调用

实例044:提示用户输入1个数字,然后计算从1到此数字值的和,并输出结果

范例087:形参和实参的单向传递

范例088:演示函数参数的求值顺序

实例045:对一个整数数组内的元素值进行判断,如果大于0则输出1,小于0则输出0

范例089:获得数组元素中的最大值

范例090:逆序存放数组的元素

实例046:定义一个二维数组,并对数组元素进行行列互换处理

范例091:交换两个数组元素

范例092:约瑟夫环的问题

实例047:提示用户输入12个数字,然后对输入数字中最大数和最小数进行位置互换,并将互换后的值输出

范例093:使用return语句

范例094:哥德巴赫猜想问题

实例048:提示用户输入3个数字,然后进行大小比较处理,并将较大的数输出

范例095:演示有规律数列的求和

范例096:求整数n的全部素数因子

实例049:提示输入两个数字,然后对输入的数字进行最大公约数和最小公倍数运算,并输出运算结果

范例097:计算1~1000的阶乘和

范例098:比较两个分数的大小

实例050:提示用户输入一段字符,输出段中最长的单词

范例099:演示函数的嵌套调用

范例100:用梯形法计算积分

实例051:实现数学中Hanoi塔问题的解决方案

范例101:使用递归函数

范例100:求解最大公约数

实例052:输入正方体的长宽高l、w、h,求对应的体积和3个面x×y、x×z、y×z的面积

范例103:求数组中的最大值

范例104:求数据的平方根

实例053:分别定义一个外部变量和两个函数,实现函数间通过外部函数来直接传递数据

范例105:用auto定义局部变量

范例106:用static定义局部变量

实例054:每调用一次函数,显示一个静态局部变量中的内容,然后为其值加2

范例107:用静态局部变量计算阶乘

范例108:用register定义局部变量

实例055:在不同的文件内使用同一个名称的函数

范例109:使用外部函数

范例110:运行多文件程序

实例056:在一个文件内调用另一个外部函数

范例111:用全局变量实现交换

范例112:用全局变量处理成绩

实例057:将两个指针变量分别指向两个变量

范例113:运用变量和地址

范例114:定义指针变量

实例058:对输入的数字进行排序处理

范例115:使用取地址运算符

范例116:使用指针运算符

实例059:顺序显示数组内的元素并分别逆向输出

范例117:演示指针变量的指向

范例118:指针变量和整数的运算

实例060:输入a、b、c三个整数,然后按大小顺序输出

范例119:演示指针变量的减法运算

范例120:指针中的比较运算符

实例061:定义4个类型的变量,然后分别输出转换后的结果

范例121:指针变量作为函数参数

范例122:统计空白字符和小写字符

实例062:分别通过指向数组的指针引用数组、利用数组名和下标引用数组

范例123:用指针实现数组逆序

范例124:用指针实现数组元素的移位

实例063:将数组a中的n个整数按相反顺序存放

范例125:判断数组是否中心对称

范例126:逆序存放整数

实例064:提示输入10个数字存入数组,然后输出里面的最大值和最小值

范例127:分别计算数组中奇偶下标元素的和

范例128:用指针交换数组中的最大值

实例065:定义一个二维数组,然后以各种形式取得数组的地址并输出

范例129:处理二维数组中的元素

范例130:获取二维数组元素的最大值

实例066:编写一个函数,用指针方式实现2×3或3×4矩阵相乘运算

范例131:输出二维数组中每行的最大值

范例132:输出有两门以上不及格的学生

实例067:不使用strcpy函数,把一个字符串的内容复制到另一个字符串中

范例133:字符指针作为函数参数

范例134:统计字符串的出现次数

实例068:使用函数调用实现字符串的复制

范例135:删除字符串中的字符

范例136:实现字符串连接

实例069:提示用户输入5个字符串,并要求用字符数组存放这5个字符,用指针数组元素分别指向这5个字符,再用一个二级指针变量指向这个指针数组。最后按字符串字母的顺序输出

范例137:删除有序数组中的多余元素

范例138:合并有序数组

实例070:运行带参数的main函数,输出指针数组参数的值

范例139:用指针函数输出销售额

范例140:用函数指针计算定积分

实例071:定义结构体stud1,输入名字后输出对应的年龄和分数

范例141:定义结构体类型

范例142:初始化结构变量

实例072:计算学生的平均成绩和不及格的人数

范例143:判断点和圆的位置

范例144:使用结构体数组

实例073:定义并初始化一个结构体数组,然后输出数组内的元素

范例145:初始化结构体数组

范例146:实现整数排序

实例074:统计班级学生成绩信息

范例147:建立一个通讯录系统

范例148:建立一个计票系统

实例075:使用结构体指针变量,打印结构体成员变量的信息

范例149:用结构指针处理变量

范例150:用指针变量处理结构数组

实例076:用指针变量输出结构数组

范例151:加密部分字符

范例152:指向数组元素的结构指针运算

实例077:定义一个结构体变量,然后定义一个函数days实现计算该天在当年中是第几天,最后在主函数中调用该函数并输出天数

范例153:分配结构变量的内存空间

范例154:结构变量作为函数的参数

实例078:提示用户输入学生的信息,然后输出输入的所有学生信息

范例155:实现复数运算

范例156:实现数据连续查询

实例079:分别输出结构体和共同体的空间大小

范例157:使用共用体变量

范例158:处理任意类型的数据

实例080:分别定义公用体和成员,在定义的结构体内使用共用体的成员

范例159:错误分析

范例160:取出整数变量的高低字节数据

实例081:口袋中有红、黄、蓝、白、黑5种颜色的球若干个。每次从口袋中先后取出3个球,问得到3种不同色的球的可能取法,输出每种排列的情况

范例161:使用枚举类型

范例162:计算日期

实例082:求解两个复数的乘积

范例163:输出火车票价

范例164:模拟人工洗牌过程

实例083:动态分配了13个整型存储区域,然后进行赋值并打印输出

范例165:调用malloc分配内存

范例166:调用calloc分配内存

实例084:通过malloc函数来分配一个大的内存,然后再分配一个小的内存并查看是否分配成功,如果不成功则使用free释放

范例167:动态存放学生信息

范例168:处理任意长度的字符串

实例085:解决“老鹰捉小鸡”问题

范例169:构建一个单链表

范例170:头插法建立单链表

实例086:创建一个单向链表,并输出里面节点的数据

范例171:尾插法建立单链表

范例172:计算单链表的长度

实例087:对两个数进行位运算并输出结果

范例173:演示位与运算

范例174:按位清零处理

实例088:使用位域实现运算

范例175:演示按位异或运算

范例176:交换两个数据的值

实例089:使用不同的方法输出3个实数

范例177:演示无参宏定义

范例178:演示带参宏定义

实例090:将3个不同C文件用文件包含命令来处理,输出3个数字中的最小值

范例179:使用文件包含

范例180:设置输出模式

实例091:使用条件编译方法输入两段文字,然后选择两种输出格式。其中一种是原文输出,另一种是将字母变为其下一个字母,即a变为b,b变为c……z变为a

范例181:使用#if条件编译指令

范例182:用条件编译实现加密和解密

实例092:通过各种方式对文件进行操作

范例183:演示打开、关闭文件

范例184:演示打开一批文件的过程

实例093:读取指定文件E:\daima\16\2\ 123.c的代码

范例185:使用函数实现写入文件操作

范例186:复制磁盘中的文件

实例094:提示用户从键盘输入一行字符,并将输入的字符写入到一个指定文件中

范例187:实现多个文件的合并处理

范例188:使用函数写入文件操作

实例095:读取目标文件中内容,并输出前10个字符

范例189:实现文本存储和输出

范例190:用fprintf函数写入文件

实例096:使用fputs函数向指定文件中写入一个字符串,然后使用fgets函数读取该字符串并输出

范例191:实现多个字符的存储

范例192:实现多行字符串的存储

实例097:从键盘输入两个用户数据,然后写入一个文件中,再读出这两个用户的数据并显示在屏幕上

范例193:使用fscanf函数

范例194:文件的倒置

实例098:将一组字符串数据存储在指定的目标文件中

范例195:使用fwtrite函数写入文件

范例196:使用fread函数读取文件

实例099:使用putw函数向文件中写入一个整数,然后使用getw函数从文件中读取该整数并输出

范例197:实现文本的追加

范例198:输出文件的一部分

实例100:将一组数据写入到文件中,然后使用fseek函数从文件中随机读取其中的某个数据

范例199:检索文件中的关键字

范例200:文件查找字符串

实例101:使用函数rewind将文件的位置指针移到文件开头,使用函数ftell获得当前位置指针离文件开头的距离

范例201:判断读写文件的位置

范例202:显示带有行号的文本

实例102:使用remove函数删除指定的文件

范例203:删除一个文件

范例204:获取文件的路径

实例103:使用rename函数重命名指定的文件

范例205:重命名一个文件

范例206:判断访问文件的模式

实例104:使用定义的copy_file函数复制指定目标文件

范例207:获取文件流的文件句柄

范例208:从文件流指针导出文件句柄

实例105:使用ferror函数检测对文件读写时是否出错,并调用clearerr清除错误标志

范例209:用eof函数判断文件是否结束

范例210:用feof函数判断文件结尾

实例106:在一个屏幕上不同位置定义了7个不同颜色的窗口

范例211:定义多窗口并设置背景颜色

范例212:设置绘图窗口的颜色

实例107:设置输出屏的颜色,并分割为左右两个部分

范例213:使用图形窗口坐标

范例214:绘制一条直线

实例108:使用不同的填充模式和颜色绘制矩形、长方体、扇形和椭圆扇形

范例215:绘制一个矩形

范例216:绘制一个圆形

实例109:在图形模式下输出不同样式的文本

范例217:绘制一个扇形

范例218:设置线条的类型

实例110:获取当前机器MAC地址

范例219:获取计算机的IP地址和计算机名

范例220:编程实现写邮件超级链接

综合实例01:游戏项目设计

综合实例02:网络项目设计

综合实例03:学生成绩管理系统(赠)

综合实例04:C51实现跑马灯系统(赠)


C语言是当前所有开发技术中使用较为广泛的一门语言,从它诞生之日起就深受程序员们的喜爱。随着C语言的普及,使得后来的开发语言都或多或少借鉴或遵循了它的一些模式。另外,C语言是计算机编程领域中最早的高级语言之一,它的出现推动了软件行业的迅猛发展。本章将简要介绍C语言的基本知识,为读者步入后面的学习打下基础。

本章内容

技术解惑

知识点讲解:光盘:视频\PPT讲解(知识点)\第1章\C语言的辉煌诞生.mp4

C语言是目前世界上最流行、使用最广泛的程序设计语言之一。C语言绘图能力强,可移植性好,并具备很强的数据处理能力,因此适合编写系统软件、二维和三维图形及动画程序,是一门数值计算的高级语言。C语言的原型是ALGOL 60语言,也被称为A语言。

接下来我们看一看C语言的发展历程。

1963年,剑桥大学将ALGOL 60语言发展成为CPL(Combined Programming Language)。

1967年,剑桥大学的Matin Richards对CPL进行了简化,于是产生了BCPL。

1973年,美国贝尔实验室的专家Dennis.M.Ritchie在B语言的基础上设计出了一种新的语言,他取了BCPL的第二个字母作为这种语言的名字,这就是C语言。

1977年,为了推广UNIX操作系统,Dennis M. Ritchie发表了不依赖于具体机器系统的C语言编译文本《可移植的C语言编译程序》。

1978年,Brian W. Kernighan和Dennis M. Ritchie出版了名著《C程序设计语言》(The C Programming Language),从而使C语言成为目前世界上流行、应用较广泛的高级程序设计语言。

1988年,随着微型计算机的日益普及,出现了许多C语言版本。由于没有统一的标准,这些C语言之间出现了一些不一致的地方。为了改变这种情况,美国国家标准学会(ANSI)为C语言制定了一套ANSI标准,成为现行的C语言标准。

C语言之所以发展迅速,成为最受欢迎的语言之一,主要是因为它具有强大的功能。许多著名的系统软件都是用C语言编写的。

知识点讲解:光盘:视频\PPT讲解(知识点)\第1章\第一印象的建立.mp4

为了快速迈入C语言的世界,本节将通过一个实例来让大家认识C语言的特性。

实例001 通过一段简单的C语言代码来认识C语言

源码路径 光盘\daima\1\1\FIRST.c   视频路径 光盘\视频\实例\第1章\001

实例文件FIRST.c的具体代码如下所示:

#include < stdio.h>                  //引用头文件 
int m;                               //定义全局变量
int min(int x,int y);
void main()
{ 
   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);
}
范例001:求反余弦
源码路径:光盘\演练范例\001\
视频路径:光盘\演练范例\001\
范例002:求反正弦
源码路径:光盘\演练范例\002\
视频路径:光盘\演练范例\002\

上述代码的功能是,对用户输入的数据xy进行大小比较,并输出较小的数据。从整个程序的实现过程可以看出,通过简短的代码,即可实现用户需要的目标功能。

总体来说,C语言对我们的初步印象很不错,符合程序员简单、易于理解的要求。具体来说,C语言的主要特点如下所示。

1.简洁紧凑、灵活方便

C语言一共只有32个关键字、9种控制语句,程序书写自由,主要用小写字母表示。C语言把高级语言的基本结构和语句与低级语言的实用性结合起来,可以像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元。

2.运算符丰富

C语言的运算符包含的范围很广泛,共有34个运算符。C语言把括号、赋值、强制类型转换等都作为运算符处理,从而使C的运算类型极其丰富,表达式类型多样化,灵活使用各种运算符可以实现在其他高级语言中难以实现的运算。

3.数据结构丰富

C的数据类型有整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等,通过这些数据类型可以实现各种复杂的数据类型的运算。C语言引入了指针这一概念,使程序效率更高。另外,C语言具有强大的图形功能,支持多种显示器和驱动器,且计算功能、逻辑判断功能强大。

4.语法限制不太严格,程序设计自由度大

一般的高级语言的语法检查比较严,能够检查出几乎所有的语法错误。而C语言允许程序编写者有较大的自由度。

5.允许直接访问物理地址,可以直接对硬件进行操作

C语言既具有高级语言的功能,又具有低级语言的许多功能,能够像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元,可以用来写系统软件。

6.生成代码质量高,程序执行效率高

C语言比汇编程序生成的目标代码效率高10%~20%。

7.适用范围大,可移植性好

C语言不但可以被广泛用于计算机项目程序开发,而且可以独立开发硬件程序。

当然C语言也有自身的不足,例如语法限制不太严格,对变量的类型约束不严格,影响程序的安全性。并且从应用开发的角度看,C语言比其他高级语言较难掌握。

知识点讲解:光盘:视频\PPT讲解(知识点)\第1章\理解编译系统.mp4

C语言是一门DOS环境下的开发语言,在执行前需要先将其编译,才能正确运行执行结果。要想真正理解编译系统的原理,重要的是要理解何谓“编译”。编译是一个过程,通过这个过程可以把高级语言变成计算机可以识别的二进制语言。计算机只认识1和0格式的二进制数据,编译程序可以把人们熟悉的语言换成二进制的形式。

要想通过编译把一个源程序翻译成目标程序,所做的工作过程分为如下5个阶段:

(1)词法分析。

(2)语法分析。

(3)语义检查中间代码生成。

(4)代码优化。

(5)目标代码生成。

在上述过程中,最为主要的阶段是进行词法分析和语法分析,这又称为源程序分析。如果在分析过程中发现有语法错误,会给出对应的提示信息。具体编译流程如图1-1所示。

图1-1 编译系统结构流程

接下来开始讲解上述5个阶段的具体过程。

1.词法分析

词法分析的任务是对由字符组成的单词进行处理,从左至右逐个字符地对源程序进行扫描,产生一个个的单词符号,把作为字符串的源程序改造成为单词符号串的中间程序。执行词法分析的程序称为词法分析程序或扫描器。

2.语法分析

编译程序的语法分析器以单词符号作为输入,分析单词符号串是否形成符合语法规则的语法单位,如表达式、赋值、循环等,最后看是否构成一个符合要求的程序,按该语言使用的语法规则分析检查每条语句是否有正确的逻辑结构,程序是最终的一个语法单位。编译程序的语法规则可用上下文无关文法来刻画。语法分析的方法有两种。

3.语义检查中间代码生成

中间代码是源程序的一种内部表示,也称为中间语言。中间代码的作用是使编译程序的结构在逻辑上更为简单明确,特别是使目标代码的优化更容易实现。中间代码即为中间语言程序,中间语言的复杂性介于源程序语言和机器语言之间。中间语言有多种形式,其中最为常见的有4种:逆波兰记号、四元式、三元式和树。

4.代码优化

代码优化是指对程序进行多种等价变换,使得从变换后的程序出发,能生成更有效的目标代码。所谓等价,是指不改变程序的运行结果。有效是指目标代码运行时间较短,而且占用的存储空间较小。这种变换称为优化。

5.目标代码生成

目标代码生成是编译的最后一个阶段。通过目标代码生成器,把语法分析后或优化后的中间代码变换成目标代码。

另外,还有下面两个过程。

1.表格管理程序

编译过程中源程序的各种信息被保留在不同的表格中,编译各阶段的工作都涉及构造、查找或更新有关的表格。

2.出错处理程序

如果编译过程中发现源程序有错误,编译程序将报告错误的性质和错误发生的地点,并且将错误所造成的影响限制在尽可能小的范围内,使得源程序的其余部分能继续被编译下去。有些编译程序还能自动纠正错误,这些工作由错误处理程序完成。

了解了“编译”过程后,整个编译系统概念便一目了然。编译系统就是按照编译原理集合而成的一种机制,这种机制能够实现对程序语言的上述处理。

系统编译与发布是在系统编码之后执行的一项基本操作。编译是用于生成可执行代码,发布是将编译之后的可运行版本发布到服务器,以供用户使用。在编译过程中,编译器将代码翻译成中间语言(MSIL)。运行时会将MSIL翻译成CPU特定的指令,以便计算机上的处理器运行应用程序。应用程序通过编译可以提高代码的运行速度,增加代码的安全性和稳定性。

因为C语言独有的DOS环境特性,所以,在编译时会变得十分麻烦。但是幸好已经有多种编译器工具,通过这些工具可以简捷实现对C语言程序的编译、运行和调试。例如通过专用的编译器,可以对1.2节中的C语言代码进行编译和运行处理,假设使用Turbo C进行编译。

在Turbo C中编写上述代码后,可以按下【F9】键进行编译并链接,成功后弹出成功提示,如图1-2所示。

图1-2 成功提示

知识点讲解:光盘:视频\PPT讲解(知识点)\第1章\揭开存储器的层次.mp4

当C语言被编译后,编译的中间语言会在CPU中进行处理。按照与CPU的接近程度,存储器分为内存储器与外存储器,简称内存与外存。内存储器又常称为主存储器(简称主存),属于主机的组成部分;外存储器又称为辅助存储器(简称辅存),属于外部设备。访问CPU不能像访问内存那样直接访问外存,外存要与CPU或I/O设备进行数据传输,必须通过内存进行。现在的PC中还配置了高速缓冲存储器(chache),这时内存包括主存与高速缓存两部分。

为了兼顾存储容量和存储速度,当前计算机几乎毫无例外地采用了图1-3所示的层次式存储结构。

图1-3 存储器层次结构

在图1-3中,以处理器为中心,计算机系统的存储依次为寄存器、高速缓存、主存储器、磁盘缓存、磁盘和可移动存储介质等7个层次。距离处理器越近的存储工作速度越高,容量越小。其中,寄存器、高速缓存、主存储器为操作系统存储管理的管辖范围,磁盘和可移动存储介质属于操作系统设备管理的管辖范围。

凡是属于操作系统存储管理范围的存储装置,其共同特点是在系统掉电之后,它们所存储的信息会丢失殆尽,属于可挥发性存储装置。而属于操作系统管理范围的存储装置,则可以永久保存存储的信息,属于非挥发性存储装置。

磁盘缓存本身并不是一种实际存在的存储介质,它依托于固定磁盘,主要用来提供对主存储器的扩充。

寄存器在物理上与处理器的运算控制部分同在一个芯片上,它们与运算部分的距离最近,访问速度也最高,但其容量也因此不会太大。所以,它们主要被用来暂存一些中间数据或控制用的特殊数据,而不能存放像程序之类的大批数据。

主存储器用来存放程序和程序运行所需的数据。一个计算机系统必须有足够大的主存储器,其容量是衡量一个计算机系统性能的指标之一。由于主存储器的访问速度远低于寄存器,所以,为了加快访问速度,计算机系统常常在主存储器和寄存器之间配置高速缓存,以存放处理器当前常用的程序模块和数据。

之所以把存储器分为几个层次,主要是基于如下三点原因。

(1)合理解决速度与成本的矛盾,以得到较高的性能价格比。半导体存储器速度快,但价格高,容量不宜做得很大,因此,仅用作与CPU频繁交流信息的内存储器。磁盘存储器价格较便宜,可以把容量做得很大,但存取速度较慢,因此,用作存取次数较少,且需存放大量程序、原始数据(许多程序和数据是暂时不参加运算的)和运行结果的外存储器。计算机在执行某项任务时,仅将与此有关的程序和原始数据从磁盘上调入容量较小的内存,通过CPU与内存进行高速的数据处理,然后将最终结果通过内存再写入磁盘。这样的配置价格适中,综合存取速度较快。

(2)为解决高速的CPU与速度相对较慢的主存的矛盾,还可使用高速缓存。它采用速度快、价格更高的半导体静态存储器,甚至与微处理器做在一起,存放当前使用最频繁的指令和数据。当CPU从内存中读取指令与数据时,将同时访问高速缓存与主存。如果所需内容在高速缓存中,就能立即获取;如没有,再从主存中读取。高速缓存中的内容是根据实际情况及时更换的。这样,通过增加少量成本即可获得很高的速度。

(3)使用磁盘作为外存,不仅价格便宜,可以把存储容量做得很大,而且在断电时它所存放的信息也不丢失,可以长久保存,且复制、携带都很方便。

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章的内容我们了解到,C语言开发工作需要使用专门的开发工具,这样才能起到事半功倍的效果。在本章的内容中,将简要介绍常用的几种C语言开发工具,详细介绍它们的安装和使用方法,为读者步入本书后面知识的学习打下基础。

本章内容

技术解惑

知识点讲解:光盘:视频\PPT讲解(知识点)\第2章\用DOS开发C程序.mp4

C语言程序是在DOS下进行编译的程序,所以,就需要在DOS环境下进行开发、编译和调试。但是,当前Windows操作系统已经普及,所以使用一种Windows环境下的DOS开发工具,对于C语言程序员来说必不可少。当前使用最为频繁的DOS开发工具是Turbo C 3.0。

1992年Borland公司推出了基于Windows界面的C语言程序设计和C++面向对象的程序设计工具Turbo C/C++ 3.0。Turbo C/C++ 3.0的突出优点如下。

安装Turbo C 3.0的具体流程如下所示。

(1)双击Turbo C 3.0安装文件夹内的“INSTALL.EXE”文件,弹出开始界面,如图2-1所示。

注:Turbo C和Turbo C++的安装界面是一样的。

图2-1 开始安装界面

(2)按下【Enter】键,进入图2-2所示的界面。

图2-2 第2步安装界面

(3)在图2-2所示的界面中输入安装文件的来源驱动器名称,然后按下【Enter】键,进入图2-3所示的界面。

图2-3 第3步安装界面

(4)在图2-3所示的界面中输入安装文件的路径,在此可以直接使用默认路径,然后按下【Enter】键,进入图2-4所示的界面。

图2-4 第4步安装界面

在图2-4所示的界面中可以设置安装文件的保存路径,并且用户可以对路径进行修改。具体方法是首先选中首行(选中部分将黑色背景显示,安装时可看到),然后按下【Enter】键,进入图2-5所示的界面。

图2-5 设置界面1

此时图2-5中首行处于被选中状态,然后按下【Enter】键后会弹出一个可以更改路径的框,在此可以自行设置安装文件的保存路径,如图2-6所示。

图2-6 设置界面2

最后按下【Enter】键,修改安装路径操作完毕。

(5)按下【Esc】键返回如图2-4所示的界面,通过使用【↑】键和【↓】键来选中“Start Installation”项,并按下【Enter】键开始进行安装。安装完成后,将显示对应的成功提示,如图2-7所示。

图2-7 第5步安装界面

Turbo C 3.0安装完成后,为了使用方便,建议为安装目录中的“TC.EXE”文件创建一个快捷方式。进入Turbo C/C++ 3.0开发环境的方法比较简单,只需双击安装后的快捷方式即可,如图2-8所示。

图2-8 Turbo C 3.0快捷方式

双击快捷方式后将进入Turbo C 3.0的主界面,如图2-9所示。

图2-9 Turbo C 3.0主界面

主菜单是整个Turbo C 3.0编译器的核心,在下面的内容中,将详细介绍Turbo C 3.0的各种主菜单。

1.文件菜单(File)

按下快捷键【Alt+F】或鼠标单击【File】命令即可打开文件菜单,如图2-10所示。

图2-10 文件菜单

Turbo C 3.0的文件菜单主要包括如下子菜单项。

创建一个新的C或C++文件。

打开已经存在的C或C++文件。此操作既可以使用类似DOS的通配符来进行列表选择,也可以打开其他扩展名的文件。此子项的快捷键是【F3】。

保存当前编辑区内新建的C或C++文件。

将当前编辑区内新建的C或C++文件另存在磁盘中,如果此名文件已经存在,则弹出“是否”覆盖保存的提示。

修改当前保存的C语言文件的目录。

暂时退出Turbo C 3.0界面,来到DOS提示符界面下,此时可以运行DOS命令。在DOS状态下按【Esc】键后即可返回Turbo C 3.0界面。

退出当前的Turbo C 3.0界面,如果文件未保存则弹出保存提示。此操作的快捷键是【Alt+X】。

2.编辑菜单(Edit)

按下快捷键【Alt+E】或鼠标单击【Edit】命令即可打开编辑菜单,如图2-11所示。

图2-11 编辑菜单

Turbo C 3.0的编辑菜单主要包括如下子菜单项。

3.运行菜单(Run)

按下快捷键【Alt+R】或鼠标单击【Run】命令即可打开运行菜单,如图2-12所示。

图2-12 运行菜单

Turbo C 3.0的运行菜单主要包括如下子菜单项。

运行指定的文件或当前编辑区内的文件。如果是运行上次没有做过修改的、经过编译后的源代码,则会直接运行到下一个断点,否则将会对当前的C语言文件进行编译、连接后操作。其快捷键是【Ctrl+F9】。

终止当前的调试过程,并释放归还给程序的空间。其快捷键为【Ctrl+F2】。

在程序调试过程中使用,设置当前程序运行到选定的光标位置。光标所在的位置必须是一条可执行的语句,否则将会提示错误。其快捷键为【F4】。

如果在执行一条调用其他用户子函数的语句时使用此菜单,则执行语句将跟踪到此函数的内部去执行。其快捷键为【F7】。

此菜单执行当前函数的下一条语句,即使此语句是用户函数调用语句,执行语句也不会跟踪进函数内部。其快捷键为【F8】。

4.编译菜单(Compile)

按下快捷键【Alt+C】或鼠标单击【Compile】命令即可打开编译菜单,如图2-13所示。

图2-13 编译菜单

Turbo C 3.0的编译菜单主要包括如下子菜单项。

将一个C源文件编译成.OBJ目标文件,并显示生成的文件名。其快捷键为【Alt+F9】。

将当前文件生成一个可执行的.EXE文件,并显示生成的.EXE文件。

把当前.OBJ文件以及库文件连接在一起生成.EXE文件。

重新编译项目中的所有文件,并进行装配生成.EXE文件。

显示当前译文件的编译信息。

清除当前编译文件的编译信息。

5.项目菜单(Project)

按下快捷键【Alt+P】或鼠标单击【Project】命令即可打开项目菜单,如图2-14所示。

图2-14 项目菜单

Turbo C 3.0的项目菜单主要包括如下子菜单项。

此菜单既可以打开已经创建的项目,也可以新建一个项目。单击此菜单后会弹出一个打开文件的窗口,在其中既可以选择要打开的文件,也可以选择新的项目保存位置并输入该项目的名称。项目的名称有.PRJ扩展名,里面包含要编译、连接的文件名。

关闭当前的项目。

将当前打开的文件或编译文件添加到项目中。

删除项目中的某个文件。

6.调试菜单(Debug)

按下快捷键【Alt+D】或鼠标单击【Debug】命令即可打开调试菜单,如图2-15所示。

图2-15 调试菜单

Turbo C 3.0的调试菜单主要包括如下子菜单项。

检查代码中的变量或表达式的数据类型。

计算代码中的变量和表达式的值,或将其修改为新值。

在代码中添加、删除、编辑和删除监视点。

在当前代码中设置或清除一个断点。

使用列表来显示代码中的所有断点。

使用Turbo C 3.0开发C语言程序比较简单,例如实现本书前面实例001代码的过程如下。

(1)打开Turbo C 3.0,来到编辑界面,编写对应的代码,如图2-16所示。

图2-16 编辑界面

(2)按下【F9】键,进行编译并链接,成功后弹出成功提示,如图2-17所示。

图2-17 成功提示

(3)按下快捷键【Ctrl+F9】运行此程序,将输出指定的界面,如图2-18所示。

图2-18 运行界面

(4)随便输入两个数字,中间用逗号隔开,然后按下【Enter】键。按下快捷键【Alt+F5】后,输出效果如图2-19所示。

图2-19 输出结果

注意:从图2-16界面结果可知,在Turbo C 3.0界面中不支持中文字符,并且处于DOS界面。在当前用户都使用Windows系统的情况下,建议读者使用Windows环境下的仿Turbo C 3.0工具。例如DEV C++,本书中的绝大多数实例都可以用DEV C++调试通过。

知识点讲解:光盘:视频\PPT讲解(知识点)\第2章\在Windows环境下开发C程序.mp4

DOS环境对广大读者来说十分陌生,并且在DOS下进行开发也十分麻烦。为此,专门推出了Windows环境下的开发工具。Win-TC其实就是一种Windows环境下的开发工具,但是其功能和Turbo C基本类似,只是在编译和运行上更加方便而已。随着计算机技术的发展,编程工具也随之更新换代。目前最受程序员喜爱的开发工具,当属微软的Visual Studio。

Visual Studio 2010是微软为适用.NET平台而推出的专用开发工具,它是一个集成的开发环境工具,能够支持Visual Basic .NET、Visual C++ .NET、Visual C# .NET和Visual J# .NET等专业编程语言。通过Visual Studio 2010可以在同一项目内使用不同的语言,并能实现它们间的无缝接口处理,共同实现指定的功能。

1.不同的版本和硬件要求

Visual Studio 2010有不同的版本,具体说明如下所示。

硬件要求:最好应有酷睿II 2.0GHz以上的CPU,至少应有2GB的RAM内存,其中1GB用于支持操作系统。

2.安装

(1)将安装盘放入光驱,或双击存储在硬盘内的安装文件autorun.exe,弹出安装界面,如图2-20所示。

图2-20 开始安装界面

(2)单击“安装Microsoft Visual Studio 2010”选项,弹出“组件加载”对话框,如图2-21所示。

图2-21 “组件加载”对话框

(3)加载完毕后单击【下一步】按钮弹出“起始页”对话框,选中“我已阅读并接受许可协议条款”,如图2-22所示。

图2-22 “起始页”对话框

(4)单击【下一步】按钮弹出“选项页”对话框,选中“完全”,选择安装路径,如图2-23所示。

图2-23 “选项页”对话框

(5)单击【安装】按钮弹出“安装页”对话框,开始进行安装,如图2-24所示。

图2-24 “安装页”对话框

(6)安装完毕后弹出“完成页”对话框,Visual Studio 2010成功完成安装,如图2-25所示。

图2-25 “完成页”对话框

安装Visual Studio 2010完毕后,需要对其进行设置,使其符合自己的开发需求。首次打开Visual Studio 2010后会弹出“选择默认环境设置”对话框,在此选择要用的语言选项,如图2-26所示。然后单击【启动Visual Studio】按钮后开始配置,如图2-27所示。

图2-26 “选择默认环境设置”对话框

图2-27 环境配置

配置完成后将来到Visual Studio 2010的集成开发界面,如图2-28所示。

图2-28 Visual Studio 2010默认集成开发界面

知识点讲解:光盘:视频\PPT讲解(知识点)\第2章\在Linux下开发C程序.mp4

在平常工作中,我们都熟识了Windows系统,程序开发也习惯了在Windows环境下开发程序这一工作模式。但是,在特殊应用领域,例如单片机应用和嵌入式开发,就需要在Linux环境下开发C程序。Linux是一种计算机操作系统,是一套免费使用和自由传播的类UNIX操作系统,它主要用于基于Intel x86系列CPU的计算机上。这个系统是由世界各地成千上万的程序员设计和实现的。其目的是建立不受任何商品化软件的版权制约的、全世界都能自由使用的UNIX兼容产品。

当前C语言程序最为常见的应用是嵌入式开发或单片机开发,上述应用几乎都需要基于Linux平台。所以,Linux环境下进行C语言开发十分普及,为此,在本节内容中简要介绍在Linux环境下进行C语言开发的基本知识。

在安装GCC之前,系统中必须要有CC或者GCC等编译器,并且是可用的,或者用环境变量CC指定系统上的编译器。如果系统上没有编译器,不能安装源代码形式的GCC。如果是这种情况,可以在网上找一个与你系统相适应的如RPM等二进制形式的GCC软件包来安装使用。本文介绍的是以源代码形式提供的GCC软件包的安装过程,软件包本身和其安装过程同样适用于其他Linux和UNIX系统。

系统上原来的GCC编译器可能是把gcc等命令文件、库文件、头文件等分别存放到系统中的不同目录下的。与此不同,现在我们将一个版本的GCC安装在一个单独的目录下。这样做的好处是,将来不需要它的时候可以方便地删除整个目录即可(因为GCC没有uninstall功能);缺点是,在安装完成后要做一些设置工作才能使编译器工作正常。在本文中采用这个方案安装GCC,并且在安装完成后,仍然能够使用原来低版本的GCC编译器,即一个系统上可以同时存在并使用多个版本的GCC编译器。

按照本文提供的步骤和设置选项,即使以前没有安装过GCC,也可以在系统上安装一个可工作的新版本的GCC编译器。下面以GCC 3.4.0版本为例,介绍具体的安装过程。

1.下载

登录GCC网站http://gcc.gnu.org/或者通过网上搜索查找到下载资源。可供下载的文件一般有两种形式:.tar.gz和.tar.bz2,只是压缩格式不一样,内容完全一致,下载其中一种即可。

2.解压缩

根据压缩格式,选择下面相应的一种方式解包(以下的“%”表示命令行提示符):

% tar xzvf gcc-3.4.0.tar.gz

或者:

% bzcat gcc-3.4.0.tar.bz2 | tar xvf -

新生成的gcc-3.4.0目录称为源目录,用${srcdir}表示它。以后在出现${srcdir}的地方,应该用真实的路径来替换它。用pwd命令可以查看当前路径。

在${srcdir}/INSTALL目录下有详细的GCC安装说明,可用浏览器打开index.html阅读。

3.建立目标目录

目标目录(用${objdir}表示)是用来存放编译结果的地方。GCC建议编译后的文件不要放在源目录${srcdir]中(虽然这样做也可以),最好单独存放在另外一个目录中,而且不能是${srcdir}的子目录。

例如,可以这样建立一个叫gcc-build的目标目录(与源目录${srcdir}是同级目录):

% mkdir gcc-build 
% cd gcc-build

以下的操作主要是在目标目录 ${objdir} 下进行。

4.配置

配置的目的是决定将GCC编译器安装到什么地方(${destdir}),支持什么语言以及指定其他一些选项等。其中,${destdir}不能与${objdir}或${srcdir}目录相同。 配置是通过执行${srcdir}下的configure来完成的。其命令格式为(记得用你的真实路径替换${destdir}):

% ${srcdir}/configure --prefix=${destdir} [其他选项]

例如,如果想将GCC 3.4.0安装到/usr/local/gcc-3.4.0目录下,则${destdir}就表示这个路径。

在笔者的机器上是这样配置的:

% ../gcc-3.4.0/configure --prefix=/usr/local/gcc-3.4.0 --enable-threads=posix --disable-checking --enable--long-long --host=i386-redhat-linux --with-system-zlib --enable-languages=c,c++,java

将GCC安装在/usr/local/gcc-3.4.0目录下,支持C/C++和Java语言,其他选项参见GCC提供的帮助说明。

5.编译

使用% make命令。

6.安装

执行下面的命令将编译好的库文件等复制到${destdir}目录中(根据你设定的路径,可能需要管理员的权限):

% make install

至此,GCC 3.4.0安装过程就完成了。

7.其他设置

GCC 3.4.0的所有文件,包括命令文件(如gcc、g++)、库文件等都在${destdir}目录下分别存放,如命令文件放在bin目录下、库文件在lib下、头文件在include下等。由于命令文件和库文件所在的目录还没有包含在相应的搜索路径内,所以,必须要进行适当的设置之后编译器才能顺利地找到并使用它们。

要想使用GCC 3.4.0的GCC等命令,简单的方法就是把它的路径${destdir}/bin放在环境变量PATH中。我不用这种方式,而是用符号连接的方式实现,这样做的好处是,我仍然可以使用系统上原来的旧版本的GCC编译器。

首先,查看原来的GCC所在的路径:

% which gcc

假设上述命令显示:/usr/bin/gcc。因此,原来的GCC命令在/usr/bin目录下。我们可以把GCC 3.4.0中的GCC、g++、gcj等命令在/usr/bin目录下分别做一个符号连接:

% cd /usr/bin 
% ln -s ${destdir}/bin/gcc gcc34 
% ln -s ${destdir}/bin/g++ g++34 
% ln -s ${destdir}/bin/gcj gcj34

这样,就可以分别使用gcc34、g++34、gcj34来调用GCC 3.4.0的gcc、g++、gcj完成对C、C++、Java程序的编译了。同时,仍然能够使用旧版本的GCC编译器中的gcc、g++等命令。

将${destdir}/lib路径添加到环境变量LD_LIBRARY_PATH中,最好添加到系统的配置文件中,这样就不必要每次都设置这个环境变量了。 例如,如果GCC 3.4.0安装在/usr/local/gcc-3.4.0目录下,在RH Linux下可以直接在命令行上执行或者在文件/etc/profile中添加下面一句:

setenv LD_LIBRARY_PATH /usr/local/gcc-3.4.0/lib:$LD_LIBRARY_PATH

8.测试

用新的编译命令(gcc34、g++34等)编译你以前的C、C++程序,检验新安装的GCC编译器是否能正常工作。

注意: 根据需要,可以删除或者保留${srcdir}和${objdir}目录。

Linux系统下的GCC(GNU C Compiler)是GNU推出的功能强大、性能优越的多平台编译器,是GNU的代表作品之一。GCC是可以在多种硬体平台上编译出可执行程序的超级编译器,其执行效率与一般的编译器相比平均效率要高20%~30%。

1.约定规则

GCC编译器能将C、C++语言源程序、程式化程序和目标程序编译并连接成可执行文件,如果没有给出可执行文件的名字,GCC将生成一个名为a.out的文件。 在Linux系统中,可执行文件没有统一的后缀,系统从文件的属性来区分可执行文件和不可执行文件。而GCC则通过后缀来区别输入文件的类别,下面我们来介绍GCC所遵循的部分约定规则。

2.GCC的执行过程

虽然我们称GCC是C语言的编译器,但使用GCC由C语言源代码文件生成可执行文件的过程不仅仅是编译的过程,而是要经历4个相互关联的步骤∶预处理(也称预编译,Preprocessing)、编译(Compilation)、汇编(Assembly)和连接(Linking)。

命令GCC首先调用cpp进行预处理,在预处理过程中,对源代码文件中的文件包含(include)、预编译语句(如宏定义define等)进行分析。接着调用cc1进行编译,这个阶段根据输入文件生成以.o为后缀的目标文件。汇编过程是针对汇编语言的步骤,调用as进行工作,一般来讲,.S为后缀的汇编语言源代码文件和汇编、.s为后缀的汇编语言文件经过预编译和汇编之后都生成以.o为后缀的目标文件。当所有的目标文件都生成之后,GCC就调用ld来完成最后的关键性工作,这个阶段就是连接。在连接阶段,所有的目标文件被安排在可执行程序中的恰当位置,同时,该程序所调用到的库函数也从各自所在的档案库中连到合适的地方。

3.GCC的基本用法和选项

在使用GCC编译器时,我们必须给出一系列必要的调用参数和文件名称。GCC编译器的调用参数大约有100多个,其中多数参数我们可能根本就用不到,这里只介绍其中最基本、最常用的参数。

GCC最基本的用法如下:

gcc [options] [filenames]

其中options就是编译器所需要的参数,filenames给出相关的文件名称。其中[options]的值可以为如下所示的值。

A:#include;

B:#include“myinc.h”。

其中,A类使用尖括号(< >),B类使用双引号(“ ”)。对于A类,预处理程序cpp在系统预设包含文件目录(如/usr/include)中搜寻相应的文件,而对于B类,cpp在当前目录中搜寻头文件,这个选项的作用是告诉cpp,如果在当前目录中没有找到需要的文件,就到指定的dirname目录中去寻找。在程序设计中,如果我们需要的这种包含文件分别分布在不同的目录中,就需要逐个使用-I选项给出搜索路径。

注意:因为本书的重点不是Linux,所以对此知识点到为止。

Visual Studio 2010容量巨大,在安装过程中一定要有耐心。如果以前在机器上安装过,建议用卸载工具将原来安装的资料完全卸载后再安装,这样会避免很多不必要的麻烦。在安装过程中,系统会多次重新启动,此时读者不要惊慌,计算机重启后将自动进入安装界面。

另外,因为需要安装很多组件,例如数据库和IIS等组件,所以,安装过程中总会出现这样或那样的问题。比较常见的问题是在安装Windows组件时,不能安装IIS中的Front Page服务器扩展,已经插进去安装光盘了,却一直提示“将XP profession service pack 2 CD插入选定的驱动器”。这是因为Windows的系统文件保护不让通过,解决方法是关闭文件保护功能,关闭方法如下所示。

(1)运行gpedit.msc打开组策略。

(2)依次展开“计算机配置→管理模板→系统→windows文件保护”。

(3)找到“设置文件保护”双击并修改为“已禁用”,然后重新启动系统就可以了。

上面方法最可行但是治标不治本,还有一种方法可以彻底修复Windows文件。插入系统安装光盘,运行sfc /scannow命令检测并修复可能受损坏和更改的系统文件。这样就不会再出现提示信息了。当遇到上述问题时,建议读者先试第一个方法再试试第2个方法。

到目前为止,开发工具Turbo C 3.0比较简单,是一款轻量级产品,但是不能在编码界面实现复制和粘贴功能。另外,因为鼠标操作的灵活性不足,所以需要使用键盘来操作,这降低了我们的开发效率。而对于开发工具Visual Studio 2010来说,容量太大。究竟市面中有没有一款既简单、又方便的轻量级开发工具呢?有,建议初学者使用DEV C++。DEV C++和Turbo C 3.0的容量相近,并且具备视图界面,比较容易操作。在DEV C++的编码界面中可以使用复制和粘贴等命令,提高了开发效率。

在Windows 7系统中,安装Visual Studio 2010的最常见问题是弹出一个“无法打开数据文件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

然后保存并关闭这个文件,最后重新安装即可成功。


相关图书

代码审计——C/C++实践
代码审计——C/C++实践
C/C++代码调试的艺术(第2版)
C/C++代码调试的艺术(第2版)
大规模C++软件开发 卷1:过程与架构
大规模C++软件开发 卷1:过程与架构
C/C++程序设计竞赛真题实战特训教程(图解版)
C/C++程序设计竞赛真题实战特训教程(图解版)
C/C++函数与算法速查宝典
C/C++函数与算法速查宝典
C程序设计教程(第9版)
C程序设计教程(第9版)

相关文章

相关课程