C程序设计概述完整版课件全套ppt教学教程最全整套电子教案电子讲义(最新).ppt
本章要求:,理解程序设计的基本概念和程序的执行过程 了解C语言的特点 掌握C语言中标识符的命名规则 掌握C语言程序的基本组成结构 理解算法及算法的表示 掌握开发和运行一个C语言程序的过程,本章难点: 正确使用C语言中的标识符,本章重点: C程序的基本组成结构,标识符的命名规则,第1章 C程序设计概述,第1章 C程序设计概述,1.1 计算机程序设计概述 1.2 语言简介 1.3 C语言的程序结构 1.4 算法及算法的表示 1.5 运行一个C程序,1.1 计算机程序设计概述,1.1.1 程序与程序设计语言,1程序,什么是程序?广义地讲,程序就是为完成某一任务而制定的一组操作步骤。按该操作步骤执行,就完成程序所规定的任务。,2程序设计语言,人和计算机交流信息使用的语言称为计算机语言或称程序设计语言,1.1 计算机程序设计概述,1.1.1 程序与程序设计语言,(1)机器语言(Machine Language),(2)汇编语言(Assemble Language),汇编语言程序的执行过程,汇编语言和机器语言都是面向机器的程序设计语言,一般称为低级语言。,1.1 计算机程序设计概述,1.1.1 程序设计语言的发展,(3)高级语言(High Level Language),高级语言是一种与硬件结构及指令系统无关,表达方式比较接近自然语言和数学表达式的一种计算机程序设计语言。 优点: 描述问题能力强,通用性、可读性、可维护性都较好 缺点: 执行速度较慢,编制访问硬件资源的系统软件较难。,用高级语言编写的程序称为“源程序”,计算机不能直接识别和执行,高级语言程序有编译和解释两种执行方式。,1.1 计算机程序设计概述,高级语言程序的编译执行:,是将源程序整个编译成等价的,独立的目标程序,然后通过链接程序将目标程序链接成可执行程序。,高级语言编译执行过程,1.1 计算机程序设计概述,高级语言程序的解释执行:,解释方式是将源程序逐句翻译,翻译一句执行一句,边翻译边执行,不产生目标程序。整个执行过程,解释程序都一直在内存中 。,高级语言解释执行过程,1.1 计算机程序设计概述,1.1.2 程序设计方法概述,程序设计方法的发展可以划分以下三个阶段: 1早期的程序设计 2结构化程序设计 3面向对象的程序设计,1.2 语言简介,1.2.1 语言的发展,语言是在70 年代初问世的。1973年由美国电话电报公司(AT if (表达式)语句;,2. 丰富的运算符和数据类型,1.2.2 C语言的特点,4. C语法限制不太严格、程序设计自由度大 一般的高级语言语法检查比较严,能够检查出几乎所有的语法错误。而C语言允许程序编写者有较大的自由度。,3. 语言是一种结构化语言 它层次清晰,便于按模块化方式组织程序,易于调试和维护。,5. 直接访问内存的物理地址 由于能进行位(bit)一级的操作。实现了对硬件的编程操作,因此语言集高级语言和低级语言的功能于一体。既可用于系统软件的开发,也适合于应用软件的开发。,1.2.2 C语言的特点,6. 语言还具有效率高,可移植性强等特点 一般只比汇编程序生成的目标代码效率低10%20%。,7C语言适用范围大 C语言还有一个突出的优点就是适合于多种操作系统,如DOS、UNIX,也适用于多种机型。C语言程既适合编写大型的系统软件,也适合编写应用软件。,1.2.3 语言的字符集,字符是组成语言的最基本的元素。语言字符集由字母,数字,空格,标点和特殊字符组成。 (1)字母 小写字母az共26个,大写字母AZ共26个(C语言中区分字母大小写) (2)数字 09共10个 (3)空白符 空格符、制表符、换行符等统称为空白符。空白符只在字符、常量和字符串常量中起作用。在其它地方出现时,只起间隔作用。,(4)标点和特殊字符 C语言编程中可以使用的标点和特殊字符共有30个,如下表,1.2.3 语言的字符集,(4)标点和特殊字符,1.2.4 语言标识符,1保留字符,C语言的保留字符(也称关键字)共有32个,根据关键字的作用,可分其为数据类型关键字、控制语句关键字、存储类型关键字和其它关键字四类。 (1)数据类型关键字(12个):char, double, enum, float, int, long, short, signed, struct, union, unsigned, void (2)控制语句关键字(12个):break, case, continue, default, do, else, for, goto, if, return, switch, while (3)存储类型关键字(4个):auto, extern, register, static (4)其它关键字(4个):const, sizeof, typedef, volatile,2预定义标识符 C语言中除了上述保留字符外,还有一类具有特殊含义的标识符,它们被C系统用作库函数名、预编译命令,这类标识符称为系统预定义标识符。例如: 系统库函数:如sin,printf,scanf等 预编译命令:如define,include,undef,ifdef,endif等 一般来说,用户在编写C程序时,不要把这些标识再定义为其它用途的标识符(用户自定义标识符)。,1.2.4 语言标识符,3用户定自义标识符 用户自定义标识符是用户根据编程的需要而定义的标识符,用于标识变量、符号常量、用户自定义函数、类型名等。 C 规定,标识符只能是字母(AZ,az)、数字(09)、下划线(_)组成的字符串,并且其第一个字符必须是字母或下划线。 例如,以下标识符是合法的: a, x, x3, BOOK1,sum5,mysin 以下标识符是非法的: 3s 以数字开头 s*T 出现非法字符* -3x 以减号开头 bowy-1 出现非法字符-(减号),1.2.4 语言标识符,使用自定义标识符的几点说明: (1)标准C不限制标识符的长度,但它受各种版本的C 语言编译系统限制,同时也受到具体机器的限制。 (2)标识符中,大小写是有区别的。 (3)标识符虽然可由程序员随意定义,建议命名应尽量有相应的意义,以便阅读理解,作到“顾名思义”。 例如:可用sum 表示求和的量,name 表示姓名等。 (4)不使用C语言的关键字:类型说明符、语句定义符、预处理命令。 (5)标识符不能和用户已编制的函数或C语言库函数同名。否则程序中调用库函数就会出错。,1.2.4 语言标识符,1.3 C语言的程序结构,1.3.1 几个简单的C程序实例,例1-1 在屏幕输出一行文字信息。 具体程序如下: #include void main() printf(Hello C!n); ,其执行结果是在屏幕上输出一行信息:,Hello C!,头包含文件,程序开始,程序结束,打印输出函数,主函数,输出内容,1.3.1 几个简单的C程序实例,例1-2 输入2个数据,计算它们的和,并打印输出在屏幕上。,程序运行结果如下:,void main() int a,b,s; / 定义变量 printf( Enter two number a,b=?n); scanf(%d%d, ,1.3.1 几个简单的C程序实例,例1-3 将例1-2中的求2个数的和编写成独立的函数,在主函数中调用实现。 #include void main()/主函数 int fsum(int,int); /用户自定义函数声明 int a,b,t; /定义a,b,t为整型变量 printf(Enter two number a,b=?n); scanf(%d%d, /返回变量z的值 ,程序执行的结果如下:,1.3.2 C程序的结构特点,C程序,函数组成,由若干,函数说明部分,函数体,函数类型说明,函数名,函数形参,形参类型说明,变量定义部分,执行部分,int fsum(int x, int y) ,例如:,(函数首部),1.3 C语言的程序结构,1.3 C语言的程序结构,C程序的基本结构的特点: (1)C程序为函数模块结构,C程序由一个或多个函数构成,其中必须,且只能有一个主函数main()。 (2)C程序从main()函数开始执行,在main()中结束。 (3)C程序的函数是系统提供的标准函数(如printf、scanf等)和用户自己定义的函数(如prn、fsum等)。 (4)每一个说明,每一个语句都必须以分号结尾。但预处理命令,函数头和最后一个花括号“”之后不能加分号。 (5)C 语言的注释符是以“/”开头并以“”结尾的串。在“/”和“”之间的即为注释。 在TC+中,注释符以“/” 开始,到本行结束。 例如: int a ,b; / 定义2个整型变量,1.3 C语言的程序结构,1.3.3 C函数的结构,函数是语言程序的基本单位。任何函数(包括主函数main())都是由函数说明和函数体两部分组成,其一般结构如下: 函数类型 函数名(形式参数说明) 数据说明部分; 语句部分; ,例: int fsum(int x, int y) int z; z=x+y; return(z); /返回变量z的值 ,1.3 C语言的程序结构,1.3.4 C程序的书写风格,(1)一个说明或一个语句占一行 (2)函数与函数之间加空行, 以清楚的分出程序中有几个函数。 (3)用括起来的部分,通常表示了程序的某一层次结构。一般与该结构语句的第一个字母对齐,并单独占一行。 (4)低一层次的语句或说明可比高一层次的语句或说明缩进若干格后书写,同一个层次的语句左对齐。 (5)对数据的输入,运行时最好要出现输入提示,对于数据输出,也要有一定的提示和格式。 (6)程序中适当加上一些注释。,1.4 算法及算法的表示,1.4.1 算法概述,广义: 算法是为完成一项任务所应当遵照的一步一步的规则的、精确的、无歧义的描述,它的总步数是有限的。,狭义: 算法是解决一个问题采取的方法和步骤的描述,算法概念,例1-4 输入三个数,然后输出其中最大的数。,算法可以写成: (1) 输入A,B,C。 (2) 若AB,则MAX A; 否则:MAXB。 (3) 若CMAX,则MAX C。 (4) 输出MAX,MAX即为最大数。,1.4 算法及算法的表示,例1-5. 输入10个数,打印输出其中最大的数。 算法设计如下: (1)输入1个数,存入变量A中,将记录数据个数的变量N赋值为1(2)将A存入表示最大值的变量Max中,即Max=A (3)再输入一个值给A,如果AMax 则 Max=A, 否则Max不变 (4)让记录数据个数的变量增加1,即N=N+1 (5)判断N是否小于10,若成立则转到第(3)步执行,否则转到 第 (6)步。 (6)打印输出Max,1.4 算法及算法的表示,1.4.2 算法的特性 1有穷性:算法须在执行有穷多个计算步骤后终止 2确定性:算法的每个步骤必须都是精确定义的、无二义性的; 3有效性:算法中的每一个步骤必须有效地执行,并能得到确定结果; 4输入:一个算法中可以没有输入,也可以有一个或多个输入信息 5输出:一个算法应有一个或多个输出,1.4 算法及算法的表示,1.4.3 算法的表示 一、 自然语言与伪代码表示算法 自然语言就是指人们日常使用的语言,可以是汉语、英语或其它语言。,1.4 算法及算法的表示,伪代码是用介于自然语言和计算机语言之间的文字和符号(包括数学符号)来描述算法。,当程序员的笑话: 老婆给当程序员的老公打电话:“下班顺路买一斤包子带回来,如果看到卖西瓜的,买一个。”当晚,程序员老公手捧一个包子进了家门。老婆怒道:“你怎么就买了一个包子?!”老公答曰:“因为看到了卖西瓜的。,-自然语言容易出现“歧义性”,例1-4的伪代码表示如下: Begin(算法开始) 输入 A,B,C IF AB 则 AMax 否则 BMax IF CMax 则 CMax Print Max End (算法结束),例1-5的伪代码表示如下: Begin(算法开始) N=1 Input A (输入数据给变量A) Max=A 当 NMax 则 Max=A N=N+1 Print Max End (算法结束),1.4 算法及算法的表示,1常用的流程符号 l 起止框:表示算法的开始和结束。 l 处理框:表示初始化或运算赋值等操作。 l 输入输出框:表示数据的输入输出操作。 l 判断框:表示根据一个条件成立与否,决定执行两种不同操作中的其中一个。 l 流程线:表示流程的方向。,二、 用流程图表示算法,1.4 算法及算法的表示,(1) 顺序结构 顺序结构是简单的线性结构,各框按顺序执行。其流程图如图1-4所示,2三种基本结构的表示,图1-4 顺序结构,图1-5 选择结构,1.4 算法及算法的表示,(2) 选择(分支)结构 对某个给定条件进行判断,条件为真或假时分别执行不同的内容。其基本形状有两种,如图1-5所示。,(3)循环结构 循环结构分为当型循环和直到型循环两种。 当型循环:执行过程是先判断条件,当条件为真时,反复执行“语句组” ,一旦条件为假,跳出循环,执行循环紧后的语句。如图1-6(a)所示。,1.4 算法及算法的表示,图1-6 循环结构流程图,直到型循环:执行过程是先执行“语句组”,再判断条件,条件为真时,一直循环执行语句组,一旦条件为假,结束循环,执行循环紧后的下一条语句。如图1-6(b)所示。,1.4 算法及算法的表示,图1-6 循环结构流程图,1.4 算法及算法的表示,例1-4 输入三个数,然后输出其中最大的数,图1-8 例1-5的算法流程图,1.4 算法及算法的表示,例1-5 输入10个数,打印输出其中最大的数。,1.4.4 用NS流程图表示算法,三种基本结构的N-S图描述如下所示: 1. 顺序结构 顺序结构的N-S图,如图1-9所示,1.4 算法及算法的表示,图1-4 顺序结构,图1-9 顺序结构的N-S图,1.4.4 用NS流程图表示算法,2. 选择结构 对应于选择结构图1-5的N-S图为图1-10所示,1.4 算法及算法的表示,图1-10 选择结构的N-S图,图1-5 选择结构,1.4.4 用NS流程图表示算法,3. 循环结构 当型循环结构的N-S图如下图。,1.4 算法及算法的表示,图1-11 循环结构的N-S图,图1-6循环结构流程图,1.4.4 用NS流程图表示算法,3. 循环结构 直到循环结构的N-S图如下:,1.4 算法及算法的表示,图1-11 循环结构的N-S图,图1-6 循环结构流程图,例1-4算法的NS流程图,1.4 算法及算法的表示,例1-4 输入三个数,然后输出其中最大的数,算法的NS流程图,例1-5算法的NS流程图,1.4 算法及算法的表示,例1-5 输入10个数,打印输出其中最大的数。,1.4 算法及算法的表示,说明:上面介绍的算法表示是给人看的,即是为帮助程序开发人员阅读、编写程序而设计的一种辅助工具,因此算法表述中的文字和符号只要符合人们的约定和习惯即可,人们将算法流程图用计算机语言(如C、VB)编写程序时,必须使用符合其语法规则。否则计算机便不能处理。,1.4 算法及算法的表示,依据图1-7的算法流程图,可以很方便地转化为相应的程序。下面就是用C语言编写的程序段。 void main() int a,b,c,max; /定义变量 scanf(“%d %d %d”, /打印输出max ,1.5 运行一个C程序,1.5.1 C程序运行的一般步骤,1源程序编辑 2程序编译 3连接程序 4程序运行,大部分C语言系统都提供一个独立的集成开发环境,它可将上述四步连贯在一个程序之中。,VC+/C-Free,1.5 运行一个C程序,1.5.2 在Microsoft Visual C+环境下运行C语言程序,在VC+集成开发环境中建立运行一个新程序通常有以下几个步骤: (1)运行启动VC+集成开发环境; (2)在编辑器中编写源程序或打开已有的C程序; (3)保存源文件; (4)调试修改程序,直到程序编译无语法错误; (5)编译连接生成可执行文件,运行程序,输入上些数据,验证程序运行输出结果的全理性; (6)最后将调试通过运行正确的程序保存在磁盘中。,1.5 运行一个C程序,1. 启动Visual C+ (最好在机房上机时讲解),1.5 运行一个C程序,2新建/打开C语言程序文件,本章小结,通过本章的学习,读者应对计算机语言及程序设计的概念,C程序的组成特点,C程序的运行过程有一个初步了解。 学习C语言程序设计,掌握C语言语法规则和程序设计方法,培养编程技能是很重的。C语言相对其它高级语言来说要相对难一些,但只要认真对待,学习程序设计好的方法就是在掌握语法规则的基础上,多分析阅读别人写的程序,多自己动手编写一些小程序,多上机调试运行程序,做到这3个“多”字,学习好C程序设计就不难了。,本章作业,P.21 直接做在教材上: 二、判断题 三、填空题 四、选择题 做在作业本上: 五、编程题 2 、3,本章要求:,掌握基本数据类型的使用,理解不同类型数据在内存中的存放形式 掌握常量的分类及其表示形式 掌握变量的定义及初始化 理解指针的概念,掌握指针变量的定义、初始化及简单使用 掌握数据的输入/输出方法及常用输入/输出函数的使用 掌握常用内部函数的使用,本章难点: 不同据类型的数据在内存中的存放形式,本章重点:变量与常量的概念、格式输入/输出函数( scanf() /printf())的基本使用,第2章 数据类型与常用库函数,第2章 数据类型与常用函数,2.1 语言的数据类型 2.2 常量 2.3 变量 2.4 指针变量 2.5 标准输入/输出函数用法 2.6 常用库函数,2.1 语言的数据类型,(引例)例2-1 下面是计算两个数据参与算术运算的程序,请分析其结果。 void main() int a,b,c,x,y;/* 定义a,b,c,x,y为整型变量 */ a=300; b=500; c=a+b; x=a*b; y=a/b; /* a除以b,其商赋值给变量y */ printf( c=%d, x=%d, y=%d,c,x,y); ,(a)TC环境下 (b)VC+6.0环境下,2.1 语言的数据类型,2.1.1 语言数据类型概述,注意:在程序中用到的常量与变量必须是上面的一种数据类型; 正确地区分和使用不同的数据类型,可使程序运行时占用较少的内存,确保程序运行的正确性和可靠性。,2.1 语言的数据类型,2.1.2 基本数据类型,基本数据类型是构成C语言的数据类型的最基本要素 包括:整型(int) 实型(float 和 double) 字符型(char),例如:整型数据的取值和取值范围 类型说明符 数的范围 分配字节数 int -3276832767 2字节 short int/short -3276832767 2字节 long -21474836482147483647 4字节 unsigned int /unsigned 065535 2字节 unsigned short int 065535 2字节 unsigned long int 04294967295 4字节,(详见p.20 表2-1),注意:在不同的编译系统,同一类型在内存中所占的字节数可能有不同的规定。 在Visual C+ 6.0环境下,short int 类型占2字节,int、unsigned int类型占4字节。 读者应了解所用系统的规定,在将一个程序从一个系统移到另一个系统时,需要注意这个区别。,2.1 语言的数据类型,在数据操作中,有时由于不知道C语言中的基本数据类型的实际位长,从而使数据溢出而导致计算结果的错误。因此,常需要使用下面的程序来测试。 【例DataTest.C】 基本数据类型的位长测试 #include void main() printf( char - %d byten, sizeof(char) ); printf( short - %d bytesn, sizeof(short) ); printf( int - %d bytesn, sizeof(int) ); printf( long - %d bytesn, sizeof(long) ); printf( float - %d bytesn, sizeof(float) ); printf( double - %d bytesn, sizeof(double) ); printf( long double - %d bytesn, sizeof(long double) ); ,补充: 实际位长测试,sizeof运算符:获取一个类型所占内存的字节数大小,char- 1 byte short- 2 byte int- 4 byte long- 4 byte float- 4 byte double- 8 byte long double- 8 byte,分析和说明: sizeof是C语言的一个运算符关键字,它的使用类似于一个函数,用来获取一个表达式、类型或数组等所占内存的字节数大小。 该程序在Visual C+ 6.0中运行,其运行结果如下所示:,2.1 语言的数据类型,使用C的数据(变量或常量),应该搞清楚以下几点: (1)它的数据类型; (2)此类数据在内存中的存储形式、占用的字节数; (3)数据的取值范围; (4)数据能参与的运算; (5)数据的有效范围(是全局、局部)、生成周期(是动态还是静态变量) 。,0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1,例如:一个整型(int)数据的最大值,符号位,2.1.3 *各类数据在内存中的存放方式 了解各类数据在计算机内存中的存储形式,对于分析程序运行结果,在程序设计中合理使用数据类型是很重要的。 本节的知识属于计算机基础知识,如果读者已掌握,可跳过本节内容。,2.1 语言的数据类型,1) 机器数 用“0”表示正数,“1”表示负数,其余位仍表示数值。把在机器内存的正、负号数字化的数称为机器数。,例如,C语言中的基本整型数据在计算机中通常用16位(即2个字节)来存储,图2-3所示的是十进制数67和-67在计算机中的存储形式。,1. 机器数与原码、补码和反码表示,2.1 语言的数据类型,2)原码表示法,原码表示方法中,数值用绝对值表示,在数值的最左边用“0”和“1”分别表示正数和负数,书写成X原表示X的原码。,例如,当n=16(即使用2个字节来存储),十进制数+67和-67的原码表示如图2-3所示,记为: +67原0000000001000011 -67原1000000001000011,2.1 语言的数据类型,从定义可以看出,在原码的表示中,有以下两个特点: (1)最高位为符号位,正数为0,负数为1,其余n-1位是X的绝对值的二进制表示。 (2)0的原码有两种表示: +0原0000000000000000 -0原1000000000000000 因此,原码表示中,数值0不是唯一的。,2.1 语言的数据类型,3)反码表示法,用X反表示X的反码。如果机器的字长为n,则反码的定义如下:,例如,当n=16,十进制数+67和-67的反码表示为: +67反0000000001000011 -67反1111111110111100,2.1 语言的数据类型,由此可以看出,在反码的表示中,有以下特点: (1)正数的反码与原码相同,负数的反码是其绝对值的二进制表示按各位取反(0变1,1变0)所得的表示,其中符号位不变。 (2)0在反码表示中也有两种表示: +0反0000000000000000 -0反1111111111111111 由此可见,0在反码表示(即数值0)中也不是唯一的。,2.1 语言的数据类型,4)补码表示法,用X补表示X的补码。设机器的字长为n,则补码的定义如下:,例如,当n=16,十进制数+67和-67的补码表示为: +67补0000000001000011 -67补1111111110111101,2.1 语言的数据类型,在补码的表示中,有以下特点: (1)正数的补码与原码、反码相同,负数的补码是其绝对值的二进制表示按各位取反(0变1,1变0)加1,其中符号位不变,即为其反码+1。 (2)0在补码表示中: +0补-0补0000000000000000,因此,数值0的补码表示是唯一的。 说明:由于补码运算方便,所以在计算机中广泛使用。,如何将一个负数的二进制补码数转换成十进制数?,2.1 语言的数据类型,将一个负数的补码数转换成十进制数的步骤如下: (1)首先将各位取反。 (2)将其转换为十进制数,并在前加一负号 (3)对所得到的数再减1,即得到该数的十进制数。,例如:求补码1111111110111101对应的十进制数,其步骤: 取反:0000000001000010;转换为十进制数,加负号得:-66,再减1,则为-67。 按照上述方法,不难求得: 补码1111111111111111对应的十进制数是:-1。 补码1000000000000000对应的十进制数是:-32768(计算机中整数是最小值)。,补充 5)由补码数求对应的十进制数,2.1 语言的数据类型,2.2.2 定点数和浮点数,1整数的表示定点数,如果计算机用N位来表示一个带符号的整数M,可写成: M=NsNn-1Nn-2N2N1N0Ns为符号位 M的取值范围:-2nM2n-1,例如,整数194采用定点数存储形式,如下图所示:,2.1 语言的数据类型,2)实数的表示浮点数,在计算机中一个浮点数由两部分构成:阶码和尾数,阶码是整数,尾数是纯小数。即可表示为: M=2PS,其中,P是一个二进制整数,S是二进制小数,这里称P为数N的阶码,S称为数M的尾数,S表示了数M的全部有效数字,阶码P指明了小数点的位置。,2.1 语言的数据类型,实型数据是采用浮点数的存放形式存储的。一般微型计算机中单精度(float类型)使用4个字节来存储,通常阶码及阶符占1个字节,尾数及尾符占3个字节,阶符和尾符各占1个二进制位,float类型的数值范围是-2P2P,其中P为7个二进制位表的最大数(1111111),即127,所以float类型的数值范围是-2P2P,即-21272127,即-1038 1038。,2.1 语言的数据类型,2.2.3 字符的存储形式ASCII码,目前计算机中普遍采用的是ASCII(American Standard Code for Information Interchange)码,即美国信息交换标准代码。ASCII码有7位版本和8位版本两种,国际上通用的是7位版本,7位版本的ASCII码有128个元素,只需用7个二进制位(27128)表示,其中控制字符34个,阿拉伯数字10个,大小写英文字母52个,各种标点符号和运算符号32个。在计算机中实际用8位表示一个字符,最高位为“0”。标准ASCII码共128个符号(参见附录A)。,2.1 语言的数据类型,例2-2 通过下面程序的输出结果查看ASCII值和相应的字符,#include void main() int i; for(i=0;i<=127;i+)/ i从0循环到127,步长为1, i+即i=i+1 printf(“%d %c ”,i, i); / 按十进制格式输出i, 再按字符格式输出i ,2.1 语言的数据类型,2.2 常量,定义: 在程序运行时,其值不能被改变的量叫常量。 如 5, 3.14159, a 等 2.2.1 数值常量 1.整型常量 在语言中,使用的整常数有八进制、十六进制和十进制三种。 (1)十进制整常数。 237 -568 0 1627 (2)八进制整常数 八进制整常数必须以0开头,即以0(数值0)作为八进制数的前缀。 015(十进制为13) 0101(十进制为65) 079 08001,不合法的八进制数,(p.25 表2-2),2.2 常 量,(3) 十六进制整数的前缀为0X。 0X2A(十进制为42) 0XA0 (十进制为160) 0XFFFF (十进制为65535) 以下各数是不合法的十六进制整常数: 5A (无前缀0X) 0X3H (含有非十六进制数码),若要表示长整型(long)整数,在数的最后加表示长整型的后缀修饰符号字母“l” 。 如:125 0125l 0X125l 等价于125、(125)8、(125)16,请注意25和25l的区别,前者用2字节存储,后者则使用4个字节存储。,说明:,2.2 常 量,例2-3 通过以下例题来说明整型常量的三种表示方法及相互关系 void main() int x=123,y=0123,z=0 x123; printf(%d %d %dn,x,y,z); / 以十进制形式%d输出 printf(%o %o %on,x,y,z); / 以八进制形式%o输出 printf(%x %x %xn,x,y,z); / 以十六进制形式%x输出 ,2.实型常量 实型也称为浮点型。实型常量也称为实数或者浮点数。在语言中,实数只采用十进制。 它有二种形式: 小数形式与指数形式,(1)小数形式 由数码0 - 9和小数点组成。 例如:0.123 .123 123.0 -123等均为合法的实数。 (2)指数形式 由十进制数,加阶码标志“e”或“E”以及阶码(只能为整数,可以带符号)组成。 其一般形式为a E n (a为十进制数,n为十进制数),值为 a*10n,2.2 常 量,2.2 常 量,说明: 当幂为正数时,正号可以省略。即1.25E+3等价于1.25E3; 同一个实数可以有多种表示形式,例如:1250.0可以用0.0125E+5,0.125E+4,1.25E+3,12.5E+2, 125E+1。一般将1.25103称为“规范化的指数形式”。,2.2 常 量,2.2.2 字符常量,字符常量是用单引号括起来的一个字符。例如a,b,=,+, ?都是合法字符常量。 在语言中,字符常量有以下特点: 1.字符常量只能用单引号括起来,不能用双引号或其它括号; 2.字符常量只能是单个字符,不能是字符串; 3.字符可以是字符集中任意字符。 如5和5 是不同的。,2.2 常量,2.2.3 字符串常量,C语言中的字符串常量是由一对双引号括起来的字符序列。每个字符串最后有一结束标志 0。 例如: ABC, A, 123lkdf 字符串常量在内存中存储时,系统自动在字符串的末尾加一个“串结束标志“,因此在程序中,长度为n个字符的字符串常量,在内存中占有n+1个字节的存储空间 。,2.2 常 量,例如 : a与a是C语言中两种完全不同类型的数据。,注意:不要将字符常量和字符串常量混淆,例如,字符串“ABCDEF”有6个字符, 存储于内存中时,共占7个字节 ,最后一个字节为 0 ,2.2.4 转义字符 转义字符是一种特殊的字符常量。转义字符以反斜线“”开头,后跟一个或几个字符。 转义字符主要用来表示那些用一般字符不便于表示的控制代码。常用的转义字符及其含义: 转义字符 转义字符的意义 n 回车换行 t 横向跳到下一制表位置 v 竖向跳格 b 退格 r 回车 f 走纸换页 反斜线符“” 单引号符 a 鸣铃 ddd 13位八进制数所代表的字符 xhh 12位十六进制数所代表的字符,2.2 常 量,详见p.30 表2-3,2.2.5 符号常量,符号常量: 可以使用一个符号表示一个多次常用的常量 C 语言中使用命令#define来定义: 格式: #define 符号常量名标识符 常数表达式 优点: 符号常量使程序易于阅读和修改。 例如,一个程序中多处用到学生人数60,当有学生人数改变为65,修改这个程序很困难。而使用符号常量,只要将 #define NUM 60 改为 #define NUM 65,就可以了。,2.2 常量,无分号,2.2.5 符号常量,例2-4:求一个半径为r的球的体积和表面积的C程序 #define PI 3.14159 / 定义PI为符号常量,值为3.14159 void main( ) float v,s,r; scanf(%f, ,说明: (1)符号常量名常常用大写字母、变量名用小写字母。 (2)符号常量不能在其作用域范围内重新赋值。,2.2.5 符号常量,有关符号常量的几点说明: 1)符号常量标识符:按C语言标识符的命名规则。为便于与一般变量区别,符号常量标识符名通常采用大写字母。 2)宏定义不是C语句,不必在行末加分号。如果加分号,会把分号当作符号串的一部分。 3)宏定义中的常数表达式可以是:值常量、在此前已声明过的符号常量、由这些常量与运算符组成的表达式。 例如, #define PI 3.1515926535 #define PI2 2*PI /* 定义PI2符号常量,值为2*3.1415926535 */,2.3 变 量,2.3.1 变量的定义,简单定义:在程序运行时,其值能被改变的量叫变量 变量包括:一个名字和相应的数据类型 通过名字来引用一个变量,而数据类型则决定了该变量的存储方式和在内存中占据存储单元的大小,说明: 变量名和变量值这两个概念的区别 定义: int x=20;,C语言中使用的变量都要作类型强制定义,即要求“先定义,后使用”的原则。 其目的:1)保证程序中变量名使用的正确性 2)编译程序为其分配相应的储存单元 3)保证运算的合法性 定义形式:类型说明符 变量名列表;,2.3 变 量,char ch /定义ch为字符型变量 int i,j; /定义i,j为基本整型变量 long k,n,m; /定义k,n,m为长整型变量 float x,y,z; /定义x,y,z单精度实型变量 double sum,t; /定义sum,t双精度实型变量,2.5.2 变量的赋初值,C语言中,当定义一个变量后,系统只是按定义的数据类型分配其相应的存储单元,并不对其单元初始化,如果在赋初值之前直接使用该变量,则是一个不定值 。,例如: void main( ) int k; k+; printf(“k=%dn”,k); 程序运行,输出k的值就是一个无意义的不定值,并在不同系统环境下运行的结果也可能完全不同。,2.3 变 量,赋初值的一般形式为: (1)类型说明符 变量1=值1,变量2=值2,; (2)类型说明符 变量1,变量2,变量3; 变量1=值1;变量2=值2;,例如: int a=10,b=10,c=10 等价于 int a,b,c; a=10; b=10;c=10;,注意: (1)在说明中不允许连续赋值,但在变量定义后,可以 使用连续赋值语句初始化 ;,2.3 变 量,如: int a=b=c=1; 是不合法的; int a,b,c; a=b=c=1;是合法的 (2)C语言中变量定义后若没