1第三章最简单的C程序设计——顺序程序设计3.1顺序程序设计举例(教材p37-p38)3.2数据的表现形式及其运算3.2.1常量和变量在计算机高级语言中,数据有两种表现形式:常量和变量。1.常量常量:在程序运行过程中,其值不能被改变的量称为常量。(程序中的数值常量就是数学中的常数)2C程序常量序号常量分类表示形式举例说明1整型常量整数0,123,-123等等2实型常量十进制小数形式1.23,0.0,-0.35等等由数字和小数点组成指数形式12.34e3(代表12.34*103)-3.12E-25(代表-3.12*10-25)…由于在计算机输入或输出时,无法表示上角或下角,故规定以字母e或E代表以10为底的指数。e或E之前必须有数字,并且e或E,后面必须为整数,如不能写成e4(e之前无数字),12e2.5(e之后为小数)。3字符常量普通字符a','A','?','#‘',…用单撇号括起来的一个字符,单撇号只是界限服,字符常量只能是一个字符,不包括单撇号。字符常量存储在计算存储单元中时,并不存储字符本身,而是以其ASCII代码存储的。转义字符(转义字符是以字符\开头的字符序列,将”\”后面的字符转换成另外的意义。如“”\n中的“n”不代表字母n,而作为”换行“符。)\'一个单撇号具有此八进制码的字符\一个双撇号输出此字符\?一个问号输出此字符\\一个反斜线输出此字符\a警告(alert)产生声音或视觉信号\b退格(backspace)将当前位置后退一个字符\f换页(formfeed)将当前位置移到下一页的开头\n换行将当前位置移到下一行的开头\r回车(carriagereturn)将当前位置移到本行的开头\t水平制表符将当前位置移到下一个tab位置\v垂直制表符将当前位置移到下一个垂直制表对齐点\o、\oo、\oooo代表1个八进制数字。与该八进制码对应的ASCII字符。\xh[h...]其中h是代表一个十六进数字。与该十六进制码对应的ASCII字符。4字符串常量用双撇号把若干个字符括起来boy,123,…字符串常量是双撇号中的全部字符,但不包括双撇号本身。5符号常量用#define指令,指定用一个符号名称代表一个常量。习惯上用大写表示符号常量。#definePI3.14//行末没有分号好处:(1)含义清楚;(2)在需要改变程序中多处用到的同一个常量时,能做到”一改全改“。不要把符号常量误认为变量。符号常量不占内存,只是一个临时符号,编译后符号就不存在,故不能对符号常量赋以新值。32.变量变量一个有名字的、具有特定属性的一个存储单元。它用来存放数据,也就是存放变量的值。在程序运行期间变量的值是可以改变的。变量必须先定义后使用。在定义时指定变量的名字和类型,一个变量应该有名字,以便与被引用。变量名和变量值是两个不同的概念。变量名是以一个名字代表的一个存储地址。定义变量的位置:一般在函数开头的声明部分定义变量,也可以在函数外定义变量(即外部变量、全局变量)。在对程序编译连接时由编译系统给每一个变量名分配对应的内存地址。从变量中取值,实际上是通过变量名找到相应的内存地址,从该存储单元中读取数据。3.常变量常变量与常量常变量与常量异同是:常变量具有变量的基本属性:有类型,占存储单元,只是不允许改变其值。可以说,常变量是具有名字的不变量,而常量是没有名字的不变量。有名字就便于在程序中被引用。常变量与符号常量例:#definePi3.14//定义字符常量Constfloatpi=3.14//定义常变量本例二者都代表3.14,在程序中都能使用。但二者的性质不同:定义符号常量用#define指令,它是预编译指令,它只是用符号常量代表了一个字符串,在预编译时仅是进行字符转换,在预编译后,符号常量就不存在了(全置换成3.14),对符号常量的名字是不分配存储单元的。而常变量要占用内存单元,有变量值,只是该值不改变而已。常变量具有符号变量的优点,使用更方便。4.标识符标识符在计算机高级语言中,用来对变量、符号常量名、函数、数组、类型等命名的有效字符序列统称为标识符(identifier)。简单的说,标识符就是一个对象的名字。c语言规定标识符只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线。4编译系统将大写字母和小写字母认为是两个不同的字符。一般而言,变量名都用小写字母表示。3.2.2数据类型用计算机进行的计算不是抽象的理论值的计算,而是用工程的方法实现的计算,许多情况下只能得到近似的结果。所谓类型,就是对数据分配存储单元的安排,包括存储单元的长度(占多少字节)以及数据的存储形式。不同的类型分配不同的长度和存储形式。基本整型(int)短整型(shortint)整型类型长整型(longint)双长整型(longlongint)c99增字符型(char)基本类型布尔型(bool)c99增单精度浮点型(float)浮点类型双精度浮点型(double)数据类型复数浮点型(float_complex,double_comple,longlong_comple)枚举类型(enum)空类型(void)指针类型(*)数组类型([])派生类型结构体类型(struct)共用体类型(union)函数类型3.2.3整型数据1.整型数据的分类5(1)基本整型(int)整型数据在存储单元中的存储方式是:用整数的补码形式存放。一个正数的补码是此数的二进制形式。求负数补码的方法是:先将此数的绝对值写成二进制形式,然后对其后面所有各二进位按位取反,再加1。(教材p44)在存放整数的存储单元中,最左面一位是用来表示符号的,如果该位为0,表示数值为正;如果该位为1,表示数值为负。(2)短整型(shortint)VisualC++6.0编译系统分配给int数据4个字节,短整型2个字节。一个短整型变量的值的范围是:-32768~32767。(3)长整型(longint)VisualC++6.0编译系统分配给longint数据4个字节。长整型(longint)变量的值的范围是-231~(231-1),即:-2147483648~2147463647。2.整型变量的符号属性整型数据加上修饰符unsigned(无符号整数)和signed(有符号整数)后,可以扩展为以下八种整形数据:有符号基本整型[signed]int;无符号基本整型unsignedint;有符号短整型[signed]short[int];无符号短整型unsignedshort[int];有符号长整型[signed]long[int];无符号长整型unsignedlong[int];有符号双长整型[signed]longlong[int];//C99增加无符号双长整型unsignedlonglong[int]。//C99增加不能给定义为无符号型整型变量赋予负值。3.2.4字符型数据由于字符是按其代码(整数)形式存储的,因此C99把字符型数据作为整数类型行的一种。61.字符与字符代码,并不是任意写的一个字符程序能够识别,如圆周率符号程序是不能识别的。大多数系统采用,ASCII字符集,各种字符集基本都包括了127个字符。每个字符都可以用7个二进位表示,所以在C中,指定一个字节(8位)存储一个字符。字母:A~Z,a~z。数字:0~9。专门符号:29个。!”#&‘()*+-…空格符:空格、水平制表符(tab)、垂直制表符、换行、换页(formfeed)不能显示的字符:空(null)字符(以’\0’表示)、警告(以’\a’表示)等。2.字符变量字符变量是用类型符char定义字符变量。char是英文character(字符)的缩写。例:charc=‘?’;//定义c为字符型变量,并使初值为字符’?’。字符’?‘的ASCII代码是63,系统把整数63赋给变量c。字符型变量可以用修饰符signed和unsigned。类型字节数取值范围Signedchar有符号字符型1-128~127,即-27~(27-1)Unsignedchar无符号字符型10~255,即0~(28-1)3.2.5浮点型数据浮点型数据是用来表示具有小数点的实数的。一个实数表示为指数可以有不止一种形式,小数点的位置可以浮动,所以实数的指数形式称为浮点数。在指数形式的多种表示方式中,把小数部分中小数点前的数字为0、小数点后第一位数字不为0的表示形式称为规范化的指数形式。(1)float型(单精度浮点型)float型数据能得到6位有效数字,取值范围-3.4*10-38~3.4*1038。(2)double型(双精度)double型数据可以得到15位有效数字。7(3)longdouble型(长双精度)3.2.6怎样确定常量的类型字符常量,由单撇号括起来的单个字符或转义字符就是字符常量。整型常量,不带小数点的数值是整型常量,但应注意其有效范围。浮点型常量,凡以小数形式或指数形式出现的实数是浮点型常量,在内存中以指数形式存储。C程序中的实型常量都是双精度浮点型常量。3.2.7运算符和表达式1.基本的算术运算符最常用的算术运算符运算符含义举例结果+正号运算符(单目运算符)+aa的值-负号算符(单目运算符)-aa的算术负值*乘法运算符a*ba和b的乘积/除法运算符a/ba除b的商%求余运算符a%ba除b的余数+加法运算符a+ba和b的和-减法运算符a-ba和b的差2.自增、自减运算符++i,--i(在使用i之前,先使i的值加(减)1)i++,i--(在使用i之后,使i的值加(减)1)自增运算符和自减运算符只能用于变量,而不能用于常量或表达式。常用于循环语句中,使循环变量自动加1(或减1),也用于指针变量,使指针指向下一个(上一个)地址。在使用运算符时,如遇到诸如i+++j,为避免二义性,可以通过加括号来明确,如写成(i++)+j。3.算术表达式和运算符的优先级与结合性8用算术运算符和括号将运算对象(也称操作数)连接起来的符合C语法规则的式子,称为C算术表达式。运算对象包括常量、变量、函数等。如:a*b/c-1.5+’a’在表达式求值时,先按运算符的优先级别顺序执行。如果一个运算对象两侧的运算符号的优先级别相同,则按规定的结合方向处理。结合性是指规定运算对象与运算符的“结合方向“,即先与左边的运算符结合,还是先与右边的运算符结合。自左至右的结合方向,又称为左结合性。4.不同类型数据间的混合运算(1)+、-、*、/运算的两个数中有一个数为float或double型,结果是double型。(2)int型与float或double型数据进行运算,结果是double型。(3)字符型(char)数据与整型数据进行运算,就是把字符的ASCII代码与整型数据进行运算。字符数据可以直接与整型数据进行运算。字符型数据和其他算术型数据之间可以互相互赋值和运算。同一个字母用小写表示的字符ASCII代码比用大写表示的字符的ASCII代码大32。5.强制类型转换运算符一般形式为:(类型名)(表的式)强制类型转换时得到一个所需类型的中间数据,而原来变量类型未发生变化。例:(double)a//将a转换成double类型(int)(x+y)//将x+y的值转换成int型(float)(5%3)//将5%3的值转换成float型6.C运算符(1)算术运算符(+-*/%++--)(2)关系运算符(====!=)(3)逻辑运算符(!&&||)(4)位运算符(~|^&)(5)赋值运算符(=及其扩展赋值运算符)9(6)条件运算符(?:)//C中唯一三目运算符(7)逗号运算符(,)(8)指针运算符(*&)(9)求字节数运算符(sizeof)(10)强制类型转换运算符((类型))(11)成员运算符(.–)(12)下标运算符([])(13)其他(如函数调用运算符())3.3C语句3.3.1C语句的作用和分类语句的作用是向计算机系统发出操作指令,要求执行相应的操作。一个函数包含声明部分和执行部分,执行部分是由语句组成的。if()…else…(条件语句)for()…(循环语句)while()…(循