Presentation is loading. Please wait.

Presentation is loading. Please wait.

第2章 数据类型与表达式 学习目的与要求: 掌握C 语言的基本数据类型及使用方法 掌握C程序中常用的运算符和表达式 了解数据类型的转换.

Similar presentations


Presentation on theme: "第2章 数据类型与表达式 学习目的与要求: 掌握C 语言的基本数据类型及使用方法 掌握C程序中常用的运算符和表达式 了解数据类型的转换."— Presentation transcript:

1 第2章 数据类型与表达式 学习目的与要求: 掌握C 语言的基本数据类型及使用方法 掌握C程序中常用的运算符和表达式 了解数据类型的转换

2 基本内容 常量 变量 运算符和表达式 数据类型转换 本章小结

3 常量 C语言把程序能处理的基本数据对象分成一些集合。属于同一集合的数据对象具有相同的性质,不同性质的数据分别用不同的数据类型来区分。
在高级语言中,数据有两种表现形式:常量和变量。 常量是指在程序运行过程中其值不能发生变化的量。 常量分为数值常量(包括整型常量和实型常量)、字符型常量(包括字符常量和字符串常量)和符号常量。

4 整型常量 C语言中,整型常量可以用十进制、八进制和十六进制三种记数形式表示。
十进制整数:1~9中的一个数开头,后面跟上的若干位0~9的数字表示的数。例如:12,-102,+1234 八进制整数:以数字0开头,后面跟上若干位0~7的数字表示的数。例如:012,+027,-0105 十六进制整数:以0x或0X开头,后面跟上若干位0~9的数字,或字母a~f(或A~F)表示的数。例如:0x12,0xa2,+0Xaf,-0x12bc3

5 整型常量说明 注意不同数制数的表示,例如:12、012和0x12表示不同的值。八进制数012等于十进制数10,而十六进制数0x12等于十进制数18。 C语言将整型数据按数值范围大小分成三种:基本整型(int)、短整型(short)和长整型(long)。在内存中占不同的字节数。 无论采用何种记数制,若有前缀“+”或“-”,表示有符号数,否则称为无符号数。无符号数允许加后缀“U”或“u”。带有后缀“L”或“l”的数表示长整型数。

6 实型常量 实型数据又称为浮点数或实数。在C语言中,有两种表示形式:十进制小数形式和指数形式。
十进制形式的实数由十进制整数部分、小数点和十进制小数部分组成。小数点是必不可少的,整数部分和小数部分可以只取其一,但必须至少保留一项。例如:12.,.5。 指数形式又称科学记数法,一个浮点型常量被表示成某一个称作尾数的基础值乘以10的某一整数次幂。尾数可以是一个十进制整数或小数,后面紧跟着字母e或E和一个称作指数的一个整数。例如:12.34e4,-.25e-3,234E+5。

7 实型常量说明 浮点型数据按其数值范围大小和精度不同分成三种:单精度型(float)、双精度型(double)和长双精度型(long double)。 可以使用后缀字母f(或F)表示一个单精度实型常量,否则认为是双精度实型常量。如果浮点数后缀字母l(或L),表示此数是一个长双精度型实数。 指数形式又称科学记数法,一个浮点型常量被表示成某一个称作尾数的基础值乘以10的某一整数次幂。尾数可以是一个十进制整数或小数,后面紧跟着字母e或E和一个称作指数的一个整数。例如:12.34e4,-.25e-3,234E+5。

8 字符常量 说明 在C语言中,由单引号括起来的单字符,称作字符常量。例如:'a','#','3','/'。
单引号本身只作定界符使用,而不是字符常量的一部分。 英文字母区分大小写,如'A'和'a'表示两个不同的字符常量。 字符常量具有数值,其值对应于ASCII值,如'A'的值是65,'a'的值是97。因此字符常量和整型常量可以混合使用。

9 转义字符 由'\'开头的字符常量,称作转义字符,常用的转义字符如下图所示。 转义字符 含 义 \a \b \f \n \r \t \v \\
含 义 \a \b \f \n \r \t \v \\ \' \" \ddd \xhh 响铃 退格(Backspace键) 走纸换页 换行符,光标移至下一行行首 回车符,光标移至本行行首 水平制表符(Tab键) 垂直制表符 反斜杠符\ 单引号' 双引号" ddd为1到3位八进制数 hh为1到2位十六进制数

10 字符串常量 说明 在C语言中,用双引号括起来的零个、一个或多个字符序列称为字符串常量。例如:"China","a","123"。
双引号是字符串的定界符,不是字符串常量的一部分。 字符串在内存中占的字节数是串的长度+1。因为在内存中除了存储每个字符外,在末尾还存储一个结束符"\0"。 字符串常量可以为空。注意区分空串和空格串的区别,空串的长度为0,而空格串的长度是串中空格的个数。

11 符号常量 在程序设计中,对于某些有特定含义的、经常使用的常量,如数学中经常用到的π( ),可以用标识符来代替,以增加程序的可读性和可维护性。 定义符号常量的一般格式为: #define <符号常量名> <常量> 例如:#define PI

12 符号常量 输入圆的半径,求圆的周长和面积。 #include <stdio.h> #define PI 3.14159
int main() { float r, perimeter, area; printf("输入圆半径:"); scanf("%f",&r); perimeter=2*PI*r; area=PI*r*r; printf("圆周长perimeter=%f\n",perimeter); printf("圆面积area=%f\n",area); return 0; }

13 符号常量说明 符号常量一般用大写字母表示,以便与变量名区别开。 符号常量的定义不是一个语句,在常量定义后不要加分号。
符号常量的定义可以放在程序的任何位置,一般情况下放在程序的开头。 符号常量一旦定义,则在程序中不允许修改其值。 使用符号常量的优点是“一改全改”。

14 基本内容 常量 变量 运算符和表达式 数据类型转换 本章小结

15 变量 所谓变量,就是其值可以发生变化的量。变量在内存中占有一定的存储空间,在该存储空间中存放变量的值。 定义变量的一般形式为:
<数据类型> <变量名表列> 例如:int a=3; //定义整型变量a,并使其值初始化为3

16 变量说明 所有变量在使用前必须先定义。 C语言中的保留字不能用作变量名。 在给变量起名字时,尽可能做到“见名知意”,以增加程序的可读性。
在同一程序中,必须确保同一标识符不得重复定义。 在标准C中,变量的定义一般放在函数体开头的声明部分。

17 变量的类型 每一个变量都具有类型,变量的类型属性包含变量的数据类型和存储类型。
数据类型是C语言中允许使用的数据的种类。各种数据类型决定了变量的存储容量、数据的取值范围及精度。 变量的存储类型用于指定变量的存储区域、作用域,它体现了变量的物理特性。

18 变量的类型

19 整型变量 整型变量的定义形式如下: [<存储类型>] <整型类型> <变量名表列>;
[<存储类型>] <整型类型> <变量名表列>; 例如,int a,b; 整型变量 有符号整型变量 有符号短整型变量 有符号基本整型变量 有符号长整型变量 无符号整型变量 无符号短整型变量 无符号基本整型变量 无符号长整型变量

20 整型变量说明 定义整型变量时,其默认为“有符号类型”,定义无符号整型变量时必须加上“unsigned”。
对于短整型变量和长整型变量,定义时可以省略“int”。 例如: int a; unsigned int b; 所有整型数据在计算机内存中是以补码形式存储的。对于有符号数,最高位是符号位,0表示正数,1表示负数。 例如: short a1, a2, a3,a4; unsigned short b; long c; unsigned long d; 若在VC++中输出短整型的有符号数,应使用“%hd”。 int型在标准C语言中占2个字节,在VC++占4个字节。

21 实型变量 实型变量的定义形式如下: [<存储类型>] <实型类型> <变量名表列>;
[<存储类型>] <实型类型> <变量名表列>; 例如:float a, b, c; //定义a、b、c为单精度型变量 double x, y; //定义x、y为双精度型变量 实型数据有float(单精度型)、double(双精度型)和long double(长双精度型)。

22 实型变量的操作 由于实型变量是用有限的存储单元存储的,能存放的有效数字也是有限的,在运算时可能会产生误差而使数据“失真”。
实型数据的舍入误差示例。 #include <stdio.h> int main() { float f1,f2; double f3= ; f1= f; f2=f1+20; printf("f1=%f\nf2=%f\nf3=%f\n",f1,f2,f3); return 0; }

23 字符型变量 字符型变量的定义形式如下: [<存储类型>] <字符型类型> <变量名表列>;
[<存储类型>] <字符型类型> <变量名表列>; 例如:char ch1='a',ch2; ch2='1';

24 字符型变量应用举例 #include <stdio.h> int main() { char ch1,ch2,ch3;
unsigned char ch4=130; ch1='a'; ch2='A'; ch3=130; printf("ch1=%c, value=%d\n",ch1,ch1); printf("ch2=%c, value=%d\n",ch2,ch2); printf("ch3=%c, value=%d\n",ch3,ch3); printf("ch4=%c, value=%d\n",ch4,ch4); return 0; }

25 字符型变量说明 一个字符变量只能存放一个字符,而不能存放字符串。
字符变量在内存中存放的是字符所对应的ASCII码值,其取值范围是-128~127之间。因此,字符变量可与数值型数据进行运算。 字符变量可用unsigned修饰,此时的取值范围是0~255。

26 变量赋初值 定义变量后,可以在定义变量的同时给变量赋初值(亦称为初始化),也可以在定义变量后用赋值语句给变量赋初值。 例如:
int a=3,b=3,c=3; //定义三个整型变量,并初始化为3 float f1=123.45,total; //定义两个float型变量,f1初始化为123.45 char ch1='a',ch2='b'; //定义两个字符型变量,分别初始化为a和b total=0; //实型变量赋初值为0

27 变量赋初值说明 可以对多个变量同时赋初值 例如: int a=3,b=3,c=3; 可写成: int a,b,c; a=b=c=3; 或:
int b,c; int a=b=c=3; 但是: int a=b=c=3; × 可以仅对部分变量初始化,需要时再对其它变量赋初值。 例如: float f1=123.45,total; 允许使用已经初始化的变量对其它变量进行初始化。 例如: int b,c=3; int a=b=c;

28 基本内容 常量 变量 运算符和表达式 数据类型转换 本章小结

29 C语言运算符简介 C语言有丰富的运算符和表达式,正是这些独具风格的运算符和表达式,使得C语言的应用更加广泛,每种运算符除了具有优先级外,还具有不同的结合性,形成了C语言的特色。 运算符 单目运算符 双目运算符 三目运算符

30 C语言运算符分类 (1)算术运算符 (+ - * / % ++ --)
(1)算术运算符 (+ - * / % ) (2)关系运算符 (> >= < <= == !=) (3)逻辑运算符 (! && ||) (4)位运算符 (& | ^ ~ << >>) (5)赋值运算符 (=) (6)条件运算符 (?:) (7)逗号运算符 (,) (8)指针运算符 (* &) (9)求字节数运算符 (sizeof) (10)强制类型转换运算符 ((类型)) (11)成员运算符 (->) (12)下标运算符 ([]) (13)其它 (如函数调用运算符())

31 算术运算符和算术表达式 算术表达式是由算术运算符将运算量连接起来的式子。在C语言中算术运算符分为基本的算术运算符和自增与自减运算符两类。
基本的算术运算符:+、-、*、/、% 自增、自减运算符:++、--

32 基本的算术运算符说明 在一个表达式中,若要提高其运算的优先级,可使用“()”。 基本的算术运算的结合方向是左结合的。
对于除法运算,若两个运算量都是整数,则进行整数除运算;若有一个运算量为实数,则进行实数除运算。 “%”要求参加运算的两个运算量都必须是整数,其结果也是整数。 算术表达式的书写形式与数学表达式的书写形式不同。

33 自增自减运算符说明 注意前置与后置的自增与自减的区别。 自增和自减运算符都是单目运算符,其结合方向是右结合的。
自增和自减运算符只能用于变量,不能用于常量和表达式。 使用自增和自减运算符时,注意避免二义性。

34 赋值运算符和赋值表达式 由赋值运算符“=”组成的式子称作赋值表达式。表达式的一般形式如下:
<变量名> = <表达式> 例如:x=5 a=b+3*c a=5+(c=6) y=max(a,b) (x=y)=a+b × 赋值号的左边只能是变量

35 赋值运算符和赋值表达式说明 赋值运算符的结合方向是右结合的。 可以连续给若干变量赋相同的值。
C语言中没有赋值语句,在赋值表达式后加上分号,就称为赋值语句。 若赋值号右边的表达式与左边变量的数据类型不一致,系统将会自动进行类型转换,转换成变量的类型。 在赋值运算符“=”之前加上其它运算符,可以构成复合的赋值运算符。C语言中给出了10种复合的赋值运算符。它们是:+=,-=,*=,/=,%=,&=,|=,^=,<<=,>>=。

36 关系运算符和关系表达式 关系运算符主要用于判断条件的表达式 ,决定值和值之间的关系。C语言提供了六种关系运算符 :>、>=、<、<=、==、!=。关系表达式是用关系运算符将两个操作数连接起来的表达式,关系表达式产生的值只有两个:真(值为1)和假(值为0)。 例如:int a=3, b=5,c=1,d,f,g; d=a+4>b; //d的值为1 f=a<b>=c; //f的值为1 g=b-a==c; //g的值为0

37 关系运算符和关系表达式说明 关系运算符“<、>、<=、>=”的优先级相同,“==、!=”的优先级相同。前4种高于后2种。 关系运算符的优先级低于算术运算符,高于赋值运算符。 关系运算符的结合方向是左结合的。 赋值号“=” 不同于等号“ ==” 因为浮点型变量有精度限制,尽量不要使用浮点型变量做相等或不相等的关系比较运算。

38 逻辑运算符和逻辑表达式 有时判断的条件不是一个简单的条件,而是由几个给定简单条件组成的复合条件, 可以通过逻辑运算符实现。C语言中有3种逻辑运算符 :!(逻辑非)、&&(逻辑与)、||(逻辑或)。 逻辑运算符主要用于进一步明确关系表达式之间的关系,逻辑表达式的结果与关系表达式的结果一样,只有两个:真(值为1)和假(值为0)。

39 逻辑运算符和逻辑表达式说明 逻辑运算符的优先级从高到低的顺序是:!→&&→||。
逻辑运算符中的“&&”和“||”的优先级低于关系运算符,由于“!”是单目运算符,其优先级高于算术运算符。 系统给出的逻辑值只有两个值1(真)和0(假),而在逻辑表达式中参与逻辑运算的操作对象可以是任何非0值或0值,可以是字符型、浮点型、枚举型或指针型的数据。

40 两种特殊运算 ① (表达式1) && (表达式2) :若 “表达式1”的值为假(0),则整个表达式的结果为假,且不计算“表达式2”的值,但会检查语法错误。只有“表达式1”的值为真(1),才计算“表达式2”的值。 ② (表达式1) || (表达式2) :若 “表达式1”的值为真(1),则整个表达式的结果为真,且不计算“表达式2”的值,但会检查语法错误。只有“表达式1”的值为假(0),才计算“表达式2”的值。

41 程序举例 阅读程序,分析运行结果。 #include <stdio.h> int main()
{ int a=4,b=8,c=5; int d1,d2,d3,d4; d1=(a<b)||(++a==5)||(c>b--); printf("a=%d,b=%d,c=%d,d1=%d\n",a,b,c,d1); d2=(a>b)&&(++a==5)||(c>b--); printf("a=%d,b=%d,c=%d,d2=%d\n",a,b,c,d2); d3=(a<b)||(++a==5)&&(c>b--); printf("a=%d,b=%d,c=%d,d3=%d\n",a,b,c,d3); d4=(a>b)&&(++a==5)&&(c>b--); printf("a=%d,b=%d,c=%d,d4=%d\n",a,b,c,d4); return 0; }

42 条件运算符和条件表达式 条件运算符是由两个符号(?和:)组成,有3个操作对象,称为三目运算符,它是C语言中唯一的一个三目运算符。
条件表达式的一般形式为: 表达式1?表达式2:表达式3 例如:max=a>b?a:b 功能:两个数的最大值,如果a>b,则max=a;否则max=b。

43 条件运算符和条件表达式说明 条件运算符的优先级高于赋值运算符,低于关系运算符和算术运算符。 条件运算符的结合方向是右结合的。
“表达式2”和“表达式3”不仅可以是数值表达式,还可以是赋值表达式或函数表达式。 “表达式1”、“表达式2”和“表达式3”的类型都可以不同,条件表达式值的类型是“表达式2”和“表达式3”中类型较高的类型。

44 逗号运算符和逗号表达式 在C语言中,“,”称为逗号运算符,通过逗号运算符,可以将两个或多个表达式连接起来,构成逗号表达式。
逗号表达式的一般形式如下: <表达式1>,<表达式2>,……,<表达式n> 运算过程:先求表达式1的值,再求表达式2的值,……,最后求表达式n的值,而整个表达式的值是表达式n的值。 例如:x=(3+4,a=3, a*5),该x的值是15。

45 逗号运算符和逗号表达式说明 逗号运算符的优先级最低
不是C程序中所有有逗号的地方都是逗号表达式,定义变量时用的逗号是间隔符,而不是逗号运算符。 逗号表达式多出现在循环语句中。 例如:求1到100的和,可以写成: for(sum=0,i=1;i<=100;sum+=i,++i);

46 求字节数运算符(sizeof) sizeof是一个单目运算符,它返回常量、变量或数据类型在内存中所占的字节数 求字节数运算符的一般形式如下:
运算过程:先求表达式1的值,再求表达式2的值,……,最后求表达式n的值,而整个表达式的值是表达式n的值。 例如:x=(3+4,a=3, a*5),该x的值是15。

47 基本内容 常量 变量 运算符和表达式 数据类型转换 本章小结

48 数据类型的转换 在C语言中,参加运算的数据必须具有具体的数据类型,如果一个运算符两侧的数据类型不同,则先进行类型转换,使二者具有相同的数据类型,然后再进行运算。 数据类型转换 自动转换 强制类型转换

49 数据类型的自动转换 对于各种数据类型,将占用字节数少的数据向占用字节数多的类型转换。其转换规则如下图所示。

50 数据类型的自动转换规则 char型和int型数据进行运算,系统先将char型的ASCII值与int型数据进行运算,计算结果为int型。
float和double型数据进行运算,系统将所有float型转换成double型,然后进行运算,计算结果是double型。 int型、float型与double型数据进行运算,系统先将int型和float型转换成double型,然后进行运算,计算结果是double型。

51 数据类型的自动转换规则 char型、int型、float型数据进行运算,系统先将char型和int型转换成float型,然后进行运算,计算结果是float型。 只要参加运算的数中有double型数据,系统先将其它类型转换成double型,然后进行运算,计算结果是double型。 当进行赋值运算时,若赋值运算符两侧的类型不一致时,先将右侧表达式转换成系统要求的类型,然后进行运算。将计算结果赋给左侧的变量时,数据类型自动转换成左侧变量的数据类型。

52 数据类型的强制类型转换 C语言提供了使用类型转换运算实现强制类型转换的方法。 强制类型转换的一般形式为:
(<类型标识符>) (<表达式>) 作用是把表达式的运算结果强制转换成类型标识符所表示的类型。例如: (int)a; //把a的值转换成int型 (float)(a+b); //把表达式a+b的值转换成float型

53 强制类型转换说明 类型标识符和表达式都应该用括号括起来。否则只对其后的变量进行强制类型转换。
在强制类型转换时,得到一个所需类型的中间数据,而原来变量的类型未发生变化。 例如:(int)a+b 表示将变量a转换成整型,然后与b相加。 例如: int x; float y=3.14; x=(int)y; //x得到y的整数部分的值3,但y的类型仍然是float型 x=(int)(y+5);

54 基本内容 常量 变量 运算符和表达式 数据类型转换 本章小结

55 本章小结 丰富的数据类型和表达式是C语言广泛应用的一个重要方面。本章主要介绍了基本数据类型中的整型数据、实型数据和字符型数据 。
数据有常量和变量之分,所有变量在使用前必须定义。 通过不同的运算符,将若干个运算量连接起来的式子,称为表达式。 运算符有不同的优先级和结合方向。 C语言的数据类型转换有自动转换和强制转换


Download ppt "第2章 数据类型与表达式 学习目的与要求: 掌握C 语言的基本数据类型及使用方法 掌握C程序中常用的运算符和表达式 了解数据类型的转换."

Similar presentations


Ads by Google