《第2讲数据类型、运算符和表达式.ppt》由会员分享,可在线阅读,更多相关《第2讲数据类型、运算符和表达式.ppt(37页珍藏版)》请在三一办公上搜索。
1、全国计算机等级考试 2C课程,第二讲 数据类型、运算符和表达式,2023/8/7,作者:张旭仟 版权所有 欢迎盗版,2,标识符,标识符在C程序中的作用:标识符可用作变量名、符号名、函数名、数组名、文件名,以及具有专门含义的名字。C程序中标识符的组成:合法的标识符只能由字母、数字、下划线组成,且第一个字符必须是字母或下划线(数字不能打头)如sum、day、Date、lotus_1_2_3、_above都是合法的标识符。类别:C语言中标识符共有三种:关键字、预定义标识符和用户标识符,2023/8/7,作者:张旭仟 版权所有 欢迎盗版,3,关键字C程序中关键字共有39个,由系统定义,代表固定含义,不
2、能另作他用。,auto break case char constcontinue default do double else,enum extern float for gotoif int long register return,short signedsizeofstaticstructswitchtypedefunsignedunionvoid,volatilewhileasminterrupthugenearcdeclfarpascal,标识符,注意:所有关键字均为小写。,2023/8/7,作者:张旭仟 版权所有 欢迎盗版,4,预定义标识符预定义标识符在C语言中具有特定含义,如C
3、语言提供的库函数名,如:printf、defineC语言允许用户另作他用,但这将使这些标识符失去系统规定的原意,所以建议不要另作他用。用户标识符用户标识符是指由用户根据需要定义的标识符。用户标识符一般用来给变量、函数、数组、文件等命名说明:命名原则是见名知意,不宜混淆,如l与I,o与0注意C语言中,标识符大小写敏感不能使用关键字作用户标识符,标识符,2023/8/7,作者:张旭仟 版权所有 欢迎盗版,5,小练习:,1、以下选项中,能用作用户标示符的是(2009年9月)A)viod B)8_8C)_0_ D)unsigned2、以下C语言用户标识符中,不合法的是(2010年3月)A)_1B)Aa
4、BcC)a_bD)ab,2023/8/7,作者:张旭仟 版权所有 欢迎盗版,6,小练习:,3、阅读以下程序#includemain()int case;float printf;printf(“请输入2个数:”);scanf(“%d%f”,4、该程序在编译时产生错误,其出错原因是A)定义语句出错,case是关键字,不能用作用户自定义标示符B)定义语句出错,printf不能用作用户自定义标示符C)定义语句出错,scanf不能作为输入函数使用D)定义语句出错,printf不能输出case的值,2023/8/7,作者:张旭仟 版权所有 欢迎盗版,7,C语言的数据类型,C语言提供了丰富的数据类型,总结
5、如下:,2023/8/7,作者:张旭仟 版权所有 欢迎盗版,8,整型常量(整常数)书写形式:十进制整数:由数字09和正负号表示.如 123,-456,0八进制整数:由数字0开头,后跟数字07表示.如0123,011十六进制整数:由0 x开头,后跟09,af,AF表示.如0 x123,0Xff,整型常量的类型整型常量也有基本整型(int)、长整型(long)和无符号整型(unsigned)之分,由其值所在的范围确定。例如:在VC+环境下,2147483647为int型;4294967295为unsigned;而4294967296为long型。此外,若在整常量后加上字母l或L,无论数值大小都视其
6、为long 型常量。例如:12L、34l。,常 量,2023/8/7,作者:张旭仟 版权所有 欢迎盗版,9,实型常量(实数或浮点数)表示形式:十进制数形式:(必须有小数点)如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 型,常 量,2023/8/7,作者:张旭仟 版权所有 欢迎盗版,10,字符常量定义:用单引号括起来的单个普通字符或转义字符。如 a A?n
7、 101都是合法的符号常量。字符常量的值是该字符的ASCII码值。常用字符的ASCII码值如下表所示,常 量,2023/8/7,作者:张旭仟 版权所有 欢迎盗版,11,常 量,转义字符转义字符,是一类特殊的字符常量,在反斜线“”后面跟一个字符或一个代码值表示。常见转义字符如下:,2023/8/7,作者:张旭仟 版权所有 欢迎盗版,12,常 量,转义字符普通字符常量都可以用3位8进制数表示的转义字符或2位16进制数表示的转义字符表示。例如:字符常量A可以表示为101,或x41。其中 A 的ASCII码值是65,而101和x41,分别是65的8进制和16进制表示。请看下面的例子注意:483 超出了
8、取值范围,不能表示任何字符。,例如:101-A 012-n 376-x61-a 60-0 483-(),2023/8/7,作者:张旭仟 版权所有 欢迎盗版,13,要特别注意字符常量与字符串常量的区别,字符串常量定义:用双引号(“”)括起来的字符序列存储:每个字符串尾自动加一个 0 作为字符串结束标志,常 量,2023/8/7,作者:张旭仟 版权所有 欢迎盗版,14,常 量,符号常量定义格式:#define 符号常量 常量,例如:#define PRICE 30main()int num,total;num=10;total=num*PRICE;printf(total=%d“,total);,
9、运行结果:total=300,说明:符号常量一般采用大写字母定义语句属宏定义预处理命令,不是C语句,所以不用“;”结束,2023/8/7,作者:张旭仟 版权所有 欢迎盗版,15,小练习:,1、以下选项中,能用作数据常量的是(2009年3月)A)o115 B)0118 C)1.5e1.5 D)115L2、以下选项中不能作为C语言合法常量的是(2008年9月)A)cd B)0.1c+6C)a D)0113、有以下程序,其中k的初值为八进制数main()int k=011;printf(%dn,k+);程序运行后的输出结果是A)12 B)11C)10D)9,2023/8/7,作者:张旭仟 版权所有
10、欢迎盗版,16,变 量,变量的概念:程序运行时其值可以改变的量就叫做变量。每个变量都要用一个变量名(即用户标识符)来标识。例如:a,b,area 等。,变量的定义方法:数据类型 变量1,变量2,变量n;,决定分配字节数和数的表示范围,变量名必须是合法的标识符,例如:int a,b,c;float data;,2023/8/7,作者:张旭仟 版权所有 欢迎盗版,17,变 量,变量的赋值对于变量,既可以先定义后赋值,也可以在定义的同时赋初值。允许在一条语句中一次定义多个相同类型的变量注意:int x=y=z=1;语句是不允许的。,例如:int a;a=4;/*先定义后赋值*/float data=
11、3.67;/*在定义的同时赋初值*/int x=1,y=2,z;/*也可以在一条语句中一次定义多个相同类型的变量*/,2023/8/7,作者:张旭仟 版权所有 欢迎盗版,18,变 量,变量的赋值编译程序将根据变量类型为其分配固定字节数的内存单元如果在定义时没有给变量赋初值,则变量的值是一个随机值,2023/8/7,作者:张旭仟 版权所有 欢迎盗版,19,变 量,定义变量的语句,必须位于函数的开头,例如:main()int a,b=2;a=1;float data;data=(a+b)*1.2;printf(“data=%fn”,data);,例如:main()int a,b=2;float d
12、ata;a=1;data=(a+b)*1.2;printf(“data=%fn”,data);,由于该定义变量的语句出现在赋值语句“a=1;”之后,程序编译时将会出错,经过这样的修改,错误排除了!,2023/8/7,作者:张旭仟 版权所有 欢迎盗版,20,变 量,对于变量,必须先定义,后使用,例如:int student;stadent=19;由于以上语句中,stadent并没有定义,因此在编译时出现如下错误:Undefined symbol statent in function main,2023/8/7,作者:张旭仟 版权所有 欢迎盗版,21,变 量,对于变量,应该先赋值,再调用,例如:
13、float a,b,c;c=a%b;以上语句中,由于a,b都没有赋值,因此在编译时将出现如下错误:illegal use of floating point in function main,2023/8/7,作者:张旭仟 版权所有 欢迎盗版,22,整型变量整型变量有short、int和long几种。整型变量占字节数随机器不同而不同。VC+环境下int和long都是占用4个字节,short占用2个字节。,实型变量float:占4字节,提供7位有效数字;double:占8字节,提供1516位有效数字,字符型变量字符变量存放字符的ASCII码对c字符变量,可以直接与int数据间进行算术运算,例如:
14、float a=111111111111.111111111f;double b=111111111111.111111111;printf(a=%fnb=%lfn,a,b);执行结果:a=111111110656.000000 b=111111111111.111110,例如:a=D;/*a=68;*/x=A+5;/*x=65+5;*/s=!+G/*s=33+71;*/,注意:C语言中没有字符串变量,用字符数组存放,变量的类型,2023/8/7,作者:张旭仟 版权所有 欢迎盗版,23,可用sizeof(标识符)测量变量所占的字节数。如:在VC+环境下,int a,b;b=sizeof(a);
15、b的值为4要书写长整形常量,可在后面加后缀l或L,如 12L。书写无符号整数常量,可在数字末尾加上U或u,如 12u。书写长整形无符号常量,应该加上后缀lu或LU,如 12LU。注意:无符号常量不能表示小于0的数。如:-200u是不合法的。,整形数据的分类,2023/8/7,作者:张旭仟 版权所有 欢迎盗版,24,小练习:,1、以下选项中正确的定义语句是(2008年9月)A)double a;b;B)double a=b=7 C)double a=7,b=7;D)double,a,b;2、若函数中有定义语句:int k;,则(2009年3月)A)系统将自动给k赋初值0B)这时k中值无定义C)系
16、统将自动给k赋初值-1D)这时k中无任何值3、C源程序中不能表示的数制是(2008年9月)A)二进制 B)八进制 C)十进制 D)十六进制,2023/8/7,作者:张旭仟 版权所有 欢迎盗版,25,对于有符号整数,内存中最高位用1表示负号,用0表示正数,整数在内存中的存储形式,对于正整数采用原码形式存放。例如:对于整数5,在内存中存储为0000000000000101,对于负整数采用补码形式存放。例如:对于整数-5,要在内存中存储需要两步:先求出整数5的原码的反码,即1111111111111010再对以上反码加1得到补码,即1111111111111011,2023/8/7,作者:张旭仟 版
17、权所有 欢迎盗版,26,对于无符号整数,16个二进制位全部用来存放整数,最高位不再表示符号。无符号整数没有负数,取值范围是04294967295,把补码转换为十进制数的步骤如下:先对补码按位取反。如-5的补码是1111111111111011,取反后得到0000000000000100;转换成十进制数。如对上步二进制数转换后得到十进制正整数4;在得到的十进制数前加上“-”号,即得到负整数-4;再对得到的负数减去1,最终得到结果就是-5,整数在内存中的存储形式,2023/8/7,作者:张旭仟 版权所有 欢迎盗版,27,基本算术运算符:+-*/%结合方向:从左向右优先级:-*/%-+-(2)(3)
18、(4)说明:“-”可为单目运算符时,右结合性两整数相除,结果为整数%要求两侧均为整型数据,思考:5%2=?-5/2=?1%10=?5%1=?5.5%2=?,答案:5%2=1-5/2=-21%10=15%1=05.5%2=(),算术表达式,2023/8/7,作者:张旭仟 版权所有 欢迎盗版,28,自增、自减运算符:+-作用:使变量值加1或减1种类:前置+i,-i(先执行i+1或i-1,再使用i值)后置 i+,i-(先使用i值,再执行i+1或i-1)说明:+-不能用于常量和表达式,如5+,(a+b)+-结合方向:自右向左优先级:-+-*/%-+-(2)(3)(4)-i+-(i+)。例如:i=3;p
19、rintf(“%d”,-i+);/-3j+k;(j+)+k;,算术表达式,2023/8/7,作者:张旭仟 版权所有 欢迎盗版,29,简单赋值运算符符号:=格式:变量标识符=表达式作用:将一个数据(常量或表达式)赋给一个变量复合赋值运算符种类:+=、-=、*=、/=、%=、=、&=、=、|=含义:exp1 op=exp2 exp1=exp1 op exp2例如:a+=3 a=a+3 x*=y+8 x=x*(y+8)x%=3 x=x%3,赋值表达式,2023/8/7,作者:张旭仟 版权所有 欢迎盗版,30,思考题:a=b=c=5 a=(b=5)a=5+(c=6)a=(b=4)+(c=6)a=(b=
20、10)/(c=2),赋值运算符说明:结合方向:自右向左优先级:14左侧必须是变量,不能是常量或表达式赋值转换规则:使赋值号右边表达式值自动转换成其左边变量的类型赋值表达式的值与变量值相等,且可嵌套,/表达式值为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,赋值表达式,例如:3=x-2*y;a+b=3;/这样的表达式都是错误的,例如:int i;i=2.56;/结果i的值为2;,2023/8/7,作者:张旭仟 版权所有 欢迎盗版,31,形式:表达式1,表达式2,表达式n结合性:从左向右优
21、先级: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=15,表达式值60,/a=15,表达式值20,/赋值表达式,表达式值18,x=18,/逗号表达式,表达式值18,x=3,/1,2,3,/3,2,3,逗号表达式,2023/8/7,作者:张旭仟 版权所有 欢迎盗版,32,例题:#include main()int x,y=7;float
22、z=4;x=(y=y+6,y/z);printf(x=%dn,x);,逗号表达式,运行结果:x=3,2023/8/7,作者:张旭仟 版权所有 欢迎盗版,33,转换规则:不同类型数据运算时先自动转换成同一类型什么情况下发生运算转换。不同类型数据混合运算时赋值转换。把一个值赋给与其类型不同的变量时输出转换。输出时转换成指定的输出格式函数调用转换。实参与形参类型不一致时转换,不同类型数据间的转换,2023/8/7,作者:张旭仟 版权所有 欢迎盗版,34,例 char ch;int i;float f;double d;,ch/i+f*d-(f+i),不同类型数据间的转换,2023/8/7,作者:张旭
23、仟 版权所有 欢迎盗版,35,小练习:,1、以下不能正确表示代数式2ab/cd 的C语言表达式是(2008年3月)A)2*a*b/c/d B)a*b/c/d*2 C)a/c/d*b*2 D)2*a*b/c*d2、设有定义:int x=2;,以下表达式中,值不为6的是(2008年9月)A)x*=x+1B)x+,2*xC)x*=(1+x)D)2*x,x+=23、若有定义语句:int:x=10;,则表达式x-=x+x的值为(2009年9月)A)-20 B)-10 C)0 D)10,2023/8/7,作者:张旭仟 版权所有 欢迎盗版,36,小练习:,4、若有定义:double a=22;int i=0,k=18;,则不符合C语言规定的赋值语句是(2010年3月)A)a=a+,i+;B)i=(a+k)=(i+k);C)i=a%11;D)i=!a;5、若有表达式(w)?(-x):(+y),则其中与w等价的表达式是(2008年9月)A)w=1 B)w=0 C)w!=1 D)w!=06、表达式:(int)(double)9/2)-(9)%2 的值是A)2 B)3 C)4D)D7、若有语句double x=17;int y;当执行y=(int)(x/5)%2;之后y的值为。,2023/8/7,作者:张旭仟 版权所有 欢迎盗版,37,Thank listen!,