chap06回顾数据类型和表达式_第1页
chap06回顾数据类型和表达式_第2页
chap06回顾数据类型和表达式_第3页
chap06回顾数据类型和表达式_第4页
chap06回顾数据类型和表达式_第5页
已阅读5页,还剩62页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、chap06回顾数据类型和表达式本章要点C语言的根本数据类型有哪些?各种根本数据类型的常量有哪些表现形式?C语言有哪些表达式?各种表达式的求解规那么是什么?数据类型和表达式数据类型根本数据类型整型int实型浮点型float double字符型char构造数据类型数组、构造、结合、枚举指针类型空类型运算:对数据的操作运算符数据 表达式6.1 数据的存储和根本数据类型6.1.1 数据的存储整型、实型、字符型数据的存储6.1.2 根本数据类型整型与整型常量整数字符型与字符型常量实型与实型常量实数6.1.1 数据的存储整型数据设整数在内存中用2个字节存储1 000 0001 1000 00010 00

2、0 0001 1000 0001符号位1:负数0:正数数值的表示方法原码 反码 补码正数的原码、反码和补码一样1 的补码 0 000 0000 0000 000132767 的补码 0 111 1111 1111 1111(215-1,2个字节的存储单元能表示的最大正数)负数的原码、反码和补码不同 -1原码 1 000 0000 0000 0001 反码 1 111 1111 1111 1110 原码取反符号位保持不变补码 1 111 1111 1111 1111 反码1原码 反码 补码32767补码 0 111 1111 1111 1111-32767原码 1 111 1111 1111 1

3、111反码 1 000 0000 0000 0000 原码取反符号位保持不变补码 1 000 0000 0000 0001 反码1-32768 = -32767-1补码 1 000 0000 0000 0000(2个字节的存储单元能表示的最小负数) -32768 -1 0 1 32767 32767 0111 1111 1111 1111 1 0000 0000 0000 0001 0 0000 0000 0000 0000 -1 1111 1111 1111 1111 -2 1111 1111 1111 1110 -32767 1000 0000 0000 0001 -32768 1000

4、0000 0000 000032767 + 1 = 32768 ?1000 0000 0000 000 = -32768-32768 - 1 = -32769 ?0111 1111 1111 1111 = 32767实型和字符型数据的存储实型数据的存储-e+02符号位 阶码 尾数字符型数据的存储一个字节存储ASCII码。例如字符型常量 A 的ASCII码为65,它在内存中以以下形式存放:0 1 0 0 0 0 0 16.1.2 根本数据类型整型有符号整型 无符号整型 数据长度int unsigned int 16或32位short int unsigned short int 16位long

5、int unsigned long int 32位字符型char 8位实型浮点型单精度浮点型 float 32位双精度浮点型 double 64位根本数据类型整型扩展的整数类型:short long unsigned int有符号整型 无符号整型 数据长度int unsigned int 16或32位short int unsigned short int 16位long int unsigned long int 32位有符号 short 1 000 0000 0000 0000 -32768 -2150 111 1111 1111 1111 32767 215-1无符号 unsigned

6、short0000 0000 0000 0000 01111 1111 1111 1111 65535 216-1整数类型的取值范围int 32位 -2147483648 2147483647 -231 231-1short int 16位 -32768 32767 -215 215-1long int 32位 -2147483648 2147483647 -231 231-1unsigned int 32位 0 4294967295 0 232-1unsigned short int 16位 0 65535 0 216-1unsigned long int 32位 0 4294967295

7、0 232-1整型常量整数整数的表示三种表现形式:十进制整数:正、负号,09,首位不是0例: 10,123八进制整数:正、负号,07,首位是0例: 010,0123十六进制整数:正、负号,09,af,AF,前缀是0 x,0X例:0 x10,0X123整数的表示123 = 01111011 (B) 二进制 =173 (O) 八进制 =7B (X) 十六进制123 0173 0 x7b16 020 0 x1010 012 0XA10 010 0 x10不能超出整型数据的取值范围比长整型数还要大的数只能用实数来表示整数的类型判断整数的类型整数后的字母后缀123L long123U unsigned1

8、23LU unsigned long整数的值根本数据类型字符型字符具有数值特征A 65 0100 0001 整型变量和字符变量的定义和赋值可以互换【 ASCII码范围】char c;c = A;或c = 65;int i;i = 65;或i = A;字符型常量字符常量a、A、9、+、 $ 注意:单引号 ASCII字符集列出所有可用的字符256个每个字符:惟一的次序值 ASCII 码0 9 升序排列A Za z字符的数值特征字符ASCII 码对字符进展运算 对字符的ASCII 码进展运算例如:A 的 ASCII 码 65那么:A+1=66,对应字符 B区分数字字符和数字 1 1转义字符反斜杠后跟

9、一个字符或数字字符常量,代表一个字符 n 101 x41 A所有字符都可以用转义字符表示根本数据类型实型实型浮点型数据单精度浮点型 float双精度浮点型 double 存储 数据精度 取值范围 (有效数字)float 4字节 七/八位 (10-38 1038)double 8字节 十六位 (10308 10308 )数据精度和取值范围数据精度 与 取值范围是两个不同的概念:float x = 1234567.89;虽在取值范围内,但无法准确表达。 float y = 1.2e55;y 的精度要求不高,但超出取值范围。并不是所有的实数都能在计算机中准确表示 实型常量的类型都是double实型常

10、量实数、浮点数实数的表示浮点表示法0.123 123.4 12. .12科学计数法6.026E-27 1.2e+30 1E-5实数的类型double6.2.1 整型数据的输入和输出6.2.2 实型数据的输入和输出6.2.3 字符型数据的输入和输出 6.2 数据的输入和输出 整型数据的输入输出printf (格式控制, 输出参数1, . , 输出参数n);scanf (格式控制, 输入参数1, . , 输入参数n);格式控制说明 % 十进制 八进制 十六进制int %d %o %xlong %ld %lo %lxunsigned %u %o %xunsigned long %lu %lo %lx

11、输出整型数据例如1# include int main(void) printf(%d, %o, %xn, 10, 10, 10); printf(%d, %d, %dn, 10, 010, 0 x10); printf(%d, %xn, 012, 012); return 0; 00101010, 12, a10, 8, 1610, a输入整型数据例如2# include int main(void) int a, b; printf(input a, b:); scanf(%o%d , &a, &b); printf(%d%5dn, a, b); /*%5d指定变量b的输出宽度为5 */

12、printf(%x, %dn, a, b); return 0; input a, b: 17 1715 17f, 17%x%d6.2.2 实型数据的输入和输出输入 scanf()float:%f 或%e 以小数或指数形式输入一个单精度浮点数double: %lf或%le 以小数或指数形式输入一个双精度浮点数输出 printf()float 和double使用一样的格式控制说明%f以小数形式输出浮点数,保存6位小数%e以指数形式输出实型数据输出格式例如# include int main(void) double d = 3.1415926; printf(%f, %en, d, d); pr

13、intf(%5.3f, %5.2f, %.2fn, d, d, d); return 0; 3.141593, 3.14159e+00一共5位,小数局部3位,小数点占1位实型数据输入输出例如假定float的精度为7位,double的精度为16位 # include int main(void) float f; double d; printf(input f, d:); scanf(%f%lf, &f, &d); printf(f = %fn d = %f n, f, d); printf(d = %f n, d); return 0;input f, d: 6.2.3 字符型数据输入输出s

14、canf() 和 printf() %cchar ch;scanf(%c, &ch);printf(%c, ch);getchar() 和 putchar()char ch;ch = getchar( );putchar(ch);输入输出一个字符输入输出字符例如# include int main(void) char ch1, ch2; ch1=getchar(); ch2=getchar(); putchar(ch1); putchar(#); putchar(ch2); return 0;AbA#b输入输出字符例如# include int main(void) char ch1, ch

15、2, ch3; scanf(%c%c%c, &ch1, &ch2, &ch3); printf(%c%c%c%c%c, ch1, #, ch2, #, ch3); return 0;AbCA#b#CA bCA# #b【例6-1】单词加密解析。输入一个英文单词由6个小写英文字母组成,按照以下过程将该单词加密:先将英文单词中的小写字母转换为对应的大写字母,再将该大写字母的ASCII码对10整除后取其余数,从而得到一个六位整数密码。#include int main(void)int i;char ch_lower, ch_upper; for(i = 1; i = a & ch_lower %c-

16、%dn, ch_lower, ch_upper, ch_upper%10); return 0;fridayf-F-0r-R-2i-I-3d-D-8a-A-5y-Y-9字符运算大小写英文字母转换 b - a = B - A z - a = Z - A m M a-AA-am - a + A = MM - A + a = m8 - 0 = 88 + 0 = 8数字字符和数字转换 9 - 0 = 9 - 0 9 = 9 + 08 88-8 8-8不同类型数据的混合运算,先转换为同一类型,再运算。6.3.1 自动类型转换非赋值运算的类型转换赋值运算的类型转换6.3.2 强迫类型转换6.3 类型转换6

17、.3.1 自动类型转换非赋值运算程度方向:自动垂直方向:低 高 高 double float unsigned long long unsigned unsigned short 低 int char, short自动类型转换非赋值运算A + 12 10.05 65 77高 double float unsigned long long unsigned unsigned short 低 int char, short自动类型转换赋值运算变量 = 表达式计算赋值运算符右侧表达式的值将赋值运算符右侧表达式的值赋给左侧的变量将赋值运算符右侧表达式的类型自动转换成赋值号左侧变量的类型自动类型转换赋值

18、运算double x;x = 1;x = ?short a = 1000;char b = A;long c;c = a + b;c = ?int ai;ai = 2.56;ai = ?short bi;bi = 0 x12345678Lbi = ?6.3.2 强迫类型转换强迫类型转换运算符(类型名) 表达式(double)3(double)(5/2)(double)5/23强迫类型转换例如# include int main(void) int i; double x; x = 3.8; i = (int) x; printf(x = %f, i = %d n, x, i); printf(

19、double)(int)x = %fn, (double)(int)x); printf( x mod 3 = %dn, (int)x % 3); return 0;x = 3.800000, i = 3x mod 3 = 0表达式:由运算符和运算对象操作数组成的有意义的运算式子,它的值和类型由参加运算的运算符和运算对象决定。运算符:具有运算功能的符号运算对象:常量、变量和函数等表达式算术表达式、赋值表达式、关系表达式、逻辑表达式、条件表达式和逗号表达式等 6.4 表达式 6.4.1 算术表达式算术运算符单目 + - + -双目 + - * / %注意/ 整数除整数,得整数1/4 = 0,10

20、/3 = 3% 模(求余): 针对整型数据5%6 = 5,9%4 = 1,100%4 = 0+ 和 单目运算符, +10 和 10双目运算符, x+10 和 y 10 双目运算符两侧操作数的类型要一样,否那么,自动类型转换后,再运算。自增运算符+和自减运算符-int n;n+ +n n- -n 只适宜变量运算使变量的值增1或减1+n n+ n = n + 1-n n- n = n - 1取变量的值作为表达式的值+n:n = n + 1;取n值作为表达式 +n 的值n+:取n值作为表达式 n+ 的值;n = n + 1自增运算和自减运算int n, m;n=2;m=+n;n=2;m=n+;n=3

21、n=3m=3m=2m=nm=n+1n=n+1m=n算术运算符的优先级和结合性单目 + - + -双目 * / %双目 + -高低从右向左-5 + 3%2 = (-5) + (3%2) = -43 * 5 % 3 = (3*5) % 3 = 0-i+ -(i+)写出C表达式数学式 C算术表达式s(s-a)(s-b)(s-c)(x+2)e2x6.4.2 赋值表达式赋值运算符 =x = 3*4优先级较低,结合性从右向左x = y = 3 x = (y = 3)赋值表达式变量 = 表达式计算赋值运算符右侧表达式的值将赋值运算符右侧表达式的值赋给左侧的变量将赋值运算符左侧的变量的值作为表达式的值右侧表达

22、式的类型自动转换成左侧变量的类型int n; double x, y;n = 3.14 * 2;x = 10 / 4;x = (y = 3);复合赋值运算符赋值运算符简单赋值运算符 =复合赋值运算符复合算术赋值运算符 += -= *= /= %=复合位赋值运算符赋值表达式 变量 赋值运算符 表达式x += exp 等价于 x = x + expx *= y - 3x = x * (y-3) 6.4.3 关系表达式关系运算符比较两个操作数,比较的结果:真 假x y x y x = y x != y优先级 算术运算符 = = != 赋值运算符左结合a b = cd = a bch a + 1 d

23、= a + b c3 = x b)= cd = (a b)ch (a + 1)d = (a + b) c)(3 = x) b = cd = a bch a + 1d = a + b cb - 1 = a != c3 = x = 3 & x = a & ch = A & ch = 3 & x = 3 & x = 3) & (x 0) ? x+2 : x*x;int n;(n0) ? 2.9 : 1n = 10n = -10if ( x0 ) y=x+2;else y=x*x; x+2 x0y = x2 xb) ? a : b;if ( ab ) z = a;else z = b;6.4.6 逗号

24、表达式表达式1, 表达式2, , 表达式n先计算表达式,然后计算表达式,,最后计算表达式n的值,并将表达式n的值作为逗号表达式的值.int a, b, c;(a=2), (b=3), (c=a+b);逗号运算符的优先级最低,左结合a=2, b=3, c=a+bsum = 0;for(i = 0; i = 100; i+) sum = sum + i;逗号表达式的用处for(i = 0, sum = 0; i = 100; i+) sum = sum + i;for(i = 0, sum = 0; i = 100; i+) sum += i;6.4.7 位运算 位逻辑运算 按位取反 单目 右结合& 按位与 按位异或:一样取0,不同取1| 按位或移位运算 对操作数右移给出的位数复合位赋值运算位逻辑运算x=0 00000000 00000000 y=3

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论