C语言_数据的表示与运算
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
字符串 “a”, “ab”, “1234”
整型数据运算中应该注意的问题: #include <stdio.h> void main() { int a; a=32767+1; /* int+int printf("a=%d",a); } 运行时显示 ??
请思考:
long a; a=32767+1;
基本类型
字符型 数组类型
实型(浮点型)
结构体类型 联合体类型 枚举类型
单精度实型 float
数据类型 构造类型 指针类型
双精度实型 double struct union
enum
空类型(无值类型) void
整数的存储方式: 以十进制补码形式存储。 一般整数占用的空间: Turbo C 2.0 :2个字节的存储单元 Turbo C++3.0 :2个字节的存储单元 VC++ 6.0:4个字节 根据占用空间和数值范围的不同细分为几种类型:
if(‘A’<=c && c<=‘Z’)
if(x%3==0 || x%5==0) …… if(!(a>b)) …… if(!a)…… (2)优先级与结合性:左结合 数值转换为逻辑量: 非0——真 0——假
例如:if(!a||b) ……
另外还要注意 “短路”问题
if(y%4==0 && y%100!=0 || y%400==0)…
(3)i++与++i的区别: ++i是先执行i=i+1后,再使用i的值,如 j=++i; i++是先使用i的值后,再执行i=i+1,如 j=i++;
2.3.2 算术表达式 (1)算术表达式 运算对象包括常量、变量、函数等。
例如: a*b/c-1.5+’a’
是一个合法的表达式
(2)运算规则:一个运算符的两运算量类型要相同。
(3)表达式中不同数据类型的转换 自动转换:编译系统自动完成 强制类型转换:(类型名)(表达式)
int a=10,result; float b=2.5; double c=19.5; 自动转换: long d=3; 混合运算:整型(包括 int,short,long )、浮 result=20+’A’+a*b -c/d; 点型(包括float,double )可以混合运算。 printf(“%d \n”,result); 在进行运算时,不同类型的数据会自动先转 请分析表达式计算过程及运行结果? 换成同一类型,然后进行运算.
2.3.3 C运算符
C的运算符有以下几类: (1)算术运算符 (+ - * / % ++ --) (2)关系运算符 ( > < >= <= != (3)逻辑运算符 ( ! && || ) (4)位运算符 (<< >> ~ | ∧ & ) (5)赋值运算符 (=及其扩展赋值运算符) (6)条件运算符 (?:) (7)逗号运算符 (,)
2.2
• 常量、变量 • 常量:
程序中数据是如何表示的? #include <stdio.h>
void main() { int i,x,s,avg; 程序运行过程中,其值不能 i=0; 被改变的量。常量也相应地 s=0; 区分为不同的类型: 八进制十六进制 do{ 整型 125,-100, 0,037,0x38 scanf("%d",&x); 默认为int,可以用后缀指 s=s+x; 明类型:289L,32767L, i=i+1; 39u,39090u,65536Lu }while(i<10); 实型 3.14,-3.7e9, .23e-3 默 avg=s/10; 认double类型,9.6f为float型 printf("avg=%d\n",avg); 字符型 ‘a’, ‘b’,‘2’ }
(4)右侧表达式类型与变量类型不符时如何转换?
原则:以变量类型为准自动变换。
优先级与结合性
赋值运算符: ( = 以及扩展的赋值运算符) (5)扩展的复合赋值运算符:
+=
-=
*=
/=
%=
例如:a+=b*2/3;等价于:a=a+(b+2/3);
条件运算符: ( ?
:)
例如:printf("%d\n",a>b?a:b);
第二章
本章要点
数据的存储及数据类型
数据的表示——常量和变量
数据的运算及其规则
2.1 数据的存储及数据类型
• 以二进制形式存储 • 计算机存储器的存储单元按字节编址 • C语言针对不同类型的数据采用不同的 存储方式——具体体现在不同的“数据 类型”上
C语言提供了以下一些数据类型:
整型 int char
可在声明同时初始化。
char answer=‘Y’,c1,c2;
例如: 变量a声明为以下不同类型时,执行 a=13; 后内存中实际存放的情况:
2.3
数据的运算及其规则
2.3.1 算术运算符
(1)基本的算术运算符:
+(加法运算符,或正值运算符。如:3+5、+3) -(减法运算符,或负值运算符。如:5-2、-3) 5/3 结果? * (乘法运算符。如:3*5) 是1还是1.666667? /(除法运算符。如:5/3) % 模运算符,或称求余运算符,%两侧均应为整型数据,
103
说明: 这种类型转换是由 系统自动进行的。
强制类型转换:
强制类型转换运算符的作用是:将一个表达式转换成 所需类型 一般形式:(类型名)(表达式) 例如: • • (float)a (int)(x+y) 将a转换成float类型 将x+y的值转换成整型
•
(float)1/5
将1转换成float型,结果为float型
优先级与结合性
赋值运算符: ( = 以及扩展的赋值运算符)
(1)计算表达式的值后赋值给变量
例如:a=b*2/3; i=i+1;
C语言的表达式加上分 号成为一条语句。
(2)赋值表达式的值:赋值后变量的值 例如:printf("%d",a=30); (3)优先级与结合性:右结合 例如:a=b=c=0; 等价于 a=(b=(c=0));
基本整型int 无符号的基本整型 unsigned int 短整型 short int 无符号的短整型 unsigned short int 长整型 long int 无符号的长整型 unsigned long int
以Turbo C++ 3.0为例:
类型声明符 int short [int] long [int] unsigned [int] unsigned short unsigned long 字节数 2 2 4 -32768~32767 -32768~32767 取值范围 即 -215~(215-1) 即 -215~(215-1)
如:7%4的值为3)。
(2) 运算符的优先级与结合性 • C语言规定了运算符的优先级
在表达式求值时,先按运算符的优先级别高低次 序执行,例如先乘除后加减。 • C还规定了各种来自百度文库算符的结合方向(结合性)
基本算术运算符的结合方向为“自左至右”,即 先左后右 。
优先级与结合性
优先级与结合性
(3) 自增、自减运算符 作用:使变量的值增1或减1 如: ++i,--i(在使用i之前,先使i的值加(减)1) i++,i--(在使用i之后,使i的值加(减)1) 注意: (1)自增运算符(++),自减运算符(--), 只能用于变量,不能用于常量或表达式, (2)++和--的结合方向是“自右至左”。
-2147483648~2147483647 即 -231~(231-1)
2
2 4
0~65535
0~65535
即 0 ~(216-1)
即 0 ~(216-1)
0~4294967295 即 0 ~(232-1)
实数的存储形式: 实数采用指数形式 存储,即浮点数。 将实数转化为标准 化指数形式,分别 存储尾数部分和指 数部分。
字符型数据注意的问题: (1)字符本质上是整数,既可以当作字符,也可以当 作整数使用;
printf(“%c,%d,%c,%c” , ’a’ , ’a’ , ’a’-32 , 97-32 );
运行时显示 ??
a , 97 , A , A
(2)有些特殊字符无法正常表示出来,需要使用转 义符“\”进行转义。 换行符(ASCII码值为10)表示为‘\n’,即把字母 n转义为换行符。 如:int a=10,b=20;
类型 float Double long double 位数 4字节 8字节 16字节 绝对值范围 10-38 ~1038 10-308 ~10308 10-4932 ~104932 有效数字 7 16 19
单个字符的存储方式: 存储字符的编码; 目前大多数计算机采用ASCII代码; 占用的空间:一个字节的存储空间。 例如: 字符’A’ 为char类型,在内存中占1字 节,存储的是其ASCII码值65。
== )
(8)指针运算符 (*和&) (9)求字节数运算符(sizeof) (10)强制类型转换运算符( (类型) ) (11)分量运算符(.->) (12)下标运算符([ ]) (13)其他 (如函数调用运算符())
优先级与结合性
关系运算符: ( > <
>=
<=
!=
== )
(1)关系表达式的值:真——1,假——0
逻辑非 取负、自增、自减 强制类型转换 指针、地址、求字节数 乘、除、整数求余
printf(“a=%d\nb=%d\n”, a , b );
转义字符 \\ \’ \” \n \t \r \f \b \ddd
表示含义 反斜杠字符“\” 单引号字符 双引号字符 换行,将当前位置移到下一行开头 水平制表,横向跳到下一个输出区 回车,将当前位置移到本行开头 打印换页,将当前位置移到下页开头 退格,将当前位置移到前一列 1到3位八进制数所代表的字符
ASCII码 92 39 34 10 9 13 12 8
\xhh
1到2位十六进制数所代表的字符
printf("a=%d\tb=\'%c\'\tTCP\\IP\n",26,'\101');
#include <stdio.h> void main() { • 变量: int i,x,s,avg; 指在程序的执行过程中其值 可以发生变化的量。 变量命名规则 i=0; : s=0; 字母打头,后跟字母、数字、下划线; 变量的四要素 do{ 尽量“见名知义”; scanf("%d",&x); 不能与C语言保留字相同; 变量名 注意区分大小写。 s=s+x; 变量类型 i=i+1; 变量值 }while(i<10); int sum=0,count=0,i,k; avg=s/10; 存储单元 float area, avg,y; printf("avg=%d\n",avg); 变量必须先声明,后使用; }double pi=3.14159;
*/
a:-32768
long a; a=32767L+1;
-32768
小心结果“溢出”!
a:32768
01111111 11111111 32767 00000000 00000000 01111111 11111111 32767L 00000000 00000001 1 00000000 00000000 00000000 00000001 1 --------------------------------------------------------------------------------------10000000 00000000 00000000 00000000-32768 10000000 00000000 32768
d=a>b?a:b>c?b:c; /*右结合性*/
优先级与结合性
逗号运算符: ( , ) 例如:a=10,b=a+20,c=90 ; 左结合性; 整个表达式的值取最后一个表达式的值。
优先级
运算符
功能
结合性 从右到左
高
高
! -、++、-(类型名) *、&、sizeof *、/、%
+、>、>=、<、<= ==、!= && || ?: =、+=、-=、 *=、/=、%=
例如:if(a+b>=10) …… if(x%2==0) …… if(a!=b) …… if(c>=‘A’) (2)优先级与结合性:左结合 例如:if(a>b==0) ……
if(a>b>c) ……
if(‘A’<=c<=‘Z’)
优先级与结合性
逻辑运算符: ( !
&&
|| )
(1)各个逻辑运算符的运算规则 (1)逻辑表达式的值:真——1,假——0 例如:if(a>b && b>c ) ……
整型数据运算中应该注意的问题: #include <stdio.h> void main() { int a; a=32767+1; /* int+int printf("a=%d",a); } 运行时显示 ??
请思考:
long a; a=32767+1;
基本类型
字符型 数组类型
实型(浮点型)
结构体类型 联合体类型 枚举类型
单精度实型 float
数据类型 构造类型 指针类型
双精度实型 double struct union
enum
空类型(无值类型) void
整数的存储方式: 以十进制补码形式存储。 一般整数占用的空间: Turbo C 2.0 :2个字节的存储单元 Turbo C++3.0 :2个字节的存储单元 VC++ 6.0:4个字节 根据占用空间和数值范围的不同细分为几种类型:
if(‘A’<=c && c<=‘Z’)
if(x%3==0 || x%5==0) …… if(!(a>b)) …… if(!a)…… (2)优先级与结合性:左结合 数值转换为逻辑量: 非0——真 0——假
例如:if(!a||b) ……
另外还要注意 “短路”问题
if(y%4==0 && y%100!=0 || y%400==0)…
(3)i++与++i的区别: ++i是先执行i=i+1后,再使用i的值,如 j=++i; i++是先使用i的值后,再执行i=i+1,如 j=i++;
2.3.2 算术表达式 (1)算术表达式 运算对象包括常量、变量、函数等。
例如: a*b/c-1.5+’a’
是一个合法的表达式
(2)运算规则:一个运算符的两运算量类型要相同。
(3)表达式中不同数据类型的转换 自动转换:编译系统自动完成 强制类型转换:(类型名)(表达式)
int a=10,result; float b=2.5; double c=19.5; 自动转换: long d=3; 混合运算:整型(包括 int,short,long )、浮 result=20+’A’+a*b -c/d; 点型(包括float,double )可以混合运算。 printf(“%d \n”,result); 在进行运算时,不同类型的数据会自动先转 请分析表达式计算过程及运行结果? 换成同一类型,然后进行运算.
2.3.3 C运算符
C的运算符有以下几类: (1)算术运算符 (+ - * / % ++ --) (2)关系运算符 ( > < >= <= != (3)逻辑运算符 ( ! && || ) (4)位运算符 (<< >> ~ | ∧ & ) (5)赋值运算符 (=及其扩展赋值运算符) (6)条件运算符 (?:) (7)逗号运算符 (,)
2.2
• 常量、变量 • 常量:
程序中数据是如何表示的? #include <stdio.h>
void main() { int i,x,s,avg; 程序运行过程中,其值不能 i=0; 被改变的量。常量也相应地 s=0; 区分为不同的类型: 八进制十六进制 do{ 整型 125,-100, 0,037,0x38 scanf("%d",&x); 默认为int,可以用后缀指 s=s+x; 明类型:289L,32767L, i=i+1; 39u,39090u,65536Lu }while(i<10); 实型 3.14,-3.7e9, .23e-3 默 avg=s/10; 认double类型,9.6f为float型 printf("avg=%d\n",avg); 字符型 ‘a’, ‘b’,‘2’ }
(4)右侧表达式类型与变量类型不符时如何转换?
原则:以变量类型为准自动变换。
优先级与结合性
赋值运算符: ( = 以及扩展的赋值运算符) (5)扩展的复合赋值运算符:
+=
-=
*=
/=
%=
例如:a+=b*2/3;等价于:a=a+(b+2/3);
条件运算符: ( ?
:)
例如:printf("%d\n",a>b?a:b);
第二章
本章要点
数据的存储及数据类型
数据的表示——常量和变量
数据的运算及其规则
2.1 数据的存储及数据类型
• 以二进制形式存储 • 计算机存储器的存储单元按字节编址 • C语言针对不同类型的数据采用不同的 存储方式——具体体现在不同的“数据 类型”上
C语言提供了以下一些数据类型:
整型 int char
可在声明同时初始化。
char answer=‘Y’,c1,c2;
例如: 变量a声明为以下不同类型时,执行 a=13; 后内存中实际存放的情况:
2.3
数据的运算及其规则
2.3.1 算术运算符
(1)基本的算术运算符:
+(加法运算符,或正值运算符。如:3+5、+3) -(减法运算符,或负值运算符。如:5-2、-3) 5/3 结果? * (乘法运算符。如:3*5) 是1还是1.666667? /(除法运算符。如:5/3) % 模运算符,或称求余运算符,%两侧均应为整型数据,
103
说明: 这种类型转换是由 系统自动进行的。
强制类型转换:
强制类型转换运算符的作用是:将一个表达式转换成 所需类型 一般形式:(类型名)(表达式) 例如: • • (float)a (int)(x+y) 将a转换成float类型 将x+y的值转换成整型
•
(float)1/5
将1转换成float型,结果为float型
优先级与结合性
赋值运算符: ( = 以及扩展的赋值运算符)
(1)计算表达式的值后赋值给变量
例如:a=b*2/3; i=i+1;
C语言的表达式加上分 号成为一条语句。
(2)赋值表达式的值:赋值后变量的值 例如:printf("%d",a=30); (3)优先级与结合性:右结合 例如:a=b=c=0; 等价于 a=(b=(c=0));
基本整型int 无符号的基本整型 unsigned int 短整型 short int 无符号的短整型 unsigned short int 长整型 long int 无符号的长整型 unsigned long int
以Turbo C++ 3.0为例:
类型声明符 int short [int] long [int] unsigned [int] unsigned short unsigned long 字节数 2 2 4 -32768~32767 -32768~32767 取值范围 即 -215~(215-1) 即 -215~(215-1)
如:7%4的值为3)。
(2) 运算符的优先级与结合性 • C语言规定了运算符的优先级
在表达式求值时,先按运算符的优先级别高低次 序执行,例如先乘除后加减。 • C还规定了各种来自百度文库算符的结合方向(结合性)
基本算术运算符的结合方向为“自左至右”,即 先左后右 。
优先级与结合性
优先级与结合性
(3) 自增、自减运算符 作用:使变量的值增1或减1 如: ++i,--i(在使用i之前,先使i的值加(减)1) i++,i--(在使用i之后,使i的值加(减)1) 注意: (1)自增运算符(++),自减运算符(--), 只能用于变量,不能用于常量或表达式, (2)++和--的结合方向是“自右至左”。
-2147483648~2147483647 即 -231~(231-1)
2
2 4
0~65535
0~65535
即 0 ~(216-1)
即 0 ~(216-1)
0~4294967295 即 0 ~(232-1)
实数的存储形式: 实数采用指数形式 存储,即浮点数。 将实数转化为标准 化指数形式,分别 存储尾数部分和指 数部分。
字符型数据注意的问题: (1)字符本质上是整数,既可以当作字符,也可以当 作整数使用;
printf(“%c,%d,%c,%c” , ’a’ , ’a’ , ’a’-32 , 97-32 );
运行时显示 ??
a , 97 , A , A
(2)有些特殊字符无法正常表示出来,需要使用转 义符“\”进行转义。 换行符(ASCII码值为10)表示为‘\n’,即把字母 n转义为换行符。 如:int a=10,b=20;
类型 float Double long double 位数 4字节 8字节 16字节 绝对值范围 10-38 ~1038 10-308 ~10308 10-4932 ~104932 有效数字 7 16 19
单个字符的存储方式: 存储字符的编码; 目前大多数计算机采用ASCII代码; 占用的空间:一个字节的存储空间。 例如: 字符’A’ 为char类型,在内存中占1字 节,存储的是其ASCII码值65。
== )
(8)指针运算符 (*和&) (9)求字节数运算符(sizeof) (10)强制类型转换运算符( (类型) ) (11)分量运算符(.->) (12)下标运算符([ ]) (13)其他 (如函数调用运算符())
优先级与结合性
关系运算符: ( > <
>=
<=
!=
== )
(1)关系表达式的值:真——1,假——0
逻辑非 取负、自增、自减 强制类型转换 指针、地址、求字节数 乘、除、整数求余
printf(“a=%d\nb=%d\n”, a , b );
转义字符 \\ \’ \” \n \t \r \f \b \ddd
表示含义 反斜杠字符“\” 单引号字符 双引号字符 换行,将当前位置移到下一行开头 水平制表,横向跳到下一个输出区 回车,将当前位置移到本行开头 打印换页,将当前位置移到下页开头 退格,将当前位置移到前一列 1到3位八进制数所代表的字符
ASCII码 92 39 34 10 9 13 12 8
\xhh
1到2位十六进制数所代表的字符
printf("a=%d\tb=\'%c\'\tTCP\\IP\n",26,'\101');
#include <stdio.h> void main() { • 变量: int i,x,s,avg; 指在程序的执行过程中其值 可以发生变化的量。 变量命名规则 i=0; : s=0; 字母打头,后跟字母、数字、下划线; 变量的四要素 do{ 尽量“见名知义”; scanf("%d",&x); 不能与C语言保留字相同; 变量名 注意区分大小写。 s=s+x; 变量类型 i=i+1; 变量值 }while(i<10); int sum=0,count=0,i,k; avg=s/10; 存储单元 float area, avg,y; printf("avg=%d\n",avg); 变量必须先声明,后使用; }double pi=3.14159;
*/
a:-32768
long a; a=32767L+1;
-32768
小心结果“溢出”!
a:32768
01111111 11111111 32767 00000000 00000000 01111111 11111111 32767L 00000000 00000001 1 00000000 00000000 00000000 00000001 1 --------------------------------------------------------------------------------------10000000 00000000 00000000 00000000-32768 10000000 00000000 32768
d=a>b?a:b>c?b:c; /*右结合性*/
优先级与结合性
逗号运算符: ( , ) 例如:a=10,b=a+20,c=90 ; 左结合性; 整个表达式的值取最后一个表达式的值。
优先级
运算符
功能
结合性 从右到左
高
高
! -、++、-(类型名) *、&、sizeof *、/、%
+、>、>=、<、<= ==、!= && || ?: =、+=、-=、 *=、/=、%=
例如:if(a+b>=10) …… if(x%2==0) …… if(a!=b) …… if(c>=‘A’) (2)优先级与结合性:左结合 例如:if(a>b==0) ……
if(a>b>c) ……
if(‘A’<=c<=‘Z’)
优先级与结合性
逻辑运算符: ( !
&&
|| )
(1)各个逻辑运算符的运算规则 (1)逻辑表达式的值:真——1,假——0 例如:if(a>b && b>c ) ……