C语言程序设计(txt+pdf+epub+mobi电子书下载)


发布时间:2020-05-17 14:36:48

点击下载

作者:贾小军 主编

出版社:高等教育出版分社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

C语言程序设计

C语言程序设计试读:

前言

C语言是目前国内外使用最为广泛的程序设计语言之一,是高等学校计算机语言类课程都在讲授的重要的基础课内容,具有语法丰富、结构清晰、使用方便、执行效率高以及可移植性好等特点,是高等学校计算机语言类课程的首选。

本书以程序设计为主线,循序渐进、突出重点、注重案例的编写方法,系统地讲授了C语言的基本语法和程序设计方法,全书共11章。第1章为C语言概述,包括C语言简介、开发环境等内容。第2章为C语言程序设计基础,包括数据类型、常量与变量、函数与表达式、数据运算、输入/输出语句等内容。第 3 章为程序控制结构,包括顺序结构、分支结构及循环结构等内容。第4章为数组,包括数组定义、一维数组、二维数组、字符数组等内容。第5章为函数,包括函数概述、参数传递方式、调用方法、嵌套与递归等内容。第6章为指针,包括指针概念、指针与变量、指针与数组、指针与字符串、指针数组与指向指针的指针等内容。第7章为编译预处理,包括宏定义、文件包含及条件编译等内容。第8章为结构体与共用体,包括基本概念、结构体数组、结构体指针变量、结构体函数、链表、共用体、枚举类型等内容。第9章为位运算,包括位运算概述、位运算符和位运算、位段等内容。第10章为文件,包括文件概述、文件指针、文件操作、文件读写等内容。第11章为C语言程序设计综合案例,介绍C语言开发应用程序的基本步骤和方法。本书每章后面均配有大量的习题及参考答案(教材习题参考答案在实验教程中),附录中还介绍了ASCII码、运算符优先级和结合性、常用库函数、常用语法提要等内容。

本书在讲授C语言过程中既注重语法知识的详细阐述,又注重案例算法的精细剖析;既注重培养读者设计程序的能力,又提倡养成良好的程序设计风格习惯。本书同时兼顾了全国计算机等级考试(二级C语言)的大纲要求,涵盖了大纲要求的所有知识点,提供了丰富的案例。这些案例的源程序代码均在 C Free 5.0 环境下调试通过,可直接使用。并且本书提供了所有案例的数据及运行结果,方便读者参考及查阅。

本书可作为高等学校理工类专业“C语言程序设计”课程的教学用书,也可作为参加国家计算机等级考试(二级C语言)的辅导用书,或作为计算机程序设计爱好者的自学参考书。为配合教学,本书配有PPT教学课件,并有配套的《C语言程序设计实验教程》供读者参考。

本书是多位老师在多年C语言教学与程序设计实践的基础上,结合多次编写相关讲义和教材的经验总结而成,同时本书在编写过程中也参考了大量书籍,得到了许多同行的帮助与支持,在此向他们表示衷心的感谢。本书由贾小军任主编,顾国松、刘锦萍、潘云燕任副主编。第1章由方玫编写,第2章、附录由许巨定编写,第3章、第7章由顾国松编写,第4章、第10章由贾小军编写,第5章、第11章由骆红波编写,第6章由潘云燕编写,第8章、第9章由刘锦萍编写。全书由贾小军博士统稿。

由于时间仓促,书中难免存在不足或者遗漏之处,恳请广大读者提出修改建议。编者2013年10月

第1章 C语言概述

本章首先概要地介绍了C语言的发展史及特点,然后通过一个实例程序让读者初步认识C语言,最后介绍了C语言运行的步骤及开发环境。

1.1 计算机语言及程序的发展

1.1.1 计算机语言的历史

当今使用的计算机语言有上百种,大致可分机器语言、汇编语言、高级语言。同样一个语句用机器语言、汇编语言和C语言分别表示如表1-1所示。表1-1 一个语句的3种表示

显然,从程序员的角度看高级语言比机器语言和汇编语言更令他们满意。对于计算机来说,计算机只能对数字做运算,符号、声音、图像在计算机内部都要用数字表示,指令也不例外,表1-1中的机器语言完全由十六进制数字组成,如a1即为10100001。

1.机器语言

机器语言是用二进制代码(0 和 1)表示的,能直接识别和执行的一种机器指令的集合。具有灵活、直接执行和速度快等特点。但是,不同型号的计算机其机器语言是不相通的。同时,用机器语言编程的工作很繁琐,程序员需要熟记所用计算机的全部指令代码和代码的含义,还得记住编程过程中每步所使用的工作单元处在何种状态。编写程序花费的时间往往是实际运行时间的几十倍或几百倍。而且,编出的程序全是0和1的指令代码,直观性差,容易出错。现在,除了计算机生产厂家的专业人员外,绝大多数的程序员已经不再去学习机器语言了。

但机器语言是计算机唯一能直接执行的语言。执行其他语言,需要“翻译”成机器语言才能被计算机“读懂”。如图1-1所示,程序员所见的汇编语言或高级语言,在计算机的“眼中”都是被翻译后的由0或1组成的代码。图1-1 源代码需要“翻译”成机器语言

2.汇编语言

机器语言编程麻烦,并且编写出来的程序很不直观,容易出错,于是有了汇编语言,把机器语言中一组一组的数字用助记符(Mnemonic)表示,直接用这些助记符(如表1-1中的mov、add)写出汇编程序,然后让汇编器(Assembler)去查表把助记符替换成数字,也就把汇编语言翻译成了机器语言。从表 1-1 的例子可以看出,汇编语言和机器语言的指令是一一对应的,汇编语言有三条指令,机器语言也有三条指令,汇编器就是做一个简单的替换工作。

3.高级语言

随着汇编语言的出现,计算机的用途迅速扩大,但是即使完成最简单的任务仍然需要编写许多指令。为了加速程序开发的过程,出现了用一条语句能够完成一定意义任务的高级语言。

从表1-1中的例子可以看出,C语言的语句和低级语言的指令之间不是简单的一一对应关系,一条 a=b+1;语句要翻译成三条汇编或机器指令,这个过程称为编译( Compile ),由编译器(Compiler)来完成,显然编译器的功能比汇编器要复杂得多。用C语言编写的程序必须经过编译转成机器指令才能被计算机执行,编译需要花一些时间,这是用高级语言编程的一个缺点,然而更多的是优点。首先,用 C语言编程更容易,写出来的代码更紧凑,可读性更强,出了错也更容易改正。其次,C语言是可移植的(Portable)或者称为平台无关的(Platform Independent)。

C语言是功能强大,使用范围最广的高级语言之一。

1.1.2 C语言的历史

C语言是面向过程的较好的结构化程序设计语言,其历史颇为有趣。C语言的“先人”可以追溯到 ALGOL 60 语言。1963 年,剑桥大学将 ALGOL 60 语言发展成为 CPL(Combined Programming Language)语言。但 CPL 的最大缺点就是它太大了,以至于不能在很多应用程序中实现。到1967 年,剑桥大学的Martin Richards 在访问MIT 时,对CPL 语言进行了简化,推出了 BCPL(Basic CPL)语言。

1970 年,美国贝尔实验室的Ken Thompson 发现BCPL 太慢了,而且缺乏运行时的支持,他将BCPL进行了实验性的修改,并为它起了一个有趣的名字——B语言,意思是将CPL语言进行压缩,提炼出它的精华。B是BCPL的一个简化版,而且被设计成专门用来进行系统编程,但它依然不能满足程序员们的要求:它的字符处理机制太丑陋了,而且浮点数运算被实现得并不是很理想,处理指针时开销太大。

在 1972 年,当 PDP-11 进入贝尔实验室时,Ken Thompson 的同伴,同样在贝尔实验室的 Dennis M. Ritchie,在从 BCPL 中抽取了一些共性放入 B 语言中,对 B 进行了改进,并且在里面加入了数据类型,他把这个扩展的语言称为 NB(New B)。随后,他又继续对新语言进行大量修改,似乎可以用新的名字来重新命名它了,于是取了BCPL的第二个字母作为这种语言的名字,这就是C语言。

1973年,Ritchie完成了C语言核心,并用C重写了整个UNIX内核。为了使UNIX操作系统推广,1977 年 Dennis M. Ritchie 发表了不依赖于具体机器系统的 C语言编译文本《可移植的C语言编译程序》。

1978 年,Brian W. Kernighian 和 Dennis M. Ritchie 出版了长久不衰的经典之作—《The C Programming Language》,把 C 从贝尔实验室推向世界,从而使 C语言成为目前世界上流行最广泛的程序设计语言之一。

1.1.3 C语言的特点

C语言具有如下特点。(1)简洁紧凑、灵活方便。C语言一共只有32个关键字(关键字都为小写),9种控制语句,程序书写自由,它把高级语言的基本结构和语句与低级语言的实用性结合起来,输出程序工作量少。(2)运算符丰富。C的运算符包含的范围很广泛,共有34个运算符。C语言把括号、赋值、强制类型转换等都作为运算符处理。从而使C的运算类型极其丰富,可以实现在其他高级语言中难以实现的运算。(3)C是结构化语言。结构化语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰,便于使用、维护以及调试。(4)数据结构丰富。(5)C语法限制不太严格、程序设计自由度大。(6)C语言允许直接访问物理地址,可以直接对硬件进行操作。(7)C语言程序生成代码质量高,程序执行效率高。(8)C语言适用范围大,可移植性好。

1.2 从Hello程序认识C语言

下面先介绍几个简单的C语言程序,并从中了解C语言的基本构成。【例1.1】 请打印出以下内容:Hello Kitty。

#include          /*包含标准库的信息*/

int main()      /*定义名为 main()的函数,它不接受参考值*/

{          /*main()函数的语句都被包含在花括号中*/

printf("Hello Kitty\n"); /*main()函数调用库函数 printf()显示打印的序列*/

return 0;            /*其中\n代表换行符*/

}

C 程序最大的特点就是所有的程序都是用函数来装配的。通常情况下,函数的命名是没有限制的,但 main()是一个特殊的函数称为主函数,是所有程序运行的入口,无论它所在何处。C语言程序中有且只有一个main()函数。

1.2.1 程序的实例解析

main()函数通常会调用其他函数来帮助完成某种工作,被调用的函数可由程序员自己编写,也可以是已有的函数库。程序的第一行:

#include

作用在于告诉编辑器在本程序中包含标准输入/输出库的信息。stdio.h是C编译系统提供的一个文件名,stdio 是“standard input & output”的缩写,即有关标准输入输出的信息;.h表示是head文件即为头文件。

函数之间进行数据交换方法之一就是调用函数向被调用函数提供一个值,称为参数,函数名后的圆括号( )将参数列表包含。如本例中的main()函数不需要任何参数,可以用空参数表( )表示。

函数中所有的语句用一对花括号{}包含,本例中的main()函数仅包含一条语句:

printf("Hello Kitty\n");

其作用是在屏幕上输出 Hello Kitty 并将光标换行。语句中“Hello Kitty\n”作为参数调用printf()函数。printf()是一个打印输出的库函数。\n的作用是使光标换行。

试将该语句分别做如下改动。(1)printf("Hello Kitty\n);

缺少一个引号(")后程序编译出错,printf()函数有特定的格式,在第2章中有其详细解释。(2)printf("Hello Kitty");

将\n去掉,编译并未出错,读者发现光标的停留位置变化了,没有换行。(3)将整个程序改为:

#include

int main()

{

printf("Hello");

printf(" Kitty");

printf(" \n");

return 0;

}

这段程序和之前的输出结果相同。请读者试试在双引号中任意输您想输出的内容。

1.2.2 简单例题的引申

【例1.2】 求两数之和。

#include

int main( )

{

int a,b,sum;         /*定义整型变量 a,b,sum*/

a=110; b=120;          /*对变量 a,b赋值*/

sum = a+b;            /*计算 sum的值*/

printf("sum=%d",sum);     /*将结果 sum以整型的方式输出*/

return 0;

}

程序中如/*定义整型变量 a,b,sum*/是对程序的注释,包含在/*与*/之间的内容将被编译器忽略。程序的注释一般在某行的最末尾或另起一行。注释的作用是使程序更易于理解。

在C语言中,变量必须先定义后使用。定义通常放在函数的起始处,在任何可执行语句之前。定义用于说明变量的属性。如 int a,b,sum;即说明了 a、b、sum 3 个变量都为整型变量。程序的第五、六行:

a=110; b=120;

sum = a+b;

它们为变量 a、b、sum 赋初值。各条语句以分号(;)做结束。变量的概念在本书的第 2章中详细介绍。变量就像钱包,里面可以装上千元也可以装几毛钱,其值可以不断的变化。读者可以将程序中变量的值改变,观察程序变化。程序的第七行:

printf("sum=%d",sum);

printf()是一个通用输出格式化函数,其中每个百分号(%)表示其他的参数之一进行替换的位置,并制定打印格式,%d 为整型参数,该位置由 sum 的值替代,即输出 sum=230,除了%d 的位置按参数 sum 的值输出外,printf()函数中双引号(“”)中的内容遵循你给什么内容它输什么内容的原则。【例1.3】 通过调用子函数,求两数之中的较大者。

本程序包含两个函数:被调用函数Getmax()和主函数main()。例题中的函数如printf()、scanf()等都是函数库中提供的函数。除此之外,我们还能自己动手来编写一些函数。如本例中的 Getmax()函数的作用就是返回两数中的较大值。main()也是函数,不过身份有些特殊,首先它是程序的入口;其次,如果将所有的函数当成团队中的个人,那么 main()函数更像是老板,Getmax()函数就是员工,main()函数调用Getmax()完成任务。

虽然程序的第一行不是 main()函数,但是程序仍从 main()函数开始执行,因为 main()函数为程序的入口。进入main()函数后,按顺序执行程序,运行至程序第13行:

max=Getmax(a,b);

调用函数Getmax(),并将a、b的值传递给x、y,若我们从键盘上输入12、30,则x、y的值为12、30。

int Getmax(int x , int y)

Getmax()函数结果通过 return语句返回给 main()函数。即程序调用 Getmax()函数,返回主函数的被调用点处,如程序中箭头所指。

main()函数中scanf()函数的功能是执行格式化输入。程序第12行:

scanf("%d,%d",&a,&b);

作用为从键盘上输入a和b的值,&a为a的地址,即从键盘上输入的内容存放到a和b所在的地址中。双引号“”中%d是对输入参数的格式化说明,即要求输入的a和b的值为整型。

1.2.3 C语言程序的组成

通过学习以上3个简单的C语言程序,可以分析出C语言程序的基本特点、基本组成结构,常见语句的书写模式,可以总结出以下特点。(1)一个C语言源程序有且只有一个main()函数,即主函数。无论main()函数的位置在何处,程序执行都从main()函数开始,即main()函数是程序的入口。(2)源程序中可以有预处理命令(如include命令),预处理命令通常放在源文件或源程序的最前面。(3)每一条语句都必须以分号结尾。除此之外,预处理命令、函数头及花括号“}”之后不能加分号。(4)C程序中可通过/*⋯⋯*/对程序语句进行注释,注释内容被编译器忽略。读者为了方便阅读可以对复杂的程序加上必要的注释,对初学者来说加上注释将更有利于自己的阅读。(5)C程序由函数构成。函数可以是系统提供的库函数(如printf()、scanf()函数),也可以自己编写函数。一个C源程序由一个main()函数和若干个(个数>=0)其他函数构成。

除此之外,编写C语言程序时还需遵循如下程序的书写规范。(1)一个说明或一个语句占一行。(2)用{ }括起来的部分,通常表示了程序的某一个层次结构。{ }一般与该结构语句的一个字母对齐,并独占一行。(3)当语句比上一条语句层次低时可用缩进若干空格来表示,看起来更加清晰,增加程序的可读性。

在编程时应力求遵循这些规则,以养成良好的编程风格。

1.3 C语言程序的运行步骤和开发环境

1.3.1 C语言程序的运行步骤

前面介绍了几个用C语言编写的程序,C语言是高级语言源程序,必须用编译程序的软件“翻译”计算机能够识别的由0或1组成的二进制命令。这种二进制形式程序我们称为“目标程序(object program)”。然后,将该目标程序与系统的库函数及其他目标程序连接,形成可执行的目标程序。

完成C语言程序的编辑后,如何运行呢?其调试和运行步骤如图1-2所示。

图中虚线表示程序调试方向,但编译、连接发生错误或程序运行结果不正确时,需要检查源程序,不断调试,直到程序结果正确为止。

我们可以将前面的程序修改,运行程序。如果将某行的分号(;)去掉,则编译不通过;如果将例题中的printf改为print,并分别执行编译和连接,发现编译后未发生错误,而连接后发生错误,即检测输入语句printf是否发生错误是在连接输入输出库(stdio.h)才被发现。图1-2 C语言程序调试和运行步骤

运行 C 程序,必须用到相应的 C 编译系统,常用的编译系统有 C-Free 5.0、Visual C++ 6.0等,接下来介绍上述两种编译系统。

1.3.2 C-Free 5.0 简介

1.窗口信息

主界面窗口如图1-3所示,主要包含以下部分。图1-3 C-Free 主界面

● 主菜单及工具条。

● 标签栏。

● 代码编辑器。

● 符号窗口及符号工具条。

● 消息窗口。

● 文件列表窗口。

主菜单中几乎包含了所有的命令(部分命令包含在右键菜单中),工具条能够使用户方便的执行一些常用命令。标签栏列出了所有已经打开的文件,方便用户在不同文件之间进行切换。大部分的工作在代码编辑器中进行。符号窗口和符号工具条能够帮助用户方便的寻找定位代码。文件列表列出了所有已经打开的文件以及工程文件。消息窗口显示编译、构建的信息。工具条包括标准工具条及构建/执行工具条,每个图标对应的功能如图1-4 及图1-5所示。图1-4 标准工具条图1-5 构建/执行工具条

消息窗口可以显示两类消息,一类是编译、构建过程产生的消息;另一类是多文件搜索之后显示的结果信息。编译过程中产生的消息如图1-6所示。图1-6 编译时产生的消息

用户可以根据信息修改程序错误。

2.快速开始(1)双击C-Free快捷方式,运行C-Free。(2)单击工具栏上的“新建”按钮,这样就会产生一个新的代码编辑器窗口,在编辑区中输入程序。(3)在主菜单上,单击“文件→保存”,保存成扩展名为.c的文件(如保存为first.c文件)及选择保存的位置(如D:盘下)。(4)对文件进行编译,在主菜单上,单击“构建→构建并运行”或直接按【F5】键,若程序正确,弹出窗口输出结果。程序运行结果如图1-7所示。图1-7程序运行结果

若程序中删除一个分号,按【F5】键运行后,程序编译出错,查看消息窗口的错误提示,可根据提示的错误,修改程序,直至结果正确。

3.如何调试

当程序出现错误,而用户又不知程序错在何处时,可尝试使用断点调试的方法。(1)设置/取消断点。在代码编辑器中,将光标定位到代码中的某行,单击主菜单中“调试→设置/取消断点”。快捷方法:用鼠标单击代码行前面的空白位置(如第13行前空白部分),如图1-8所示。取消断点方法相同,但必须光标停留在已设置断点的程序行(如要取消第13行的断点,将光标停留在第13行,按【F10】键)(2)开始调试。单击主菜单中“调试→调试”,或直接按【F9】键,一旦程序开始调试, C-Free会自动显示“调试工具条”,如图1-9所示。图1-8 C-free 设置断点(【F10】)图1-9 C-free 调试工具栏

程序开始调试,停在某一个断点处。若要继续执行程序,可单击工具条上的进入(或【F7】),跳过(或【F8】)按钮。两个按钮都为继续单步执行程序,区别在于当有函数时,单步进入(【F7】)是进入函数内部执行的,跳过(【F8】)是跳过函数继续执行,即当碰到函数时不进入函数内部单步执行,而直接得到函数的结果。(3)退出调试。读者可以单步执行到程序结束,也可以中途退出程序。单击调试工具条上的“结束调试”按钮,程序退出调试状态,回到编辑状态。(4)单步进入(【F7】)。当程序处于调试状态,并停在某个断点处,如果该断点处的语句是一条函数调用,单击调试工具条上的“单步进入”按钮,程序将进入这个函数,可对这个函数进行调试。

如对例1.3的程序,在其第13行设置断点,开始调试程序,程序在第13行停止,如图1-10所示。单击“进入”按钮(或【F7】),程序进入Getmax()函数,如图1-11所示。图1-10 开始调试(【F9】)图1-11 进入函数(【F7】)(5)下一步(【F8】)。当程序处于调试状态,并停在某个断点处,单击调试工具条上的“跳过”按钮(或【F8】),程序执行到下一条语句,即不进入函数继续执行。如仍将断点设置在第13行,然后开始调试程序,程序在第13行停止,单击调试工具条上的“跳过”按钮(或【F8】),程序直接进入下一步,而不进入函数,如图1-12所示。(6)查看/修改。在环境窗口中右键单击某一条局部变量信息,将弹出如图1-13所示窗口。图1-12 不进入函数(【F8】)图1-13 查看变量信息

选择“查看/修改”,对于数组(将在第 4 章讲到)、结构或者类变量,将显示“查看”窗口;对于其他变量,将显示“修改”窗口。双击某一条局部变量信息,也可以实现同样的功能。

例如,对于图1-13的局部变量,双击“s”,由于s是字符串数组,因此将显示“查看”窗口,如图1-14所示。图1-14 查看变量对应值

4.C-free5.0常用快捷键【F5】:运行程序。【F10】:设置断点。【F9】:开始调试。【F7】:单步执行,遇到函数,跟踪进入函数内部。【F8】:单步执行,遇到函数,直接完成函数调用(不进入函数)。

1.3.3 Visual C++ 6.0 简介

1.界面介绍

界面如图1-15所示。

2.快速开始

有两种方法新建一个文件。方法一:新建文件,编译后让系统自动生成一个工程。方法二:先新建工程后新建文件。

方法一:系统自动生成工程。(1)新建文件:选择 File→C++ Source File,输入文件名,扩展名为.c,同时设置文件存放的路径,如图1-16所示。图1-15 Visual C++ 6.0 界面图1-16 选择新建 C++ Source File(2)输入程序。将程序输入编辑区。(3)编译程序。选择Build→Compile,弹出对话框,如图1-17所示。图1-17 询问是否新建默认工程空间

单击“是”按钮,则自动生成默认的工程空间,如图1-18所示。

看编译是否有错,修改至 0 个错误(errors)。若程序编译有错,如将 printf 语句后的分号去除,程序编译错误,可拖动滚动条查看错误。在消息框中双击错误,在编辑区中,箭头停留在错误行,如图1-19所示。图1-18 画圈处可查看新建的工作区图1-19 画圈处为指示错误所在

值得一提的是,箭头往往会指向错误的下一行,图1-19所示的错误是printf语句结尾处缺少分号,但是箭头是指向下一行的。(4)连接程序。选择 Build→Rebuild All。若有错,修改错误到无错误为止。(5)运行程序。选择 Build→Execute(或【Ctrl+F5】)。输出结果如图1-20所示。图1-20 查看结果

方法二:先新建工程,后新建文件。(1)新建工程。选择File→New,在图1-21所示的对话框中选择Projects选项卡下的Win32 Console Application。

在 Project name 下输入工程名,如第 1 章,并选择该工程文件所存放的路径,如 D:\C 教材\第1章。路径选择好后,单击OK按钮,确认。

根据自己需求选择,可选新建一个空的工程,如图1-22所示。单击Finish按钮完成新建工程。图1-21 选择Projects选项卡下的Win32 Console Application图1-22 默认新建一个空工程(2)新建文件。在 File 选项卡下选择 C++ Source File,输入文件名,如例1.1.c,如图1-23所示。请注意:若不写扩展名.c 系统也会给文件一个扩展名.cpp,但是即使在程序完成正确的情况下,编译会出现错误。原因是VC++的编译器认为.c的为C程序,.cpp的为C++程序, C程序与C++程序中同样的函数在编译后的obj文件中的symbol是不同的,所以以C方式编译的obj文件与以C++方式编译的obj文件无法成功链接。

① 输入程序。将程序输入编辑区。

② 编译程序。选择 Build→Compile。图1-23 选择 Files 选项卡下的 C++ Source File

③ 连接程序。选择 Build→Rebuild(或【F7】)。

④ 运行程序。选择 Build→Execute(或【Ctrl+F5】)。

3.如何调试(1)设置或去除断点(【F9】)。光标停留在需要设置断点的行,按【F9】设置断点。(2)开始调试(【F5】)。选择 Build→Start Debug→Go(或【F5】),进入调试。(3)单步调试【F11】(遇到函数时,进入被调函数)或【F10】(遇到函数时,不进入被调语句)。(4)退出调试。选择 Debug→Stop Debugging 或者选择工具条上的退出调试按钮。更多工具条上按钮功能如图1-24所示。图1-24 Visual C++ 6.0 调试工具条

4.Visual C++ 6.0 常用快捷键小结【F9】:设置或去除断点。【F5】:开始调试。【F11】:单步调试(遇到函数时,进入被调函数)。【F10】:单步调试(遇到函数时,不进入被调语句)。【Shift+F5】:退出调试。

习题

1.在每个C语言程序中都必须包含一个______函数。

2.C语言的程序由______个主函数和______个子函数组成。程序的执行总是从______函数开始,不管它放在哪个位置。

3.main()函数后面有一对花括号,花括号括起来的部分称为______。

4.C语言规定函数内的每个语句必须以______结束。

5.C语言程序的每行可以写______条语句。

6.如果在程序中用到了标准输入/输出函数时,应在程序开头加上______预处理命令。

7.C语言程序的开发和运行步骤包括编辑、______、______、______等几步。

第2章 C语言程序设计基础

计算机程序设计涉及两个基本问题,一个是数据的描述,另一个是具体操作的描述。在计算机中的数据不仅有数值数据,而且还包括文字、声音、图像、视频等所有计算机能处理的数据。不同的数据,在计算机中的存储形式也有所不同,从而使得对这些数据的具体操作也有所不同。本章主要介绍C语言的数据类型、常量、变量、运算符与表达式、数据类型转换、数据的输入和输出。

2.1 数据类型

在计算机中处理的数据,有一个类别之分的问题,也就是说,数据是归属于哪一个具体的类型。针对不同类型的数据,计算机采用不同的存储方式并进行不同的操作处理。数据类型决定了这种数据的取值范围和能够对它进行的具体操作。随着处理对象的复杂化,数据类型也变得更加丰富。数据类型的丰富程度直接反映了程序设计语言处理数据的能力。

2.1.1 数据的分类

数据类型是按照被定义变量的性质、表示形式、占据存储空间的多少、构造特点来划分的。在C语言中,数据类型十分丰富,具体可分为:基本类型、构造类型、指针类型、空类型四大类,如图2-1所示。图2-1 数据类型的分类

1.基本类型

基本类型数据最主要的特点是,其值不可以再分解为其他的类型。也就是说,基本类型数据是不可再分的。

2.构造类型

构造类型数据是根据已定义的一个或多个数据类型用构造的方法来定义的。也就是说,一个构造类型的数据值可以分解成若干个“成员”或“元素”的值。每个“成员”又可以是包含自己的数据类型。在C语言中,构造类型又可以细分为:数组类型、结构体类型、共用体(联合)类型。

3.指针类型

指针是一种特殊的,同时又是具有重要作用的数据类型。指针的值是用来表示某个变量在计算机内存储器中的地址,即指针表示的是地址。

4.空类型

在调用函数时,通常应向调用者返回一个具有一定数据类型的函数值。这个返回的函数值的类型,应在函数定义及函数说明中加以说明。但是,也有一类函数,调用函数后并不需要向调用者返回函数值,这种函数可以定义为“空类型”,其类型说明符为void。

2.1.2 整型数据

整型数据也就是整数数据,是没有小数部分的数值。整型数据可以分为基本型(用 int表示)、短整型(用 short int 表示)、长整型(用 long int 表示)和无符号型 4 种。其中无符号型又可分为无符号整型(用 unsigned int 表示)、无符号短整型(用 unsigned short 表示)、无符号长整型(用 unsigned long 表示)。无符号型数据是指不包含符号位的数据,在存储单元中,二进制位全部用来存放数据本身。

标准 C 没有具体规定整型数据所占内存的字节数,在使用时要特别引起注意。在 C Free5.0中,整型数据所占内存的字节数及数的表示范围如表2-1所示。表2-1 C Free 5.0 中整型数据所占内存的字节数及数的表示范围

以上数据可以通过实例来验证。【例2.1】 编程测试整型数据的实际字节长度。

程序代码:

#include

int main()

{

printf("int 型字节长度: %d 个字节\n",sizeof(int));

printf("unsigned int 型字节长度: %d 个字节\n",sizeof(unsigned int));

printf("short int 型字节长度: %d 个字节\n",sizeof(short int));

printf("unsigned short 型字节长度: %d 个字节\n",sizeof(unsigned short ));

printf("long int 型字节长度: %d 个字节\n",sizeof(long int));

printf("unsigned long 型字节长度: %d 个字节\n",sizeof(unsigned long ));

return 0;

}

其中的 printf( )是格式输出函数,sizeof( )是测定不同类型数据字长的函数。程序运行结果如图2-2所示。图2-2 例2.1程序运行结果

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载