第2章C语言程序设计基础_数据类型2020/2/22本章学习内容标识符命名;数据类型、变量和常量;常用运算符和表达式;基本输入输出;过程控制结构(顺序、选择、循环结构)函数的定义与使用数据存储特性预处理指令2020/2/23标识符命名变量名,函数名由英文字母、数字和下划线组成,大小写敏感不可以是数字开头直观,见名知意,便于记忆和阅读–最好使用英文单词或其组合下划线和大小写通常用来增强可读性–variablename–variable_name–variableName不允许使用关键字作为标识符的名字–int,float,for,while,if等某些功能的变量采用习惯命名–如:for语句所采用的循环变量习惯用i,j,kWindows风格UNIX风格2020/2/2432个关键字:(由系统定义,不能重作其它定义)autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunsignedunionvoidvolatilewhile2020/2/25C语言的数据类型数组共用体类型结构体类型构造类型基本类型指针类型:实型(浮点型)字符型(char)整型(int)双精度型(double)单精度型(float)空类型:是一种特殊的类型。表示一个量在内存中的地址。函数调用后,不需要向调用者返回任何值,则可将该函数定为空类型。2020/2/26基本数据类型int–整数,在目前绝大多数机器上占4个字节–TC2.0,2个字节float–单精度浮点数,4个字节double–双精度浮点数,8个字节char–字符,1个字节2020/2/27数据类型修饰符short–shortint,简写为short,短整数,2个字节long–longint,简写为long,长整数,4个字节–longdouble,长双精度(高精度)浮点数,10个字节unsigned–用来修饰char、int、short和long–无符号整数(正整数和0)2020/2/28signed–用来修饰char、int、short和long,说明他们是有符号的整数(正整数、0和负整数)。一般缺省都是有符号的,所以这个修饰符通常省略。数据类型修饰符2020/2/290111111111111111最高位假设编译系统为int型整数分配2个字节的存储空间,即16个二进制位中最高位是符号位,以32767为例,其在内存中的存储形式为:有符号数与无符号数1111111111111111最高位若是无符号数,该数是65535,若是有符号数,该数是-1。1000000000000001最高位1111111111111110最高位1111111111111111最高位1111111111111111最高位-1的原码-1的反码-1的反码加1后的结果-1的补码2020/2/210TC2中int的范围是-32768~32767如果我们给它一个小于-32768或者大于32767的数会如何呢?超出取值范围会怎样?小蛇能吞下大象吗?2020/2/211一台安装了Windows95/98的机器,如果连续运行49.7天没有重新启动,可能死机原因:–Windows自启动时刻起,有一个计数器,记录系统已经运行了多少毫秒。此计数器是个unsignedlong类型的变量–unsignedlong的最大值是:4294967295–一天有24*60*60*1000=86400000毫秒–4294967295/86400000=49.71026961805……–当49.7天的时候,此计数器会溢出,引起死机溢出(Overflow)造成的危害2020/2/212含义类型关键字长度值域范围有效数字可用运算符字符char1-128~+127整数int4-231~231-1+,-,*,/,++,--,%长整数long或longint4-231~231-1单精度数实数(浮点型)float4-3.402823×1038~3.402823×10387位+,-,*,/,++,--双精度数实数double8-1.7977×10308~1.7977×1030815位基本数据类型2020/2/213数据类型修饰符含义类型名简写长度值域范围有符号字符型signedcharchar1-128~+127无符号字符型unsignedchar1有符号整型signedintint4-231~231-1无符号整型unsignedint40~232-1有符号短整型signedshortintshort2-215~215-1无符号短整型unsignedshortintunsignedshort20~216-1有符号长整型signedlongintlong4-231~231-1无符号长整型unsignedlongintunsignedlong40~232-1单精度浮点型float4双精度浮点型double8在实际使用时,将修饰符和类型名作为一个整体看成是“类型名”。2020/2/214常量(Constant)在程序运行过程中值不变的量------常量Consistsof:–整型(e.g.067-2123L123u0220x12)缺省为int–实型(e.g.2.31.2e-52.73F2.73L)缺省为double–字符型(e.g.'z''3''$''\n')用\开头的字符为转义字符,代表1个字符–字符串(e.g.UKM15a)2020/2/215(由若干个数字组成)整型常量的几种表示形式:十进制、八进制、十六进制整型常量的类型确定:•长整型常量:常量后跟L或l来表示•无符号整型常量:常量后跟U或u来表示•无符号长整型常量:常量后跟LU或lu来表示整型常量2020/2/2161.十进制整数:以非0开头,由数字0~9组成,可带正负号•18、-31•长整型常数:123l、123L、123456l、123456L•无符号型整数:123u、123U如:2020/2/2172.八进制整数:以数字“0”开始的整型常数,由数字0~7组成,可带正负号如:八进制整型数:012,-03,+04八进制长整型数:012433L010和10大小不一样因为八进制并不常用,所以此种表示法比较少见,因而常被用错#include“stdio.h”voidmain(){intx=102,y=012;printf(“%2d,%2d\n”,x,y);}A.102,10B.10,01C.02,12D.02,10√2020/2/2183.十六进制整数:以“0x”或者“0X”开始的整型常数,由A~F和a~f组成,可带正负号如:十六进制整型数:0x12,-0x3,+0x4十六进制长整型数:0X12DFL十六进制的形式比较常用2020/2/219实数在C语言中又称为浮点数两种表现形式:1、十进制数形式——自然表示法如123.456,-0.982、指数形式——科学表示法如:1.234e12e——指数符号,e前必须有数字,e后必须为整数。实型常量2020/2/220十进制小数形式:123.45、456.78指数形式1e-2、4.5e3单精度实型常数:123.45f、456.78F、1e-2f、4.5e3F长双精度型常数:123.45l、456.78L、1e-2l、4.5e3L实型常量的类型确定:•实型常量隐含按双精度处理•单精度实型常量:常量后跟F或f来表示•长双精度实型常量:常量后跟L或l来表示2020/2/221字符常量转义字符–一些特殊字符(无法从键盘输入或者另有它用)用转义字符表示2020/2/222字符常量字符常数就是一个普通整数,也可参与各种数学运算–注意:’5’和整数5的区别’5’的ASCII码值是53字符的数学运算在密码学内用得比较多字符常量在计算机内是采用该字符的ASCII编码值来表示的,其数据类型为char。2020/2/223字符串常量用双引号括住的由0个或多个字符组成的字符序列–Iamastring–表示空字符串–除注释外,是唯一可以出现中文的地方C语言内部用’\0’表示字符串的结束–x和’x’是不同的string.h里定义了一系列专门的字符串处理函数转义字符也可在字符串中使用2020/2/224宏常量#define标识符字符串宏常量–也称符号常量–一般采用全大写字母表示宏定义不是语句,而是一种编译预处理命令2020/2/225例2-1:计算圆的周长和面积#includestdio.h#definePI3.14159#defineR5.3voidmain(){printf(area=%f\n,PI*R*R);printf(circumference=%f\n,2*PI*R);}area=88.247263circumference=33.300854相当于执行#includestdio.hvoidmain(){printf(area=%f\n,3.14159*5.3*5.3);printf(circumference=%f\n,2*3.14159*5.3);}宏替换2020/2/226例2.1:计算圆的周长和面积#includestdio.h#definePI3.14159;#defineR5.3;voidmain(){printf(area=%f\n,PI*R*R);printf(circumference=%f\n,2*PI*R);}相当于执行#includestdio.hvoidmain(){printf(area=%f\n,3.14159;*5.3;*5.3;);printf(circumference=%f\n,2*3.14159;*5.3;);}语法错误2020/2/227为什么需要常量?假如不使用常量,直接使用常数,会有什么影响?–程序的可读性变差–容易发生书写错误–当常数需要改变时,要修改所有使用它的代码,工作量大,还可能有遗漏2020/2/228变量在程序运行过程中值可发生改变的量------变量命名规则:变量名由标识符表示,只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线。例如:下列标识符中,合法的变量名有:M.D.John12%gf1add_ce36age&5thclasslotus-1-2-3cd*ef2020/2/229变量使用变量的基本原则–变量必须先定义,后使用–所有变量必须在第一条可执行语句前定义声明的顺序无关紧要一条声明语句可声明若干个同类型的变量声明变量是初始化变量的最好时机–不被初始化的变量,其值为随机数结果会是什么?voidmain()在程序运行过程中值可发生改变的量------变量2020/2/230变量类型名变量名[=初值表达式],…;⑴inta,b;定义了两个整型变量a和b;⑵charch1=’a’,ch2=’B’;定义了两个字符变量ch1和ch2,并被分别赋初值为字符a和B;⑶intx=a+2*b;定义了一个整型变量x,并赋予表达式a+2*b的值作为初值;⑷doubled1,d2=0.0,d3=3.14159;定义了三个双精度变量,分别为d1,d2和d3,其中d2被赋予初值0.0,d3被赋予初值3.14159⑸unsigendlongx1=0;定义变量x1是无符号长整型2020/2/231变量定义语句的工作过程–分配存储空间–填初值数据–变量名是内存空间的名字–常数不分配内存空间inta,b=0;变量定义要素变量名(标识符)变量的数据类型存储类型2020/2/232Example:intnumber1,number2;number1=25;number2=23;number1=number2;……number1?number2?252323变量赋值(VariableAssignme