




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、东北师范大学计算机学院 2008年秋季学期1第三章第三章 数据类型、运算符与表达式数据类型、运算符与表达式主要内容主要内容:(1)常量的定义与使用)常量的定义与使用(2)整型、实型、字符型变量的声明与使用)整型、实型、字符型变量的声明与使用(3)字符串常量的存贮)字符串常量的存贮(4)算术运算符与算术表达式)算术运算符与算术表达式(5)赋值表达式)赋值表达式(6)逗号表达式)逗号表达式东北师范大学计算机学院 2008年秋季学期2Professional WordsData type 数据类型数据类型Constant 常量常量Variable 变量变量Expression 表达式表达式Decla
2、ration 声明声明Initialization 初始化初始化assignment 赋值赋值Identifier 标识符标识符Reserved words 保留字保留字东北师范大学计算机学院 2008年秋季学期3一一.C语言的数据类型语言的数据类型数据为什么要区分类型?数据为什么要区分类型?不同类型的数据代表不同的不同类型的数据代表不同的数据表示形式数据表示形式合法的取值范围合法的取值范围占用内存空间大小占用内存空间大小可参与的运算种类可参与的运算种类 东北师范大学计算机学院 2008年秋季学期4C的数据类型的数据类型数据类型数据类型基本类型基本类型构造类型构造类型指针类型指针类型(*)空类
3、型空类型(void)枚举类型枚举类型(enum)实型实型字符型字符型(char)整型整型(int)共用体类型共用体类型(union)结构体类型结构体类型(struct)数组类型数组类型(array)双精度型双精度型(double)单精度型单精度型(float)东北师范大学计算机学院 2008年秋季学期5二、常量与变量二、常量与变量1、常量和符号常量常量和符号常量 程序运行过程中,其值不能改变的量称为常量。程序运行过程中,其值不能改变的量称为常量。常量分为常量分为字面常量字面常量(literal constant)和和符号常量符号常量(Symbolic constant)。字面常量从其值上就可。
4、字面常量从其值上就可以判断其类型,如以判断其类型,如100,10.2,a,符号常量要,符号常量要求定义。求定义。 #define PI 3.1415926/宏定义语句,后面详讲宏定义语句,后面详讲 使用符号常量的好处:使用符号常量的好处: (1)含义清楚:定义符号常量的名称时用有)含义清楚:定义符号常量的名称时用有意义的英文单词意义的英文单词 (2 2)“一改全改一改全改” 东北师范大学计算机学院 2008年秋季学期6符号常量举例符号常量举例 #define PI 3.1415926main() float r,s,l,v; scanf(“%f”,&r); s=PI*r*r; l=2*
5、PI*r; v=4*PI*r*r*r/3; printf(“%f,%f ,%f”, s,l,v); 东北师范大学计算机学院 2008年秋季学期72、变量、变量(Variable) 程序运行中其值可以改变的量称为变量。程序运行中其值可以改变的量称为变量。与一个变量相关的内容:与一个变量相关的内容:变量名变量名(name)(name), 变量的值变量的值(Value)(Value),变量所占的存贮单元变量所占的存贮单元(地址(地址 AddressAddress)。给变量的起名要符合。给变量的起名要符合标识符标识符(Identifier)(Identifier)的定义。的定义。C语言规定语言规定标识
6、符中可以由字母、数字和下划线组成,标识符中可以由字母、数字和下划线组成,且第一个字符必须是字母或下划线。且第一个字符必须是字母或下划线。 例如,例如,a2,_abc,_ABC,a_1,123,8aa2,_abc,_ABC,a_1,123,8a 东北师范大学计算机学院 2008年秋季学期8关于变量的几点说明关于变量的几点说明1. 变量名由英文字母、数字和下划线组成,区分大小写变量名由英文字母、数字和下划线组成,区分大小写2. 不可以不可以是数字开头是数字开头3. 变量的命名要有意义,便于阅读和记忆变量的命名要有意义,便于阅读和记忆最好使用英文单词或其组合最好使用英文单词或其组合切忌使用汉语拼音,
7、更不能使用汉字切忌使用汉语拼音,更不能使用汉字 4. 下划线和大小写通常用来增强可读性下划线和大小写通常用来增强可读性variablenamevariable_nameVariableName, variableNameUNIX风格Windows风格东北师范大学计算机学院 2008年秋季学期9 5. 不允许使用关键字(不允许使用关键字(Keyword)作为标识)作为标识符的名字符的名字 int, float, for, while, if等等6、变量名不要太长,一般不超过、变量名不要太长,一般不超过8个字符,个字符,windows允许不超过允许不超过255个字符个字符 7、变量要遵循、变量要遵
8、循“先定义,后使用先定义,后使用”的原则的原则 8、每个变量都有一个指定的类型,编译时为、每个变量都有一个指定的类型,编译时为其分配相应数目的存贮单元,且对其运算的其分配相应数目的存贮单元,且对其运算的合法性进行检查合法性进行检查东北师范大学计算机学院 2008年秋季学期10三、整型数据三、整型数据(integer) 1 整型数据在内存中的存放整型数据在内存中的存放 用二进制进行存贮,且用补码表示用二进制进行存贮,且用补码表示 复习进制、原码,反码,补码方面的知识复习进制、原码,反码,补码方面的知识 2 整型常量的表示方法整型常量的表示方法 n n 十进制数:直接写十进制数:直接写 n n 八
9、进制数:以数字八进制数:以数字0开头开头 022、-037 010和和10大小不一样大小不一样 n n 十六进制数:以十六进制数:以0 x开头开头 0 x12、-0 x1F, -0 x1f东北师范大学计算机学院 2008年秋季学期113、整型变量、整型变量整型变量分为以下几类整型变量分为以下几类: u u int:基本整型:基本整型 uu short u u long u u unsigned:无符号整型:无符号整型 uu unsigned short u u unsigned long东北师范大学计算机学院 2008年秋季学期123、整型变量、整型变量 有符号数的最高位为符号位,有符号数的最
10、高位为符号位,0表示表示正数,正数,1表示负数。无符号整数的最表示负数。无符号整数的最高位也为有效位,所以表示正数的高位也为有效位,所以表示正数的范围比有符号数多一倍范围比有符号数多一倍 东北师范大学计算机学院 2008年秋季学期131 1111111111111110 111111111111111.-(215-1)215-1int a; -32768 32767长度为长度为2字节的有符号整数表示的范围:字节的有符号整数表示的范围:00000000000000001111111111111111.0216-1unsigned a; 0 65535长度为长度为2字节的无符号整数表示的范围:字节
11、的无符号整数表示的范围:东北师范大学计算机学院 2008年秋季学期144、整型常量的类型、整型常量的类型l根据数的大小由系统自动定义其类型。根据数的大小由系统自动定义其类型。int, short, long,l 数字后面加数字后面加U或或u表示按无符号数存贮表示按无符号数存贮l 数字后加数字后加L或或l表示长整型表示长整型例如例如:18、-20长整型常量长整型常量 123l、123L、123456l、123456L无符号型常量无符号型常量 123u、 123U东北师范大学计算机学院 2008年秋季学期155、整数占的内存空间、整数占的内存空间 int,short,unsigned,unsign
12、ed short 通常占通常占2个字节,个字节,long,unsigned long占占4个字节。个字节。 各种整型数占的内存空间与机器和各种整型数占的内存空间与机器和编译系统有关。编译系统有关。东北师范大学计算机学院 2008年秋季学期16整数所占字节数举例(整数所占字节数举例(VC,TC)东北师范大学计算机学院 2008年秋季学期17四、实型数据四、实型数据(floating point) 1实型常数实型常数实型常数有两种表示方法:实型常数有两种表示方法: 十进制表示法十进制表示法:123.4科学计数法(指数表示法):科学计数法(指数表示法):e(E)之前必须)之前必须有数字,其后的指数必
13、须为整数,小数点前有有数字,其后的指数必须为整数,小数点前有且仅有一位的非且仅有一位的非0数字的指数称为规范化的指数字的指数称为规范化的指数形式数形式如,如,123e0, 1.23e2, 12.3e1,指数在输出时按规范化指数在输出时按规范化形式输出形式输出 printf(%en, 12.3e1); 1.230000e+002东北师范大学计算机学院 2008年秋季学期182、实型变量、实型变量 实型数在计算机中按指数方式存放,小数部分实型数在计算机中按指数方式存放,小数部分和指数部分,指数部分位数越多,表示数的范和指数部分,指数部分位数越多,表示数的范围越大。实型变量有三种类型:围越大。实型变
14、量有三种类型: uu 单精度单精度float(4字节)字节) uu 双精度双精度double(8字节)字节) uu long double(16字节字节) 实型数有误差,一个实型数能保证实型数有误差,一个实型数能保证7位有效数位有效数字,其余的不精确。字,其余的不精确。123456.789+20,用用%f输出输出仍然是仍然是12345678848,1/3*3!=1东北师范大学计算机学院 2008年秋季学期193、实型常数的类型、实型常数的类型 C语言将实数按双精度处理,数字后加语言将实数按双精度处理,数字后加F或或f可强制说明为单精度类型;将一个实数赋给一可强制说明为单精度类型;将一个实数赋给
15、一个实型变量时,按变量的类型来确定精度。个实型变量时,按变量的类型来确定精度。十进制小数形式十进制小数形式: 123.45、456.78指数形式指数形式: 1e-2、4.5e3单精度实型常量单精度实型常量: 123.45f、 456.78F、1e-2f、4.5e3F长双精度型常量长双精度型常量: 123.45l、 456.78L、1e-2l、4.5e3L输出时小数点后面保留输出时小数点后面保留6位位!东北师范大学计算机学院 2008年秋季学期204、实型数举例、实型数举例#include void main()float x=123.45678; double y=12345.6789012;
16、printf(Data type precisionn);printf(- -n);printf(float: %fn,x);printf(double:%lfn,y);东北师范大学计算机学院 2008年秋季学期21五、五、字符型数据字符型数据 (Character) 1 字符常量字符常量 用单引号括起来的单个字符。用单引号括起来的单个字符。a,b,0,#等,等,每个字符对应一个相应的整数,是其每个字符对应一个相应的整数,是其ASCII码。码。记住一些常用字符的记住一些常用字符的ASCII码。码。另外,另外,C包括包括以以开头的转义字符,用于打印控制。开头的转义字符,用于打印控制。 东北师范大
17、学计算机学院 2008年秋季学期22东北师范大学计算机学院 2008年秋季学期23main()printf(1234567812345678n);printf( ab ct derftgn);printf(htibbj k);东北师范大学计算机学院 2008年秋季学期242、字符变量、字符变量 一个字符变量只存一个字符。一个字符变量只存一个字符。char类型占一个类型占一个字节,存贮字符的字节,存贮字符的ASCII码。所以整型和字符码。所以整型和字符型可以混用型可以混用(整型数在可显示字符的整型数在可显示字符的ASCII码范码范围内围内)。只需用不同的控制字符就可输出不同。只需用不同的控制字符
18、就可输出不同的格式。的格式。 例例1 main() char a,b;/ int a,b a=65;b=66; printf(“%c,%cn”,a,b); printf(“%d,%dn”,a,b); 东北师范大学计算机学院 2008年秋季学期25程序举例程序举例例例2 大小写字母转换大小写字母转换main()char c1,c2;c1=a;c2=b;printf(“%c,%c”,c1-32,c2-32);东北师范大学计算机学院 2008年秋季学期26程序举例程序举例例例3 将输入的英文句子中的大写字母改为小写字将输入的英文句子中的大写字母改为小写字母,句子以母,句子以.结束。结束。main()
19、 char a; scanf(“%c”,c); while (c!=.) if (a=65&a=90) a=a+32; prinf(“%c”,a); scanf(“%c”,c); 东北师范大学计算机学院 2008年秋季学期273、字符串常量、字符串常量(String) 用双引号引起来的一串字符。用双引号引起来的一串字符。C语言在语言在存贮字符串时,系统在最后一个字符号存贮字符串时,系统在最后一个字符号加一个加一个ASCII码为码为0的字符,表示字符串的字符,表示字符串结尾。结尾。S=“ABC”,在内存中存贮,在内存中存贮 A B C 0“”是空串是空串,” ”是包括一个空格的字符串是包
20、括一个空格的字符串;”a”和和a的区别的区别;C语言没有字符串变量类型,语言没有字符串变量类型,用字符数组或字符指针来实现。用字符数组或字符指针来实现。东北师范大学计算机学院 2008年秋季学期284、字符串与数值之间的转换、字符串与数值之间的转换1.atof(),atoi(),atol()把字符串转为把字符串转为double,int和和long定义在定义在stdlib.h中中2.sprintf(char *buffer, const char *format , argument . )可以用来把各种类型的数值转为字符串存贮可以用来把各种类型的数值转为字符串存贮于字符串于字符串buffer中
21、,定义在中,定义在stdio.h中中函数的返回结果是存贮在函数的返回结果是存贮在buffer中的字符数,中的字符数,不包括末位的空字符不包括末位的空字符0东北师范大学计算机学院 2008年秋季学期29#include #includemain()int a;double b;long d;a=atoi(123)+1;b= atof(123.45);d=atol(123456789); printf(%d,%lf,%ldn,a,b,d);东北师范大学计算机学院 2008年秋季学期30#include void main() char buffer200, s = computer, c = l;
22、 int i = 35, j; float fp = 1.7320534f; /* Format and print various data: */ j = sprintf( buffer, tString: %sn, s ); j += sprintf( buffer + j, tCharacter: %cn, c ); j += sprintf( buffer + j, tInteger: %dn, i ); j += sprintf( buffer + j, tReal: %fn, fp ); printf( Output:n%sncharacter count = %dn, buff
23、er, j );东北师范大学计算机学院 2008年秋季学期31六、变量赋初值六、变量赋初值 可以在说明变量的同时进行初始化或先可以在说明变量的同时进行初始化或先声 明声 明 ( D e c l a r a t i o n ) 再 初 始 化再 初 始 化(Initialization)。int a;a=10;int a=10;东北师范大学计算机学院 2008年秋季学期32七、不同类型之间的混合运算七、不同类型之间的混合运算doublelongchar, shortunsignedint float高高低低水平方向为必转,竖直方向为不同类型数水平方向为必转,竖直方向为不同类型数据混合运算时转的方
24、向,由低转高据混合运算时转的方向,由低转高东北师范大学计算机学院 2008年秋季学期33八、算术运算符和算术表达式八、算术运算符和算术表达式(Arithmetic operator & expression) 1 C运算符运算符(1) 算术运算符算术运算符(2) 关系运算符关系运算符(3) 逻辑运算符逻辑运算符(4) 位运算符位运算符(5) 赋值运算符赋值运算符(6) 条件运算符条件运算符(7) 逗号运算符逗号运算符(8) 指针运算符指针运算符(9) 求字节数运算符求字节数运算符(10)强制类型转换运)强制类型转换运 算符算符(11)分量运算符)分量运算符(12) 下标运算符下标运算符
25、(1313)其它)其它 东北师范大学计算机学院 2008年秋季学期342、算术运算符和算术表达式、算术运算符和算术表达式 (1)+,-,*,/,%(作用举例作用举例) (2)结合方向:左结合性)结合方向:左结合性(Associativity),即,即运算对象先与左面的运算符相结合运算对象先与左面的运算符相结合 (3)优先级)优先级(precedence): *,/,% +,- (4)强制类型转换运算符)强制类型转换运算符 系统自动转换系统自动转换/强制类型转换强制类型转换 (类型)表达式(类型)表达式(int)(3.14)3-5%3=-25 % (-3)=2与被除数符号相同东北师范大学计算机学
26、院 2008年秋季学期35 (5)自增、自减运算符)自增、自减运算符 i+,i- -,先使用,先使用i的值,然后进行加的值,然后进行加1或减或减1运算运算 +i,-i, 先进行加先进行加1或减或减1运算,然后使用运算,然后使用i值值 说明:说明: 自增自增/自减运算符只能用于变量自减运算符只能用于变量 结合方向是自右至左(右结合性)结合方向是自右至左(右结合性)-i+,先先执行执行i+运算,然后取负运算,然后取负 经常用于对循环变量加经常用于对循环变量加1或指针变量加或指针变量加1 使用自增使用自增/自减运算符时要尽量避免歧义自减运算符时要尽量避免歧义东北师范大学计算机学院 2008年秋季学期
27、36i=3printf(“%d,%d”,i,(i+)+(i+)+(i+) )TC:结果为结果为6,12VC:结果为结果为3,9用多个变量避免歧义用多个变量避免歧义 i+j C编译系统尽可能多地自左至可将编译系统尽可能多地自左至可将若干个字符组成一个运算符,所以等效若干个字符组成一个运算符,所以等效于(于(i+)+j,但要尽量用括号避免歧义但要尽量用括号避免歧义东北师范大学计算机学院 2008年秋季学期373、 C语言常用的数学函数语言常用的数学函数函数名函数名功功 能能函数名函数名功功 能能sqrt(x)计算计算x的平方根,的平方根,x应大于等于应大于等于0 exp(x)计算计算ex的值的值f
28、abs(x)abs(x)计算计算x的绝对值的绝对值pow(x,y)计算计算xy的值的值log(x)计算计算lnx的值的值sin(x)计算计算sinx的值,的值,x为弧度值为弧度值log10(x)计算计算lgx的值的值cos(x)计算计算cosx的值,的值,x为弧度值为弧度值函数的参数均为实型东北师范大学计算机学院 2008年秋季学期38九、赋值运算符和赋值表达式九、赋值运算符和赋值表达式1 赋值运算符赋值运算符 变量变量=表达式;表达式;2 类型转换类型转换 当表达式与变量的类型不一致时,表达式将向当表达式与变量的类型不一致时,表达式将向变量的类型转换变量的类型转换(1)实型数赋给整型变量,自
29、动取整)实型数赋给整型变量,自动取整(2)整型数赋给实型数时,数值不变,以浮点)整型数赋给实型数时,数值不变,以浮点 的方式存贮到变量中的方式存贮到变量中(3)double数赋给数赋给float型变量时,截取前型变量时,截取前7位有位有效数字,存贮于效数字,存贮于32位单元中,不能溢出位单元中,不能溢出东北师范大学计算机学院 2008年秋季学期39(4)float型数赋给型数赋给double型变量时,数值不变,有效位型变量时,数值不变,有效位扩展到扩展到16位,存贮在位,存贮在64位单元中位单元中(5)字符型赋给整型时,字符数据放在整型变量的低)字符型赋给整型时,字符数据放在整型变量的低8位。
30、说明:当系统将字符处理为无符号数时,赋给整位。说明:当系统将字符处理为无符号数时,赋给整型时,高型时,高8位补位补0;当系统将字符处理为有符号数时,;当系统将字符处理为有符号数时,高高8位补与字符最高位相同的位补与字符最高位相同的8位数,称为符号扩展。位数,称为符号扩展。(6)将整型赋给字符型时,将整型的低)将整型赋给字符型时,将整型的低8位赋给字符变位赋给字符变量量(7)int型赋给型赋给long型变量时,进行符号扩展;型变量时,进行符号扩展;long型赋型赋给给int型时,只取低型时,只取低16位位(8)unsigned int 型赋给型赋给long 型变量时,不进行符号扩型变量时,不进行
31、符号扩展,高位补展,高位补0;(9)将非)将非unsigned型数据赋给长度相同的型数据赋给长度相同的unsigned型变型变量,原样照赋量,原样照赋东北师范大学计算机学院 2008年秋季学期403、复合赋值运算符、复合赋值运算符 在赋值运算符前加上其它运算符,构成在赋值运算符前加上其它运算符,构成符合运算符。符合运算符。 注:赋值号右端的表达式做为一个整体注:赋值号右端的表达式做为一个整体 凡是二元运算符凡是二元运算符(binary)都可以与赋值号都可以与赋值号一起组成复合赋值符一起组成复合赋值符 +=,-=,*=,/=,%=,=,&=,=,|=东北师范大学计算机学院 2008年秋季
32、学期414、赋值表达式、赋值表达式由赋值运算符将一个变量和一个表达式连接起来由赋值运算符将一个变量和一个表达式连接起来的式子称为的式子称为“赋值表达式赋值表达式”。求解过程:将右侧表达式的值赋给左侧的变量,求解过程:将右侧表达式的值赋给左侧的变量,变量的值就是赋值表达式的值变量的值就是赋值表达式的值a=5;a=(b=5);等价于等价于b=5; a=b; 因为赋值运算符是右结因为赋值运算符是右结合性合性 a+=a-=a*a, a的初值为的初值为12,结果为,结果为? -264东北师范大学计算机学院 2008年秋季学期42十、逗号运算符和逗号表达式十、逗号运算符和逗号表达式(Comma operator & expression) 逗号运算符是所有运算符中优先级最低的;逗号逗号运算符是所有运算符中优先级最低的;逗号不全做运算符,有时做为参数分隔符不全做运算符,有时做为参数分隔符用逗号将两个表达式连接起来用逗号将两个表达式连接起来逗号表达式逗号表达式表达式表达式1,表达式,表达式2,表达式,表达式n求解的顺序是从左至右,最后一个表达式的值是求解的顺序是从左至右,最后一个表达式的值是整个逗号表达式的值,逗号表达式可以嵌套。整个逗号表达式的值,逗号表达式可以嵌套。东北师范大学计
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 借款合同具有哪些法律特征
- 2025年云南b2货运资格证全题
- 人事代理招聘与委托培养合同协议
- 在线教育平台建设和运营指南
- 建设工程劳务大清合同
- 售后技术支持服务协议
- 华尔产权交易所网站使用协议模板6篇
- 奶牛养殖售卖合同范本
- 柬埔寨qc合同范本
- 双方土地买卖合同范本
- 2025年黑龙江民族职业学院单招职业技能测试题库附答案
- 年产60万吨掺混肥项目可行性研究报告申请立项
- 2025年2月《公共安全视频图像信息系统管理条例》学习解读课件
- 2025年江苏省中职《英语》学业水平考试高频必练考试题库400题(含答案)
- 2025年潍坊工程职业学院高职单招高职单招英语2016-2024历年频考点试题含答案解析
- 2025年济宁职业技术学院高职单招语文2018-2024历年参考题库频考点含答案解析
- 高三一模“生存与强弱关系思辨”审题立意及范文
- 2025年湖南工程职业技术学院高职单招职业适应性测试近5年常考版参考题库含答案解析
- 2025年江西青年职业学院高职单招职业技能测试近5年常考版参考题库含答案解析
- 2024年七台河职业学院高职单招数学历年参考题库含答案解析
- 小学数学教学中小组合作学习课件
评论
0/150
提交评论