




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、2022-4-251第第2 2章章 C C语言基本数据类语言基本数据类型及运算型及运算2022-4-2522.1 C2.1 C语言的数据类型语言的数据类型 数据类型 基本类型 整型 实型 字符型 带符号整型(简称整型) 带符号短整型(简称短整型) 带符号长整型(简称长整型) 带符号整型 无符号整型 无符号整型 无符号短整型 无符号长整型 单精度型 双精度型 空类型 构造类型 指针型 枚举型 数组型 结构型 共用型 2022-4-2532.2 2.2 常量常量 u常量是程序中其值不发生变化的数据。 u 2.2.1 整型常量 u进 制 数 表 示 方 式 举 例 u八进制整型 由数字0开头 034
2、,065,057u十进制整型 如同数学中的数字 123,-78,90u十六进制整型 由0X或0 x开头 0 x23,0Xff,0 xac2022-4-254限制在本区间使用u1基本整型常量和短整型-3276832767。 u2长整型常量-21474836482147483647,整数后面加上字母l(或 L)。 u3无符号整型常量表示的数据全部是正数,没有符号位。 uint , short int,long int ,unsigned int uunsigned short int,unsigned long int2022-4-255u实型数又称实数或浮点数,只用在十进制数中。 u表示法如下:
3、u3.14 .9999 -3.14159 u0.3e05 6.89E-5 9.99e+16u6.89E-5 表示的是数学算式中的:6.8910-5。u类 型 二进制位数 有效数字 数 值 范 围uFloat 32 7 10-381038uDouble 64 1516 10-30810308u 2.2.2 2.2.2 实型常量实型常量 2022-4-256u 2.2.3 字符常量字符常量 字符常量是用单引号括起来的一个字符,它在计算字符常量是用单引号括起来的一个字符,它在计算机存储中占一个字节。机存储中占一个字节。x,a,A,b,$,# x,a,A,b,$,# 2.2.4 2.2.4 符号常量符
4、号常量定义格式为:定义格式为:#define 符号常量符号常量 字符串字符串 #define PI 3.14159#define PI 3.14159#define NULL 0#define NULL 0#define EOF 1#define EOF 1定义后当一般常量使用定义后当一般常量使用 2022-4-257u【例2.1】求一个圆柱体体积,用符号常量代替。u #include u#define PI 3.14159umain()u u float r,h,v;u scanf(%f,%f,&r,&h);u v=PI*r*r*h;u printf(Volume=%f,v)
5、;u2022-4-2582.2.5 2.2.5 字符串常量字符串常量 u字符串常量是用一对双引号括起来的零个或多个字符序列。 u“I am a student“ ,”x“ ,” 都为字符串常量。u在内存中存储时,设定一个结束符0。u字符串的长度应为实际长度。注意:注意: 0和和0不同,不同,0是编码为是编码为0的字符,的字符, 而而0则是数字则是数字 0 所对应的字符所对应的字符 在字符串中有转义字符。在字符串中有转义字符。例如:例如:“ab072cdef” 长度为长度为7 ; “n33abcd” 长度为长度为82022-4-2592.3 2.3 变量变量 u变量是指在程序运行过程中其值可以发
6、生变化的量。 u2.3.1变量的数据类型及其定义u1.变量的数据类型(基本)u 字符型、整型、单精度实型、双精度实型,它们分别用关键字char、int、float、double进行定义。另外,还有无符号整型和无值型,它们分别用关键字unsigned和void进行定义。u见表2,表3 up332022-4-2510u数据类型 变量列表; u系统默认类型intu int a, b, c; uchar ch, str; udouble f_1, f_2; ufloat x, y, z, _w1, _w2;uunsigned int u_1, u_2; ulong int g1, g2;2022-4-
7、25112.3.2 2.3.2 变量的存储类型及定义变量的存储类型及定义变量的存储类型 uCPU寄存器 (register)u内存 (内存中又分为两个区域,即为静态存储区和动态存储区。)u2. 变量的存储类型的定义 u 存储类型 数据类型 变量列表;u 系统默认类型修饰为auto 类型(自动型) u 2022-4-2512u(1) 自动变量 uint a, b, c; uchar ch, str; udouble f_1, f_2; ufloat x, y, z, _w1, _w2;uunsigned int u_1, u_2; ulong int g1, g2;2022-4-2513u【例2
8、.2】定义自动整型和字符型变量。u#includeumain()u auto char c1,c2; auto int i1,i2;u scanf(%d,%d,&i1,&i2);u c1=i1; c2=i2;u printf(%c,%cn,c1,c2);u printf(%d,%dn,c1,c2);uu运行时输入:97,98u运行结果为:a,bu 97,982022-4-2514u寄存器型变量的数据是存放在CPU 的通用寄存器中,可不通过内存来直接访问。Turboc C允许定义的寄存器型变量一般以2个为宜。动态管理使用.u【例2.3】函数内部定义寄存器变量。u#include
9、umain()u u register b; b=3;u printf(b=%d,b);u运行结果为:b=32022-4-2515(3) (3) 静态变量静态变量u 静态变量存放在静态内存数据区中u特点:静态变量在变量定义时就分配了固定的内存单元并根据所定义的数据类型存入默认值,在程序运行中一直占用内存单元不释放,直到程序运行结果后。u分类:静态变量又分为静态局部变量和静态全局变量。u 静态局部变量u 在函数或复合语句中定义的变量为静态变量称为静态局部变量.u特点:该变量在其函数中或复合语句中有效。静态局部变量所在的函数无论调用多少次,静态局部变量赋值语句只执行一次,但能够保留住函数多次调用的
10、中间结果。2022-4-2516u【例2.4】静态局部变量的使用uf()u static int a=1; u auto b=0;u a=a+1;u b=b+1;u printf(a=%d,b=%dn,a,b);u 运行结果为:运行结果为: a=2,b=1a=2,b=1a=3,b=1a=3,b=1a=4,b=1a=4,b=1main()main() f(); f(); f(); f(); f(); f(); 2022-4-2517 静态全局变量静态全局变量u【例2.5】有一程序文件f1.c,在程序中使用了静态全局变量。u#include ustatic int a=1;umain() u au
11、to b=0;u a=a+1;u b=b+1;u printf(na=%d,b=%dn,a,b);u运行结果为:运行结果为:a=2,b=1 a=2,b=1 2022-4-2518(4) (4) 外部变量外部变量uTubro C系统规定在某一个源程序中定义的全局变量,其它的多个文件可以使用,这就是所说的程序间的数据交流。 u定义方法:使用关键字“extern”定义的变量称为外部变量(系统默认存储类型),在函数体之外定义。u注意:如果全局变量如果不加“static”限制,都是外部变量。u外部和内部变量同名的处理:u 外部变量如果与局部变量同名,在局部范围内局部变量优先。(具体应用见第5章)p372
12、022-4-2519u变量定义可以出现在程序中的三个地方:u 在函数的内部u 在函数的参数中u 在所有函数的外部u2.3.3 变量的初始化u存储类型符 数据类型符 变量1=初值1,变量2=初值2 ;ustatic int a=1; auto int a=0,b=-3; 2022-4-2520u 2.3.4 基本数据类型的使用u1. 整型变量u【例2.6】内存单元中同一个数据按有符号和无符号格式输出的情况。u#include umain()u unsigned int a=65535;u int b=a;u printf(a=%un,a);u printf(b=%dn,b);u printf(a
13、=%d,%o,%x,%un,a,a,a,a);u 运行结果为:运行结果为:a=65535a=65535b=-1b=-1a=-a=-1,177777,ffff,655351,177777,ffff,655352022-4-2521u【例2.7】超出基本整型数据的最大允许值。u#include umain()uu int a,b;u a=32767;u b=32768;u printf(%d,%d,a,b);u p382022-4-2522u实型变量分为单精度(float型)、双精度(double型)和长双精度型(long double型)u【例2.8】输出双精度数。u#include umain
14、()double x,y; u x=1111111111111.111111111; y=2222222222222.222222222;u printf(%fn,x+y);u实型变量实型变量 2022-4-2523字符型变量字符型变量 u字符型变量在计算机内存储的是其字符对应的ASCII码值.u例如:char c1=A; u例2.9】输入英文字母A,转换成小写字母输出。u#include umain()u char c1,c2; c1=getchar( ) u putchar(c1); c2=c1+32; u putchar(c2);u 2022-4-25242.5 2.5 运算符及表达式运
15、算符及表达式 C 语言运算符 图 2.5 C 语言运算符分类 基本运算符 条件运算符( ? : ) 基本算术运算符( +,-,*,/,% ) 增 1 减 1 运算符( +,- ) 基本赋值运算符( = ) 关系运算符( ,=,=,!= ) 逻辑运算符( !,&,| ) 算术自反赋值运算符( +=,-=,*=,/=,%= ) 位逻辑运算符( ,&,|, ) 指针运算符 赋值运算符 逗号运算符( , ) 专用运算符 成员运算符 强制运算符 下标运算符 数据长度运算符( sizeof ) 位运算符 算术运算符 位移位运算符( ) 位自反赋值运算符( &=,|=,=,= ) p
16、402022-4-25252.4.1 2.4.1 算术运算符和算术表达式算术运算符和算术表达式 u算术运算包括加、减、乘、除和求余运算。分别使用:+ 、- 、* 、/ 、% 表示。 见 P41u【例2.10】求两个整数相除的余数。u#include umain()u u printf(%d,%d,%d,%d,7%3,7%(-3),-7%3,-7%(-3);u2022-4-25262.5.2 2.5.2 关系运算符和关系表达式关系运算符和关系表达式u关系运算是用来进行两个操作对象的比较的运算,关系运算的运算结果是一个逻辑值,即“真”值或“假”值。如果结果为“真”值,用数字“1”来表示,如果结果为
17、“假”值,则用数字“0”表示。p41u语言提供6种关系运算符:u (小于) (大于)u =(大于或等于) =(等于) !=(不等于)u见附录2p2512022-4-2527u关系运算符的优先级: 低于算术运算符u 前4种关系运算符(、=)的优先级相同,后2种(=,!=)也相同。且前4种的优先级高于后2种。u a+bb+c 相当于 (a+b)(b+c)u a=bc 相当于a=(b3 (3)35=6b)&(cb)|(c= = &= = |=u 复合赋值运算符u2赋值表达式u赋值表达式-由赋值运算符或自反赋值运算符构成u(1)赋值表达式格式:=u a=1 , b=5*PI, c=a2
18、022-4-2532(2 2)复合赋值运算符u+= -= *= /= %=u复合赋值运算表达式格式:u =u例如:ua-=b-5 相当于:a=a-b-5ua%=b+3 相当于:a=a%b+3up452022-4-25332.5.5 2.5.5 逗号运算符和逗号表达式u表达式1,表达式2,表达式n u逗号表达式是一个求值运算符。计算时顺序为分别求解每一个表达式,整个表达式的值是最右边表达式的值。u a=8+4,a/2 a=12,6 u表达式的结果:6ua=12up452022-4-25342.5.6 2.5.6 变量的自增变量的自增, ,自减(自减(+,- -)运算符)运算符 u变量+ + +
19、变量 变量 - - - - 变量 p46ua+ +a a- - au使用“+ +”和“- -”运算时需要注意以下问题:u(1)+和- -运算只能用于变量,而不能用于常量和表达式。u(2)+和- -运算是单目运算符,运算方向是自右向左。 u【例2.11】 变量的自增自减运算u main()u int x=10u printf(%dn,-x+); u printf(%dn,x); u 2022-4-2535u(3)在表达式中包含+或-算时,很容易出错,请读者注意。u例如: i+j 应该写成:(i+)+(+j)u i+j 应写成:(i+)+ju(4) Turbo C 规定函数的实参求值顺序是自右向左
20、。 u 例如:i 的值为3;则执行:u printf(%d,%dn,i,i+);u 在函数中 u 4,32022-4-2536u【例2.12】观察中间变量j的值。 umain()u int i=3,j; u j=i+;u printf(i=%d,j=%dn,i,j);uu2.5.7长度运算符 u sizeof运算符的格式为:u sizeof(类型说明符)u sizeof (表达式)2022-4-2537u【例2.13】长度运算符的使用u#include umain() u int i; u short s; u unsigned u;u long int l; u float f; u cha
21、r ch; u double d; printf(%d,%d,%d,%d,%d,%d,%d,sizeof(i),sizeof(s),sizeof(u),sizeof(l),sizeof(f),sizeof(ch),sizeof(d) 运行结果为:运行结果为: 2,2,2,4,4,1,82,2,2,4,4,1,82022-4-25382.5.8 2.5.8 位运算符和位运算表达式u1位逻辑运算符按位非运算符 按位与运算 按位或运算 按位异或运算 2022-4-25391 1位逻辑运算符位逻辑运算符位运算是一种对运算对象按二进制位进行运算。位运算是一种对运算对象按二进制位进行运算。位运算不允许只操
22、作二进制数其中的某一位,而位运算不允许只操作二进制数其中的某一位,而是对整个数据按二进制位进行运算。是对整个数据按二进制位进行运算。u按位逻辑运算符的优先级由高至低排列u & |u(1) 按位非运算符u“”是单目运算符,它的优先级比非单目的算术运算符、关系运算符、逻辑运算符和其它位运算符都高。按位非运算规则是:将二进制的数字0变1,1变0。u例如:设:a=00000011 则:a=11111100up482022-4-2540u(2) 按位与运算u 按位与运算的规则是:两个操作对象均为1时,则该位结果为1,否则为0。u例如: 设:a和b均为无符号整型变量,u且a=3 (00000011
23、),b=5 (00000101),进行按位与运算:u 00000011 (a=3)u(&) 00000101 (b=5)u 00000001 2022-4-2541u(3) 按位或运算u按位或运算的规则是:两个操作对象相异时,则该位结果为1,相同时否则为0。u例如:设:a和b均为无符号整型变量,且a=3 (00000011), b=5 (00000101),进行按位或: u 00000011 (a=3)u(|) 00000101 (b=5) u 00000110 2022-4-2542u(4) 按位异或运算u按位或运算的规则是:两个操作对象有一个为1时,则该位结果为1,否则为0。u例如
24、:设:a和b均为无符号整型变量,且a=3 (00000011), b=5 (00000101),进行按位或: u 00000011 (a=3)u(|) 00000101 (b=5) u 000001102022-4-2543u【例2.14】设a和b均为无符号整型变量,且a=3(取低字节为00000011), b=5 (取低字节为00000101),进行按位非、按位与、按位或、按位异或运算。u #include u main() u int a=3,b=5;u printf(a=%dn, a);u printf(a&b=%dn,a&b);u printf(a|b=%dn,a|b)
25、;u printf(ab=%dn,ab);u运行结果为:运行结果为:a=-4a=-4a&b=1a&b=1a|b=7a|b=7a ab=6=62022-4-2544u2. 位移运算符 p49u位移运算符是将以二进制数据形式表现的字符型或整型变量中的每一位,左移或右移若干位.u位移运算符有两种:分别是“”,均为双目运算。u位移运算符的表达式形式是:表达式1表达式2u其中,在格式中的表达式1是位移的对象,即二进制数,表达式2是移动的二进制位数,用十进制数表示。u用途:(1)移位运算可用于对外部设备的输入进行译码,也可用于读状态信息。按位运算符常用于加密程序。u(2)移位运算还可以用非
26、常快的速度实现整数乘法和除法运算,左移1位实现乘2运算,右移1位实现除2运算。2022-4-2545u(1)左移运算u运算法则:左移运算是内存单元中的二进制数整体向左移动。左移1位相当于该数乘以2.u规则:高位溢出,低位补0。u(2)右移运算u运算法则:右移运算是内存单元中的二进制数整体向右移动。右移1位相当于该数除以2.u规则:低位丢弃,补高位。u补位规则: 移出的空位若是0则全补0,若是1则全部补1.up502022-4-2546u 【例2.15】左移、右移运算举例。u#include umain()uunsigned a=64,b=127;uint i=32767,j=-32768;up
27、rintf(a1=%d,a2=%dn,a1,a2);uprintf(b1=%d,b2=%dn,b1,b1=%d,i2=%dn,i1,i2);uprintf(j1=%d,j2=%dn,j1,j2);运行结果为:运行结果为:a1=128,a2=256a1=128,a2=256b1=254,b2=508b1=254,b1=16383,i2=8191i1=16383,i2=8191j1=-16384,j2=-8192j1=-16384,j2=-81922022-4-25472.5.9 2.5.9 混合运算和类型转换混合运算和类型转换 double 图 2.6 不同类型数据的转换 long int unsigned char,short float 高 低 2022-4-2548u1. 自动类型转换u由系统自动完成并向精度高的类型转换。例如表达式:u 10+a+1.5-5678.444*b u2. 强制类型转换u强制类型转换将表达式的值转换为另一种特定类型。u格式:(类型)表达式u例如: float
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 间出租全套物品合同范本
- 税务服务类合同补充协议
- 福田指标房买卖合同协议
- 美术培训授课合同协议书
- 笔记本定制采购合同范本
- 生产安全施工协议书模板
- 混凝土地泵租赁合同范本
- 电子合同买卖协议书范本
- 精装房材料工程合同范本
- 股东借款给公司合同范本
- 2025年1月 浙江首考英语试卷
- 2025年贵州毕节市金沙县面向全县考调机关事业单位人员10人高频重点提升(共500题)附带答案详解
- 委托编剧和改编创作合同书2025年
- 《车间主任培训》课件
- 口腔如何管理好老客户
- 《雷达原理》课件-3.3.3教学课件:相控阵雷达
- 肾上腺危象的临床护理
- 烟草店转让合同范例
- 《车路协同 路侧感知系统 第1部分:技术要求》
- 医院皮肤科十四五规划
- 阴道壁膨出的临床护理
评论
0/150
提交评论