第2讲数据类型、运算符和表达式_第1页
第2讲数据类型、运算符和表达式_第2页
第2讲数据类型、运算符和表达式_第3页
第2讲数据类型、运算符和表达式_第4页
第2讲数据类型、运算符和表达式_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

全国计算机等级考试2C课程第二讲数据类型、运算符和表达式5/21/20241标识符标识符在C程序中的作用:标识符可用作变量名、符号名、函数名、数组名、文件名,以及具有专门含义的名字。C程序中标识符的组成:合法的标识符只能由字母、数字、下划线组成,且第一个字符必须是字母或下划线(数字不能打头)如sum、day、Date、lotus_1_2_3、_above都是合法的标识符。类别:C语言中标识符共有三种:关键字、预定义标识符和用户标识符5/21/20242关键字C程序中关键字共有39个,由系统定义,代表固定含义,不能另作他用。autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunsignedunionvoidvolatilewhileasminterrupthugenearcdeclfarpascal标识符注意:所有关键字均为小写。5/21/20243预定义标识符预定义标识符在C语言中具有特定含义,如C语言提供的库函数名,如:printf、defineC语言允许用户另作他用,但这将使这些标识符失去系统规定的原意,所以建议不要另作他用。用户标识符用户标识符是指由用户根据需要定义的标识符。用户标识符一般用来给变量、函数、数组、文件等命名说明:命名原则是见名知意,不宜混淆,如l与I,o与0注意C语言中,标识符大小写敏感不能使用关键字作用户标识符标识符5/21/20244

小练习:1、以下选项中,能用作用户标示符的是(2009年9月) A)viod B)8_8 C)_0_ D)unsigned2、以下C语言用户标识符中,不合法的是(2010年3月) A)_1 B)AaBc C)a_b D)a—b5/21/20245

小练习:3、阅读以下程序#include<stdio.h>main(){ intcase;floatprintf; printf(“请输入2个数:”); scanf(“%d%f”,&case,&printf); printf(“%d%f\n”,case,printf);}4、该程序在编译时产生错误,其出错原因是A)定义语句出错,case是关键字,不能用作用户自定义标示符B)定义语句出错,printf不能用作用户自定义标示符C)定义语句出错,scanf不能作为输入函数使用D)定义语句出错,printf不能输出case的值5/21/20246C语言的数据类型C语言提供了丰富的数据类型,总结如下:C数据类型基本类型构造类型指针类型空类型void定义类型typedef数值类型字符类型char枚举类型enum整型浮点型单精度型float双精度型double短整型short长整型long整型int数组结构体struct共用体union5/21/20247整型常量(整常数)书写形式:十进制整数:由数字0~9和正负号表示.如123,-456,0八进制整数:由数字0开头,后跟数字0~7表示.如0123,011十六进制整数:由0x开头,后跟0~9,a~f,A~F表示.如0x123,0Xff整型常量的类型整型常量也有基本整型(int)、长整型(long)和无符号整型(unsigned)之分,由其值所在的范围确定。例如:在VC++环境下,2147483647为int型;4294967295为unsigned;而4294967296为long型。此外,若在整常量后加上字母l或L,无论数值大小都视其为long型常量。例如:12L、34l。常量5/21/20248实型常量(实数或浮点数)表示形式:十进制数形式:(必须有小数点)如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型常量5/21/20249字符常量定义:用单引号括起来的单个普通字符或转义字符。如‘a’‘A’‘?’‘\n’‘\101’都是合法的符号常量。字符常量的值是该字符的ASCII码值。常用字符的ASCII码值如下表所示常量5/21/202410常量转义字符转义字符,是一类特殊的字符常量,在反斜线“\”后面跟一个字符或一个代码值表示。常见转义字符如下:<转义字符含义\n\v\r\a\‘\ddd\t\b\f\\\“\xhh转义字符含义换行垂直制表软回车响铃单引号3位8进制数代表的字符水平制表退格换页反斜线双引号2位16进制数代表的字符5/21/202411常量转义字符普通字符常量都可以用3位8进制数表示的转义字符或2位16进制数表示的转义字符表示。例如:字符常量‘A’可以表示为’\101’,或’\x41’。其中‘A’的ASCII码值是65,而101和x41,分别是65的8进制和16进制表示。请看下面的例子注意:‘\483’超出了取值范围,不能表示任何字符。例如:‘\101’-----------‘A’‘\012’----------’\n’‘\376’-----------’’‘\x61’----------’a’‘\60’-----------’0’‘\483’----------(

)5/21/202412要特别注意字符常量与字符串常量的区别字符串常量定义:用双引号(“”)括起来的字符序列存储:每个字符串尾自动加一个‘\0’作为字符串结束标志hello\0例:字符串“hello”在内存中aa\0例‘a’“a”例:空串“”\0charch;ch=“A”;charch;ch=‘A’;常量5/21/202413常量符号常量定义格式:#define

符号常量常量例如:#definePRICE30main(){intnum,total;num=10;total=num*PRICE;printf("total=%d“,total);}运行结果:total=300说明:符号常量一般采用大写字母定义语句属宏定义预处理命令,不是C语句,所以不用“;”结束5/21/202414

小练习:1、以下选项中,能用作数据常量的是(2009年3月) A)o115 B)0118 C)1.5e1.5 D)115L2、以下选项中不能作为C语言合法常量的是(2008年9月) A)´cd´ B)0.1c+6 C)〞\a〞 D)´\011´3、有以下程序,其中k的初值为八进制数main(){ intk=011; printf("%d\n",k++);}程序运行后的输出结果是

A)12

B)11 C)10

D)95/21/202415变量变量的概念:程序运行时其值可以改变的量就叫做变量。每个变量都要用一个变量名(即用户标识符)来标识。例如:a,b,area等。变量的定义方法:

数据类型变量1[,变量2,…,变量n];决定分配字节数和数的表示范围变量名必须是合法的标识符例如:inta,b,c;floatdata;5/21/202416变量变量的赋值对于变量,既可以先定义后赋值,也可以在定义的同时赋初值。允许在一条语句中一次定义多个相同类型的变量注意:intx=y=z=1;语句是不允许的。例如:inta;a=4;/*先定义后赋值*/floatdata=3.67;/*在定义的同时赋初值*/intx=1,y=2,z;/*也可以在一条语句中一次定义多个相同类型的变量*/5/21/202417变量变量的赋值编译程序将根据变量类型为其分配固定字节数的内存单元如果在定义时没有给变量赋初值,则变量的值是一个随机值编译程序根据变量类型为其分配指定字节的内存单元…...地址inta=1,b=-3,c;abc4字节4字节4字节地址地址…...内存1-3

随机数5/21/202418变量定义变量的语句,必须位于函数的开头例如:main(){inta,b=2;a=1;

floatdata;

data=(a+b)*1.2;printf(“data=%f\n”,data);}例如:main(){inta,b=2;floatdata;

a=1;data=(a+b)*1.2;printf(“data=%f\n”,data);}由于该定义变量的语句出现在赋值语句“a=1;”之后,程序编译时将会出错经过这样的修改,错误排除了!5/21/202419变量对于变量,必须先定义,后使用例如:intstudent;stadent=19;由于以上语句中,stadent并没有定义,因此在编译时出现如下错误:

Undefinedsymbol‘statent’infunctionmain

5/21/202420变量对于变量,应该先赋值,再调用例如:floata,b,c;c=a%b;以上语句中,由于a,b都没有赋值,因此在编译时将出现如下错误:

illegaluseoffloatingpointinfunctionmain

5/21/202421整型变量整型变量有short、int和long几种。整型变量占字节数随机器不同而不同。VC++环境下int和long都是占用4个字节,short占用2个字节。实型变量float:占4字节,提供7位有效数字;double:占8字节,提供15~16位有效数字字符型变量字符变量存放字符的ASCII码对c字符变量,可以直接与int数据间进行算术运算例如:floata=111111111111.111111111f;doubleb=111111111111.111111111;printf("a=%f\nb=%lf\n",a,b);执行结果:a=111111110656.000000b=111111111111.111110例如:a=‘D’;/*a=68;*/x=‘A’+5;/*x=65+5;*/s=‘!’+‘G’/*s=33+71;*/注意:C语言中没有字符串变量,用字符数组存放变量的类型5/21/202422类型名称占用字节数值范围[signed]int[signed]short[int][signed]long[int]Unsigned[int]unsignedshort[int]unsignedlong[int]424424-2147483648~2147483647-32768~32767-2147483648~21474836470~42949672950~655350~4294967295可用sizeof(标识符)测量变量所占的字节数。如:在VC++环境下,int

a,b;b=sizeof(a);b的值为4要书写长整形常量,可在后面加后缀l或L,如12L。书写无符号整数常量,可在数字末尾加上U或u,如12u。书写长整形无符号常量,应该加上后缀lu或LU,如12LU。注意:无符号常量不能表示小于0的数。如:-200u是不合法的。整形数据的分类5/21/202423

小练习:1、以下选项中正确的定义语句是(2008年9月)A)doublea;b; B)doublea=b=7C)doublea=7,b=7; D)double,a,b;2、若函数中有定义语句:intk;,则(2009年3月)A)系统将自动给k赋初值0 B)这时k中值无定义C)系统将自动给k赋初值-1 D)这时k中无任何值3、C源程序中不能表示的数制是(2008年9月)A)二进制 B)八进制 C)十进制 D)十六进制5/21/202424对于有符号整数,内存中最高位用1表示负号,用0表示正数整数在内存中的存储形式对于正整数采用原码形式存放。例如:对于整数5,在内存中存储为00101对于负整数采用补码形式存放。例如:对于整数-5,要在内存中存储需要两步:先求出整数5的原码的反码,即1111111111111010再对以上反码加1得到补码,即11111111111110115/21/202425对于无符号整数,16个二进制位全部用来存放整数,最高位不再表示符号。无符号整数没有负数,取值范围是0~4294967295把补码转换为十进制数的步骤如下:先对补码按位取反。如-5的补码是1111111111111011,取反后得到00100;转换成十进制数。如对上步二进制数转换后得到十进制正整数4;在得到的十进制数前加上“-”号,即得到负整数-4;再对得到的负数减去1,最终得到结果就是-5整数在内存中的存储形式5/21/202426基本算术运算符:+-*/%结合方向:从左向右优先级:----->*/%----->+-(2)(3)(4)

说明:“-”可为单目运算符时,右结合性两整数相除,结果为整数%要求两侧均为整型数据思考:5%2=?-5/2=?1%10=?5%1=?5.5%2=?答案:5%2=1-5/2=-21%10=15%1=05.5%2=()算术表达式5/21/202427自增、自减运算符:++--作用:使变量值加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;printf(“%d”,-i++);//-3j+++k;

(j++)+k;算术表达式5/21/202428简单赋值运算符符号:=格式:变量标识符=表达式作用:将一个数据(常量或表达式)赋给一个变量复合赋值运算符种类:+=、-=、*=、/=、%=、<<=、>>=、&=、^=、|=含义:exp1op=exp2

exp1=exp1opexp2例如:a+=3

a=a+3x*=y+8

x=x*(y+8)x%=3

x=x%3赋值表达式5/21/202429思考题:a=b=c=5a=(b=5)a=5+(c=6)a=(b=4)+(c=6)a=(b=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;//这样的表达式都是错误的例如:inti;i=2.56;//结果i的值为2;5/21/202430形式:表达式1,表达式2,……表达式n结合性:从左向右优先级:15逗号表达式的值:等于表达式n的值用途:常用于循环for语句中思考题:a=3*5,a*4a=3*5,a*4,a+5x=(a=3,6*3)x=a=3,6*aa=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逗号表达式5/21/202431例题:#include<stdio.h>main(){intx,y=7;floatz=4;x=(y=y+6,y/z);printf("x=%d\n",x);}逗号表达式运行结果:x=35/21/202432转换规则:不同类型数据运算时先自动转换成同一类型什么情况下发生运算转换。不同类型数据混合运算时赋值转换。把一个值赋给与其类型不同的变量时输出转换。输出时转换成指定的输出格式函数调用转换。实参与形参类型不一致时转换不同类型数据间的转换5/21/202433doublefloatlongunsignedintchar,short低高表示必定的转换运算对象类型不同时的转换例charch;inti;flo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论