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

下载本文档

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

文档简介

第二章数据类型、运算符与表达式2.1C语言的数据类型2.2常量与变量2.3整型数据2.4浮点型数据2.5字符型数据2.6各类数值型数据间的混合运算2.7算术运算符和算术表达式2.8逗号运算符和逗号表达式2.1C语言的数据类型

C语言程序设计

第二章数据类型、运算符与表达式

字符型(char)短整型(short)

整型整型(int)

基本类型

数值类型长整型(long)

单精度型(float)

实型

双精度型(double)

数据类型

数组类型([])

构造类型

结构体类型(struct)

共用体类型(union)

枚举类型(enum)

指针类型(*)

空类型(void)2.2常量与变量2.2.1常量(Constant)常量:在程序运行过程中,其值不能被改变的量。常量分为字面常量和符号常量。字面常量:是在程序中直接引用的数据。例100、021、0x21、3.14、3.14E-4、'A'、'+'符号常量:用符号(标识符)代表的常量。定义形式:#define标识符常量数据

C语言程序设计

第二章数据类型、运算符与表达式<>[例2.1]在程序中使用符号常量#include<stdio.h>#definePRICE30

main(){

intnum,total;

num=10;

total=num*PRICE;

printf("total=%d\n",total);}

C语言程序设计

第二章数据类型、运算符与表达式关于符号常量程序编译时,符号常量被值替换。符号常量的值在程序运行过程中不能被改变。

PRICE=40;

/*错误*/符号常量不能指定类型。intPRICE;/*错误*/

优点:含义清楚,方便修改。<>例#include<stdio.h>#definePI3.14

main(){

float

radius,perimeter,area;

radius=10;

perimeter=2*3.14*radius;

area=3.14*radius*radius;}

C语言程序设计

第二章数据类型、运算符与表达式<>PIPI标识符

用来标识变量名、符号常量名、函数名、类型名、文件名等的有效字符序列。

定义规则:标识符只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线。

如:_1yearmonthstudent_namesum0

M.D.Jones$123#a3b?ca=b

注:(1)在C语言中,大小写字母不等效;(2)用户自定义的标识符不能与保留字(关键

字)同名。

C语言程序设计

第二章数据类型、运算符与表达式<>关键字(保留字)

具有特定含义的标识符,用户不能用来作自定义标识符。C语言中的关键字较少,由ANSI标准推荐的关键字有32个。与数据类型有关的(14):

charintfloatdoublesignedunsignedshort

longvoidstructuniontypedef

enumsizeof与存储类别有关的(4):

autoexternregisterstatic与程序控制结构有关的(12):

dowhileforifelseswitchcasedefaultgoto

continuebreakreturn

C语言程序设计

第二章数据类型、运算符与表达式2.2.2变量变量是指在程序运行中,其值可以被改变的量。变量包括变量名和变量值变量名代表计算机内存中的某一存储空间,而该存储空间中存放的数据就是变量的值。

C语言程序设计

第二章数据类型、运算符与表达式<>使用变量时必须“先定义,后使用”。定义形式:

类型标识符变量名1[,变量名2,变量名3,...];

C语言程序设计

第二章数据类型、运算符与表达式自己设定,满足标识符的规定。如:int,float,char;不可省例如inta,b,c;

floatx,y;

charc1,c2;或intc1,c2;2.3.1整型常量的表示形式整型常量有三种形式:十进制形式:与数学上表示相同。例如100,-12,0八进制形式:由数字0~7组成,在数码前加0。例如014,056十六进制形式:由数字0~9、A~F组成,在数码前加0X(数字0和字母X,大小写均可)。例如0X12,0xAF

C语言程序设计

第二章数据类型、运算符与表达式2.3

整型数据进制间的换算二、八、十六进制数到十进制数的换算采用按权展开法。

例:(11001.11)2

=1*24+1*23+1*20+1*2-1+1*2-2=25.75

(33.50)8=3*81+2*80+5*8-1=26.625

(2AB.F)16

=2*162+10*161+11*160+15*16-1=683.93

C语言程序设计

第二章数据类型、运算符与表达式十进制数到二进制数的换算整数部分采用“除2取余,逆序排列”法。具体做法:十进制整数除以2得到商和余数,继续商除以2得到商和余数,如此进行直到商为零。所得余数逆序排列即为二进制整数。小数部分采用“乘2取整,顺序排列”法。具体做法:用2乘十进制小数,可以得到积,将积的整数部分取出,再用2乘余下的小数部分,如此进行,直到积中的小数部分为零,或者达到所要求的精度为止。然后把取出的整数部分按顺序排列起来即为二进制小数。

例:233.8125=(11101001.1101)2

C语言程序设计

第二章数据类型、运算符与表达式二进制数到八、十六进制数的换算,三位二进制数对应一位八进制数、四位进制书数对应一位十六进制,所以转换时以小数点为分界线,整数部分从低到高,小数部分从高到底按位数分组,每组对应的八或十六进制数码。

例:(11101001.1101)2

=(011101001.110100)2

=

(351.64)8

(11101001.1101)2

=(11101001.1101)2

=(E9.D)16

C语言程序设计

第二章数据类型、运算符与表达式整型变量的分类(IBMPC)

基本型(整型)int

短整型short或shortint

长整型long或longint

无符号整型:unsigned

无符号短整型:unsignedshort

无符号长整型:unsignedlong

注意:C语言标准没有规定整型变量在计算机内存中所占的字节数,它与具体的机器和操作系统有关。

C语言程序设计

第二章数据类型、运算符与表达式2.3.2

整型变量整数类型的有关数据:

类型类型说明符长度数的范围基本型

int

2字节-32768~32767短整型

short

2字节-215~215-1长整型

long

4字节-231~231-1无符号整型

unsigned

2字节0~65535无符号短整型

unsignedshort

2字节0~65535无符号长整型

unsignedlong

4字节0~232-1

C语言程序设计

第二章数据类型、运算符与表达式TurboC2.0对整数类型的内存分配

类型类型说明符长度数的范围基本型

int

4字节-2147483648~2147483648短整型

short2字节-215~215-1长整型

long

4字节-231~231-1无符号整型

unsigned4字节0~232-1无符号短整型unsignedshort

2字节0~65535无符号长整型unsignedlong

4字节0~232-1

C语言程序设计

第二章数据类型、运算符与表达式VisualC++6.0对整数类型的内存分配整型变量的定义与使用

[例2.2]

#include<stdio.h>

voidmain(){inta,b,c,d;

unsignedu;

a=12;b=-24;u=10;

c=a+u;d=b+u;

printf("a+u=%d,b+u=%d\n",c,d);

}

程序运行显示:a+u=22,b+u=-14

C语言程序设计

第二章数据类型、运算符与表达式说明:可以看到不同种类的整型数据可以进行算术运算

数据在内存中以二进制形式存放。原码、反码和补码

计算机对数值的表示有原码、补码和反码三种形式,但以补码方式存储。原码:最左边符号位用数码0表示正号,用数码1表示负号,数值部分一般按二进制形式表示。例[10]原=00001010

[-10]原=10001010

反码:正数的反码和原码相同,负数的反码是对该数的原码除符号位外各位求反。例[10]反=[10]原=00001010

[-10]反=11110101

C语言程序设计

第二章数据类型、运算符与表达式2.3.3

整型数据在内存中的存放形式补码:正数的补码与原码相同,负数补码则先对该数的原码取反(得反码),然后末位加1

例 [10]补=[10]原=00001010

[-10]原=10001010

[-10]反=11110101

[-10]补=11110110

C语言程序设计

第二章数据类型、运算符与表达式intx;x=10;long

y;y=-10;2000200120022005xy内存内存地址2003200400001010

00000000

11111111

11111111

11111111

11110110

C语言程序设计

第二章数据类型、运算符与表达式

数据超出表示范围的情况称为溢出。

[例2.3]整型数据的溢出

#include<stdio.h>

voidmain()

{inta,b;

a=32767;

b=a+1;

printf("%d,%d\n",a,b);

}TC环境下运行结果:32767,-327682.3.4

整型数据的溢出

C语言程序设计

第二章数据类型、运算符与表达式a0111111111111111b1000000000000000在将一个整型常量赋给整型变量时如何进行类型匹配?请注意以下几点:如果一个整常量的值在-32768~+32767范围内,认为它是int型。

如果一个整常量的值超过了上述范围,而在-2147483648~2147483647范围内,则认为它是1ongint型。一个非负值的整常量后面加字母u或U,认为是unsigned型整变量(只要它的范围不超过变量的表数范围即可,防止溢出)

C语言程序设计

第二章数据类型、运算符与表达式2.3.5整型常量的类型

在一个整常量后面加一个字母l或L则认为是longint型常量。例如123l、432L。

C语言程序设计

第二章数据类型、运算符与表达式main(){intx;x=10*9*8*7*6*5*4*3*2*1;printf("%d",x);}例

看看下面程序的输出是什么?运行结果:-3036longintx;%Ld

C语言程序设计

第二章数据类型、运算符与表达式2.4.1浮点型常量的表示形式十进制形式:由数字和小数点组成;

例如:3.44..3指数形式:由“十进制小数”+“e(或E)”+“十进制数整数”三部分组成。

例如:13.5e-6表示13.5×10-6注:(1)小数点不能单独出现;例如:0.=.0=0=0.0(2)e或E的两边必须有数,且其后面必须为

整数;例如:6E0.2e56E

C语言程序设计

第二章数据类型、运算符与表达式2.4

浮点型数据浮点型变量的分类

单精度float

4字节(32位)

10-38~1038

双精度double

8字节(64位)

10-308~10308

floatx,y;/*指定x、y为单精度实型变量*/

doublez;/*指定z为双精度实型变量*/

x=123456.711;z=123456.789;

float型变量只能接受7位有效数字,最后两位数字不起作用。

double型变量能接受16位有效数字。

C语言程序设计

第二章数据类型、运算符与表达式2.4.2

浮点型变量浮点型数据在内存中的存放形式

浮点型数据是按照指数形式存储的。系统把一个浮点型数据分成小数部分和指数部分,分别存放。指数部分采用规范化的指数形式。小数部分用二进制表示,指数部分用2的幂次来表示。

C语言程序设计

第二章数据类型、运算符与表达式浮点型数据的舍入误差

由于浮点型变量是由有限的存储单元组成的,因此能提供的有效数字总是有限的。在有效位以外的数字将被舍去。由此可能会产生一些误差。

[例2.4]

#include<stdio.h>

voidmain()

{floata;

a=3.141592612;

printf("%f\n",a);

}

运行结果:

3.141593

C语言程序设计

第二章数据类型、运算符与表达式说明:一个单精度浮点型变量只能保证的有效数字是7位有效数字,后面的数字是无意义的,并不准确地表示该数。

例浮点型数据的舍入误差

#include<stdio.h>

voidmain()

{floata,b;

a=123456.789e5;

b=a+20;

printf("a=%f,b=%f\n",a,b);

}

C语言程序设计

第二章数据类型、运算符与表达式说明:应当避免将一个很大的数和一个很小的数直接相加或相减,否则就会“丢失”小的数C编译系统将浮点型常量作为双精度来处理,分配8个字节。

例如:f=2.45678*4523.65

系统先把2.45678和4523.65作为双精度数,然后进行相乘的运算,得到的乘也是一个双精度数。精度高,速度慢。如果把一个浮点型常量赋给一个单精度变量f系统给出警告,警告不影响连接和运行最后结果,但只取其结果前7位赋给浮点型变量f。

C语言程序设计

第二章数据类型、运算符与表达式2.4.3

浮点型常量的类型如是在数的后面加字母f或F(如1.65f,654.87F),编译系统就会把它们按单精度处理。

例如:floatf,g;f=3.1415926;/*警告*/g=1.65f;

C语言程序设计

第二章数据类型、运算符与表达式2.5.1字符型常量

在计算机中,字符的使用占有很大的比重。字符包括各种文字、数字、符号和控制字符。用单引号括起来的一个字符;例如:'A'、'1'、'?'、'a'等。

‘abc’、“a”用单引号括起来的由反斜杠(\)引导的转义字符。

例如:'\n'、'\101'、'\x41'

C语言程序设计

第二章数据类型、运算符与表达式只能是英文的单引号在统计字符个数时,只能记为一个字符2.5

字符型数据转义字符表

C语言程序设计

第二章数据类型、运算符与表达式字符形式含义ASCII码\n换行10\t水平制表位9\b退格8\r回车,将当前位置移到本行开头13\\、\'、\"代表字符“\”、“'”、“"”92、39、34\ddd1~3位八进制数所代表的字符\xhh1~2位十六进制数所代表的字符1234567812345678[例2.5]转义字符的使用

main()

/*注@代表空格*/{printf("@@ab@c\t@de\rf\tg\n");

printf("h\ti\b\bj@@@k");

}

设一个输出区占8列,试分析输出结果。

C语言程序设计

第二章数据类型、运算符与表达式@

@

a

b

@

c@

d

efg

hij@

@

@

k2.5.2字符变量字符变量用来存放字符常量。字符变量在内存中占一字节,取值范围0~255。字符变量的定义和使用

charc1,c2;

c1='a';c2='b';

例charc1=‘a’;

C语言程序设计

第二章数据类型、运算符与表达式对字符的编码方法很多,使用最普遍的是美国标准信息交换码,简称ASCII码。一个字符常量存放到一个字符变量中,实际上并不是把该字符的字型放到内存中去,而是将该字符的相应的ASCII代码放到存储单元中。这样使字符型数据和整型数据之间可以通用。

C语言程序设计

第二章数据类型、运算符与表达式2.5.3

字符数据在内存中的存放形式[例2.6]向字符变量赋予整数main(){charc1,c2;c1=97;c2=98;printf("%c%c\n",c1,c2);printf("%d%d\n",c1,c2);}该例的输出是:ab

97

98

相当于:c1=‘a’;c2=‘b’;因为:字符以ASCII码存放,‘a’的ASCII码为97,'b'的ASCII码为98。

C语言程序设计

第二章数据类型、运算符与表达式Turboc中的字符变量是有符号的,表示范围是–128---127

main(){charc;c=130;ptintf("%c%d\n",c,c);}输出结果是:e–126将charc;改成unsignedcharc;输出结果变成:e130

C语言程序设计

第二章数据类型、运算符与表达式[例2.7]/*大小写字母转换的程序*/main(){charc1,c2;

c1='a';c2='b';c1=c1-32;c2=c2-32;printf("%c%c\n",c1,c2);}

C语言程序设计

第二章数据类型、运算符与表达式2.5.4字符串常量字符串常量:双引号括起来的字符序列。

例:"Howdoyoudo."

"CHINA"

"a"

"$123.45"注意区别字符常量和字符串常量例:charc;c='a';c="a";/*错误*/

C语言程序设计

第二章数据类型、运算符与表达式字符串常量在内存中的存放:每一个字符均以其ASCII码存放,且最后添加一个“空字符”\0.

"CHINA"存放在内存中的情况是:

注意:\0是系统自动加入的,不需用户输入。C中没有专门的字符串变量,要把字符串常量存储在变量中,必须使用字符数组。

C语言程序设计

第二章数据类型、运算符与表达式CHINA\02.6各类数据混合运算整型、实型(包括单、双精度)、字符型数据可以混合运算。

10+'a'+1.5-8765.1234*'b'混合运算时,先转换成同一种类型,然后进行运算。

C语言程序设计

第二章数据类型、运算符与表达式高doublefloatlongunsigned低intchar,short例:inti;

floatf;doubled;longe;10+'a'+i

*

f-d

/

e高doublefloatlongunsigned低intchar,shortintdoubledouble上述转换过程是由系统自动进行的。

C语言程序设计

第二章数据类型、运算符与表达式doubledouble2.7

算术运算符和算术表达式2.7.1C语言运算符和C表达式简介C运算符

算术运算符:+-*/%++--

关系运算符:<<===>>=!=

逻辑运算符:!&&||

位运算符:<<>>~|^&

赋值运算符:=及其扩展

条件运算符:?:

逗号运算符:,

指针运算符:*&

求字节数:sizeof

强制类型转换:(类型)

分量运算符:.->

下标运算符:[]

其它:()-

C语言程序设计

第二章数据类型、运算符与表达式C表达式

表达式是由操作数和运算符组成的序列。根据运算符分为以下几类:

算术表达式:如2+3-4.7*6.3

关系表达式:x<0

y<=z+6

逻辑表达式:x>0&&y>0

赋值表达式:a=

7

条件表达式:x>0?y=2:y=3

逗号表达式:a=2,b=3,c=4

C语言程序设计

第二章数据类型、运算符与表达式2.7.2主要的算术运算符和算术表达式基本的算术运算符+

加法运算符,如3+5

正值运算符,如+3-

减法运算符,如5-2

负值运算符,如-3*

乘法运算符,如3*5/

除法运算符,如5/3%

模运算符(求余运算符),如7%4

C语言程序设计

第二章数据类型、运算符与表达式说明:如果除号两边是整数,即做整除。%两边必须为整数算术表达式和运算符的优先级与结合性算术表达式:用算术运算符和括号将运算对象连接起来、符合C语法规则的式子。

如:a*b/c-1.5+'a'运算符的优先级:先乘除、后加减;括号优先。运算符的结合性:运算对象两侧的运算符优先级相同时,运算符的结合方向。左结合性:结合方向为从左至右(先左后右,简称左结合)。算术运算符为左结合。右结合性:结合方向为从右至左(先右后左,简称右结合)。赋值运算符=为右结合。例:a=b=c=d=3

C语言程序设计

第二章数据类型、运算符与表达式例已知:floata=2.0;intb=6,c=3;求解:a*b/c-1.5+’A’+abs(-5)=?12.0/34.0-1.52.5+65(int)67.5572.5

C语言程序设计

第二章数据类型、运算符与表达式强制类型转换

运算符两侧的数据类型不同时,先自动进行类型转换,再运算。程序员可以强制进行某种转换。

一般形式:

(类型名)(表达式)

例(double)a;(int)(x+y);(int)x+y(float)(5%3);

(int)a;

C语言程序设计

第二章数据类型、运算符与表达式说明:强制类型转换时,得到一个所需类型的中间变量,原来变量的类型不发生变化。[例2.8]强制类型转换#include<stdio.h>voidmain(){float

x;

inti;x=3.6;i=(int)x;printf(“x=%f,i=%d”,x,i);}

C语言程序设计

第二章数据类型、运算符与表达式自增、自减运算符

自增:使变量的值加1;自减:使变量的值减1。

++i;/*在使用i之前使i加1*/

--i;/*在使用i之前使i减1*/

i++;/*在使用i之后使i加1*/

i--;/*在使用i之后使i减1*/

i=3;

j=++i;/*先使i加1,再赋给j。*/k=i++;

print(“j=%d,i=%d,k=%d”,j,i,k);

输出为:j=4,

温馨提示

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

评论

0/150

提交评论