新C语言的初步知识.ppt

上传人:za****8 文档编号:16590999 上传时间:2020-10-16 格式:PPT 页数:35 大小:501.50KB
返回 下载 相关 举报
新C语言的初步知识.ppt_第1页
第1页 / 共35页
新C语言的初步知识.ppt_第2页
第2页 / 共35页
新C语言的初步知识.ppt_第3页
第3页 / 共35页
点击查看更多>>
资源描述
第二章 C程序设计的初步知识 常量与变量 数据类型 运算符和表达式 2.2 常量与变量和数标识符 标识符 定义:用来标识变量、常量、函数等的字符序列 组成: 只能由 字母 、 数字 、 下划线 组成,且第一个 字母必须是字母或下划线 区分大小写 一、关键字 二、预定义标识符 三、用户标识符 用户标识符 命名原则: 见名知意 不宜混淆 如 l与 I, o与 0 不能使用关键字 例 :判断下列标识符号合法性 sum Sum M.D.John day Date 3days student_name #33 lotus_1_2_3 char ab _above $123 一般用大写字母 是宏定义预处理命令,不是 C语句 直接常量 : 整型常量 实型常量 字符常量 字符串常量 如 #define PRICE 30 常量 定义:程序运行时其值不能改变的量(即常数) 分类 : 符号常量 :用标识符代表常量 定义格式: #define 符号常量 常量 例 符号常量举例 (ch2_1.c) #define PRICE 30 main() int num,total; num=10; total=num*PRICE; printf(total=%d,total); 运行结果: total=300 整型常量(整常数) 三种形式: 十进制整数:由数字 09和正负号表示 .如 123,-456,0 八进制整数:由数字 0开头 ,后跟数字 07表示 .如 0123,011 十六进制整数:由 0 x开头 ,后跟 09,af,AF表示 . 如 0 x123,0Xff 数制 基 权 表示 数码 特点 10, 10, 10, 十进制数 09 10 逢十进一 二进制数 01 2 2, 2, 2, 逢二进一 八进制数 07 8 8, 8, 8, 逢八进一 十六进制数 09,AF,af 16 16, 16, 16, 逢十六进一 十进制: 4956= 410+910 +510+610 二进制: 1011=12+02 +12+12 十六进制: 81AE=816+116 +1016+1416 八进制: 4275=4 8+2 8 7 8+5 8 各种进制之间的转换 二进制、八进制、十六进制转换成十进制 方法:按权相加 100123452 59212120212121111011 )()(例 100128 948683811 3 6 )()(例 10012316 79781610162161516121 )()(例 AF 各种进制之间的转换 (整数 ) 二进制、八进制、十六进制转换成十进制 方法:按权相加 十进制转换成二进制、八进制、十六进制 原理: 的余数是 2 )2.22(2 22.22 ).( 0 0 0 1 2 1 1 0 0 1 1 1 1 2011 N a aaaa aaaa aaaaN n n n n n n n n nn 方法:连续除以基,从低到高记录余数,直至商为 0 例 把十进制数 59转换成二进制数 59 2 29 2 14 2 7 2 3 2 1 2 0 (59)10=(111011)2 1 1 0 1 1 1 1 1 1 0 1 1 余 余 余 余 余 余 例 把十进制数 159转换成八进制数 159 8 19 8 2 8 0 (159)10=(237)8 2 3 7 余 7 余 3 余 2 例 把十进制数 459转换成十六进制数 459 16 28 16 1 16 0 (459)10=(1CB)16 1 C B 余 11 余 12 余 1 整型常量的类型 默认是整据数据类型 在整常量后加字母 l或 L,认为它是 long int 型常量 例 12 与 12L 问题: 0123 = ( )10 0 x123 = ( )10 0Xff = ( )10 83 291 255 问题: 0123 = ( )10 0 x123 = ( )10 0Xff = ( )10 二进制与八进制之间的转换 二进制转换成八进制:从右向左,每 3位一组(不足 3位左补 0),转换成八进制 八进制转换成二进制:用 3位二进制数代替每一位八进制数 例 (1101001)2=(001,101,001)2=(151)8 例 (246)8=(010,100,110)2=(10100110)2 000 0 001 1 010 2 011 3 100 4 101 5 110 6 111 7 二进制与十六进制之间的转换 二进制转换成十六进制:从右向左,每 4位一组 (不足 4位左补 0),转换成十六进制 十六进制转换成二进制:用 4位二进制数代替每一 位十六进制数 例 (11010101111101)2=(0011,0101,0111,1101)2=(357D)16 例 (4B9E)16=(0100,1011,1001,1110)2=(100101110011110)2 0000 0 0001 1 0010 2 0011 3 0100 4 0101 5 0110 6 0111 7 1000 8 1001 9 1010 A 1011 B 1100 C 1101 D 1110 E 1111 F 实型常量(实数或浮点数) 表示形式: 小数形式:(必须有小数点) 如 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 型 如 : 3.5,2.8 double型 4.9 与 4.9f 变量 概念:其值可以改变的量 变量定义的一般格式: 数据类型 变量 1,变量 2, ,变量 n; 变量初始化 :定义时赋初值 例 : int a,b,c; float data; 合法标识符 例 : 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=%fn”,data); 变量定义 可执行语句 main() int a,b=2; a=1; float data; data=(a+b)*1.2; printf(“data=%fn”,data); 语 言 程 序 设 计 第 二 章 数 据 描 述 C 编译程序根据变量定义为其 分配指定字节的内存单元 . 地址 int a=1, b=-3,c; a b c 2字节 2字节 2字节 地址 地址 . 内存 1 -3 随机数 整型变量 short、 int 、 long、 unsigned 占字节数随机器不同而不同 ,一般开辟二个字节 整型变量只能存放整型数值 定义格式 : int k; 实型变量 float:占 4字节,提供 7位有效数字 double:占 8字节,提供 1516位有效数字 定义格式: float a,b;或者 double a,b; 字符型变量 字符变量存放字符 ASCII码 char与 int数据间可进行算术运算 定义格式: char a; 例 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; */ 没有 字符串变量 ,用字符数组存放 例 /*ch2_003.c*/ #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=%cn”,total,ch1); 宏定义 变量定义 输出结果 运行结果: total=37.500000, ch1=d 基本数据类型 类型 符号 关键字 数的表示范围 所占位数 整 型 字 符 型 实 型 有 无 (signed)int 32 -21474836482147483647 (signed)short 16 -3276832767 (signed)long 32 -21474836482147483647 32 unsigned int 04294967295 32 04294967295 unsigned long unsigned short 16 065535 有 float 32 -3.4e383.4e38 有 double 64 -1.7e3081.7e308 有 char 8 -128127 无 unsigned char 8 0255 1.长整型常量后应加一个字母后缀 l或 L 2.无符号型整数在数字末尾应加上后缀 u或 U, 长整型 加 lu或 LU 3.无符号型常量无法表示成小于 0的数 注意 补充:整数的存储形式 位( bite)-内存中 的最小存储单位 字节( byte)-8个二 进制位组成一个字节 字( word)-若干字 节组成,存放一条指令或 一个数据 8个二进制右一位为最低 位,左一位为最高位,正 数最高位为 0,负数为 1 原码、反码和补码的表示方法 ( 1) 原码 :在数值前直接加一符号位的表 示法。 例如: 符号位 数值位 +7原 = 0 0000111 B -7原 = 1 0000111 B ( 2) 反码 : 正数:正数的反码与原码相同。 负数:负数的反码,符号位为 “ 1” ,数值部分按位取反。 例如: 符号位 数值位 +7原 0 0000111 B +7反 = 0 0000111 B -7反 = 1 1111000 B 补码的表示: 正数:正数的补码和原码相同。 负数:负数的补码则是符号位为“ 1”,数值 部分按位取反后再在末位(最低位)加 1。也就是 “ 反码 +1”。 例如: 符号位 数值位 +7补 = 0 0000111 B -7反 = 1 1111000 B -7补 = 1 1111001 B 原码、反码和补码之间的转换 由于正数的原码、补码、反码表示方法均相同,不需转换。 在此,仅以负数情况分析。 ( 1) 已知原码,求补码 。 例:已知某数 X的原码为 10110100B, 试求 X的补码和反码。 解:由 X原 =10110100B知, X为负数。求其反码时,符号位不 变,数值部分按位求反;求其补码时,再在其反码的末位加 1。 1 0 1 1 0 1 0 0 原码 1 1 0 0 1 0 1 1 反码,符号位不变,数值位取反 1 +1 1 1 0 0 1 1 0 0 补码 故: X补 =11001100B, X反 =11001011B。 ( 2) 已知补码,求原码。 分析 : 按照求负数补码的逆过程,数值部分应是最低位减 1, 然后取反。但是对二进制数来说,先减 1后取反和先取反后加 1得 到的结果是一样的,故仍可采用取反加 1 有方法。 例:已知某数 X的补码 11101110B, 试求其原码。 解:由 X补 =11101110B知, X为负数。求其原码表示时,符号 位不变,数值部分按位求反,再在末位加 1。 1 1 1 0 1 1 1 0 补码 1 0 0 1 0 0 0 1 符号位不变,数值位取反 1 +1 1 0 0 1 0 0 0 0 原码 2.3不同类型数据间的转换 隐式转换 运算转换规则 :不同类型数据运算时先 自动 转换 成同一类型 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; 显式转换(强制转换) 一般形式: ( 类型名 ) ( 表达式) 例 (int)(x+y) (int)x+y (double)(3/2) (int)3.6 说明:强制转换得到所需类型的中间变量,原变 量类型不变 例 main() float x; int i; x=3.6; i=(int)x; printf(“ x=%f,i=%d” ,x,i); 结果: x=3.600000,i=3 精度损失问题 较高类型向较低类型转换时可能发生 算术运算符和表达式 基本算术运算符: + - * / % 结合方向:从左向右 优先级: + - -* / % - + - (14) (13) (12) 说明: “ +,-” 可为 单目 运算符时 ,右结合性 两整数相除,结果为整数 %要求两侧均为整型数据 例 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 () 2.4 运算符和表达式 算术表达式: 用算术运算符和一对圆括号将运算量 连接起来的、符合 C语言语法的表达式 运算对象:常量、变量、函数等 运算规律:与数学四则运算类似 ( 1、 2) 1.多层括号必须配对 2.运算符优先级由高到低 赋值运算符和表达式 简单赋值运算符 符号: = 格式: 变量标识符 =表达式 作用:将一个数据(常量或表达式)赋给一个变量 复合赋值运算符 种类 : += -= *= /= %= = = c=a+2; 例 float f; f=10; 则 f=10.0 说明 : 结合方向: 自右向左 优先级 : 2 左侧必须是变量,不能是常量或表达式 赋值表达式的值与变量值相等 ,且可嵌套 赋值转换 规则 :使赋值号右边表达式值 自动 转换成其左边 变量的类型 例 3=x-2*y; a+b=3; 例 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 说明 : 结合方向: 自右向左 优先级 : 2 左侧必须是变量,不能是常量或表达式 赋值表达式的值与变量值相等 ,且可嵌套 赋值转换 规则 :使赋值号右边表达式值 自动 转换成其左边 变量的类型 例 : 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) 自增、自减运算符 + - 作用:使变量值加 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 自增、自减运算符 + - 作用:使变量值加 1或减 1 种类: 前置 +i, -i (先执行 i+1或 i-1,再使用 i值) 后置 i+,i- (先使用 i值 ,再执行 i+1或 i-1) 说明: + - 不能用于常量和表达式 ,如 5+, (a+b)+ + -结合方向: 自右向左 优先级: - + - -* / % -+ - (14) (13) (12) 例 -i+ -(i+) i=3; printf(“ %d” ,-i+); /-3 例 -i+ i=3; printf(“ %d” ,-i+); 逗号运算符和表达式 “ ,” 是 C语言中的一种特殊运算符 用逗号将表达式连接起来的式子成为逗号表达式 形式: 表达式 1,表达式 2, 表达式 n 结合性 :从左向右 优先级 : 1 逗号表达式的值:等于表达式 n的值 例 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 逗号运算符和表达式 形式: 表达式 1,表达式 2, 表达式 n 结合性 :从左向右 优先级 : 1 逗号表达式的值:等于表达式 n的值 用途:常用于循环 for语句中 例 : /*ch2_6.c*/ #include main() int x,y=7; float z=4; x=(y=y+6,y/z); printf(x=%dn,x); 运行结果: x=3
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!