教育程度 代表收入

34
第第第 第第第第第第第第第第 第第第第 第第 第第

Upload: iris-campos

Post on 01-Jan-2016

40 views

Category:

Documents


6 download

DESCRIPTION

教育程度 代表收入. 第三章 数据类型. 数据类型 常量与变量 各类数值型数据间的混合运算 运算符和表达式. 3.1 数据类型 数据类型总表. 整 型. 基本类型. 单精度型 float. 实型. 双精度型 double. 字符类型 char. 数组. 短整型 short. 结构体 struct. C 数 据 类 型. 整型 int. 共用体 union. 构造类型. 长整型 long. 枚举类型 enum. 指针类型. 空类型 void. 定义类型 typedef. 数据类型决定: - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 教育程度         代表收入

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

教育程度 代表收入

Page 2: 教育程度         代表收入

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

第三章 数据类型

数据类型常量与变量各类数值型数据间的混合运算运算符和表达式

Page 3: 教育程度         代表收入

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

• 3.1 数据类型– 数据类型总表

< >

C数据类型

基本类型

构造类型

指针类型空类型 void

定义类型 typedef

字符类型 char

枚举类型 enum

整 型

实型单精度型 float

双精度型 double

数组结构体 struct

共用体 union

短整型 short

长整型 long

整型 int

数据类型决定:1. 数据占内存字节数2. 数据取值范围3. 其上可进行的操作

Page 4: 教育程度         代表收入

第三章 数据类型运算符表达式 基本数据类型

< >

类型符号 关键字

数的表示范围所占位数

整型

字符

实型

有(signed)int 基本整型 16 -32768~32767(signed)short 短整型 16 -32768~32767

(signed)long 长整型 32 -2147483648~2147483647

无16unsigned int 0~65535

32 0~4294967295unsigned long

unsigned short 16 0~65535

有 float 单精度型 32 3.4e-38~3.4e38有 double 双精度型 64 1.7e-308~1.7e308

有 char 字符型 8 -128~127

无 unsigned char 8 0~255

说明 : 数据类型所占字节数随机器硬件不同而不同 , 上表以 IBM PC 机为例 :

Page 5: 教育程度         代表收入

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

01 11 11 11 11 11 11 11int 型: 最大 :32767

10 00 00 00 00 00 00 00 最小 :-32768

11 11 11 11 11 11 11 11unsigned int 型: 最大 :65535

00 00 00 00 00 00 00 00 最小 :0

Page 6: 教育程度         代表收入

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

标识符• 作用:用来标识变量、常量、函数等的字符序列• 组成:

– 只能由字母、数字、下划线组成,且第一个字母必须是字母或下划线

– 区分大小写– 不能使用关键字 ( 是系统中已预定义的单词 )

• 长度:没限制但不宜过长 , 最长不超过 31 个字符• 命名原则:见名知意例 :判断下列标识符号合法性

sum Sum M.D.John day Date 3days student_name #33 lotus_1_2_3 char a>b _above $123< >

M.D.John 3days#33

char $123a>b

3.2 常量与变量

Page 7: 教育程度         代表收入

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

» 一般用大写字母» 是宏定义预处理命令,不是 C 语句

– 直接常量 :» 整型常量 » 实型常量 » 字符常量 » 字符串常量

如 #define PRICE 30

–常量•定义:程序运行时其值不能改变的量(即常数)•分类 :

– 符号常量 : 用标识符代表常量» 定义格式: #define 符号常量 常量

>>

>>

< >

例 符号常量举例 (ch2_1.c)#include<stdio.h>#define PRICE 30main(){ int num,total; num=10; total=num*PRICE; printf("total=%d",total);}

运行结果: total=300

Page 8: 教育程度         代表收入

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

整型常量(整常数)•三种形式:

– 十进制整数:由数字 0~9 和正负号表示 . 如 123,-456,0– 八进制整数:由数字 0 开头 , 后跟数字 0~7 表示 . 如 0123,011– 十六进制整数:由 0x 开头 , 后跟 0~9,a~f,A~F 表示 . 如 0x123,0Xff

<

例 12 与 12L例 30000 为 int 型 65536 为 long int 型

•整型常量的类型– 根据其值所在范围确定其数据类型– 在整常量后加字母 l 或 L ,认为它是 long int 型常量

问题:0123 = ( 3×80 + 2×81 + 1× 82 = 83)10

0x123 = (3×160 + 2×161 + 1× 162 = 291 )10

0Xff = (15×160 + 15×161 = 255 )10

问题:0123 = ( )10

0x123 = ( )10

0Xff = ( )10

Page 9: 教育程度         代表收入

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

实型常量(实数或浮点数)•表示形式:

–十进制数形式:(必须有小数点) 如 0.123, .123, 123.0, 0.0, 123.

–指数形式:( e 或 E 之前必须有数字;指数必须为整数)如 12.3e3 ,123E2, 1.23e4 , e-5 , 1.2E-3.5

•实型常量的类型–默认 double 型–在实型常量后加字母 f 或 F ,认为它是 float 型

<

Page 10: 教育程度         代表收入

第三章 数据类型运算符表达式 字符常量

•定义 : 用单引号括起来的单个普通字符或转义字符 . •字符常量的值:该字符的 ASCII 码值

<

转义字符及其含义:转义字符 含义

\n

\v

\r

\a

\‘

\ddd

\t

\b

\f

\\

\“

\xhh

转义字符 含义

换行垂直制表

回车

响铃单引号

3 位 8 进制数代表的字符

水平制表退格

换页

反斜线

双引号2 位 16 进制数代表的字符

如 ‘ \101’ -----------‘A’ ‘\012’ -----------’\n’ ‘\376’ -----------’’ ‘\x61’ -----------’a’ ‘\60’ -----------’0’ ‘\483’ ----------()

例 :‘A’-------’\101’-------’\x41’--------65

如 ‘ A’——65, ‘ a’——97, ‘0’——48 , ‘\n’——10

如 ‘ a’ ‘A’ ‘?’ ‘\n’ ‘\101’

•转义字符 : 反斜线后面跟一个字符或一个代码值表示例 转义字符举例 (ch3_001.c,ch3_004.c) #include<stdio.h>main(){ printf("\101 \x42 C\n"); printf("I say:\"How are you?\"\n"); printf("\\C Program\\\n"); printf("Turbo \'C\'");}

运行结果: ( 屏幕显示 )A B CI say:”How are you?”\C Program\Turbo ‘C’

例 #include<stdio.h> main() { printf(“Y\b=\n”); }

运行结果:屏幕显示: =打印机输出: ¥

Page 11: 教育程度         代表收入

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

<

•字符常量与字符串常量不同

字符串常量•定义:用双引号 (“”) 括起来的字符序列。•存储:每个字符串尾自动加一个 ‘ \0’ 作为字

符串结束标志h e l l o \0例 字符串“ hello” 在内存中

a a \0例 ‘ a’ “a”

例 空串 “” \0

例 : char ch; ch=“A”;

例 : char ch; ch=‘A’;

Page 12: 教育程度         代表收入

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

– 变量• 概念:其值可以改变的量• 变量名与变量值• 变量定义的一般格式: 数据类型 变量 1[ ,变量 2 ,…,变量 n];

决定分配字节数和数的表示范围

合法标识符例 : int a,b,c; float data;

Page 13: 教育程度         代表收入

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

编译程序根据变量定义为其分配指定字节的内存单元 …

...

地址

int a=1, b=-3,c;

a

b

c

2 字节

2 字节

2 字节

地址

地址

….

..

内存

1

-3

随机数

< >

• 变量初始化 : 定义时赋初值

例 : int a=2,b,c=4; float data=3.67; char ch=‘A’; int x=1,y=1,z=1; int x=y=z=1; (错)

• 变量的使用:先定义,后使用

例 1 int student; stadent=19; //Undefined symbol ‘statent’ in function main

• 变量定义位置:一般放在函数开头

main(){ int a,b=2; float data; a=1; data=(a+b)*1.2; printf(“data=%f\n”,data);}

变量定义可执行语句

main(){ int a,b=2; a=1; float data; data=(a+b)*1.2; printf(“data=%f\n”,data);}

Page 14: 教育程度         代表收入

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

整型变量• 占字节数随机器不同而不同 , 一般占一个机器字• short≤int≤long• 可用 sizeof( 类型标识符)测量

实型变量•float :占 4 字节,提供 7 位有效数字•double :占 8 字节,提供 15~16 位有效数字

字符型变量•字符变量存放字符 ASCII 码•char 与 int 数据间可进行算术运算

例 float a;a=111111.111; /* a=111111.1*/double b;b=111111.111; /* b=111111.111*/

例 a=‘D’; /* a=68; */ x=‘A’+5; /* x=65+5; */ s=‘!’+‘G’ /* s=33+71; */< >

没有字符串变量,用字符数组存放

Page 15: 教育程度         代表收入

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

例 /*ch3_003.c*/ #include<stdio.h> #define PRICE 12.5 main() { int num=3; float total; char ch1,ch2=‘D’;

total=num*PRICE; ch1=ch2-‘A’+‘a’; printf(“total=%f,ch1=%c\n”,total,ch1); }

宏定义

变量定义

输出结果

运行结果:total=37.50000, ch1=d

Page 16: 教育程度         代表收入

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

–隐式转换•什么情况下发生

– 运算转换 ------ 不同类型数据混合运算时– 赋值转换 ------ 把一个值赋给与其类型不同的变量时– 输出转换 ------ 输出时转换成指定的输出格式– 函数调用转换 ------ 实参与形参类型不一致时转换

•运算转换规则 : 不同类型数据运算时先自动转换成同一类型

< >

3.3 各类数值型数据间的混合运算

Page 17: 教育程度         代表收入

第三章 数据类型运算符表达式 double float

long

unsigned

int char,short低

高 说明 :

必定的转换

运算对象类型不同时转换

例 char ch; int i; float f; double d;

ch/i + f*d - (f+i)

int

int

double

double

double

double

double

double

int

int

double

double

double

double

double

double

10+‘a’ +i*f - d/l

例 int i; float f; double d; long l;

< >

Page 18: 教育程度         代表收入

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

–显式转换(强制转换)•一般形式:(类型名)(表达式)例 (int)(x+y) (int)x+y (double)(3/2) (int)3.6 •说明:强制转换得到所需类型的中间变量,原变

量类型不变

例 #include<stdio.h> main() { float x; int i; x=3.6; i=(int)x; printf(“x=%f,i=%d”,x,i); }结果: x=3.600000,i=3

精度损失问题

较高类型向较低类型转换时可能发生

< >

Page 19: 教育程度         代表收入

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

C 语言中有多种表达式以及与表达式相对应的运算符,包括算术运算符与算术表达式、关系运算符与关系表达式、逻辑运算符与逻辑表达式,还有赋值表达式、条件表达式、逗号表达式。

3.4 运算符和表达式

Page 20: 教育程度         代表收入

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

常量、变量、函数是最简单的表达式,表达式加括号、用运算符正确地连接后也是表达式。这种连接的一般规则是:表达式必须写在同一行上,只能使用圆括号且左、右括号个数要相同,多层括号时内层括号中的运算优先

x

11

1

1如 可写成 1/(1+1/

(1+x))

Page 21: 教育程度         代表收入

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

C运算符

算术运算符:( + - * / % ++ -- )关系运算符:( < <= == > >= != )逻辑运算符:((! && || )位运算符 :( << >> ~ | ^ & )赋值运算符:( = 及其扩展)条件运算符:( ?: )逗号运算符:( , )指针运算符:( * & )求字节数 :( sizeof )强制类型转换:(类型)分量运算符:( . -> )下标运算符:( [] )其它 :( ( ) - )

< >

Page 22: 教育程度         代表收入

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

运算符功能与运算量关系

– 要求运算量个数– 要求运算量类型

运算符优先级别结合方向结果的类型

< >

学习运算符应注意:

Page 23: 教育程度         代表收入

第三章 数据类型运算符表达式 算术运算符和表达式

•基本算术运算符: + - * / %– 结合方向:从左向右– 优先级: - ---->* / % -----> + - (2) (3) (4)

说明:– “-” 可为单目运算符时 , 右结合性– 两整数相除,结果为整数– % 要求两侧均为整型数据 ,

例 5/2 = -5/2.0 =

例 5%2 = -5%2 = 1%10 = 5%1 = 5.5%2< >

例 5/2 = 2 -5/2.0 = -2.5

例 5%2 = 1 -5%2 = -1 1%10 = 1 5%1 = 0 5.5%2 ()

当 < 操作数 1> % < 操作数 2> 时,余数 = < 操作数 1> — < 操作数 2> × < 整商 >

Page 24: 教育程度         代表收入

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

自增、自减运算符 ++ --– 作用:使变量值加 1 或减 1– 种类:

» 前置 ++i, --i ( 先执行 i+1 或 i-1 ,再使用 i 值)» 后置 i++,i-- ( 先使用 i 值 , 再执行 i+1 或 i-1 )

例 j=3; k=++j; j=3; k=j++; j=3; printf(“%d”,++j); j=3; printf(“%d”,j++); a=3;b=5;c=(++a)*b; a=3;b=5;c=(a++)*b;

< >

//k=4,j=4//k=3,j=4//4//3//c=20,a=4//c=15,a=4

Page 25: 教育程度         代表收入

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

自增、自减运算符 ++ --– 作用:使变量值加 1 或减 1– 种类:

» 前置 ++i, --i ( 先执行 i+1 或 i-1 ,再使用 i 值)» 后置 i++,i-- ( 先使用 i 值 , 再执行 i+1 或 i-1 )

– 说明:» ++ -- 不能用于常量和表达式 , 如 5++ , (a+b)++» ++ -- 结合方向: 自右向左» 优先级: - ++ -- ------>* / % ----->+ - (2) (3) (4)

例 -i++ -(i++) i=3; printf(“%d”,-i++); //-3

例 j+++k; (j++)+k;例 -i++ i=3; printf(“%d”,-i++);

Page 26: 教育程度         代表收入

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

单独作为一条语句,“ i++;” 和

“ ++i;”都表示“ i=i+1;” ,前缀

格式和后缀格式在使用上没有区别,

“i--;” 和“ --i;” 是同样的。

Page 27: 教育程度         代表收入

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

当自增、自减运算作为某个表达式的一个组成部分时,两种不同格式会产生不同的效果

int x=3,y; y=--x+3;

printf("%d %d\n",x,y);

int x=3,y;y=x--+3;printf("%d %d\n",x,y);

先 执 行 “ x=x-1;” ,此时 x 的当前值为 2 ,再执行“ y=x+3”, 结果是x 为 2、 y为 5 ;

先执行“ y=x+3;” ,此时 x的当前值为 3,再执行“ x=x-1”, 结果是x为 2、 y为 6

Page 28: 教育程度         代表收入

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

赋值运算符和表达式•简单赋值运算符

– 符号: =– 格式: 变量标识符 = 表达式– 作用:将一个数据(常量或表达式)赋给一个变量

•复合赋值运算符– 种类: += -= *= /= %= 《 = 》 = &= ^= |=–含义: exp1 op= exp2 exp1 = exp1 op exp2

a+=3 a=a+3

x*=y+8 x=x*(y+8)

x%=3 x=x%3

< >

例 a=3; d=func(); c=d+2;

Page 29: 教育程度         代表收入

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

– 结合方向:自右向左– 优先级 : 14– 左侧必须是变量,不能是常量或表达式

– 赋值表达式的值与变量值相等 , 且可嵌套

– 赋值转换规则 : 使赋值号右边表达式值自动转换成其左边变量的类型例 3=x-2*y; a+b=3;

例 float f; int i; i=10; f=i;则 f=10.00000

例 int i; i=2.56; // 结果 i=2;

例 : a=b=c=5 a=(b=5) a=5+(c=6) a=(b=4)+(c=6) a=(b=10)/(c=2)

< >

// 表达式值为 5, a,b,c 值为 5// b=5;a=5// 表达式值 11, c=6,a=11// 表达式值 10, a=10,b=4,c=6// 表达式值 5, a=5,b=10,c=2

说明 :

Page 30: 教育程度         代表收入

第三章 数据类型运算符表达式 •说明 :

– 结合方向:自右向左– 优先级 : 14

– 左侧必须是变量,不能是常量或表达式

– 赋值表达式的值与变量值相等 , 且可嵌套

– 赋值转换规则 : 使赋值号右边表达式值自动转换成其左边变量的类型

例 : a=12; a+=a-=a*a

例 : int a=2; a%=4-1; a+=a*=a-=a*=3;

< >

//a=-264 等价于 a=a+(a=a-(a*a))

//a=0 等价于 a=a+(a=a*(a=a-(a=a*3)))

Page 31: 教育程度         代表收入

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

逗号运算符和表达式• 形式:表达式 1, 表达式 2,…… , 表达式 n• 结合性 : 从左向右• 优先级 : 15• 逗号表达式的值:等于表达式 n 的值• 用途:常用于循环 for 语句中例 a=3*5,a*4 a=3*5,a*4,a+5例 x=(a=3,6*3) x=a=3,6*a例 a=1;b=2;c=3; printf(“%d,%d,%d”,a,b,c); printf(“%d,%d,%d”,(a,b,c),b,c);

< >

//a=15, 表达式值 60//a=15, 表达式值 20

// 赋值表达式,表达式值 18 , x=18// 逗号表达式 , 表达式值 18,x=3

//1,2,3//3,2,3

Page 32: 教育程度         代表收入

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

逗号运算符和表达式• 形式:表达式 1, 表达式 2,…… 表达式 n• 结合性 : 从左向右• 优先级 : 15• 逗号表达式的值:等于表达式 n 的值• 用途:常用于循环 for 语句中

例 :/*ch3_6.c*/#include <stdio.h>main(){ int x,y=7; float z=4; x=(y=y+6,y/z); printf("x=%d\n",x);} 运行结果: x=3

< >

Page 33: 教育程度         代表收入

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

在书写表达式时应注意:

表达式中连续出现两个以上的运算符时,最好用空格隔开,如 i++ +j( 表明 i++ 后再与 +j 加 )

如果更多的运算符连写系统将根据“尽量最大”的原则进行拆分。如 i+++j拆分为 i++ +j 。

在写表达式时,如果对某运算符的优先级不清,则要使用括号来改变优先级。

过长的表达式可分成几个短表达式书写

Page 34: 教育程度         代表收入

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

小结 本课主要内容是: C 的算术、运算符,各种运算符的运算优先级,以及不同类型数据运算时的类型转换规则,要求能够正确地书写 C 的表达式。