28
第第第 第第第 第第第第 第第第第第第第 第第第第 第第第第第第第

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

Embed Size (px)

DESCRIPTION

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

Citation preview

第三章 第三章

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

§3.1 C 的数据类型

§3.2 常量与变量

3.2.1 常量 (Constant) 与符号常量

常量 : 在程序运行过程中,其值不能被改变的量

符号常量:代表常量的标识符(符号)。 符号常量通常用大写字母表示。定义格式 :

#define NUMBER 60

[ 例 3.1]

#define PRICE 30 main() { int num, total; num = 10; total = num * PRICE; printf("total = %d", total); }

#define 语句定义一个符号常量 PRICE ,其值等于 30 。该值在程序运行过程中不能被改变。符号常量通常用大写字母表示。编译程序在翻译源程序文件时,符号常量 PRICE 用其值 30 替换。

程序运行结果是:total = 300

以下哪些变量定义是合法的: 1. sum 2. 7average 3. student_name 4. _above5. lotus_1_2_3

3.2.2 变量( Variable )变量 : 其值可以被改变的量。变量用标识符表示 , 以字母、数字、下划线组成,且第一

个字符必须为字母或下划线。注意:大写字母和小写字母被认为是两个不同的字符。建议:变量名的长度不超过 8 个字符。C 语言规定:所有的变量都应作强制定义,做到“先定义

,后使用”。

×

total

80

变量名 ( 符号地址)

变量值

存储单元

一个变量应该有一个名字,在内存中占据一定的存储单元,在该单元中存放变量的值。

int total

total=80

§3.3 整 型 数 据

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

3.3.2 整型变量一、整型变量的分类

基本型(整型) int 2 字节 短整型 short 或 short int 2 字节 长整型 long 或 long int 4 字节 无符号整型: unsigned 2 字节无符号短整型 :unsigned short 2 字节 无符号长整型 :unsigned long 4 字节

实际上 C 语言的整型变量在计算机内存中所占的字节数与具体的机器和操作系统有关。

二、整型变量的定义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 。

§3.4 实型数据3.4.1 实型常量 实数( real )又称为浮点数( float ) ,有两种表达方式:1 、十进制数形式 0.123 、 .123 、 123. 、 0.0 (必须有小数

点)

2 、指数形式 123e3 或 123E3 代表: 123103

123E2.5 、 E3 , E 都不合法。(注意: e 或 E 前面要有数字,后面要是整数。)

3.4.2 实型变量单精度: 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.5 字符型数据3.5.1 字符常量

字符常量:用单引号 ( 撇号 ) 括起来的一个字符。 如:‘ a’ 、‘ x’ 、‘ ?’ 、‘ $’ 。

注意,‘ a’ 和‘ A’ 是不同的字符常量。

‘a’ : ASCII 码 :97 01100001 ‘A’ : ASCII 码 :65 01100010

实际上,一个字符常量在内存中的存储并不是把该字符本身放进去,而是存放其对应的 ASCII 码值,即仍以二进制补码的形式存储。一个字符常量占据一个字节( 8 位)。

常用的 ASCII 码值:

0 → 48 + →43 SP →32A → 65 - →45 LF →10A → 97 * →42 Del →127 / →47

如果定义的是 signed char ,则取值范围是 -128~127;如果定义的是 unsigned char ,则取值范围是 0~255 。

转义字符 (P48)

main(){ printf(“ ab c\t de\rf \tg\n”); printf(“h\ti\b\bj k”);}

输出结果应该是 :

f _ _ _ _ _ _ _ gdeh _ _ _ _ _ _ j _ k

\t 跳到下一个 tab 位置

\r 将光标移到本行首

\n 将光标移到下行首

\b 退格 ,光标前移一列

\ddd 1 到 3 位 8 进制数所代表的字符

\xhh 1 到 2 位 16 进制数所代表的字符

Printf(“\101;\x69”); A; i

3.5.2 字符变量

字符变量用来存放一个字符常量 .字符变量在内存中占一字节。

变量赋初值 :

例 1: char c1,c2; /* 定义 c1 、 c2 为字符变量 */ c1 = 'a'; c2 = 'b';

例 2: char c1=‘a’; 等效 : char c1; c1=‘a’;

[ 例 3]main() { char c1,c2; c1 = 97; c2 = 98; printf("%c %c",c1,c2); }

相当于: c1 = ‘a’; c2 = ‘b’; 因为:字符以ASCII 码存放,‘ a’ 的 ASCII 码为 97 ,‘ b’ 的ASCII 码为 98 。

a b

c1 c2字符以 ASCII 码存储,其存储方式与整数类似。从而, C 语言允许字符和整数之间进行运算。

输出结果是: a b

例 3.7 :大小写字母的转换:

main( ){ char c1,c2; c1=‘a’; c2=‘b’; c1=c1-32; c2=c2-32; printf (“%c,%c”,c1,c2);}

运行结果为:

A B

3.5.4 字符串常量字 符常量:单引号括起来的一个字符。字符串常量:双引号括起来的字符序列 .字符串常量在内存中的存放:每一个字符均以其

ASCII 码存放,且最后添加一个结束符“ \0”.例: "How do you do.", "CHINA" “CHINA” 存放在内存中的长度是 6 个字节而

不是 5 个字节。 C H I N A \0

最后一个字符

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

课堂练习 :

§3.6 变量赋初值

在定义变量的同时指定其初值。

例、 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.7 各类数据混合运算整型、实型(包括单、双精度)、字符型数据可以混合运算。例: 10 + 'a' + 1.5 - 8765.1234 * 'b'混合运算时,先将各数转换成同一种类型,然后进行运算。转换规则如下图。

高 double float

long

unsigned

低 int char,short

所以,该例的结果为实型。

例: int i; float f; double d; long e; 10 + 'a' + i * f - d/e

高 double float

long

unsigned

低 int char,short

整型

单精度

双精度上述转换过程是由系统自动进行的。所以结果为双精度 double 型。

§3.8 算术运算符和算术表达式3.8.1 算术运算符和算术表达式

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

二、强制类型转换

运算符两侧的数据类型不同时,先自动进行类型转换,再运算。程序员可以强制进行某种转换。强制类型转换的一般形式是:

(类型名)(表达式)

(int) a;

例、 ( 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)

三、自增自减运算符 自增:使变量的值加 1; 自减:使变量的值减 1 。

++i ; /* 在使用 i之前使 i加 1 */

- -i ; /* 在使用 i之前使 i减 1 */ i++ ; /* 在使用 i之后使 i加 1 */

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

例: 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 形式,避免歧义的产生。

[ 例 ]

main() { int a; a = 3; printf("%d", a++); printf("%d", a); }

运行结果是:

3 4