《C语言-基本数据类型和表达式.ppt》由会员分享,可在线阅读,更多相关《C语言-基本数据类型和表达式.ppt(47页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第二章第二章l 本章要点主要内容主要内容2.1 C2.1 C的数据类型的数据类型2.2 2.2 常量与变量常量与变量2.3 2.3 整型数据整型数据2.4 2.4 浮点型数据运行浮点型数据运行2.5 2.5 字符型数据字符型数据l 主要内容2.2.变量赋初值变量赋初值 2.7 2.7 各类数值型数据间的混合运算各类数值型数据间的混合运算 2.8 2.8 算术运算符和算术表达式算术运算符和算术表达式 2.9 2.9 赋值运算符和赋值表达式赋值运算符和赋值表达式 2.10 2.10 逗号运算符和逗号表达式逗号运算符和逗号表达式 2.1 C语言的数据类型程序=数据结构+算法(1)数据结构:对数据的描
2、述,数据的类型和数据的组织形式。数据是操作的对象。(2)算法:对操作的描述,操作步骤,“做什么”和“怎么做”。数据类型决定数据被存储时所占内存大小、存储形式、数据取值范围及其可进行的操作。2.1 C语言的数据类型C语言提供了以下一些数据类型。数据类型数据类型构造类型构造类型指针类型指针类型空类型(空类型(无值类型)无值类型)void void枚举类型枚举类型枚举类型枚举类型 enum enum enum enum数组类型数组类型数组类型数组类型结构体类型结构体类型结构体类型结构体类型 struct struct struct struct共用体类型共用体类型共用体类型共用体类型 union u
3、nion union union基本类型基本类型整型整型整型整型 int int int int字符型字符型字符型字符型 char char char char实型(浮点型)实型(浮点型)实型(浮点型)实型(浮点型)单精度实型单精度实型单精度实型单精度实型 float float float float双精度实型双精度实型双精度实型双精度实型 double double 2.2 常量与变量2.2.1 常量和符号常量常量:在程序运行过程中,其值不能被改变的量。常量可分为:直接常量 123,056,0 x78,a,“ab”,3.1415926 符号常量#define 常量名 字符串 1.常量名大写
4、 2.优点:含义清楚,一改全改 例例2.1 2.1 符号常量的使用符号常量的使用#define PRICE 30#define PRICE 30#define PRICE 30#define PRICE 30#include#include#include#include void main()void main()void main()void main()int num,total;int num,total;int num,total;int num,total;num=10;num=10;num=10;num=10;total=num*PRICE;total=num*PRICE;tot
5、al=num*PRICE;total=num*PRICE;printf(total=%dn,total);printf(total=%dn,total);printf(total=%dn,total);printf(total=%dn,total);说明:说明:说明:说明:程序中用#define命令行定义PRICE代表常量30,此后凡在本文件中出现的PRICE都代表30,可以和常量一样进行运算说明:说明:说明:说明:用一个标识符代表一个常量的,称为符号常量,即以标识符形式出现的常量。符号常量的值在其作用域(在本例中为主函数)内不能改变,也不能再被赋值。说明:说明:说明:说明:如再用赋值语句给P
6、RICE赋值是错误的。PRICE=40;/*错误,不能给符号常量赋值。运行结果:运行结果:total=300total=300 2.2 常量与变量2.2.2变量变量标识符(变量名、数组名、符号常量名、函数名等)命名规则:1由字母、数字、_ 组成,首字符不能是数字;例:例:sum,_total,month,Student_name,lotus_1_2_,BASIC,li_ling M.D.John,¥123,3D64,ab 2.2 常量与变量命名规则:2区分大小写,一般用小写;3长度不限,但只有前8个字符有效;4有意义的英文单词或缩写;2.2 常量与变量5所有变量使用之前必须声明。变量数据类型
7、变量名;如:int a;char a,b,c;float a=1.2,b;float a,b;a=1.2;变量定义的必要性:1.写错变量名时报错;2.按照指定的数据类型分配内存空间,检查运算是否合法。2.3 整型数据在语言中,整数可用以下三种形式表示:(1)十进制整数。如:如:123,-456。(2)八进制整数。以0开头的数是八进制数。如:如:0123表示八进制数123,等于十进制数83。(-11)8表示八进制数-11,即十进制数-9。(3)十六进制整数。以0 x开头的数是16进制数。如:0 x123,代表16进制数123,等于十进制数 291。(-AE)16 2.3 整型数据整型数据在内存中
8、是以二进制形式存放的。整型数据在内存中是以二进制形式存放的。如如:int i;/*定义为整型变量*/i=10;/*给i赋以整数10*/数值是以补码(complement)表示的。i100 0 0 0 0 0 0 0 0 0 0 0 1 0 1 001 1 1 1 1 1 1 1 1 1 1 1 0 1 0 11-101 1 1 1 1 1 1 1 1 1 1 1 0 1 1 012.3 整型数据原码:最高位为符号位,其余各位为数值本身的绝对值。反码:正数的反码与原码相同。负数的反码符号位为1,其余位对原码取反。补码:正数的原码、反码和补码相同。负数的补码最高位为1,其余位为对原码取反,再加1。
9、2.3 整型数据(2)(2)整型变量的分类:整型变量的分类:共六种共六种有符号基本整型有符号短整型有符号长整型无符号基本整型无符号短整型无符号长整型(signed)int(signed)short(int)(signed)long(int)unsigned intunsigned short(int)unsigned long(int)注意:注意:括号表示其中的内容是可选的.2.3 整型数据整数类型的有关数据:类型类型 类型说明符类型说明符 长度长度 数的范围数的范围 基本型基本型 signed signed int 4int 4字节字节 -2 -231312 23131-1-1 无符号整型无
10、符号整型 Unsigned int 4 Unsigned int 4字节字节 0 0 (2 23232-1-1)短整型短整型 signed signed short int 2short int 2字节字节 -2 -215152 21515-1-1 无符号短整型无符号短整型 unsigned short unsigned short int 2int 2字节字节 0 06553565535 长整型长整型 long long int 4int 4字节字节 -2 -231312 23131-1-1无符号长整型无符号长整型 unsigned long unsigned long int 4int 4
11、字节字节 0 0(2 23232-1-1)例2.2 整型变量的定义与使用#include#include void main()()int a,b,c,d;/*指定、指定、为整型变量为整型变量*unsigned;*指定为无符号整型指定为无符号整型变量变量*12;-24;10;printf(,);,);说明:说明:说明:说明:可以看到不同种类的整型数据可以进行算术运算 运行结果:运行结果:,例2.3 整型数据的溢出#include#include void main()void main()int a,b;int a,b;a=32767;a=32767;b=a+1;b=a+1;printf(“%
12、d,%dn”,a,b);printf(“%d,%dn”,a,b);说明:说明:说明:说明:数值是以补码表示的。一个整型变量只能容纳-3276832767范围内的数,无法表示大于32767或小于-32768的数。遇此情况就发生“溢出”。运行结果:运行结果:32767,-3276832767,-32768 2.4 浮点型数据两种表两种表示形式示形式小数小数指数指数0.1230.123,123.456123.456,123.0123.0,0.00.0 123e-3123e-3,12.3456e1 12.3456e1 注意注意:e前必须有数字,后必须是整数。e3e3、2.1e3.52.1e3.5、.e
13、3.e3、e e 123.456可以表示为:123.456e0,12.3456e1,1.23456e2,0.123456e3,0.0123456e4,0.00123456e 规范化的指数形式(小数点左边必须且只能有一位非零数字)1.23456e2 2.4 浮点型数据浮点型数据在内存中按照指数形式存储,指数部分采用规范化的指数形式。+.3141591数符小数部分指数l数符、小数部分、整数部分都是用二进制形式表示的。l小数部分位数越多越精确,指数部分位数越多数值范围越大。2.4 浮点型数据浮点型数据分为单精度(float型)、双精度(double型)和长双精度型(long double)三类形式。
14、类型类型 位数位数 数的范围数的范围 有效数字有效数字float 32float 32 -3.410 -3.410-38-38 3.4103.41038 38 6 67 7 位位doubledouble型型 64 64 -1.710 -1.710-308-3081.7101.710308308 15 151616位位long double 128 -1.210long double 128 -1.210-4932-49321.2101.2104932 4932 18181919位位例2.4 浮点型数据的舍入误差#include#include void main()void main()flo
15、at a,b;float a,b;a=123456.789e5;a=123456.789e5;b=a+20;b=a+20;printf(“%fn”,b);printf(“%fn”,b);说明:说明:说明:说明:一个浮点型变量只能保证的有效数字是7位有效数字,后面的数字是无意义的,并不准确地表示该数。应当避免将一个很大的数和一个很小的数直接相加或相减,否则就会“丢失”小的数运行结果:运行结果:123456.789e5123456.789e5 2.5字符型数据(1)用单引号包含(2)只能包含一个字符a,A,1a,A,1abcabc、“a”“a”2.5字符型数据以以“”开头的特殊字符称为转义字符,赋
16、以后面的字符新含开头的特殊字符称为转义字符,赋以后面的字符新含义。义。n 换行,将当前位置移到下一行开头t 水平制表(跳到下一个Tab位置)b 退格,将当前位置移到前一列r 回车,将当前位置移到本行开头f 换页,将当前位置移到下页开头 代表一个反斜杠字符“”代表一个单引号(撇号)字符”代表一个双引号字符ddd 1到3位八进制数所代表的字符xhh 1到2位十六进制数所代表的字符例2.5 转义字符的使用#include#include void mainvoid main()()printfprintf(ab ct derftgn ab ct derftgn);printf(htibbj kn);
17、printf(htibbj kn);打印机上的显示结果:打印机上的显示结果:fab c gde h jik显示屏上的运行结果:显示屏上的运行结果:f gde j k 2.5字符型数据 字符数据在内存中的存储形式字符数据在内存中的存储形式l字符在内存中以ASCII码的二进制形式存在,一个字符占一个字节。l字符数据和整型数据有时可以通用,可以互相赋值或直接运算。l只能用0-255间的整数给字符型变量赋值。a9701100001 例2.6 向字符变量赋以整数。#include#include void main()void main()char c1,c2;char c1,c2;c1=97;c1=9
18、7;c2=98;c2=98;printf(“%c%cn”,c1,c2);printf(“%c%cn”,c1,c2);printf(“%d%dn”,c1,c2);printf(“%d%dn”,c1,c2);说明:说明:说明:说明:在第和第4行中,将整数和分别赋给c1和c2,它的作用相当于以下两个赋值语句:c1;c2;因为a和b的ASCII码为和运行结果:运行结果:97 98 97 98例2.7 大小写字母的转换#include#include void main()void main()char c1,c2 char c1,c2;c1=a;c1=a;c2=b;c2=b;c1=c1-32;c1=c
19、1-32;c2=c2-32;c2=c2-32;printf(“printf(“c c cc,c1,c2c1,c2););说明:说明:说明:说明:程序的作用是将两个小写字母a和b转换成大写字母A和B。从代码表中可以看到每一个小写字母比它相应的大写字母的码大。语言允许字符数据与整数直接进行算术运算。运行结果:运行结果:2.5字符型数据字符串是一对双撇号括起来的字符序列.如:“How do you do?”,“CHINA”,“a”,“$123.45”规定:在每一个字符串常量的结尾加一个字符串结束标志,以便系统据此判断字符串是否结束,输出时不输出。表示空字符,ASCII码为0。a与“a”l是字符常量,
20、“”是字符串常量;l字符常量占1个字节,字符串常量占n+1个字节(n为字符串字符数);如字符串常量“China”l不能将字符串常量赋值给字符变量。如:char c;c=“a”;是错误的。aa0China02.7各类数值型数据间的混合运算 doublelongunsignedintfloatchar、short例:10+a+i*f-d/l上述类型转换由系统自动进行。低高 2.8算术运算符和算术表达式2.8.1 语言运算符简介语言运算符简介(1)算术运算符(+-*/%)(2)关系运算符(=!=)(3)逻辑运算符(!&|)(4)位运算符 (|)(5)赋值运算符(及其扩展赋值运算符)(6)条件运算符(
21、?:)(7)逗号运算符 (,)2.8算术运算符和算术表达式(8)指针运算符(*和)(9)求字节数运算符(size of)(10)强制类型转换运算符((类型))(11)分量运算符(-)(12)下标运算符()(13)其他(如函数调用运算符()2.8算术运算符和算术表达式(1 1)基本的算术运算符)基本的算术运算符:(加法运算符,或正值运算符。如:、)(减法运算符,或负值运算符。如:、)*(乘法运算符。如:*)(除法运算符。如:,5/3.0,-5/3=-1)(模运算符,或称求余运算符,两侧均应为整型数据,如:=,7%(-4)=3,7%7=0,7%9=7)。2.8算术运算符和算术表达式表达式:表达式:
22、用运算符、()将运算对象连接起来的式子。运算对象:变量、常量、函数。b=a+5;c=max(a,b);(2)(2)强制类型转换运算符强制类型转换运算符 可以利用强制类型转换运算符将一个表达式转换成所需类型。一般形式:(类型名)(表达式)例如:例如:(double)将转换成double类型,a的数据类型不变,得到一个double类型的中间值(int)(x+y)将x+y的值转换成整型(int)x+y;int(x);(float)(5%3)将5%3的值转换成float型例2.8 强制类型转换。#include#include void main()void main()float float;int
23、 int;(intint););printf(x=%f printf(x=%f,i=%dn i=%dn,x x,i);i);说明:说明:说明:说明:有两种类型转换,一种是在运算时不必用户指定,系统自动进行的类型转换,如3+6.5。第二种是强制类型转换。当自动类型转换不能实现目的时,可以用强制类型转换。运行结果:运行结果:x3.600000,i=3 2.8算术运算符和算术表达式(4)(4)自增、自减运算符自增、自减运算符 作用是使变量的值增或减如如:i=i+1;i=i-1;,先加减,再引用,先引用,再加减:例如:例如:int jint j,i=3i=3;i的值先变成4,再赋给,i、j的值均为 ;
24、先将 i的值3赋给,的值为,然后变为 2.8算术运算符和算术表达式注意:注意:(1)自增运算符(),自减运算符(),只能用于变量,而不能用于常量或表达式;(2)和的结合方向是“自右至左”。如:Printf(”%d”,-i+);/*i=3,输出-3,i变为4*/(3)不要写别人看不懂,也不知道系统会怎样执行的程序。i+j;printf(“%d,%d”,i,i+);l自增(减)运算符常用于循环语句中使循环变量自动加;也用于指针变量,使指针指向下一个地址。2.9 赋值运算符和赋值表达式 赋值运算符结合顺序“自右而左”。如:1.a=b=5 2.a=5+(c=6)3.(a=3*5)=4*3 4.prin
25、tf(%d,a=b);5.float num=2.5;num=(int)num;int a=3.21例2.9 有符号数据传送给无符号变量。#include#include void void()();(nn,);,);说明:说明:说明:说明:“%u”是输出无符号数时所用的格式符。如果为正值,且在32767之间,则赋值后数值不变。赋值情况见图 图运行结果:运行结果:2.9 赋值运算符和赋值表达式 复合的赋值运算符:复合的赋值运算符:在赋值符“”之前加上其他运算符,构成复合赋值运算符。语言规定可以使用种复合赋值运算符:语言规定可以使用种复合赋值运算符:,*,|例如例如:等价于 *等价于 *()等价
26、于 好处:使程序紧凑,简洁;提高编译效率。2.9 赋值运算符和赋值表达式例:a+=a-=a*a分析分析:此赋值表达式的求解步骤如下 先进行“*”的运算,它相当于*,a的值为144132。再进行“”的运算,相当于=a+(-132),a的值为132-132-264。2.10 逗号运算符和逗号表达式逗号运算符(顺序求值运算符)逗号运算符(顺序求值运算符):将两个表达式连接起来。如:如:5,一般形式一般形式:表达式,表达式表达式,表达式 求解过程:求解过程:先求解表达式,再求解表达式。整个逗号表达式的值是表达式的值。逗号表达式 的值为14 2.10 逗号运算符和逗号表达式一个逗号表达式又可以与另一个表
27、达式组成一个新一个逗号表达式又可以与另一个表达式组成一个新的逗号表达式的逗号表达式 如如:*,*,先计算出的值等于,再进行*的运算得60(但值未变,仍为15),再进行得,即整个表达式的值为。逗号表达式的一般形式可以扩展为逗号表达式的一般形式可以扩展为 表达式,表达式,表达式,表达式,表达式,表达式,表达式,表达式 它的值为表达式的值。它的值为表达式的值。2.10 逗号运算符和逗号表达式逗号运算符是级别最低的运算符。逗号运算符是级别最低的运算符。例:例:*5,*分析分析:赋值运算符的优先级别高于逗号运算符赋值运算符的优先级别高于逗号运算符,因此应先求解*5.的值为5,然后求解*,得。整个逗号表达式的值为。(,*),*3赋值表达式,将一个逗号表达式的值赋给,的值等于 逗号表达式,包括一个赋值表达式和一个算术表达式,的值为,整个逗号表达式的值为18。2.10 逗号运算符和逗号表达式注意注意:并不是任何地方出现的逗号都是逗号运算符。例如函数参数也是用逗号来间隔的。如如:printf(“%d,%d,%d”,a,b,c);“,”并不是一个逗号表达式,它是printf函数的3个参数printf(“%d,%d,%d”,(a,b,c),b,c)“(,)”是一个逗号表达式,它的值等于的值。
限制150内