1 / 55

第二章 数据类型、运算符和表达式

第二章 数据类型、运算符和表达式. 基本数据类型 常量和变量 运算符、表达式和语句 输入和输出 溢出和误差问题. 基本数据类型. 整型 int、short、long 字符型 char 实型 float、double、(long double) 有符号数和无符号数 signed、unsigned. 基本数据类型列表. 常量. 字符常量 字符串常量 整型常量 实型常量 符号常量. 字符常量. 字符型 (对应 char ) ASCII字符: ‘ A ’ 、 ‘ 2 ’ 、 ‘ $ ’

callie
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. 基本数据类型 • 整型 • int、short、long • 字符型 • char • 实型 • float、double、(long double) • 有符号数和无符号数 • signed、unsigned

  3. 基本数据类型列表

  4. 常量 • 字符常量 • 字符串常量 • 整型常量 • 实型常量 • 符号常量

  5. 字符常量 • 字符型(对应char) • ASCII字符:‘A’、‘2’、‘$’ • 转义符:‘\n’、‘\0’、‘\\’、‘\’’、‘\”’ • 指明ASCII值:‘\101’(8进制)、‘\x41’(16进制)

  6. 使用双引号:“hello!” 连续的字符序列 ‘h’, ‘e’, ‘l’, ‘l’, ‘o’, ‘!’, ‘\0’ 字符尾部追加‘\0’字符 字符串的实质是指针 字符串在内存的首地址 区分“A”和‘A’ 字符串常量

  7. 整型常量 • 一般整型(对应int) • 十进制:0、123、-456 • 八进制(以0开头):05、-017、0327 • 十六进制(以0x开头):0x132、-0X17f • 长整型(对应long、在数后加l或L) • 98765L、0x12345678L、50000L

  8. 实型常量 • 一般形式 • 45.768、+0.123、-123.0 • .123、123.、0.0、.0、0. • 指数形式 • 1e-5、-3.14e+07、1E10 • 要求: • 不支持8或16进制的实型数 • 一般形式必须有小数点,否则以整型处理

  9. C语言的预编译处理 #define #include、#if、#… #define NUM 1000 在程序的最前端定义 在main()之前 特殊使用 举例 #define NUM 1000 main() { int x; x = 2*NUM; printf(“%d”,x); } 符号常量

  10. 常量测试 • 以下哪些为合法常量 7356 -0496 0x3A1 0456 ‘\x65’‘\118’ 2E E5 0x-230 567890 ‘115’ 6L 8b 2.1e3.5 • 表达式求解 • ‘A’+2 ‘\x61’‘B’+0x20 • ‘9’-‘0’ 5+‘0’ • ‘b’-’a’+10 12-10+‘A’

  11. 变量及其定义 • C语言标识符 • 以字母或下划线(‘_’)开头 • 后跟字母、下划线、数字 • 最大长度31个字符(TurboC标准) • 大小写敏感 • 所有标识符均应先定义再使用 • 变量名为一合法的C标识符 • 变量的定义及初始化 • int a; float x1 = 2.5,y,z=-3.1; • 变量定义必须在执行语句前

  12. 无符号整型 • 无符号类型 • unsigned int • Turbo C中等同于unsigned short • unsigned short • 0 - 65535 (0 ~ 216-1) • unsigned long • 0 - 4294967295 (0 ~ 232-1) • unsigned char • 0 - 255 (0 ~ 28-1)

  13. 变量测试 • 分析以下变量定义 • char ch1 = ‘\n’, ch2=65, ch3; • int x,y; • unsigned char cn=200; • signed short i1, i2=-1, i3; • unsigned x=-1; • float ft1=1e3; • double db;

  14. 运算符 算术运算符 位运算符 赋值运算符 关系运算符 逻辑运算符 条件运算符 逗号运算符 sizeof运算符 表达式 常量、变量之间运算的结果是表达式 表达式可继续参与运算 语句:任何表达式加分号 “;” 构成语句 例:3+5; 运算符、表达式和语句

  15. 运算符--算术运算符 • 加(+)、减(-)、乘(*)、除(/)、取余(%) 、取负(-) • 整除(/):15/4为3(取整,非四舍五入) • 自增(++)、自减(--) • a++;即a=a+1; (为了对应汇编指令) • 前置运算,设a当前值为3 • b = (++a)*5;(先算a=a+1,再算b=a*5,a=4,b=20) • 后置运算,设a当前值为3 • b = (a++)*5;(先算b=a*5,再算a=a+1,a=4,b=15)

  16. 运算符--位运算符 • 与(&)、或(|)、非/取反(~)、异或(^) • 3 & 5,3 | 5,3 ^ 5,~3,3 ^ 0xFFFF • 100 & 200,… • 左移(<<)、右移(>>) • 3 << 1、100 << 2 • 3 >> 1、100 >> 2 • 0x1234 >> 8、0x12345678L << 16 • 求: y=((x & 0xFF)<<8) | ((x & 0xFF00)>>8); • 设 x = 0x1234,则 y = ?

  17. 运算符--赋值运算符 • 基本赋值运算符(=) • a = 3、x = x + 2 • 赋值运算做为表达式 • printf(“%d”,(x=x+2)+4); /*设x原为3*/ • a=b=c=1; /*右结合,即a=(b=(c=1))*/ • 复合的赋值运算符 • x=x+2 写成 x+=2 (为了对应汇编指令) • x *= (a=2) + (b+=3) + c++;

  18. 运算符练习 • 写表达式 • 整数n的个位数字符 • 设变量 a 原值为 12,n原值为5,求表达式 • a *= 2+3 a += a+a • a%=(n%=2) a -= n += 2

  19. 关系运算符与关系表达式 • 关系运算符 • >(大于)、>=(大于等于)、==(等于) • <(小于)、<=(小于等于)、!=(不等于) • 关系表达式 • 关系运算的结果:真(1)、假(0) • (5>3)值为1、(5<=3)的值为0

  20. 关系运算符练习 • 设定义 int a=4,b=8;求表达式的值 • (1).a>b、 a<b、 a!=b、 a=b • (2). a==(b>-5)、 (a==b)>-5、 a=(b>-5) • (3). a<b<3、 b>a>3、 ‘a’>b、 ‘a’+a<‘b’-b

  21. 逻辑运算符 • 逻辑运算符 • &&(逻辑与)、||(逻辑或)、 !(逻辑非) • a&&b:当a和b逻辑值均为真时,结果为真 • a||b:当a和b至少一个逻辑值为真时,结果为真 • !a:当a逻辑值为真时,结果为假 • 逻辑值:0为假、非0为真(用于运算时) • 逻辑结果:假为0、真为1(运算结果时)

  22. 逻辑表达式练习 • 计算逻辑表达式 • (4<8)&&(8<3) • ((x=2)>5)||((y=4)<5) • !(6>7) • 3&&4 • (x=0)||(y=20) • !‘a’

  23. 逻辑运算与位运算

  24. 逻辑运算的抢先判断 • 先判原则 • a && b:若a为假,结果必为假(b不计算) • a || b:若a为真,结果必为真(b不计算) • 举例(设定义 int x=6,y=8;) • (x=0)&&(y=20):结果x=0,y=8 • (y=20)&&(x=0):结果x=0,y=20 • (y=20)||(x=0):结果x=6,y=20 • (x=0)||(y=20):结果x=0,y=20

  25. 逻辑运算测试 • 求表达式(设int a=3, b=5, c=0;) • (a+=2)&&(b-=a)&&(--c) • !(a=0)&&(c++)&&(b--) • !(a>2)||(b-=5)||(c==0) • 写表达式 • a比b大1 • a为偶数或者b为奇数 • a、b、c任意两数之和大于第三数

  26. 条件运算符 • 形式:表达式1 ? 表达式2 : 表达式3 • 语义:(条件)?(真表达式):(假表达式) • 例:max = (a>b)?a:b; • 等价于 • 若 条件 (a>b) 成立,则 赋值 max=a • 否则 赋值 max=b

  27. 逗号运算符 • 形式:表达式1,表达式2 • 语义:表达式2的结果为整个表达式的结果 • 例 • x=7,y=8; 为一条语句,等价于x=7;y=8; • z=(x=7,y=8); 变量z的值为8

  28. sizeof运算符 • 特殊类运算符 • 形式:sizeof(变量) 或 sizeof(变量类型) • 语义:计算该变量所占用的内存字节数 • 例: (以TurboC为例) • 定义int n; long x; • sizeof(n)或sizeof(int) 结果=2 • sizeof(x)或sizeof(long) 结果=4 • 练习:sizeof(unsigned char)

  29. 运算符优先级 • 运算符的优先级和方向(见附录III) • 括号 • 单目运算符(++,--,取负,取反,取址,取值) • 乘法、除法、取余 • 加减 • 关系运算 • 逻辑运算 • 赋值运算 • 养成好习惯:多使用括号

  30. 数据类型的转换 • 自动转换:两个操作数先转换到较高级别数 • char  int  long •   • float  double • 强制类型转换:(类型名)操作数 • 类型转换举例 • 5/2、5/2.、(float)5/2、(float)(5/2) • 1.2+5/2、1.2*5/2

  31. 其它变量类型 • 变量与内存关系 • 任何定义的变量都存贮在内存中 • 在内存中的任何变量都分配唯一的地址 • 变量的地址是由系统自动分配,不能预知 • 数组变量 • 指针变量

  32. 内存(64K*8位)和地址(16位) 1字节=8位 地址:0000H 64K 字 节 xxxxxxxx 地址:2000H 41H = 01000001 地址:2001H 42H = 01000010 地址:FFFFH xxxxxxxx

  33. 一维数组的定义 • 形式(定义) • 数据类型 数组名[元素个数] • 例: int a[5]; 定义5个整型a[0] ~ a[4] • 例: float s[9]; 定义9个浮点数 s[0] ~ s[8] • 形式(引用) • 数组名[下标] • 例: a[0] 表示最开始一个元素(第0个) • 例: s[8]表示最后一个元素(第9个)

  34. 数组使用举例 • int a[5], sum; • a[0] = 10; printf( “a[0]=%d\n”, a[0] ); • a[1] = 20; printf( “a[1]=%d\n”, a[1] ); • a[2] = 30; printf( “a[2]=%d\n”, a[2] ); • a[3] = 40; printf( “a[3]=%d\n”, a[3] ); • a[4] = 50; printf( “a[4]=%d\n”, a[4] ); • sum = a[0] + a[1] + a[2] + a[3] + a[4]; • printf( “sum=%d\n”, sum );

  35. 数组的初始化 • int a[10] = {2,4,6,8,10,12,14,16,18,20}; • 则初始a[0]=2,a[1]=4,…,a[9]=20 • int a[10] = {1,2}; • 则初始 a[0]=1,a[1]=2,a[2]=0,a[9]=0 • int a[] = { 1,2,3 }; • 则定义a[3],且初始 a[0]=1,a[1]=2,a[2]=3

  36. 变量与内存 a[] • int a[5] = {100,200,300, 400,500}; • int n = 10; n 

  37. 指针数据类型 • 计算机数据(变量)贮存在内存中 • 每个数据都有占有内存1或多个地址(连续) • 如:long整型占4个地址 • 地址本身也是一个数值 • DOS方式:内存分段,每段最大64K,地址用16位(2个字节)表示 • 指针即数据的首地址

  38. 指针类型举例 1字节=8位 设有定义 int x; x占2个字节 64K 字 节 地址:2000H x 的低字节(41H) 地址:2001H x 的高字节(42H) x 的值为0x4241 x 的指针为0x2000

  39. 基本数据指针: int *、short *、long * char * float *、double * 指针使用运算符 取址:&变量  指针 取值:*指针  变量 指针的输出 %x 或 %X printf(“%x”,p); 指针使用举例 main() { int x, y; int *p; x = 100; p = &x; y = *p; printf(“%d\n”, y); printf(“%x\n”, p); } 指针变量定义

  40. 数据输入与输出 • 格式输出函数printf • 格式输入函数 scanf • 格式控制符

  41. 格式化输出函数 • 函数格式:printf(“输出格式”,输出表列) • 格式输出例子: • printf(“Hello,world!\n”); • printf(“Sum=%d”, sum); • printf(“a=%d,b=%d\n”, a, b); • printf(“a=%d,pointer of a=%x”, a, &a); • 格式说明:%d、%x

  42. 整型数基本格式符 带符号10进制:%d 无符号10进制:%u 8进制输出:%o 16进制输出:%x 长度控制 例:%5d,%3u, %6o,%4x 长整数(基格式符前加l) %ld,%lo,%lx 左对齐(%后加-) %-5d 前导0(数字前加0) %05d 例:原 a=-2, b=123 %d%d %05d,%-5d (对a=-2)%u、%o、%x 格式字符(1)--整型

  43. 实型基本格式符 %f:十进制小数(6位) %e:指数形式 %g:优化格式 长度控制 %5.2f:总长5,小数2 双精度实型 %lf 例1:x = 345.678 %f:345.678009 %e:3.45678e+02 %g :345.678 %4.2f :345.68 例2:x = 0.0000345 %f :0.000035 %e :3.45000e-05 %g :3.45e-05 %4.2f :0.00 格式字符(2)--实型

  44. 格式字符(3)--字符型 • 单个字符 %c • printf( “the char is %c!”, ‘a’ ); • 输出:the char is a! • 字符与整型 • printf(“%d,%d”, ‘A’, 98 ); • 输出:65,98 • printf(“%c,%c”, ‘A’, 98 ); • 输出:A,b

  45. 格式字符(4)--字符串、其它 • 字符串 %s • printf( “Hello,%s”, “wang” ); • 输出:Hello,wang • 特殊符号 %% • printf(“2%% good!”); • 输出:2% good!

  46. 格式化输入函数 • 函数格式:scanf(“输入格式”,地址表列) • 格式输入例子: • scanf(“%d”, &x); • 输入:123 • scanf(“a=%d,b=%d”, &a, &b); • 输入:a=123,b=45 (中间不能任意插入空格) • scanf(“%d%d”, &a, &b); • 输入:123 45 (中间1或多个空格、TAB、回车) • 格式符:%d、%x、%ld、%f、%c、%s 建议写法

  47. 格式化输入说明 • 格式符 %s • 以第一个空白符(空格、TAB、换行)结束 • 格式符 %*(在%后加*号) • 表示跳过一个输入项 • scanf( “%d %*d %d”, &a, &b ); • 输入行:123 456 78 • 结果:a=123, b=78

  48. 格式输出练习 • 请写出下列程序片段的运行结果 • int b=7; long n=1234567; • float x=67.8564, y=-789.124; • char c=‘A’; • printf( “n=ld,b=%d,c=%d\n”,n,b,c ); • printf( “%f%c%f\n”, x,c,y );

  49. 格式输入练习 • 为使a=3, b=7, x=8.5, y=71.82应如何输入? • int a,b; float x,y; • scanf( “a=%d b=%d”, &a, &b ); • scanf( “%f %f”, &x, &y );

  50. 输入出一般要求 • 格式符: (关键4个:%d、%s、%c、%f) • %d、%x、%ld、%5d • %f、%5.2f • %c、%s • %%、%* • 界面友好: • printf( “Please Input Number: ” ); • scanf( “%d”, &n );

More Related