《C语言课件(第3章数据类型).ppt》由会员分享,可在线阅读,更多相关《C语言课件(第3章数据类型).ppt(34页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第三章第三章第三章第三章 数据类型数据类型数据类型数据类型C程序设计 一个简单的一个简单的C程序例子程序例子#include main()int a,b,sum;a=123;b=456;sum=a+b;printf(“sum is%dn”,sum);C程序常见符号分类程序常见符号分类 关键字(Keyword)P365 又称为保留字,C语言中预先规定的具有固定含义的一些单词,如整型int等 标识符(Identifier)系统预定义标识符,main,printf 等 用户自定义标识符,Add,x,y 等运算符(Operator)34种,详见附录C (P365)分隔符(Separator)空格、回车
2、/换行、逗号、#号等其它符号 大花括号“”和“”通常用于标识函数体或者一个语句块“/*”和“*/”是程序注释所需的定界符 数据(Data)变量(Variable):值可以改变的数据常量(Constant):值一直保持不变的数据数据类型(数据类型(Data Type)数据为什么要区分类型?便于对它们按不同的方式和要求进行处理不同类型的数据代表不同的数据表示形式合法的取值范围占用内存空间大小可参与的运算种类 C的数据类型的数据类型类型构造类型指针类型空类型(无值类型)void枚举类型 enum数组类型结构类型 struct联合类型 union基本类型整型 int字符型 char实型(浮点型)单精度
3、float双精度double基本数据类型基本数据类型类型类型符号符号关键字关键字数的表示范围数的表示范围所占位数所占位数整整型型字字符符型型实实型型有有无无(signed)int16-3276832767(signed)short16-3276832767(signed)long32-2147483648214748364716unsigned0655353204294967295unsigned longunsigned short16065535有有float323.4e-383.4e38有有double641.7e-3081.7e308有有char8-128127无无unsigned c
4、har80255说明说明:数据类型所占字节数随机器硬件不同而不同数据类型所占字节数随机器硬件不同而不同,上表以上表以IBM PC机为例机为例:lTC中int的范围是-3276832767l如果我们给它一个小于-32768或者大于32767的数会如何呢?l结果:系统提示overflow(溢出)小蛇能吞小蛇能吞小蛇能吞小蛇能吞下大象吗下大象吗下大象吗下大象吗?超出取值范围会怎样?超出取值范围会怎样?l一台安装了Windows 95/98的机器,如果连续运行49.7天没有重新启动,可能死机 l原因:lWindows启动时,有一个计数器,记录系统已经运行了多少毫秒。这个计数器是个unsigned lo
5、ng 类型的变量lunsigned long 的最大值是:4294967295l一天有 24*60*60*1000=86400000毫秒l4294967295/86400000=49.71026961805l当49.7天的时候,此计数器会溢出,引起死机溢出(溢出(Overflow)造成的危害)造成的危害如何选择恰当的数据类型如何选择恰当的数据类型?l预先估算运算结果的可能范围,采用取值范围更大的类型。1+2+3+1+2+3+1!+2!+3!+1!+2!+3!+13+23+33+13+23+33+l如果不需要处理负数,则采用无符号类型。l在运算还没开始之前就判断运算数是否在合理的取值范围内。如果
6、超出,则停止运算,转错误处理。l 定义:用来标识变量、常量等的字符序列l 命名规则:(1)只能由字母、数字、下划线组成,且第一个字符必须是字母或下划线(2)不能使用关键字(3)长度最长32个字符(4)区分大小写例:判断下列不合法标识符号sum Sum M.D.John day Date 3days student_name#33 lotus_1_2_3 char ab _above$123标识符标识符3days#33charab$123常量(常量(constant)定义:在程序运行过程中,其值不能被改变 的量称为常量分类:可分为数值常量和符号常量类型:可为整型、实型、字符型等命名:符合标识符命
7、名规则数值常量(常数)数值常量(常数)整型 100,125,-100,0 实型 3.14,0.125,-3.789 字符型 a,b,2 转义字符:特殊字符如n (P48)例 printf(“How are you?);printf(“How are you?);字符串“a”,“ab”,”1232”符号常量(宏常量)符号常量(宏常量)一般采用全大写字母表示 语法:#define 标识符 数值常量 不能在程序中再次赋值 是一种编译预处理命令称之为宏替换 优点:比数值常量可读性好、修改容易 例:计算圆的周长变量变量定义:在程序运行中,其值可以改变的量类型:可为整型、实型、字符型(见表)命名:符合标识
8、符命名规则语法:数据类型 变量1,变量2,变量n;例:int a;float a,b,c;变量初始化:定义时赋初值例:int a=2,b,c=4;float data=3.67;char ch=A;int x=1,y=1,z=1;int x=y=z=1;X变量(续)变量(续)变量的存储:int a=1,b=-3,c;编译程序根据变量定义为其分配指定的内存单元字节.地址abc2字节2字节2字节地址地址.内存1-3随机数变量(续)变量(续)变量的使用:先定义,后使用例:int student;stadent=19;/为变量赋值/Undefined symbol statent in functio
9、n main变量定义的位置:一般放在函数开头 main()int a,b=2;a=1;float data=3;printf(“data=%fn”,data);C运算符的运算符有以下几类:的运算符有以下几类:(1)算术运算符(+-*/%)(2)关系运算符(!)(3)逻辑运算符(!|)(4)位运算符 (|)(5)赋值运算符(及其扩展赋值运算符)(6)条件运算符(?:)(7)逗号运算符(,)算术运算符(加法运算符,如:、)(减法运算符,如:、)*(乘法运算符。如:*)(除法运算符。如:)(模运算符,或称求余运算符,两 侧均为整型数据,如:值为)。算术表达式定义:用算术运算符和括号将操作数连接起来的
10、、符合语法规则的式子,称为算术表达式。操作数包括常量、变量、函数等。例:*(.5)a优先级别:P365 附录C同一级别结合方向为“自左至右”。例:5+8%3*2关系运算符,=,b&b c);a大于b,并且b大于c或运算|a|b只要两者中有一个为真,结果就为真(a b|b c);a大于b,或者b大于c求反!(!a);若a是0,结果非0;若a是非0,结果是0并不改变a的值实例ch是英文大写字母(ch=A)&(ch=Z)判断某一年year是否是闰年的条件是满足下列两个条件之一:能被4整除,但不能被100整除;能被400整除;(year%4=0)&(year%100!=0)|(year%400=0)位
11、运算(汇编操作)与&:每位进行逻辑与。2&3或|:每位进行逻辑与。3|5异或:对应位相同为0,不同为1。071052取反:每一位取反。025左移:低位补0,高位舍弃。2:低位舍弃,高位补符号位。-82注:移位左边表达式的值(-8和2)本身并不改变自动类型转换同种数据类型的运算结果,还是该类型不同种数据类型的运算结果,是两种类型中 精度更高的那种long double double float long int short chardoublefloatlongunsignedintchar,short精度低精度高 强制类型转换 可利用强制类型转换运算符将一个表达式 转换成所需类型。一般形式:(
12、所需类型名)(表达式)例如 (double)将转换成double类型 (int)(x+y)将x+y的值转换成整型 (float)(5%3)将5%3值转换成float型实例#include main()int m=5;printf(m/2=%dn,m/2);printf(float)(m/2)=%fn,(float)(m/2);printf(float)m/2=%fn,(float)m/2);m/2=2(float)(m/2)=2.000000(float)m/2=2.50000两个整数运算的结果两个整数运算的结果还还是整数,不是浮点数是整数,不是浮点数 赋值运算符号:“”其作用是将一数据赋给一
13、个变量。例“”可以将一个表达式的值赋给一个变量.a=a*2+3l 可与+、-、*、/、%、&、|结合例:a+=2 等价于 a=a+2 赋值运算符 自增、自减运算符 ,/在使用之前,先使的值加或减 ,/在使用之后,使的值加或减 区别:i;(i=3)/i的值先变成4,再赋给i,i和j的值均为 i;(i=3)/先将 i值3赋给,值为后,变为注:只能用于变量,不能用常量或表达式条件运算符把a和b中的最大值放入z中此种表达式切忌用得过于繁杂z=(a b)?a:b;格式:表达式1,表达式2求解顺序及结果 先求解1,再求解2,结果为表达式2的值例a=3*5,a*4 最终结果为60Page 31 逗号运算符(续)注注:并不是任何地方出现的逗号都是作为逗 号运算符。例如函数参数也是用逗号来 间隔的。例例:printf(“%d,%d,%d”,a,b,c);printf(“%d,%d,%d”,(a,b,c),b,c)“,”不是逗号表达式,是printf的3个参数“(,)”是逗号表达式,它的值等于的值。优先级()-.!+-+-*&*/%+-=!=&|&|?:=+=-=*=/=%=&=|=课堂练习设a=3,b=4,c=5,求下列表达式的值(1)a*=2+3(2)a%=(c%=2)(3)a+=a-=a*=a(4)a|b+C&b-c(5)!(ab)&!c|1)
限制150内