C语言程序设计:第二章 数据类型、运算符与表达式_第1页
C语言程序设计:第二章 数据类型、运算符与表达式_第2页
C语言程序设计:第二章 数据类型、运算符与表达式_第3页
C语言程序设计:第二章 数据类型、运算符与表达式_第4页
C语言程序设计:第二章 数据类型、运算符与表达式_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

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

文档简介

第二章数据类型、运算符与表达式C语言的数据类型常量与变量整型数据实型数据字符型数据各种类型数据的混合运算算术表达式赋值运算符与赋值表达式逗号运算符与逗号表达式2.1C语言的标识符标识符:用来标识变量、常量、函数名、数组、文件名的有效字符序列。是程序员定义的。标识符的组成C语言规定:由字母、下划线开头的,由字母、数字和下划线组成的字符串。TurboC中,标识符最长可以32个字符。(8个)注意:对大小写敏感!(a,A被认为是两个不同的标识符)。不能使用C的关键字做标识符。MSC可识别8个字符,TC可识别32个字符。习惯上变量名、函数名用小写,符号常量用大写字母。为防止与系统内部使用的标识符混淆,请不要用下划线开头。判断有效标识符Sum,PI,average,day,student,data,_

gun,lotus_1_2_3,fly_1M.M.day,$Dot,#33,number-of-moves,a>b,char2.2C的数据类型数据类型基本类型构造类型指针类型空类型整型字符型实型枚举型单精度双精度数组结构体共用体2.3常量与变量常量与符号常量变量一、常量与符号常量常量:在程序运行过程中,值不能被修改的量。如1,2,3,4,-1,-200,1.56,0.5688常量整型常量实型常量字符型常量如:1,2,3,2000,12345等如:1.234,0.888,1.23E+003等如:‘a’,’b’,’c’,’G’,’L’等常量与符号常量符号常量:用一个C标识符来表示一个常量,该标识符叫符号常量。例如:#definePI3.1415926main(){floatr=5.0,s;s=PI*r*r;printf(“s=%f\n”,s);}符号常量定义在程序中直接引用符号常量注意:符号常量的引入使得程序易读、易修改。符号常量不同于变量,其值一经定义在其定义域内就不许对其再赋值修改。习惯上符号常量名用大写字母。2.3.2变量变量:在程序运行中,值能够被改变的量。每个变量都有一个名字,叫变量名。变量名必须是有效的标识符。每个变量在计算机内存中占据一定的存储单元。

注意区分:变量名和变量值的概念。变量定义:C语言规定:所有的变量必须“先定义后使用”保证数据类型的正确使用保证变量在同一作用域的唯一性保证正确分配单元每个变量根据定义的类型,在编译时分配存储单元。变量名大小写有区别:如:reader和Reader认为是两个不同的变量。2.4整型数据整型常量整型变量整型常量的类型一、整型常量在C语言中,整型常量的表示方式有:十进制、八进制、十六进制三种表示方式。十进制:如123,456,0等等八进制:以0开头的数,表示八进制。如:0123相当于(123)8相当于(83)10十六进制:以0x开头的数,表示为十六进制数,如:0x11=>(11)16=>(17)10

0xA16D,0x45AC等等二、整型变量在C语言中,整型变量的种类:基本型:int短整型:short[int]或short长整型:long[int]或long无符号整型:unsigned[int]整型如要定义一个无符号的长整型变量abd:

unsignedlongintabd;各类整型变量能表示的数值范围:类型位数数值范围

int16-215~215-1(-32768~32767)shortint16同上

longint32-231~231-1(-2,147,483,648~2,147,483,647)

unsignedint160~216(0~65535)unsignedshort160~216(0~65535)unsignedlong320~232(0~4,294,967,285)必须记住必须记住0111111111111111int符号位32767215-1=327670111111111111111+11000000000000000注意:此时相当于215,由于刚才加1则原值应等于215-1=32767符号位为1表示负数,0表示正数。32768=215注意:在计算机中,用补码表示一个负数。在第一位为1表示负数,则上例为:-1。1000000000000000-327681111111111111111-1取反0111111111111111加11000000000000000符号位:1表示负数相当于215=32768A)B)取反0000000000000000加10000000000000001-32768相当于1-1

unsignedint1111111111111111没有符号位。

unsignedint为无符号整型,没有符号位!其大小为1111111111111111加1110000000000000000相当于216原大小为:216-1=65535整型变量的定义:所有变量在使用前必须先定义后使用。定义的格式:

类型

变量名1,变量名2,……变量名n;

例如:

intx,y;shortw,z,s;longintwidth,length;(举例说明)整型常量的类型:根据不同类型整型量的取值范围,确定整型变量的类型:在-32768~32767之间:

可以赋给int或short或long变量大于上述范围,而在-2,147,483,648~2,147,483,647之间:可以赋给long变量在常量中没有unsigned类型,但所有非负的整型常量都可以赋给unsigned类型的变量。可以在数字后加“l”或“L”来表示整型常量。如123L,56L等。123与123L数值相同,但存储格式不同。2.5实型数据实型常量实型变量实型常量在C语言中,带有小数点的数叫实型数,也叫浮点数。浮点数有两种表示方式:十进制:10.13,234.56,123.,.02等。(必须有小数点!)指数(科学)表示方式:123e4或123E4表示123x104

e或E的前面必须有数字,其后面必须是整数。实型变量C语言的实型变量可以分为:单精度:float占4bytes(32bits)

有效位数7位10-38~1038双精度:double占8bytes(64bits)

有效位数15~16位10-308~10308实型变量的定义:

floatx,y;doublez,w,v;实型常量实型常量不分float或double型,它是根据常量赋给的实型变量类型的有效位数,在常量中进行截取。实型变量使用时注意有效

位数2.6字符型数据字符型常量用单引号括起来的一个字符,叫字符型常量,如’a’、’D’、’?’等。

特殊字符常量:以“\”开始的字符,如\n、\t、\’等。类似的特殊字符有:

\n回车+换行\r回车\t跳到下一制表位(1,9,17..)\f走纸换页\v竖向跳格

\b退格

那么,如果要输出一个单引号、反斜杠,怎样表示?\\表示输出一个“\”\’表示输出一个单引号也可以用:\开头加上数字来表示一个字符\ddd\开头的1~3位

八进制数字用来表示一个字符。\xhh用\x开头,1~2位

十六进制数字来表示一个字符。以\开头的,表示一个字符,在计算字符个数时也只能作为一个字符计算。

换行符跳格换行跳格换行如:printf(“Goodmorning!\n”);printf(“abc\tde\rf\tg\n”);运行结果:fabcgdePrintf(“\x41\x42\x43\x44\x45\n”);将输出什么字符?

printf(“\101\102\103\104\n”);什么意义?字符型变量字符型变量:用来存储一个字符型常量的变量。字符型变量的定义:charc1,c2;字符型变量的赋值:c1=‘a’;c2=‘b’;字符型变量的存储:一个字符型变量在内存中占一个字节,并以ASCII值存储。字符型变量的使用方法C语言中,字符型变量中的字符以ASCII值存储的。如‘A’在内存中保存是65

‘B’在内存中保存是66‘a’在内存中保存是97‘b’在内存中保存是98存取过程要进行转换:存到内存:把字符转换成ASCII从内存取:把ASCII转换成字符。能不能直接存ASCII或取出ASCII值?字符型变量的使用方法例如:main(){charch1,ch2;ch1=65;ch2=66;printf(“ch1=%cch2=%c\n”,ch1,ch2);}对变量ch1赋65对变量ch2赋66输出的结果:

ch1=Ach2=B字符型变量的使用方法既然字符变量是以ASCII存放在内存,那么它能否作为整型数参加运算?如:main(){intx,y;charc1,c2;x=400;y=500;c1=‘a’;c2=‘b’;x=x-c1;y=y-c2;printf(“x=%d,y=%d\n”,x,y);}运行结果:x=303,y=402字符型变量的使用方法反过来,字符变量能不能加、减整型变量、常量?如main(){charc1,c2;c1=‘\x61’;c2=‘\x62’;c1=c1-32;c2=c2-32;printf(“c1=%cc2=%c\n”,c1,c2);}运行结果:c1=Ac2=B记忆:‘a’=‘A’+32字符串常量字符串常量:以一对双引号括起来的零个或多个字符。如“Goodaftrenoon!”、”China”、”b”等字符常量与字符串常量不同。如“a”和‘a’。字符常量在内存中占一个字符,字符串在内存中要加上一个\0表示串结束的结束符。

a

a\0字符字符串字符串常量请指出下列错误:main(){charc1,c2,c3;c=‘a’;c2=“b”;c3=“China”;printf(“c=%c,c2=%c,c3=%c\n”,c1,c2,c3);}定义成字符型变量,不能用字符串常量赋值。注意:由于双引号是字符串的起止定界符,所以要想在字符串中包含双引号就必须使用转义字符\“。例如要输出:pleaseenter“Y”or“N”:Printf(“pleaseenter\”Y\”or\”N\”:”);

思考:字符常量与字符串的区别?\“字符常量与字符串区别定义不同。存储形式不同。可参加的运算不同。2.7变量赋初值在C中,可以在定义变量的同时对变量进行初始化。如main(){inta=3;floatf1=5.6;charc=‘k’;chard,e,l=‘p’;doubleg,p,s=7.899;unsignedlongx=123+4567;printf(“a=%d,f1=%f,c=%c”,a,f1,c);

}在定义时进行初始化初始化部分变量初始化的问题如:

inta=b=c=3;(vc,tc都报错!)

应改成:

inta=3,b=3,c=3;注意:变量的初始化不是在编译时完成,而是在执行时完成的。

如:

inta=1;相当于

inta;a=1;2.8不同数值间的混合运算在C中,所有的数值类型都可以在一起进行混合运算。它包括:

字符型、整型、单精度、双精度如:10+‘x’*1.5+5.6788/’c’*2000是合法的。不同数据类型转换

double

float

long

unsigned

int

char/short高低

doubled;floatf;charc;inti;longL;

c*i-f/d+L*d

c转换成int乘i

f转换成double除dL转换成double乘d

int

double

double转换成double

double例如:2.9算术运算符和算术表达式基本算术运算符:+、-、*、/、%注意:整数相除为整数。如果为其中一个为负数,如-8/3,则可能是-2或-3。多数机器向零取整。“-”号可以是减号,也可以是负值。%模运算(求余),只能用于整数运算。算术表达式运算符的优先级:算术表达式算术运算符的结合性:自左到右。结合性是C的一个特点。强制类型转换强制类型转换一般形式:(类型)(表达式)例如:(double)(k*p)

把k*p的结果强制转换成double型(int)(x+y)

把x+y的结果强制转换成int(int)x+y

把x转换成int后加上y强制类型转换例子

main(){intj,k;floaty;j=10;y=15.6;k=(int)y+j;/*不用类型转换如何?*/

printf(“y=%f,k=%d\n”,y,k);}(结果:y=15.6k=25)注意:有些可以用自动转换。

当自动类型转换不能满足要求时用强制类型转换。如:floatx;intk,j;x=10.6;k=3;j=(int)x%k;

自增、自减运算符++和--是两个C语言自加自减运算符。作用:使变量自增1或自减1。如:

k=0;k++;/*k的值为1*/

k=10;k--;/*k的值为9*/自增、自减运算符注意:++、--只能用于变量,不能用于表达式。

j++是合法的,(x+y)++是非法的。++、--可以放在变量的左边或右边,含义不同。

k=10;y=++k;/*k自加1后,把值赋给yk=11,y=11*/k=10;y=k++;/*把k的值赋给y,然后自加1

y=10,k=11*/

自增、自减运算符++、--的结合方向为“自右到左”,++、--优先级高于算术运算符(单目运算符高于双目运算符)。如:j=6;-j++;/*值为多少?-6*/

j=3;(j++)+(j++)+(j++)/*结果?12,9*/

j=3;(++j)+(++j)+(++j)/*结果?15,18*/

j=3;(j++)+(++j)+(j++)/*结果?13,12*/

j=1;k=1;j+++k

是(j++)+k

还是j+(++k)

编译系统“自左到右”取尽可能多个符号作为一个运算符。

printf表达式中自增、自减运算符在printf()中,参数的求解过程是“自右到左”。

k=5;printf(“%d,%d”,k,k++);/*结果为6,5*/

k=5;printf(“%d,%d”,(k++),(k++));/*值?*/2.10赋值运算符与赋值表达式一、“=”叫赋值运算符。其含义是将一个表达式运算的结果赋给一个变量。如

x=y+z二、在“=”两侧类型不一致,在赋值过程中要进行类型转换。(属于强制转换)实型→整型:舍去小数部分整型→实型:转变成对应的浮点型字符→整型:原值放在低8位,高8位的处理如下:

字符→整型高8位的处理系统把字符处理成无符号量或unsignedchar,则整型数的高8位补0。11111100

d=‘\374’0000000011111100

unsignedchar

int

k=0374系统把字符处理成带符号量,则用字符的最高位扩充高8位。111111001111111111111100011111000000000001111100-4124赋值过程的类型转换整型→长整型:进行符号位扩展。000000000011111000007600000000001111100000000000000000符号位扩展111111111111111011111111111111101111111111111111符号位扩展长整型→整型:截取低16位。000000000000000000000000001111100000000000111110-2-2赋值过程的类型转换无符号整型→长整型:高位补01111111111111110111111111111111000000000000000006553465534高位补0无符号整型←→整型:原样。111111111111111165535

unsignedint1111111111111111

int-1Ex1!!赋值过程的类型转换例1:

main(){unsignedinta=65535;intb;b=a;printf(“b=%d”,b);}

例2:

main(){unsignedinta;intb;b=-1;a=b;printf(“a=%d”,a);}思考:b变化了吗?三、复合赋值运算符:所有的双目运算符都可以放在赋值运算符“=”之前,形成复合赋值运算符。如:+=、-=、*=、/

温馨提示

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

评论

0/150

提交评论