《C程序设计03数据类型、运算符与表达式.ppt》由会员分享,可在线阅读,更多相关《C程序设计03数据类型、运算符与表达式.ppt(76页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、C语言程序设计CS Dept.,WUSE第三章第三章 数据类型、运算符与表达式数据类型、运算符与表达式3.1 数据类型数据类型 著名计算机科学家沃思提出:程序数据结构算法 所以,存放数据的方式直接反映了一种语言的数据表达能力。数据的存储方式又称之为:数据类型。举 一个例子:以考生各科成绩及总分排队问题为例。成绩的存放 以数组形式 排队方法 算法前面已述.C数据类型丰富,分为:基本类型构造类型指针类型空类型整型字符型实型单精度双精度数组结构体共用体数据有常量、变量之分,均为其中一种类型。本章先学习基本类型。枚举3.2 常量与变量常量与变量3.2.1 常量和符号常量常量和符号常量常量 程序运行过程
2、中不能被改变的量。一般的数据显式写法均表示常量。如程序中:20 整型常量 15.8 实型常量 a 字符常量例:#define PRICE 30 main()int num,total;num=10;total=num*PRICE;printf(total=%d,total);还可用一个符号表示一个常量 符号常量符号常量(一般用大写,以区分变量)再如:=3.1415629#define PAI 3.1415629#define PRICE 30变量变量 程序执行中可以改变的量称为变量。变量包括变量名和变量值。变量名 用标识符命名,对应一定数量的内存存贮单元,其单元数视变量类型而定。标识符 由字母
3、、数字、下划线组成且由字母或下划线开头的字符串。标识符可用来命名变量及作为常量名、函数名、类型名、文件名等,一个程序内不得有重复名。如:_sum,sum,student_name,price等 习惯上,变量名、函数名等用小写字母表示。常量名用大写字母表示(以增加可读性)。另:需注意标识符长度,视不同系统而定。设允许8个字符。则:student_ name student_ number为同一名字。C语言中,变量须先定义,后使用 如:int student student=30;则若写成student=30,则未定义,编译时指出其错。一旦变量被定义,即可在编译时为其分配相应数量的单元。一旦变量被
4、定义,其类型便确定。则可检查其运算的合法性。如:a%b 表示a整除以b的余,则a,b必须为整型量。3.33.3整型数据整型数据3.3.1 整型常量整型常量整型常量 整型常数C语言提供了三种形式 十进制 如:256,308,120等 八进制 以数字0开头表示的整数 例:0235,0146 012等.0235=28238515710 014618248610210 012(182)1010十六进制 以0 x开头的整型数 如:0 x16,0 x283.3.2 整型变量整型变量一、分类:一、分类:分为四种:基本型、短整型、长整型、无符号型 1.基本型:用int定义 2.短整型:用short int或
5、short定义 3.长整型:用long 或 long int 定义 4.无符号型:不存放符号,则不带符号数.又分无符号整型,无符号短整型,无符号长整型。上述各种类型所占内存单元数及取值范围视不同机器而不同。详见P13。二、定义方法二、定义方法 整型变量分别以下列方式定义1.基本整型:int a,b,c;2.短整型 short int 或 short a,b,c;3.长整型 long int 或 long a,b,c;4.无符号型 unsigned a,b,c;unsigned short a,b,c;unsigned long a,b,c;例:main()int a,b,c,d;/*指定a,b
6、,c,d为整型变量*/unsignd u;/*指定u为无符号整型变量*/a=12;b=24;u=10;c=a+u;d=b+u;printf(a+u=%d,b+u=%dn,c,d);由此看到:不同类型的整型数据可进行算术运算。但有一定规则,见2.7.运行结果为 a+u=22,b+u=14三、关于整型常量三、关于整型常量 程序中出现的整型常数,系统按以下规则分配变量(内存单元)或赋值给相应变量 1.当常数(量)在 3276832767之间,则可赋给int,long int 变量。2.若超越,而在21474836482147483647之间,则可赋给 long int 变量。3.若int,short
7、 int 长度相同,则二者皆可赋值。4.一个非负整数,=,=,!=4.位运算符 ,&.5.赋值运算符 =及其扩展运算符6.条件运算符?:7.逗号运算符 ,8.指针运算符 *,&11.分量运算符 ,12.下标运算符 13.其它运算符 如函数的调用()9.求字节数运算符 sizeof 10.强制类型转换运算符 (类型)3.8.2 算术运算符和算术表达式算术运算符和算术表达式一、基本算术运算符+加法 正值 3+6,+3 减法 负值 6 4,5 乘法 38/除法 8/5%求余 7%4 的值为3注:两个整型数据相除(结果为整,一般向零靠拢)。5/3 1“/”中,有一个 float,则结果为double型
8、,使用时千万注意 int/int 出现数据丢失。二、算术表达式及算术运算符的优先级与结合性运算对象:常量、变量、函数等优先级:(),/,%,+,算术表达式:用算术运行运算符和括号将运算对象连接起来,且符合C语法规则的式子。结合性:同一优先级,自左向右,为左结合性,反之为右结合性。例:a b/c 1.5+ad e 当类型不同的数据进行运算时,按2.7介绍的类型转换。三、可利用强制类型转换运算符将一个算术表达式转换为所需类型形式:(类型名)(表达式)例如:(double)a 将a转换为double(int)(x+y)将x+y转换为int(float)(5%3)将5%3转换为float注注:(int
9、)x括号不能省略。如:intx 会理解为变量intx.又如:(int)(x+y)若省略括号:(int)x+y会变成将x转成整型.2.转换后的类型数据由系统分配一个中间变量存放,而原变量类型不变。float x;(int)x;则x本身仍为实型,而(int)x由一个中间变量(整)存放x的整数部分。例:main()float x;int i;x=3.6;i=(int)x;printf(x=%f,i=%d,x,i);则:x=3.600000,i=3.总结以上类型转换,有二种:1.强制另:强制类型转换运算优先于算术运算符.2.系统自动如:若x为float,则x%3不合法。但可用(int)x%3来解决。(
10、附录III介绍了优先级)四、自增,自减运算符设有int i=3;+自增1 自减1则:+i,i+都会使i变为4,但有区别:+i:先使i值+1,再使用i值;i+:先使用i值,再使i值+1.j=+i;j=4,i=4.(i=i+1;j=i;)j=i+;j=3,i=4.(j=i;i=i+1)同理:i,i ,均使i值1,但:又如:printf(i=%dn,i+);若:printf(i=%dn,+i);i:先使i值1,再使用i值;i :先使用i值,再使i值1i=3;结果:i=3结果:i=41.+和 运算法只能用于变量,不得用于常量和表达式.如 5+,(a+b)+均为不合法.几点注意:2.+,的结合性为从右至
11、左,而一般算术运算符为从左至右。如:i+和+为同一优先级.i+相当于(i+)若 i=3,则结果为3,i为4.+,主要用于循环变量自增或自减。1.要慎用+、运算符。五、有关表达式使用中的问题说明如:表达式(i+)+(i+)+(i+)(i=3)一般认为:从左至右:3+4+5=12,i6.但Turbo C.MSC 都是先取三个原值则:先对i进行3次自加,为6,然后三个i相加为18,而i为6。相加:i+i+i=9 i6如果表达式数为:k=(+i)+(+i)+(+i)2.在表达式中,有的运算符为一个字符,有的为两个字符。一般地:自左至右尽可能多地将若干字符组成一个运算符。例:i+j,究竟理解为(i+)+
12、j还是i+(+j)?3.在函数调用时,如:printf(%d,%d,i,i+);若i=3,若参数计算从左至右,则输出 3,3若从右至左,则输出4,3上述问题看似复杂,最好上机实践.3.9 赋值运算符和 赋值表达式符号=为赋值运算符。2.整型数据赋给实型变量,数值不变,但按实数形式存放.1.将实型数据(无论单,双精度)赋给整型变量时,舍弃小数.赋值时,两边类型若不一致,则按以下规则转换:4.将intlong int,进行符号扩展。即:符号扩展,低16位long 的低16位。5.long int int 则高16位截断。3.字符型数据赋给整型变量时:(2)字符带符号整型变量,则字符高位扩展。(1)
13、字符无符号整型变量,则存入低8位,高8位补零。6.将unsigned int 型long int高位补0。而位数相同部分赋值 unsigned int int unsigned long long unsigned short short原值传送,但数据大小不能超值。如:unsigned int a=65535;int b;b=a;则越界。7.非unsigned 型长度相同的unsigned型数据,原样传送(包括符号位)一、复合赋值运算符:在 号之前加一个其它运算符。C语言规定:凡是二目运算符均可构成复合运算符。例:a+=3;相当于 a=a+3 x=y+8;相当于 x=x(y+8)x%=3;相
14、当于x=x%一般形式:二、赋值表达式例:x=10 为一赋值表达式 其中又可以是一个赋值表达式。例:x=(y=10)相当于 y=10;x=y 由于赋值号为右结合性,于是()可省略,即为:x=y=10;例:a+=a =aa (设a12)又:a=5+(c=6)c=6,a=11 a=(b=4)+(c=6)b=4,c=6,a=10 a=(b=10)/(c=2)b=10,c=2,a=5进一步,还可用复合赋值运算符作下列运算:步骤:aa144.a =a a a=a a a=12 144=132 a+=132 a=a+(132)=2643.10 3.10 逗号运算符和逗号运算符和逗号表达式逗号表达式 一般形式
15、:表达式1,表达式2其计算规则:先计算表达式1,再计算表达式2,最后值为表达式2的值。例:a=35,a 4则:先计算3 5,a15,a 4=60,结果为60。又如:(a=35,a 4),a+5 扩展形式:表达式1,表达2,表达式n,结果为20(作为逗号表达式的值)a+5a 即 20a.3 5=15a a 4=60 (此时a值仍未变)结果为表达式n的值 注意:x=(a=3,63)赋值表达式,x18;x=a=3,6 a 逗号表达式,x3.逗号表达式主要用于某些语句中需一次计算多个表达式值的情况。如在循环语句中。函数调用中的实参之间虽然用的是逗号间隔,但不是逗号表达式。如:printf(%d,%d,%d,a,b,c);