1 / 28

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

第三章 数据类型、运算符与表达式. §3.1 C 的数据类型. . . . 3.2.1 常量 (Constant) 与符号常量 常量 : 在程序运行过程中,其值不能被改变的量 符号常量 : 代表常量的标识符(符号)。 符号常量通常用 大写字母 表示。 定义格式 : #define NUMBER 60. §3.2 常量与变量. #define PRICE 30 main() { int num, total; num = 10; total = num * PRICE;

Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. §3.1 C的数据类型   

  3. 3.2.1 常量(Constant)与符号常量 常量:在程序运行过程中,其值不能被改变的量 符号常量:代表常量的标识符(符号)。 符号常量通常用大写字母表示。 定义格式: #define NUMBER 60 §3.2 常量与变量

  4. #define PRICE 30 main() { int num, total; num = 10; total = num * PRICE; printf("total = %d",total); } [例3.1] #define语句定义一个符号常量PRICE,其值等于30。该值在程序运行过程中不能被改变。 符号常量通常用大写字母表示。 编译程序在翻译源程序文件时,符号常量PRICE用其值30替换。 程序运行结果是: total = 300

  5. 变量:其值可以被改变的量。 变量用标识符表示,以字母、数字、下划线组成,且第一个字符必须为字母或下划线。 注意:大写字母和小写字母被认为是两个不同的字符。 建议:变量名的长度不超过8个字符。 C语言规定:所有的变量都应作强制定义,做到“先定义,后使用”。 3.2.2 变量(Variable) 以下哪些变量定义是合法的: 1. sum 2. 7average 3. student_name 4. _above 5. lotus_1_2_3  ×   

  6. 变量名(符号地址) 变量值 存储单元 total 80 一个变量应该有一个名字,在内存中占据一定的存储单元,在该单元中存放变量的值。 int total total=80

  7. 3.3.1 整型常量 C语言中数值常量的表达方式:3种 1、十进制整数 123 十进制: 表示十进制数123 2、八进制整数(0开头): 0123: 八进制数 ,表示十进制数83 3、十六进制整数(0x开头): 0x123:十六进制数, 表示十进制数291 §3.3 整 型 数 据

  8. 一、整型变量的分类 基本型(整型)int2字节 短整型 short 或 short int2字节 长整型 long 或 long int4字节 无符号整型:unsigned 2字节 无符号短整型:unsigned short 2字节 无符号长整型:unsigned long 4字节 实际上C语言的整型变量在计算机内存中所占的 字节数与具体的机器和操作系统有关。 3.3.2 整型变量

  9. main() {int a,b,c,d; unsigned int u; a = 12; b = -24; u = 10; c = a + u; d = b+u; printf("a+u = %d, b+u = %d\n", c, d); } 程序运行显示:a+u = 22, b+u = -14 int变量的数值范围为-32768~32767。 Unsignde int变量的数值范围为0~65535。 二、整型变量的定义

  10. 3.4.1 实型常量 实数(real)又称为浮点数(float), 有两种表达方式: 1、十进制数形式 0.123、 .123、 123.、 0.0(必须有小数点) 2、指数形式 123e3或123E3代表:123103 123E2.5、E3,E 都不合法。 (注意:e或E前面要有数字,后面要是整数。) §3.4 实型数据

  11. 单精度:float 4字节 (32位) 双精度:double 8字节 (64位) 长双精度:long double 16字节(128位) 例1:float x,y; /* 指定x、y为单精度实型变量 */ double z; /* 指定z为双精度实型变量 */ 实型常量不分float和double。 例2:float a; a=123456.711 float型变量只能接受7位 有效数字,最后两位数字不起作用。 double 型变量能接受16位 有效数字。 3.4.2 实型变量

  12. 3.5.1 字符常量 字符常量:用单引号(撇号)括起来的一个字符。 如:‘a’、‘x’、‘?’、‘$’。 注意,‘a’和‘A’是不同的字符常量。 ‘a’ : ASCII码:97 01100001 ‘A’ : ASCII码:65 01100010 §3.5 字符型数据

  13. 实际上,一个字符常量在内存中的存储并不是 把该字符本身放进去,而是存放其对应的 ASCII码 值,即仍以二进制补码的形式存储。一个字符常量 占据一个字节(8位)。 常用的ASCII码值: 0 → 48 + →43 SP →32 A → 65 - →45 LF →10 A → 97 * →42 Del →127 / →47 如果定义的是 signed char,则取值范围是 -128~127; 如果定义的是 unsigned char,则取值范围是 0~255。

  14. Printf(“\101;\x69”); A; i 转义字符(P48) \t跳到下一个tab位置 \r将光标移到本行首 \n将光标移到下行首 \b退格,光标前移一列 main() { printf(“ ab c\t de\rf \tg\n”); printf(“h\ti\b\bj k”); } 输出结果应该是: \ddd 1到3位8进制数所代表的字符 \xhh 1到2位16进制数所代表的字符 f _ _ _ _ _ _ _ gde h _ _ _ _ _ _ j _ k

  15. 字符变量用来存放一个字符常量. 字符变量在内存中占一字节。 变量赋初值: 例1: char c1,c2; /* 定义c1、c2为字符变量 */ c1 = 'a'; c2 = 'b'; 例2: char c1=‘a’; 等效: char c1; c1=‘a’; 3.5.2 字符变量

  16. [例3] main() { char c1,c2; c1 = 97; c2 = 98; printf("%c %c",c1,c2); } c1 c2 a b 相当于:c1 = ‘a’; c2 = ‘b’; 因为:字符以 ASCII码存放,‘a’的ASCII码为97,‘b’的 ASCII码为98。 输出结果是:a b 字符以 ASCII码存储,其存储 方式与整数类似。从而,C 语 言允许字符和整数之间进行运 算。

  17. 例3.7:大小写字母的转换: main( ) { char c1,c2; c1=‘a’; c2=‘b’; c1=c1-32; c2=c2-32; printf (“%c,%c”,c1,c2); } 运行结果为: A B

  18. 字 符常量:单引号括起来的一个字符。 字符串常量:双引号括起来的字符序列. 字符串常量在内存中的存放:每一个字符均以其ASCII码存放,且最后添加一个结束符“\0”. 例:"How do you do.", "CHINA" “CHINA”存放在内存中的长度是6个字节而不是5个字节。 C H I N A \0 最后一个字符 3.5.4 字符串常量

  19. 课堂练习: 3.1 指出下面哪些是合法的变量名: ①123 ②abc ③a+b ④a_b ⑤pad ⑥?12 ⑦Li_Li ⑧*P 3.2 ‘a’在内存中占个字节,“a”在在内存中占 个字节. 3.3 写出下面程序的运行结果: main() { char ch; ch=‘B’; /*B的ASCII码值为66*/ printf(“%c,%d\n”,ch,ch) } ②④⑤⑦ 1 2 B 66

  20. 在定义变量的同时指定其初值。 例、 int a = 3; float f = 3.56; char c = 'a'; int a, b, c = 5; 注意:多个变量指定相同初值的方法: int a = b = c = 3 ; int a = 3, b = 3, c = 3; int a; a=3; §3.6 变量赋初值 ╳ 

  21. 整型、实型(包括单、双精度)、字符型数据可以混合运算。例:整型、实型(包括单、双精度)、字符型数据可以混合运算。例: 10 + 'a' + 1.5 - 8765.1234 * 'b' 混合运算时,先将各数转换成同一种类型,然后进行运算。转换规则如下图。 §3.7 各类数据混合运算 高 double float long unsigned 低 int char,short 所以,该例的结果为实型。

  22. 例: int i; float f; double d; long e; 10 + 'a' + i * f - d/e 高 double float long unsigned 低 int char,short 双精度 整型 单精度 上述转换过程是由系统自动进行的。所以结果为双精度double型。

  23. 3.8.1 算术运算符和算术表达式 一、基本的算术运算符 +加法运算符,如3+5 正值运算符,如+3 -减法运算符,如5-2 负值运算符, 如-3 *乘法运算符, 如3*5 /除法运算符,如5/3 %模运算符(求余运算符),如7%4=3 (求余的运算对象必须是整数。) §3.8 算术运算符和算术表达式

  24. 二、强制类型转换 运算符两侧的数据类型不同时,先自动进行类型转换,再运算。程序员可以强制进行某种转换。 强制类型转换的一般形式是: (类型名)(表达式) (int) a;

  25. 例、 (double)a; /* 将a转换为double类型 */ (int)(x+y); /* 将x+y的值转换为int类型 */ (float)(5 % 3); /* 将5%3的值转换为float类型 */ 注意: (int)(x+y); /* 将x+y的值转换为int类型 */ (int)x+y; /* 将x的值转换为int类型,再与y相加 */ (int) (x); (int) x;/*表达式仅为一个变量时,括号可以省略*/ int (x);/* 变量x的类型不发生变化*/ 说明:强制类型转换时,得到一个所需类型的中间变量,原来变量的类型不发生变化。 例3.8 (P56)   ╳

  26. 自增:使变量的值加1; 自减:使变量的值减1。 ++i; /* 在使用i之前使i加1 */ - -i ; /* 在使用i之前使i减1 */ i++ ; /* 在使用i之后使i加1 */ i- - ; /* 在使用i之后使i减1 */ 自增自减运算符特点: 右结合性且只能用于变量。 如:5++和 (a+b)++都是错的! 三、自增自减运算符

  27. 例: i = 3; j = ++i; /* 先使i加1,再赋给j。*/ 执行后:j=4, i=4 i = 3; j = i++; /* 先把i赋给j,再使i加1。*/ 执行后:j=3,i=4 注意:尽量不要写成j+++i形式,避免歧义的产生。

  28. [例] main() { int a; a = 3; printf("%d", a++); printf("%d", a); } 运行结果是: 3 4

More Related