第三章数据类型运算符表达式.ppt
2023/8/8,计算机系 杨晓光,程序设计,C,第三章 数据类型、运算符与表达式,3,第三章 数据类型、运算符与表达式,3.1 C的数据类型3.2 常量与变量3.3 整型数据3.4 实型数据3.5 字符型数据3.7 各类型数据的混合运算3.8 运算和表达式,4,3.1 C的数据类型,短整型(short)整型(int)长整型(long),整型实型,数值类型字符类型(char)枚举类型(enum),数组类型结构体类型(struct)共用体类型(union)文件类型(FILE),基本类型构造类型指针类型空类型(void),数据 类型,单精度型(float)双精度型(double),5,3.2 常量与变量,一、常量:在程序执行期间值不发生变化的量 1.直接常量:15,2.4,f,“asd”2.符号常量:在程序中用标识符代表的常数 定义符号常量的格式:#define 标识符 常数 如#define max 100 3.使用符号常量的优点(1)含义清楚(2)修改方便,二、变量:在程序执行期间值可以变化的量 1.变量的声明(1)格式:数据类型 变量名列表;,如:int x,y;char ch;x=3;,说明:进行变量声明后,计算机系统会为声明的变量分配存储空间,用以存放数据.变量的存储空间可能由一个或多个字节组成,2.变量的赋值 格式:变量=表达式 如:x=6;y=x+2;a=sqrt(b);y=x=x+2;,说明:1.赋值号是=,而等于号是=表示2.赋值运算符为右结合性,先计算赋值号右边的表达式的值,再将值赋给左边的变量 最后一个式子等价于 y=(x=x+2);3.表达式包括 常量,变量,函数,以及其他合法的C语言表达式,(2)变量的初始化:在声明变量的同时对变量赋初值 如:int x=4,y=21;char ch=A;,注意:如果几个变量的初值相同,初始化的写法如下 int a=6,b=6,c=6;,三、标识符:是给程序中的实体所起的名字 1.标识符的命名规则 以字母或下划线开头,由字母,数字和下划线组成的字符序列 标识符不能与C语言的关键字重名 建议用户定义标识符时尽量不用下划线开头 注意标识符的有效长度 标识符中区分大,小写字母,2.定义标识符应遵循的原则 尽量做到见名知义 一般习惯上变量名,函数名用小写,而符号常量用大写,9,3.3 整型数据,一、整型常量的表示方法 1.十进制整数 56,-23,0 2.八进制整数 以 0 开头 034,012 3.十六进制整数 以0 x开头 0 x28,0 x1fa9,10,二、整型变量整型数据在内存的存放形式 数据在内存中以二进制形式存放,一个整型变量在内存中占2个字节,int x=10;,附:十进制与二进制对照表,内存中存放的实际是数据的补码,正数的补码为其二进制形式;负数的补码则是将该负数绝对值的 二进制形式按位取反再加1,12,3.4 实型数据,一、实型常量的表示方法 1.小数形式:2.4,-9.6,3.,.75 2.指数形式:3.14e0,31.4e 1,2.实型变量的分类 单精度 float 双精度 double 长双精度 long double,二、实型变量 1.实型数据在内存中的存放形式 一个实型数据在内存中占4个字节,实型数据按指数形式存储.,14,3.5 字符型数据,一、字符常量:用单引号括起来的一个字符 如:s,*,6,说明:1.a 和 A 是两个不同的字符 2.单引号内不能是单引号或反斜杠,二、字符变量例:char a,b;a=g;b=$;,三、字符数据在内存中的存储形式及使用方法 1.字符数据在内存中以相应的ASCII码存放,占1个字节,2.字符数据和整数在一定范围内互相通用(1)字符数据用整数形式输出,(2)字符数据与整数进行算术运算,3.例程:,四、字符串常量:由一对双引号括起来的字符序列 如:“abcd”,“w123”,“k”,“”字符串常数在存储时计算机系统会自动在字符串末尾加一个结束标志 0,因此字符串的实际长度为字符个数加1,注意:k与“k”是不同的 k是字符常量,在内存中占1个字节,“k”是字符串常量,在内存中占2个字节,17,3.7 各类数值型数据间的混合运算,一、隐式转换 1.一般算术转换目的:将短的数扩展为机器处理的长度,使运算符两端有相同的类型,2.赋值转换(具有强制性)通过赋值运算将赋值号右侧表达式的值的类型自动转换为其左侧变量的类型.,例 float x;int a;long b=748;a=b;x=a;,二、显式转换 用强制类型转换运算符将一个类型的变量强制转换为另一种类型.一般形式:(类型标识符)表达式,注意:(1)为避免出错,应将表达式用括号括起来,(2)对一个变量进行强制转换后,原变量的类型不变,只是得到一个新类型的数据或变量(3)转换是暂时的,定义是永久的.,例(double)a(int)x+y,19,3.8 运算符和表达式,一.赋值运算 格式:变量=表达式 注:(1)“=”是一种运算,结果为右边的表达式的值.(2)一个赋值式中可以出现多个赋值运算符,其结果方式为从右向左.例:x=y=z=5;x=(y=(z=5)(3)printf()输出项中表达式运算从右向左,20,例:打印圆锥的体积和底面积 main()float s,r,h;scanf(“%f%f”,21,二.算术运算 1.双目运算+-*/%指求余运算 如:15%4 为3-19%4 为-3 注:%的两个操作数必须是整型量(常量或变量)2.单目运算+自增运算-自减运算-负运算,22,注:关于+,-1).只作用于变量,对整数有效.对浮点依然有效,但无速度上的优势.(对整数执行效率可提高7-8倍.)2).前置运算和后置运算的区别:前置(+a,-a):先执行+,-,后参与表达式运算,有优先级位置.后置(a+,a-):先参与表达式运算,后执行+,-,无优先级位置,即绝对后置运算.,23,附:算术运算优先级顺序示意图,高,低,24,例1:有定义int a=2,b=3;判断下列写法正确与否.a+;()(a+)-;()答案:a+;()(a+)-;()例2:有定义 int a=2,b=3,x;执行下条语句:x=a+b;则最后:x=?a=?b=?答案:x=6 a=3 b=4 注:x=a+b;x=(a+)+(+b);,25,例3:有定义 int a=2,b=3,x;则:x=a+b;x=(a+)+)+b;此谓:最大吃进原则例4:有定义 int x=2,y;执行下列语句:y=x+*x+;则 x=?y=?答案:x=4 y=4 或y=+x*+x;则 x=?y=?答案:x=4 y=16 或y=+x*+x;则 x=?y=?答案:x=4 y=9,26,例5:有定义 int x=2;执行下条语句后:printf(“%d%d”,+x,+x);输出结果是什么?答案:4 3注:printf()函数输出项中表达式运算从右向左.,27,三.复合赋值运算 1.定义:由在赋值符“=”之前加上其它运算符构成.例如:a+=3;a=a+3;a*=3;a=a*3;2.注意:赋值式右边的表达式若包含多项,则视其有一整体括号.例如:a*=3+2;a=a*(3+2);问:有定义 int x=20;执行下条语句后:x*=50 48;问 x=?答:x=40,28,四.关系运算 和逻辑运算 1.关系运算:,=,y 即为一关系表达式;注:关系运算的结果为逻辑值,即为零或非零 为零为假,非零为真.由此上式中 xy 的结果为?答:为0,29,2.逻辑运算:&,|,!&:逻辑与|:逻辑或!:逻辑非 注:逻辑运算的结果为零或为非零.,30,附:关系,逻辑运算符优先级示意图:,31,五.其它运算 1.并行运算(逗号运算)(优先级最低)格式:表达式1,表达式2,表达式n 运算:值为最后一个表达式的结果 例1:2,4 例2:x=(i=3,j=16,k=32);问x=?答:x=32 例3:x=(a=3*5,a*4),a+5);问x=?,a=?答:x=20,a=15.,32,2.三元组运算(?:)(优先级偏低)格式:e1?e2:e3 运算:若e1非零则值为e2,e1为零则值为e3.例4:ch=a=b?Y:N;若a=3,b=4,则ch=N a=3,b=3,则ch=Y 例5:x%2=1?1:0 若x为奇数,则表达式的值为1 x为偶数,则表达式的值为0,33,例6:x=0?x:-x;用于求 x 的绝对值 例7:ch=ch=a 用于将小写字母转化为大写字母,34,例8:从键盘读入a,b,c 三个数,输出其中最大的.#include main()int a,b,c,m;scanf(%d%d%d,35,例9:菜单选择键 的行计算 设菜单中有9个选项,其行值分别为0,1,8 则按 键后行的计算公式如下:i=i=0?8:i-1;同理:的行计算公式为:i=i=8?0:i+1;,36,例10:有程序如下:main()int x,y,z;x=2;x*=3+2;printf(%dn,x);x*=y=z=4;printf(%dn,x);x=y=z;printf(%dn,x);x=(y=z);printf(%dn,x);,104011,注意:1.复合赋值运算视其右边项有一括号2.赋值运算结合方式由右向左,37,六.位运算 后面讲解.(第十五章),38,作业1:证明 C 中 a=0;与!a 的运算结果相同.作业2:编程输出上述所有例子的表达式的运算结果.作业3:从键盘读入a,b,c,d 四个数,输出其中最大的.作业4:从键盘读入a,b,c,d,e五个数,输出其中最小的.作业5:教材P20页三题.注意:在课下将程序写好,上机时调试.严禁在上机时现想现编.上机时按学号找机器.,