C语言03数据描述.ppt

上传人:max****ui 文档编号:2015328 上传时间:2019-11-13 格式:PPT 页数:28 大小:717KB
返回 下载 相关 举报
C语言03数据描述.ppt_第1页
第1页 / 共28页
C语言03数据描述.ppt_第2页
第2页 / 共28页
C语言03数据描述.ppt_第3页
第3页 / 共28页
点击查看更多>>
资源描述
第三章 数据描述,计算机数据的预备知识 数据类型 常量与变量 不同类型数据间的转换 运算符和表达式,2019/11/13,2,补充: 计算机数据的预备知识,计算机中数的表示及进制转换,字节和位,数值的表示方法:原码、反码和补码,2019/11/13,3,计算机中数的表示及进制转换,数码:表示数的符号 基: 数码的个数 权: 每一位所具有的值,十进制:4956= 410+910 +510+610,二进制:1011=12+02 +12+12,十六进制:81AE=816+116 +1016+1416,八进制:4275=48+28 +78+58,2019/11/13,4,各种进制之间的相互转换 二进制、八进制、十六进制 十进制,按权相加法,2019/11/13,5,各种进制之间的相互转换 十进制 二进制、八进制、十六进制,辗转相除法,例1:(59)10 = ( ? )2,例1:(59)10 = (111011)2,2019/11/13,6,各种进制之间的相互转换 十进制 二进制、八进制、十六进制,辗转相除法,例2:(159)10 = ( ? )8,例2:(159)10 = (237)8,2019/11/13,7,各种进制之间的相互转换 十进制 二进制、八进制、十六进制,辗转相除法,例3:(459)10 = ( ? )16,例3:(459)10 = (1CB)16,2019/11/13,8,各种进制之间的相互转换 二进制 八进制 从右向左,每3位一组(不足3位左补0) 每3位二进制转换成八进制 八进制 二进制 用3位二进制数代替每一位八进制数 把所有的八进制数串起来,000 0 001 1 010 2 011 3 100 4 101 5 110 6 111 7,例1: (1101001)2 = (001,101,001)2 = (151)8,例2: (246)8 = (010,100,110)2 = (10100110)2,2019/11/13,9,各种进制之间的相互转换 二进制 十六进制 从右向左,每4位一组(不足4位左补0) 每4位二进制转换成十六进制 八进制 二进制 用4位二进制数代替每一位十六进制数 把所有的十六进制数串起来,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,例1: (11010101111101)2 =(0011,0101,0111,1101)2 =(357D)16,例2: (4B9E)16 =(0100,1011,1001,1110)2 =(100101110011110)2,2019/11/13,10,字节和位 内存以字节为单元组成 每个字节有一个地址 一个字节一般由8个二进制位组成 每个二进位的值是0或1,2019/11/13,11,数值的表示方法:原码、反码、补码 原码:最高位为符号位,其余为本身的绝对值 反码: 正数:与原码相同 负数:原码符号位不变,其它位对位取反 补码: 正数:与原码、反码相同 负数:反码保持符号位不变,再整个加1,2019/11/13,12,3.1 数据类型,2019/11/13,13,基本数据类型,2019/11/13,14,3.2 常量与变量,标识符 定义:用来标识变量、常量、函数等的字符序列 组成: 只能由字母、数字、下划线组成,首字符须是字母或下划线 大小写敏感 不能使用关键字 长度:最长32个字符(Turbo C) 命名原则: 见名知意 不宜混淆 如1与l, o与0,例:判断下列标识符号合法性 sum Sum M.D.John day Date 3days student_name #33 lotus_1_2_3 char ab _above $123,M.D.John,3days,#33,char,ab,$123,2019/11/13,15,常量 定义:程序运行时其值不能改变的量(即常数) 分类: 符号常量:用标识符代表常量 定义格式:#define 符号常量 常量 一般用大写字母 是宏定义预处理命令,不是C语句 直接常量: 整型常量 12,-22435,0313,0x121 实型常量 3.14,1.2e-8,3.6E+9 字符常量 A, E, +, 101, xEF, n 字符串常量 “China”, “Hellow”, “”,如 #define PRICE 30,例 符号常量举例Ex02_01.c #define PRICE 30 main() int num,total; num=10; total=num*PRICE; printf(“total=%d“,total); ,运行结果:total=300,整型直接常量的类型的确定原则: (1) 根据其值所在范围确定其数据类型 (2) 在整常量后加字母l或L,认为它是long int 型常量,例 30000 为int型 65536 为long int 型,例 12 与 12L,实型直接常量的类型的确定原则: (1) 默认为双精度double型 (2) 在实型常量后加字母f或F,认为它是浮点型(float)常量,用单引号括起来的单个普通字符或转义字符,如: a A ? n 101,字符常量的值:该字符的ASCII码值,转义字符:反斜线后面跟一个字符或一个代码值表示,如:A101x4165,如: A65, a97,048 , n10,例 转义字符举例Ex02_02.c main() printf(“101 x42 Cn“); printf(“I say:“How are you?“n“); printf(“C Programn“); printf(“Turbo C“); ,运行结果:(屏幕显示) A B C Isay:”How are you?” C Program Turbo C,用双引号(“”)括起来的字符序列,每个字符串尾自动加一个 0 作为字符串结束标志,0,字符常量与字符串常量不同,2019/11/13,16,变量,概念:其值可以改变的量 变量名与变量值 变量定义的一般格式: 数据类型 变量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;,main() int a,b=2; float data; a=1; data=(a+b)*1.2; printf(“data=%fn”,data); ,例1:int student; stadent=19; Undefined symbol statent in function main,例2:float a,b,c; c=a%b; Illegal use of floating point in function main,2019/11/13,17,基本数据类型变量,例:a=D; /* a=68; */ x=A+5; /* x=65+5; */ s=!+G /* s=33+71; */,没有字符串变量,用字符数组存放,2019/11/13,18,变量和常量定义的一个例子,例 /*Ex02_04.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,2019/11/13,19,显式转换(强制转换) 形式:(类型名)(表达式) 得到所需类型的中间变量,原变量类型不变,2.3 不同类型间的数据转换,隐式转换 转换场合 运算转换 赋值转换 输出转换 函数调用转换,例:char ch; int i; float f; double d; long l;,ch/I + f*d - (f+i) + 10+a + i*f - d/l,int a; float f=1.2; a=1.2; a的值为? 1,int a=65; char ch=A; float f=6.57; printf(“a=%c,ch=%d,f=%d“,a,ch,f); 输出结果:a=A,ch=65,f=6,int max(int x, int y) int a; a=max(3.14, A);,例 (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,2019/11/13,20,2.3 运算符的表达式,2019/11/13,21,学习运算符的注意点: 运算符功能 与运算量关系 要求运算量个数: 要求运算量类型: 运算符优先级别 结合方向 结果的类型,2019/11/13,22,(1) 算术运算符和表达式 基本算术运算符: + - * / % 功能:完成基本的算术运算 与2个运算量运算,为二目运算符 %的两侧必须为整数 优先级:- (2) * / % (3) + - (4) 结合方向:从左向右 (-为负号:从右向左) 结果类型:整数相除结果为整数,例 5/2 = -5/2.0 =,例 5/2 = 2 -5/2.0 = -2.5,例 5%2 = -5%2 = 1%10 = 5%1 = 5.5%2,例 5%2 = 1 -5%2 = -1 1%10 = 1 5%1 = 0 5.5%2 (),2019/11/13,23,(1) 算术运算符和表达式 自增和自减运算符:+ - 功能:使变量自己增加或减少1 单目运算符: 前置:先自增或自减,再取变量 后置:先取变量,再自增或自减 优先级: - + - (2) * / % (3) + - (4) 结合方向:从右至左 注意点: + - 不能用于常量和表达式, 5+,(a+b)+,例 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;,例 j=3; k=+j; /j=4,k=4 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;,例 j=3; k=+j; /j=4,k=4 j=3; k=j+; /j=4,k=3 j=3; printf(“%d”,+j); j=3; printf(“%d”,j+); a=3; b=5;c=(+a)*b; a=3; b=5;c=(a+)*b;,例 j=3; k=+j; /j=4,k=4 j=3; k=j+; /j=4,k=3 j=3; printf(“%d”,+j); /4 j=3; printf(“%d”,j+); a=3; b=5;c=(+a)*b; a=3; b=5;c=(a+)*b;,例 j=3; k=+j; /j=4,k=4 j=3; k=j+; /j=4,k=3 j=3; printf(“%d”,+j); /4 j=3; printf(“%d”,j+); /3 a=3; b=5;c=(+a)*b; a=3; b=5;c=(a+)*b;,例 j=3; k=+j; /j=4,k=4 j=3; k=j+; /j=4,k=3 j=3; printf(“%d”,+j); /4 j=3; printf(“%d”,j+); /3 a=3; b=5;c=(+a)*b; /a=4,c=20 a=3; b=5;c=(a+)*b;,例 j=3; k=+j; /j=4,k=4 j=3; k=j+; /j=4,k=3 j=3; printf(“%d”,+j); /4 j=3; printf(“%d”,j+); /3 a=3; b=5;c=(+a)*b; /a=4,c=20 a=3; b=5;c=(a+)*b; /a=4,c=15,例 -i+ i=3; printf(“%d”,-i+);,例 -i+ -(i+) i=3; printf(“%d”,-i+); /-3,2019/11/13,24,(2) 赋值运算符和表达式 基本赋值运算符: = 格式:变量标识符 = 表达式 功能:将一个数据(常量、变量或表达式)的值给一变量 复合赋值运算符: 符号:+= -= *= /= %= = &= = |= 含义: exp1 op= exp2 exp1 = exp1 op exp2 优先级:14 结合方向:从右向左 左侧必须是变量,不能是常量或表达式 赋值转换规则:使赋值号右边表达式值自动转换成其左边变量的类型 赋值表达式的值与变量值相等,且可嵌套,例 a=3; d=func(); c=d+2;,例: a=12; a+=a-=a*a;,例: a=12; a+=a-=a*a; /a=-264 等价于a=a+(a=a-(a*a),例 int a=2; a%=4-1; a+=a*=a-=a*=3;,例 int a=2; a%=4-1; a+=a*=a-=a*=3; /a=0 等价于a=a+(a=a*(a=a-(a=a*3),例 3=x-2*y; a+b=3;,例 int i; i=2.56; /结果i=2;,例 float f; int i; i=10; f=i; 则 f=10.0,例: a=b=c=5 a=(b=5) a=5+(c=6) a=(b=4)+(c=6) a=(b=10)/(c=2),例: a=b=c=5 /表达式值为5,a,b,c值为5 a=(b=5) a=5+(c=6) a=(b=4)+(c=6) a=(b=10)/(c=2),例: a=b=c=5 /表达式值为5,a,b,c值为5 a=(b=5) /b=5,a=11 a=5+(c=6) a=(b=4)+(c=6) a=(b=10)/(c=2),例: a=b=c=5 /表达式值为5,a,b,c值为5 a=(b=5) /b=5,a=11 a=5+(c=6) /表达式值为11,c=6,a=11 a=(b=4)+(c=6) a=(b=10)/(c=2),例: a=b=c=5 /表达式值为5,a,b,c值为5 a=(b=5) /b=5,a=11 a=5+(c=6) /表达式值为11,c=6,a=11 a=(b=4)+(c=6) /表达式值10,a=10,b=4,c=6 a=(b=10)/(c=2),例: a=b=c=5 /表达式值为5,a,b,c值为5 a=(b=5) /b=5,a=11 a=5+(c=6) /表达式值为11,c=6,a=11 a=(b=4)+(c=6) /表达式值10,a=10,b=4,c=6 a=(b=10)/(c=2) /表达式值5,a=5,b=10,c=2,a+=3 a=a+3 x*=y+8 x=x*(y+8) x%=3 x=x%3,2019/11/13,25,(3) 逗号运算符和表达式 功能:串接多个独立的表达式 格式:表达式1, 表达式2, , 表达式n 结合方向:从左向右 优先级:15 逗号表达式的值:表达式n的值 用途:常用于循环for语句中,例 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=3*5,a*4 /a=15,表达式值60 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=3*5,a*4 /a=15,表达式值60 a=3*5,a*4,a+5 /a=15,表达式值20 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=3*5,a*4 /a=15,表达式值60 a=3*5,a*4,a+5 /a=15,表达式值20 x=(a=3,6*3) /赋值表达式,表达式值18,x=18 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=3*5,a*4 /a=15,表达式值60 a=3*5,a*4,a+5 /a=15,表达式值20 x=(a=3,6*3) /赋值表达式,表达式值18,x=18 x=a=3,6*a /逗号表达式,表达式值18,x=3 a=1;b=2;c=3; printf(“%d,%d,%d”,a,b,c); printf(“%d,%d,%d”,(a,b,c),b,c);,例 a=3*5,a*4 /a=15,表达式值60 a=3*5,a*4,a+5 /a=15,表达式值20 x=(a=3,6*3) /赋值表达式,表达式值18,x=18 x=a=3,6*a /逗号表达式,表达式值18,x=3 a=1;b=2;c=3; printf(“%d,%d,%d”,a,b,c); /1,2,3 printf(“%d,%d,%d”,(a,b,c),b,c);,例 a=3*5,a*4 /a=15,表达式值60 a=3*5,a*4,a+5 /a=15,表达式值20 x=(a=3,6*3) /赋值表达式,表达式值18,x=18 x=a=3,6*a /逗号表达式,表达式值18,x=3 a=1;b=2;c=3; printf(“%d,%d,%d”,a,b,c); /1,2,3 printf(“%d,%d,%d”,(a,b,c),b,c); /3,2,3,例: /*Ex02_05.c*/ #include main() int x,y=7; float z=4; x=(y=y+6,y/z); printf(“x=%dn,y=%d“,x,y); ,运行结果:x=3,y=13,2019/11/13,26,(4) 关系运算符和表达式 功能:比较两个常量、变量或表达式的值的大小 符号: = != 结合方向:从左向右 优先级:= (6) = != (7) 关系表达式的值:逻辑“真”和“假”,用1和0表示 用途:循环语句和选择语句中,例 ca+b /c(a+b) ab!=c /(ab)!=c a=bc /a=(bc),例 int a=3,b=2,c=1,d,f; ab (ab)=c b+cb f=abc,例 int a=3,b=2,c=1,d,f; ab /表达式值1 (ab)=c b+cb f=abc,例 int a=3,b=2,c=1,d,f; ab /表达式值1 (ab)=c /表达式值1 b+cb f=abc,例 int a=3,b=2,c=1,d,f; ab /表达式值1 (ab)=c /表达式值1 b+cb f=abc,例 int a=3,b=2,c=1,d,f; ab /表达式值1 (ab)=c /表达式值1 b+cb /d=1 f=abc,例 int a=3,b=2,c=1,d,f; ab /表达式值1 (ab)=c /表达式值1 b+cb /d=1 f=abc /f=0,例:若a=0; b=0.5; x=0.3; 则 a=x=b的值为,例:若a=0; b=0.5; x=0.3; 则 a=x=b的值为 0,例:5278在C中是允许的,值为,例:5278在C中是允许的,值为 0,例:int i=1, j=7,a; a=i+(j%4!=0); 则a=,例:int i=1, j=7,a; a=i+(j%4!=0); 则a= 2,例 a0 结果为 A100 结果为,例 a0 结果为 1 A100 结果为 0,关系运算请注意: (1) 应避免对实数作相等或不等的判断 如 1.0/3.0*3.0=1.0 结果为,关系运算请注意: (1) 应避免对实数作相等或不等的判断 如 1.0/3.0*3.0=1.0 结果为 0,关系运算请注意: (1) 应避免对实数作相等或不等的判断 如 1.0/3.0*3.0=1.0 结果为 0 可改写为:fabs(1.0/3.0*3.0-1.0)1E-6,(2) 注意区分“=”与“=” 如 int a=0,b=1; if(a=b) printf(“a equal to b”); else printf(“a not equal to b”);,(2) 注意区分“=”与“=” 如 int a=0,b=1; if(a=b) printf(“a equal to b”); else printf(“a not equal to b”);,(2) 注意区分“=”与“=” 如 int a=0,b=1; if(a=b) printf(“a equal to b”); else printf(“a not equal to b”);,(2) 注意区分“=”与“=” 如 int a=0,b=1; if(a=b) printf(“a equal to b”); else printf(“a not equal to b”);,2019/11/13,27,(5) 逻辑运算符和表达式 功能:判断逻辑值和对逻辑值进行操作 符号: ! & | 逻辑运算真值表 结合方向:!从右向左, & |从左向右 优先级:! (2) & (11) | (12) 逻辑运算中: 运算参量:0表示假,非0表示真 运算结果:0表示假,1表示真 短路特性:逻辑表达式求解时,并非所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符,例 ab&xy a=b|x=y !a|ab,例 ab&xy a=b|x=y !a|ab,例 ab&xy /(ab)&(xy) a=b|x=y !a|ab,例 ab&xy /(ab)&(xy) a=b|x=y /(a=b)|(x=y) !a|ab,例 ab&xy /(ab)&(xy) a=b|x=y /(a=b)|(x=y) !a|ab /(!a)|(ab),例 a=4; b=5; !a a&b a|b !a|b 4&0|2 53&2|84-!0 c&d,例 a=4; b=5; !a /0 a&b a|b !a|b 4&0|2 53&2|84-!0 c&d,例 a=4; b=5; !a /0 a&b /1 a|b !a|b 4&0|2 53&2|84-!0 c&d,例 a=4; b=5; !a /0 a&b /1 a|b /1 !a|b 4&0|2 53&2|84-!0 c&d,例 a=4; b=5; !a /0 a&b /1 a|b /1 !a|b /1 4&0|2 53&2|84-!0 c&d,例 a=4; b=5; !a /0 a&b /1 a|b /1 !a|b /1 4&0|2 /1 53&2|84-!0 c&d,例 a=4; b=5; !a /0 a&b /1 a|b /1 !a|b /1 4&0|2 /1 53&2|83)&2|(8(4-(!0), 1 c&d,例 a=4; b=5; !a /0 a&b /1 a|b /1 !a|b /1 4&0|2 /1 53&2|83)&2|(8(4-(!0), 1 c&d /1,例 a&b&c /只在a为真时,才判别b的值 /只在a、b都为真时,才判别 c的值,例 a&b&c /只在a为真时,才判别b的值 /只在a、b都为真时,才判别 c的值 a|b|c /只在a为假时,才判别b的值 /只在a、b都为假时,才判别 c的值,例 a (m=ab)&(n=cd),例 a (m=ab)&(n=cd) /结果m=0,n=1,2019/11/13,28,(6) 条件运算符和表达式 功能:相当于条件语句,但不能取代if语句 形式: exp1 ? exp2 : exp3 结合方向:从左向右 优先级:13 条件运算符可嵌套 结果类型:取exp1、exp2和exp3中最高者,例 求 a+|b| printf(“a+|b|=%dn”,b0?a+b:a-b);,例 x0?1:(x0?-1:0),例 (a=b)?Y:N (x%2=1)?1:0 (x=0)?x:-x (c=a & c=z)?c-a+A:c,例 x?a:b /x=0,表达式值为b; x0,表达式值为a xy?1:1.5 /xy ,值为1.0; xy ,值为1.5,
展开阅读全文
相关资源
相关搜索

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


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

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


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