第2章 数据类型.docx

上传人:b****4 文档编号:24761668 上传时间:2023-06-01 格式:DOCX 页数:33 大小:444.37KB
下载 相关 举报
第2章 数据类型.docx_第1页
第1页 / 共33页
第2章 数据类型.docx_第2页
第2页 / 共33页
第2章 数据类型.docx_第3页
第3页 / 共33页
第2章 数据类型.docx_第4页
第4页 / 共33页
第2章 数据类型.docx_第5页
第5页 / 共33页
点击查看更多>>
下载资源
资源描述

第2章 数据类型.docx

《第2章 数据类型.docx》由会员分享,可在线阅读,更多相关《第2章 数据类型.docx(33页珍藏版)》请在冰豆网上搜索。

第2章 数据类型.docx

第2章数据类型

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

本章首先介绍整型、实型和字符型概念。

常量和变量,整型常量、实型常量、字符型常量、字符串常量和符号常量,整型变量、实型变量和字符型变量。

其次介绍了C语言的基本运算符和表达式。

详细讲解算术运算符、赋值运算符、逗号运算符的优先级、结合性及使用。

详细讲解算术表达式、赋值表达式、逗号表达式,以及运算时各种数据类型转换问题等。

2.1C语言的字符集和保留字

2.1.1C语言的字符集

1、字母:

大、小写英文字母,注意C程序中严格区分大小写字母,如A和a是不同的字符。

2、数字:

0、1、…………、9。

3、图形符号:

29个图形(可见)符号,即!

"#%&'()-+*/^=<>~{|},.;:

?

[\]主要用作各种运算符。

4、空白符转义字符:

包括空格符、制表符、换行符等。

“”代表空格,程序中有时需要用到某些不可见或难以打印的字符,C语言中采用转义字符来表示,如:

“\n”表示一个换行符;字符\被称为转移符,表示其后的字符n具有特定的含义。

2.1.2保留字和词法约定

C语言中基本的词法单位是单词,共有6类单词:

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

(标准C规定有效长度为前31个字符。

2、保留字具有特定意义的字符串,通常也称为关键字。

3、运算符实现各种运算功能。

由一个或多个字符组成。

与变量和函数一起组成表达式。

4、分隔符有逗号和空格,保留字标识符间必须有空格分隔。

5、常量有数字常量、字符常量、字符串常量、符号常量和转义字符。

6、注释符以“/*”开头,以“*/”结尾,中间有其他字符。

1、标识符

(1)标识符由字母(A~Z,a~z)、数字(0~9)和下画线(_)组成.

(2)标识符的首字符必须是字母和下画线。

(3)标识符长度可以是一个或多个字符。

但只前8个有效。

(4)标识符不能和C语言的保留字及系统标准库函数同名。

(5)以下画线开头的标识符通常作系统内部函数和变量名。

(6)标识符区分大小写。

(7)标识符可随意,但命名尽量有意义,便于阅读。

合法的标识符:

sum,nameNAME

不合法的标识符:

12a  以数字开头

#we     以#开头

num$1    包含$字符

   sum1    中间有空格

2.1.3C语言的保留字

保留字又称关键字,指具有特定含义、专门用作系统的特定成分的一类标识符。

 标准C语言中共有32个关键字,按用途分为4类:

 1、数据类型:

如int、long、short、float、double、char、unsigned、signed、const、void、volatile、enum、struct、union、等

 2、语句定义流程控制:

如if、else、switch、case、do、while、for、goto、break、continue、return、default、typedef等

3、存储类:

如autoregisterexternstatic等

4、运算符:

 sizeof

注意关键字不能用作一般标识符,即不允许用作变量名或函数名等。

C语言的关键字都是小写的。

例如else是关键字,但ELSE就不是关键字。

 

2.2基本的数据类型

2.2.1C的数据类型

2.2.2C语言的基本数据类型

2.3常量

2.3.1常量和符号常量

1、常量的含义:

在程序运行过程中,其值保持不变的量。

常量不需要说明可直接使用

2、符号常量

1)含义:

用一个标识符表示的常量。

2)定义方法:

#define符号常量数值

例:

#definePRICE30

作用是定义符号常量PRICE的值为30,在程序任何地方用到PRICE符号常量的地方,系统将自动用常量30代替(注意是定义不是赋值,无=)。

定义符号常量的目的是为了提高程序的可读性,便于程序的调试、修改和纠错(如定义半径值便于计算园面积、球体积,求球表面积等)。

3)使用要点:

为区分符号常量与变量的不同,通常符号常量用大写字母表示(但不是必须)。

 

例l2-3-1:

#include

#definePRICE30

main()

{intnum=10,total;

total=num*PRICE;

printf("total=%d",total);

}

例l2-3-2:

#include

#definePI3.1415926/*定义PI值*/

main()

{

floatr,area;

scanf("%f",&r);

area=PI*r*r;/*代入PI值计算面积*/

printf("%f",area);

}

注意:

符号常量不是变量,没有赋值号,也不能重新赋值,在整个作用域内不能再改变。

2.3.2整型常量

C语言表示整型常量的方法有以下三种:

十进制整数:

用不带任何修饰的整数表示。

如123、-456、0等;

八进制整数:

以数字O开头的整数。

如O123、O11等;

十六进制整数:

以数字Ox开头的整数。

如Ox123、OX2ef;

八进制数和十六进制数一般是无符号数。

C语言中普通整型常量在机器中占用一个字长,但由于各机器字长不同,所以整数所能表示的数值范围也不同。

系统根据整型常量的具体数值确定其类型。

使用整型常量时要注意是否超出数值表示范围之外,如在一个16位字长的机器上,十进制整数的表示范围是-32768~32767,那么O200000和Ox10000均超出表示范围长整型常量。

整型常量后缀

长整型后缀:

l或L,如:

O2341l、9666L都是长整型常量。

无符号整型后缀:

u或U,如986u、OxfedU都是无符号整型常量。

二者可以同时使用,例如:

9999LU、O77777LU

2.3.3实型常量(浮点数)

十进制数形式的浮点数:

由数字和小数点组成。

如:

123.456、0.123、123.0、0.0、123.等。

指数形式的浮点数:

用字母e表示十进制指数中的10。

如:

123e3(表示123*103)、6.E5、.123e+4都是合法的浮点常量。

注意:

e字母前必须有数字,且e后的指数必须为整型。

如:

e3、2.1e3.5、.e3为不合法。

浮点常量如不带后缀,如上所示,都是双精度类型(double)。

浮点常量可带后缀f或F,如3.14f,那么其类型为单精度浮点型(float)

浮点常量可带后缀l或L,如3.14L,那么其类型为长双精度型(longdouble)

2.3.4字符常量

C语言规定以单引号‘’括起来的单个字符为字符常量(只能以单引号括起来,且只能是单个字符)。

如:

‘A’、‘a’、‘2’、’!

’等。

注意:

请区别‘A’和‘a’的不同;

‘’中的字符引用的是该字符的ASCII码值。

字符常量的存放形式与整数的存放形式相类似,故C中的字符数据与整型数据之间具有相通性。

转义字符常量(也称控制字符常量)

用‘\’开头的特殊形式的字符常量,用以产生一个动作。

如:

‘\n’、‘\r’、’\t’、’\v’、’\\’、’\123’等。

请同学们理解并记忆常用的转义字符,学会其使用方法。

2.3.5字符串常量(字符串字面量)

C语言中用双引号将一串字符括起来称为字符串常量。

如“asee”、“011”、“WearestudingC”等。

字符串常量可以看作是一个数组,这个数组的每个元素是一个个字符。

编译程序在编译源程序时自动在每个字符串末尾放空字符‘\0’,作为字符串结束标记。

要点:

·请区别”A”与’A’的不同。

(说明见书P34)

因为它们各自在内存中存放的长度不同。

”A”’A’

 

 

ASCII码为0的字符

 

2.4变量

1、变量的含义:

在程序执行过程中,其值可以被改变的量。

变量的构成:

变量名、变量值。

(注意区分变量名和变量值:

存储单元地址与存储单元内容)

 

2、变量的命名

 

每个变量具有一个名称,以区分不同的变量,变量名应是合法的标识符。

变量的命名原则:

按“见名知意”的原则。

3、不同类型变量的定义与使用

变量的定义方法:

变量类型变量名称

说明:

变量必须先定义、后使用。

应保证变量名使用正确(严格区分大小写)

定义后的变量,在编译时可为其分配相应大小的存储单元。

可在编译时依变量类型的定义检查该变量所进行的运算是否合法。

2.4.1整型变量及在内存中的存储形式

1、含义:

用于存放整型数据的变量,表示整型关键字为int。

2、分类:

int整型

shortint称为短整型,可简写为short

longint称为长整型,可简写为long

unsignedint称为无符号整型,可简写为unsigned

unsignedshort无符号短整型

unsignedlong无符号长整型

3、存储特点:

C语言没有具体规定各类型数据所占内存的字节数,根据机型不同而不同,一般以一个机器字长存放一个int型数据(见P36表2.3)。

4、整型变量的定义方法:

int变量名

C程序规定变量要先定义后使用,并且,所有变量的定义都要放在变量的说明部分。

例:

5、整型变量可表示的数据范围

不同类型机器所对应的不同形式整型数据的存储情况

IBMPC

PDP_11

VAX_11

IBM370

Honeywell

int

16(2B)

16

32

32

36

Short

16(2B)

16

16

16

36

Long

32(4B)

32

32

32

36

Unsignedint

16(2B)

16

32

32

36

Unsignedshort

16(2B)

16

16

16

36

Unsignedlong

32(4B)

32

32

32

36

IBMPC机器所对应的不同形式整型数据的存储范围

 

所占位数

数的范围

Int

16

-32768~32767即-215~(215-1)

Short[int]

16

-32768~32767即-215~(215-1)

Long[int]

32

-2147483648~2147483647

即-231~(231-1)

Unsignedint

16

0~65535即0~(216-1)

Unsignedshort

16

0~65535即0~(216-1)

Unsignedlong

32

0~4294967295即0~(232-1)

 

6、整型变量可参与的运算

算术运算:

+(加)-(减)*(乘) /(除)%(取模)

  其结果仍为整型,要特别说明的有:

 /  用于两个整数相除时,其运算结果只取整数商值,舍弃余数部分。

 %  只能用于整数运算,其结果为两个整数相除后的余数。

例如,有以下程序段

   intx,y,z;

x=12;y=4;z=5;

则下面表达式的结果为:

y/z结果为0

x/y结果为3

y%z结果为4

x%y结果为0

关系运算:

>大于,>=大于等于,<小于,

<=小于等于,==恒等于,!

=不等于

例l2-4-1:

/*求两个数之和*/

#include

voidmain()

{inta,b,sum;/*定义变量*/

a=123;b=456;

sum=a+b;

printf("sumis%d\n",sum);

}输出信息:

sumis579

整型变量可表示的数据范围

·参见课本P36页说明

·如果值在-32768至32767之间,可以赋值给int,shortint型变量。

·如果值超出上述范围在-2147483648至2147483647内,可以赋值给longint型变量。

·只有数值后面加上“l”或“L”的常量才认为是长整型常量。

如123L.

·无符号型变量只能存放不带符号的整数,而不能存放负数。

·无符号型整型变量中可以存放的数的范围比一般整型变量中数的范围扩大一倍。

即:

unsignedint无符号整型0至65535

unsignedshort无符号短整型0至65535

unsignedlong无符号长整型0至4294967295

 

整型数据的溢出

例l2-4-2阅读以下程序

程序运行结果为:

A=32767,b=-32768

为什么b的取值不是32768?

#include

voidmain()

{inta,b;

a=32767;

b=a+1;

printf("a=%d,b=%d",a,b);

}

因为a+1的类型为int类型,其表示范围为-32768~32767;而a+1在16位计算机中的结果表示成二进制为1000000000000000,最高位表示符号位,该二进制码是补码形式,是-32768的补码。

所以程序出错可能是数据范围出错。

定义为长整型就不会出错,如何更改?

见下面:

/*第二种改法*/

#include

voidmain()

{

inta;longb;

a=32767;

b=a+1L;

printf("a=%d,b=%ld",a,b);

}

/*第一种改法*/

#include

voidmain()

{

longa,b;

a=32767;

b=a+1;

printf("a=%ld,b=%ld",a,b);

}

 

注意printf中%d是用于输出int类型数据的,应该改为%ld.

2.4.2实型变量

1、含义:

用于存放实型(浮点型)数据的变量,其基本关键字为float。

2、定义方法:

Ø单精度实型变量的定义:

float实型变量名;

Ø双精度实型变量的定义:

double实型变量名;

Ø长双精度型变量的定义:

longdouble实型变量名;

如:

floatx,y;

doublez;

3、存储特点:

在PC机中

Øfloat型变量一般占4B内存空间;

Ødouble型变量一般占8B内存空间,15至16位有效数字。

ØLongdouble型变量一般占16B内存空间,24位有效数字。

4、说明:

一个实型常量可以赋值给一个float型变量、double型变量或longdouble型变量。

5、可参与运算

v  算术运算

   +     -    *     /

   其结果为浮点数。

   注意:

   5/2结果为2

5/2.0 结果为2.5

2.4.3字符型变量

1、含义:

用于存放字符常量

(存储ASCII码字符或8位二进制数)

2、定义方式:

char字符变量名

如:

1)charc1,c2;

c1=‘d’;

c2=‘s’;

2)unsignedcharsum;

3、字符数据在内存中的存放形式:

字符数据在内存中存放的是它的ASCII编码,通常占用一个字节。

当以字符格式输出时,输出为字符;当以整型输出时,输出为整型数。

char   数值范围-128~127  

unsignedchar 数值范围0~255

例l2-4-3:

#include

voidmain()

{charc1,c2;

c1='a';

c2='A';

printf("c1=%c,c2=%c\n",c1,c2);

printf("c1=%d,c2=%d\n",c1,c2);

}

程序输出为:

c1=a,c2=A

c1=97,c2=65

说明:

·字符数据与整型数据之间可以相互赋值。

·字符数据可以以字符或整型数据两种方式输出。

例l2-4-4:

将两个小写字母转换成大写字母。

#include

voidmain()

{charc1,c2;

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

c1=c1-32;c2=c2-32;

printf("c1=%c,c2=%c\n",c1,c2);

}

程序输出为:

c1=A,c2=B

大小写字母的ASCII码相差32,所可以通过运算进行大小写字母转换。

2.4.4变量的初始化与小结

1、整型、字符型、实型数据称为C的基本数据类型;

2、变量的初始化:

是指在说明变量类型的同时给变量赋值。

C允许在变量定义时直接用“=”对其进行赋值。

如:

intsum=0;

inta,b,c=5;

inta=3,b=3,c=5;

charc1=‘w’;

不能这样写:

inta=d=e=10;

3、C语言中没有定义字符串变量,对字符串的处理将采用数组或指针。

请注意区别字符与字符串的不同。

4、例:

运行结果:

Char1:

intx=224

unsignedx=21

shortx=12

Long4

Float4

Double8

例l2-4-5:

列出不同数据类型所占内存的长度。

#include

voidmain()

{printf("char%2d\n",sizeof(char));

printf("int%2d\n",sizeof(int));

printf("unsigned%2d\n",sizeof(unsigned));

printf("short%2d\n",sizeof(short));

printf("long%2d\n",sizeof(long));

printf("float%2d\n",sizeof(float));

printf("double%2d\n",sizeof(double));

}

其中:

sizeof是用于计算各种数据类型占用存储单元的字节数的运算符。

请同学们思考程序的运行结果,并分析(停半分钟再单击鼠标左键出结果)。

2.5基本运算符和表达式

 

运算符与表达式概述

一.运算符

1、含义:

完成特定运算功能的符号。

2、运算符的类型:

C语言的运算符范围很宽,除了控制语句和输入输出以外的几乎所有的基本操作都包含在其中。

–算术运算符赋值运算符

–逗号运算符关系运算符

–逻辑运算符

3、运算的优先级与结合性

二、表达式

1、含义:

由运算符和运算对象(常量、变量、函数)组成的式子。

2、表达式的种类:

–算术表达式:

如a+b+c

–赋值表达式:

如x=3.15

–逗号表达式:

如a=3,a+15

–关系表达式:

a>10

–逻辑表达式:

x>1&&x<10

C语言所使用的运算符的类型

 

算术运算符

+、-、*、/、%、++、--

关系运算符

>、<、==、>=、<=、!

=

逻辑运算符

、&&、||

位运算符

<<、>>、~、|、^、&

赋值运算符

=以及扩展运算符(+=,-=,*=,/=)

条件运算符

逗号运算符

指针运算符

*和&

求字节数运算符

sizeof()

强制类型转换

(类型)

分量运算符

.->

下标运算符

[]

其它

函数调用运算符()

2.5.1算术运算符和算术表达式(表达式的优先级与结合性)

1、优先级的含义:

决定运算的先后顺序的一组规则(课本P42)。

共分15级,1级最高。

()、sizeof+-!

~++--、*/%、+-、<<>>、<<=>>=、==!

=、&、∧、¦、&&、‖、?

:

、=+=-=*=/=%=&=|=∧=<<=>>=、,。

2、结合性的含义:

当表达式的运算具有相同优先级别时,C规定了运算符的结合方向。

1)左结合性:

运算对象与左边的运算符进行运算

如:

a+b+c表达式中,运算对象b按照先a+b再(a+b)+c的顺序进行运算。

此处的b具有左结合性。

2)右结合性:

运算对象与右边的运算符进行运算

操作数

算符

名称

运算规则

参算数类型

结果数类型

单目

+

取原值

整型、实型

整型、实型

单目

-

取负值

整、实

整、实

双目

+

加法

整、实、字

整、实、字

双目

-

减法

整、实、字

整、实、字

双目

乘法

整、实、字

整、实、字

双目

除法

整、实、字

整、实、字

双目

%

求余数

整型

整型

单目

++

自增

自增1

整型

整型

单目

--

自减

自减1

整型

整型

3、使用要点:

–表达式的运算以优先级为准,若优先级相同再考虑结合性。

–结合性是C语言区别于其它任何语言的特点之一。

–在学习运算符时应搞清每一种运算符的优先级与结合性。

一、基本算术运算符使用要点

 

1、组成:

+、-、*、/、%(求余)

2、使用要点:

1)两个整型数相除,其结果为整型;

如:

10/3=3

-5/3=-1(负数采用“向零取整”)

2)%运算符的两个操作数必须是整型的;

如:

7%4=3

特别情况:

0%5=0;5%0=5;

-7%4=-3;-7%-4=-3;

7%-4=3。

即:

%运算的符号只取决于第一个数符。

3)双目运算符:

需要两个运算分量的运算符,

如+、-、*、/和%;

单目运算符:

只需一个运算分量的运算符,

如“+”和“-”还可分别作为取正值、负值运算符。

单目运算符“+”和“-”优先级别

高于双目运算符+、-、*、/和%;

而双目运算符的优先级别:

先乘除(*、/或%),后加减(+或-)

例l2-5-1:

#include

运行结果:

x=30

x=24

x=11

x=1

x=0注意顺序运算

x=1

y=25.000000

voidmain()

{intx,a=3;

floaty;

x=20+25/5*2;printf("x=%d\n",x);

x=25/2*2;printf("x=%d\n",x);

x=-a+4*5-6;printf("x=%d\n",x);

x=a+4%5-6;printf("x=%d\n",x);

x=-3/4%-6/5;printf("x=%d\n",x);

x=(7+6)%5/2;printf("x=%d\n",x);

y=25.0/2.0*2.0;printf("y=%f\n",y);

}

二、增量运算符使用要点

C语言有两个特殊运

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 小升初

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1