第三章数据类型、运算符与表达式

Download Report

Transcript 第三章数据类型、运算符与表达式

第三章 数据类型、运算符与表达式
•
•
•
•
•
•
§3.1 C数据类型
一个程序应包括两个方面的内容
1、对处理数据的描述(数据结构)
2、对处理数据的操作(算法描述)
Wirth提出的公式:
程序=数据结构+算法
• C提供的数据结构是以数据类型形式出现的
• 由于算法千变万化,程序要处理的数据
(对象)也是多种多样,在程序设计语
言中就将数据处分为不同的类型,如数
值型(int、float等)、非数值型(char
等)不同类型数据在内存的存贮方式上、
运算方式上都是不同的。所以在对处理
方法描述之前,要对处理过程中涉及到
的数据进行类型说明。
• 对各种类型的数据,有两种存在形式即:
常量和变量。
• C程序要处理的各种数据
• 一、有类型之分,所以要进
行类型说明,其作用有二,
一是知其存贮方法,二是知
其运算方式。
• 二、无论何种类型数据,在
程序中都有两种出现形式,
即常量和变量
•
•
•
•
•
•
•
§3.2 常量与变量
3.2.1常量和符号常量
常量定义
常量类型:-3,4.6,‘a’
常量的形式:以常量形式直接出现;
符号常量:#define PRICE 35
程序中出现35处可以常量名(符号)
PRICE形式出现。符号常量名用大写,
变量名用小写。
• 3.2.2 变量
• 其值可以改变的量称为变量。变量要有
一个名字。变量名和变量值的区别。
• 用来标记变量名、符号常量名、函数名、
数组名、文件名和有效字符序列称为标
识符。
• C语言规定标识符只能由字母、数字和下
划线三种字符组成。且第一个字符必须
是字母或下划线,长度的规定
• 合法名、大小写被认为是不同的字符。
• 在C语言中,要求对所有用到的变量作强
制定义,也就是“先定义、后使用”
• 其意义有三:
• 1、保证变量名使用正确
• 2、根据类型分配存贮单元
• 3、根据类型判断其运算是否合法
•
•
•
•
•
•
•
•
•
§3.3 整型数据
3.3.1 整形常量
整形常量即整形数。有三种形式:
1、十进制形式 如123
2、八进制形式 以0开头,如0123
3、十六进制形式 以0x开头,如0x123
3.3.2 整型变量
一、整型变量的分类
1、基本型,以int表示(integer)
• 2、短整型,以short int表示,或short表
示
• 3、长整型,以long int表示,或long表示
• 4、无符号型,又分无符号整形、短整型
和长整型,分别以unsigned int、
unsigned short和unsigned long表示
• C规定各类数据所占字节数。
• 二、整型变量的定义
•
int a,b;
•
unsigned short c,d;
•
long e,f;
•
•
•
•
三、整型常量的类型
整型常量与整型变量之间的匹配关系
四、整型量的运算
进行各种类型的算术运算
•
•
•
•
§3.4 实型数据
3.4.1实形常量
实数在C中又称浮点数。实数有两种形式:
1、十进制数形式:它由数字和小数点组
成(必须有小数点)。
• 如12.9,34.0或34.
• 2、指数形式:123e3或123E3。注意的
是E(或e)之前必须有数字且E后面指
数必须是整数。
• 3.4.2 实形变量
• 实型变量分类与类型说明
• 分为两类:单精度(float)和双精度
(double)
• 类型说明语句:
• float x,y;
• double z;
• 在一般的系统中,一个float型数据在内存中
占32位,一个double型数据在内存中占64位.
• 数据的范围和精度、实型常量不分float和
double
• 实型量的运算
•
•
•
•
§3.5 字符型数据
3.5.1字符常量
C的字符常量有两种形式:
1、C的字符常量是用单引号(即撇号)括
起来的一个字符。如‘A’,‘a’等
• 2、特殊形式的字符常量,就是以‘\’开
头的字符序列。如‘\n’代表一个“换行”
符。因为有些非显示字符难以用一般形
式的字符表示,故规定用这种特殊形式
表示。
• 以‘\’开头的特殊字符见表,“转义字符”
• 自己看例2.3
• 3.5.2 字符变量
• 字符变量用来存放字符常量。只能放一
个字符。字符变量的定义:
• char c1,c2;
• 一个字符变量占用一个字节的内存空间。
• 3.5.3 字符数据在内存中的存储形式及其
使用方法
• 字符是以ASCII形式放在内存单元中的。
由于它在存储形式上与整数存贮形式相
类似。C就使char数据与int数据可以通用。
• [例2.4]
•
main()
•
{char c1,c2; c1=97;c2=98;
•
printf(“%c %c”, c1,c2);}
• 其中:“%c”是输出字符的格式符
• [例2.5]
•
main()
•
{ int i;
•
char c;
•
i=‘a’;
•
c=97;
•
printf(“%c %d”, c,c);
•
}
• 程序执行的输出结果
• 3.5.4 字符串常量
• 字符串常量是一对双括号括起来的字符
序列。如:“How do you do.”,
“CHINA”等。
• 可以输出一个字符串,如:
•
printf(“How do you do.”);
• 要注意的是:“A”与‘A’不同。
• 在C中没有专门的字符串变量,需要用字
符数组。
• §3.6 变量赋初值
• 程序中需要对一些变量预先设置初值。C
中可在定义变量时同时使变量初值化。
• 如:
• int a=4;
• float h=3.567;
• char c=‘a’;
• 它等同于:
• int a;
• a=4;
• §3.7 各类数值型数据间的混合运算
• 数值型是整型与实型的总称。
• 各类int、float和double数据可以混合运
算。由于char与int型通用,因此,int、
float、double与char间可以混合运算。
• 例如:
• 10+‘a’+1.5-8.68* ‘b’ 是合法的。
• 但:在运算前,计算机要将不同类型的
数据先转换成同一类型,然后进行运算。
• 转换规则是:
• 类型数据总结
•
•
•
•
•
一、常量和变量
常量的形式、标识符
二、变量
1、定义(说明)
2、内存中的存贮形式、导致数据范围
(精度)
• 3、int与char异同点
• 三、不同类型的数据运算方式不同
• §3.8 算术运算符和算术表达式
• 3.8.1 C运算符简介
• C运算符范围很宽,除了控制语句和输入
输出以外的几乎所有操作都作为运算符
处理。分为下面几类:
• 1、算术运算符
• 2、关系运算符 < > == >=
<= !=
• 3、逻辑运算符 ! && ||
• 等等
• 3.8.2 算术运算符和算术表达式
• 一、基本的算术运算符
• + - * / %(模运算符,或称求余运
算符,要求%两侧都是整型数据)
• 7%3=1
• 注意:整型数的除法
• 如:2/4=0、5/3=1、-5/3=?
• 二、算术表达式和运算符的优先级与结
合性
• 算术表达式概念:运算对象(操作数)
经算术运算符和括号连接起来的式子
• C规定运算符的优先级和结合性。
• 在表达式求值时先按运算符的优先级别
进行。如:a-b*c
• 如果在一个运算对象两侧的运算符的优
先级别相同,如: a-b+c C规定了各种
运算符结合方向(结合性)。算术运算
符的结合方向为“自左至右”,即b先与
-号结合。这种结合性称为“左结合性”。
• 如果运算符两侧操作数的类型不同,先
自动进行类型转换,然后进行运算。
• 注:运算符的意义和表达式值的确定
• 三、强制类型转换
• 将一个表达式转换成所需类型,其形式
为: (类型名)(表达式)
• 例如:
• main()
•
{ float x; int i;
•
x=3.6; i=(int)x
•
printf(“x=%f,i=%d”,x,i); }
• 从上可知:有两种类型转换,一种是运
算时不必用户指定,而由系统按规则自
动进行类型转换;另一种是强制类型转
换。
• 四、自增、自减运算符
• 该运算符的作用是使变量值增1或减1,
如:
• ++i,--i
是一种形
• i++,i-式的表达式
• 粗看, ++i和 i++都相当于i=i+1,但有不
同之处,表达式的值什么,i的值是多少
• 如i=2,则++i表达式的值为3,i值也为3;
•
而i++表达式的值为2,i值却为3
• 注意:
• (1)自增自减运算符的运算对象只能是
变量,不能是常量或表达式。如5++或
• ++(a+b)都是不合法的。
• (2)++和--的结合方向是“自右至左”。
如:-i++,相当于-(i++)
• 五、有关表达式使用中的问题说明
• 1、表达式中包含自加或自减时的理解
•
•
•
•
•
•
•
•
•
如:若i=3
(i++)+ (i++)+ (i++)=? i=?
(++i)+ (++i)+ (++i)=?
i=?
2、表达式的理解问题
问题一:i+++j 编译系统将其理解为
(i++)+j还是i+(++j)呢?
问题二:
main()
{ int i=3;
printf("%d %d\n",i,i++);}
• 3.9 赋值运算符与赋值表达式
• 一、赋值符号“=”的作用,将一个数据
赋给一个变量。如:c=‘k’;
• 二、对赋值运算符两侧的类型不一致时,
类型转移问题。
• 例:
• main()
• {unsigned a;int b=-1;
• a=b;printf(“%u”,a);}
• 注:这部分内容理解有一个前提。
• 三、复合的赋值运算符
• 在赋值号之前加上其它运算符,构成复合
运算符。
• 如:a+=3 理解为 a=a+3
•
x*=y+8 理解为 x=x*(y+8) ?
• 四、赋值表达式
• 赋值运算符将一个变量和一个表达式连接
起来的式子,一般形式为
•
<变量><赋值运算符><表达式>
• 注意:
• (1)赋值运算符有两种
• (2)赋值表达式作用有二。一是使变量得
值;二是使“赋值表达式”得值。
• 将赋值表达式做为表达式的一种
• main()
• { int a,b;
•
a=1;
b=a+=3;
•
a-=a+=a*a;
•
printf("%d %d\n",a,b);}
•
•
•
•
•
•
3.10 逗号运算符与逗号表达式
逗号表达式的一般形式
表达式1,表达式2
如:3+5,6+8
a=3*5,a*4
逗号表达式求值过程是:先求表达式1的
值,再求表达式2的值。整个逗号表达式
的值是表达式2的值。
• 式1:x=(a=3,6*a)
• 式2: x=a=3,6*a
• 重点内容
• 1、数据类型,为什么要进行类型说明?
• 2、变量及变量名、标识符
• 3、表达式概念(算术、赋值和逗号)、
表达式求值、运算符优先级、运算符的
结合性
• 习题
• 3.2, 3.10 ,3.12