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

上传人:b****2 文档编号:24536680 上传时间:2023-05-28 格式:DOCX 页数:20 大小:50.80KB
下载 相关 举报
第二章 数据类型运算符和表达式.docx_第1页
第1页 / 共20页
第二章 数据类型运算符和表达式.docx_第2页
第2页 / 共20页
第二章 数据类型运算符和表达式.docx_第3页
第3页 / 共20页
第二章 数据类型运算符和表达式.docx_第4页
第4页 / 共20页
第二章 数据类型运算符和表达式.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

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

《第二章 数据类型运算符和表达式.docx》由会员分享,可在线阅读,更多相关《第二章 数据类型运算符和表达式.docx(20页珍藏版)》请在冰豆网上搜索。

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

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

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

§2.1C语言的数据类型

C语言的数据类型如下:

             整型(int)

             短整型(shortint)

          长整型(longint)

        整型   无符号整型(unsignedint)

             无符号短整型(unsignedshortint)

             无符号长整型(unsignedlongint)

字符型(char)

基本类型字符型 无符号字符型(unsignedchar)

单精度(float)

 实型  双精度(double)

长双精度(longdouble)

C数据类型空类型(void)

 数组([])

指针类型(*)

 构造类型结构体(struct)

      共用体(union)

枚举(enum)

 用户定义类型(typedef)

通过以上数据类型用户还可以构造出更复杂的数据结构,如:

链表、二叉树等。

c语言的数据还可分成常量和变量两种。

本章主要介绍基本数据类型。

§2.2常量与变量

一.常量和符号常量

常量:

在程序执行过程中,值不能被改变的量。

如123,3.15,’A’,”Hello”,均是常量。

在C语言中有整型常量、实型常量、字符型常量和字符串常量和符号常量五种类型。

符号常量

C语言中可以用一个标识符来代表一个常量,这个标识符就称为符号常量。

可以利用宏定义#define来定义符号常量,例如:

    #definePI3.14159

    #definePRICE30

符号常量与变量不同:

符号常量的值在其作用域内不能改变,也不能再被赋值。

习惯上,符号常量名用大写字母,变量用小写字母,以示区别。

二.变量:

其值可以改变的量。

变量有以下几个特征:

变量名、变量值、变量的数据类型、变量的地址、变量的存储类别、变量的作用域以及变量的生存期等。

变量名是指按照C语言标识符的规则,给变量取的名称,使用变量名就可以存取变量的值。

标识符:

在C语言中标识符就是常量、变量、类型、语句、标号及函数的名称。

标识符的命名规则:

①标识符必须由英文字母、下划线、数字组成,不能包含其它字符(如全角字母和全角数字不能用于标识符);

②标识符必须由英文字母或下划线打头;

③标识符的长度不能超过32个字符;(不同的系统规定不同)

④标识符大小写字母有区别(代表不同的标识符)。

C语言中标识符有三类:

关键字、预定义标识符和用户定义标识符。

关键字

已被C系统所使用的标识符称为关键字,每个关键字在C程序中都有其特定的作用,关键字不能作为用户标识符。

由ANSI标准定义的共32个关键字,见下表

ANSI标准定义的共32个关键字

auto

break

case

char

const

continue

default

do

double

else

enum

extern

float

for

goto

if

int

long

register

return

short

signed

sizeof

static

struct

switch

typedef

union

unsigned

void

volatile

while

预定义标识符

C语言系统提供的库函数名和编译预处理命令等构成了预定义标识符。

用户可以定义标识符与系统预定义标识符一样的名称,但应尽量避免这样做。

用户标识符

用户可以根据需要对程序中用到的变量、符号常量、用户函数、标号等进行命名,成为用户标识符。

用户在定义标识符时应注意以下事项:

①禁止使用TurboC2.0关键字作为用户的标识符;

②尽量避免使用预定义标识符作为用户标识符;

③标识符中不能出现全角字符、空格,不要把下划线“_”写成减号“-”;

④标识符必须先定义后使用,使用未经定义的标识符将出现编译错误;

⑤使用的标识符最好做到见名知义,以增加源程序的易读性和易维护性。

例如area表示面积,sum表示求和等;

⑥在同一函数(的不同复合语句)中,最好不要定义相同的标识符作变量名。

举例说明标识符的使用

正确的标识符

不正确的标识符

不正确的原因

area3

3area

数字打头

sort_score

sort-score

标识符中使用了减号“-”

DEFAULT

default

使用关键字作标识符

a123b

a123b

标识符中使用了全角字符“3”

_915

-915

标识符中使用了减号“-”

xandy

x&y

标识符中含有非法字符“&”

一个变量在内存中占有一定的存储空间,这个存储空间内所存放的数据就是变量的值。

inta;

a

a=10;

a

10

变量的数据类型确定了该变量的性质、取值范围、占内存空间大小以及所能参加运算的方式。

有关变量地址、变量的存储类别、变量的作用域以及变量的生存期等的概念我们将在以后的课程中介绍。

在C语言中变量必须先定义才能使用,这样做的目的是:

1.能保证程序中变量名使用的正确:

如,把num写成nun在编译时可发现错误。

2.便于在编译时,按定义为其分配相应的存储单元:

如:

chara;(为a分配一个字节单元)

intb;(为b分配二个字节单元)

3.便于编译时根据定义的类型检查该变量所进行的运算是否合法:

如:

a%b(求余运算,要求a和b应为整型变量)

变量定义的格式如下:

数据类型关键字 <变量名表>;

变量名表是一个或多个标识符,每个标识符之间用逗号","分开。

例如:

inti,j,k;

§2.3整型数据

一.整型常量

整型常量就是整数。

C语言的整型常量有三种表示形式:

  ①十进制整数:

不由数字0开头的整数组成,可以由数字0至数字9组成,前面可加正号“+”或负号“-”。

如:

123、+4560、-987都是十进制整常量。

  ②八进制整数:

由数字0开头的整数组成,只能由数字0至数字7组成,前面可加正号“+”或负号“-”。

例如:

07623、-04567、+0315都是八进制整常量。

如果写成0891则是错误的,八进制数不能含有数字8和数字9。

③十六进制整数:

由数字0和字母x(或X)开头的数组成,可以由数字0至数字9、字母a至字母f或字母A至字母F组成,前面可加正号“+”或负号“-”。

如0xa3f、-0X9A、0x345、+0X6ab都是十六进制整型常量。

  使用整型常量应注意下面事项:

  ①一个整型常量的尾部加上字母l或L时,则为长整型(long或longint)常量。

例如:

123l为十进制的长整型常量、0123L为八进制的长整型常量、-0x123L为十六进制的长整型常量。

长整型常量往往用于函数调用中,如果函数的形参为长整型,则实参也必须是长整型。

  ②一个整型常量也可以由它的值确定它的类型,如果其值在-32768~32767范围内,则认为它是整型(int)常量;如果其值超出上述范围,而是在-2147483648~2147483647范围内,则认为它是长整型(long或longint)常量。

二.整型变量

1.整型变量的分类:

基本型,短整型,长整型和无符号型四种,见下表:

说明

数据类型关键字

占字节

取值范围

整型

int

2

-32768~32767

短整型

short[int]

2

-32768~32767

长整型

long[int]

4

-2147483648~2147483647

无符号整型

unsigned[int]

2

0~65535

无符号短整型

unsignedshort[int]

2

0~65535

无符号长整型

unsignedlong[int]

4

0~4294967295

各种类型的变量的不同之处在于所占用的存储单元数和取值范围不同。

整数在内存中的存储情况:

以补码的形式表示。

有符号数的最左边高位为符号位(0为正数,1为负数),其余为数值位;无符号数则全为数值位。

如:

i=10与j=-10在内存的表示如下:

i

j

00000000

00001010

11111111

11110110

i

j

00001010

00000000

11110110

11111111

2.整型变量的定义:

如:

inta,b;

unsignedshortc,d;

longe,f;

对变量的定义可放在程序的任何位置,但应放在引用它之前(一般放在一个函数的开头部分)。

§2.4实型数据

一.实型常量

实型常量就是实数(又称浮点数)。

C语言中实型常量用两种形式表示:

①小数形式:

一个实数的表示包括数字和小数点。

例如:

1.23456、-0.465、+789.123、0.0、1.0等。

②指数记数法(科学记数法)形式:

这时实数包括整数部分、小数点、小数部分和指数部分,指数部分前加字母e或E。

例如:

1.2345e3、12.345E2、1.2345e03、1.2345e+3均表示1234.5这一实数。

又例如:

0.123e+5、1e-4、35.69E11均为合法的实数表示。

用指数形式表示实数时,指数部分必须是整数,字母e或E之前必须有数字。

例如:

123e5.6、e5、.e9、e等均为不合法的指数形式。

 上述两种表示方法所表示的实型常量都是双精度实型(double),双精度实型常量在内存中占8个字节,取值范围在1.7×10-308~1.7×10+308之间。

(TurboC中,在双精度实型常量后加一字母l或L则构成长双精度实型常量(longdouble),长双精度实型在内存中占10个字节,取值范围在3.4×10-4932~1.1×10+4932之间,例如1.23e1234l、5.67e-3456L均为正确的长双精度实型常量。

由实型常量的表示范围可知实型常量总是取正值。

如果要使用负值,可在实型常量的前面加一个负号,构成常量表达式,其中的负号处理成算术操作符。

实型常数只有十进制实型常数一种,没有八进制实型常数,也没有十六进制实型常数。

绝对值小于1的实型常数,其小数点前面的零可以省略,如:

0.123可写为.123,-0.0123e-5可写为-.0123e-5。

二.实型变量

float

4

3.4×10-38~3.4×1038

7~8位有效数字

单精度实型

double

8

1.7×10-308~1.7×10308

15~16位有效数字

双精度实型

longdouble

10

3.4×10-4932~1.1×104932

19~20位有效数字

长双精度实型

如:

floata=123456.789;

printf(“%f”,a);

则只能输出123456.789062(取7位有效数字)

若a定义为double型,则输出为123456.789000

§2.5字符型数据

一.字符型常量

C语言的字符常量是ASCII码字符集里的一个字符,包括字母(大、小写有区别)、数字和标点符号以及特殊字符等,均为半角字符,一个字符常量在内存中占1个字节,字符常量不能是全角字符。

C语言字符常量有三种表示方法:

①把单个字符用一对单引号括起来表示字符常量,例如’a’、’6’、’A’、’+’、’:

’。

②用该字符的ASCII码值表示的字符常量,例如十进制数65表示大写字母’A’,十六进制数0x41也表示’A’,八进制数0101均表示大写字母’A’。

一些不能用符号表示的特殊字符(如控制符等),可以用ASCII码值来表示,如换行可用10表示,也可用十六进制数0x0a或八进制数012来表示。

③反斜扛“\”开头后跟规定的单个字符或数字,并用一对单引号括起来表示字符常量。

例如用’\r’表示回车、用’\n’表示换行。

换行也可用’\12’或’\012’反斜扛后跟八进制数表示,应注意这里反斜扛“\”后的八进制数前面的0可以省略,省略后并不表示成十进制数。

换行还可用’\x0a’反斜扛后跟十六进制数表示。

这种表示法中反斜扛“\”后面的字符变成了另外的意义,我们称之为“转义字符”。

下表列出了常见的“转义字符”常量。

 常见的转义字符常量

字符常量

含   义

等价表示

’\n’

输出到屏幕和文本文件为回车且换行,

若输出到二进制文件仅为换行

10、0x0a、'\x0a'、'\12'

’\r’

回车

13、0x0d、'\x0d'、'\15'

’\t’

制表键,光标右移到下一输出区首,通常每个输出区占个8个字符

9、0x09、'\x09'、'\11'

’\f’

换页

12、0x0c、'\x0c'、'\14'

’\b’

退格

8、0x08、'\x08'、'\10'

’\\’

反斜扛字符 \

92、0x5c、'\x5c'、'\134'

’\'’

单引号字符 '

39、0x27、'\x27'、'\47'

’\"’

双引号字符 "

34、0x22、'\x22'、'\42'

’\ddd’

1到3位八进制数组成ASCII码所对应字符

0ddd

’\xhh’

1到2位十六进制数组成ASCII码所对应字符

0xhh

[例]

main()

{

printf("123456789012345\n");

printf("abc\tde\b\101fg\n");

printf("abc\rde\12\x41\n");

}

运行结果:

123456789012345

abcdAfg

dec

A

上述程序中没有单个输出字符常量,而使用printf函数输出双引号内的各个字符。

第一个printf输出一串数字,作为坐标参照。

最后的’\n’作用是回车并换行。

第二个printf从第1列开始先输出“abc”,后遇到’\t’光标移到下一输出区的开始位置(第9列),从第9列开始输出“de”,又遇到退格符’\b’,光标退格(左移一格)在字符’e’的位置上输出’\101’(字母’A’)以及“fg”,在第10列上字母’A’把字母’e’覆盖了,最后回车换行。

第三个printf从第1列开始先输出“abc”,后遇到’\r’回车,光标移到本行的第1列输出“de”,并把“ab”覆盖了,又遇到回车换行’\12’,光标移到下行的第1列输出字符’\41’(字母’A’),最后回车换行。

二.字符变量

定义:

char<变量名表>;

一个字符变量占用一个字节,存放一个ASCII码字符代码,与整数的存储形式相类似,因此字符数据与整型数据之间可以通用。

如:

main()

{charc1,c2;

c1=’a’;c2=98;

printf(“%c,%c,%d,%d\n”,c1,c2,c1,c2);

}

结果为:

A,b,65,98

又如:

main()

{charc;

c=’\376’;

printf(“%c,%d”,c,c);

}

结果为:

■,-2

注意:

有些系统(如TurboC)将字符变量所占用的字节的最高位当成符号位,即把字符处理成带符号的整数。

但可以如下定义无符号的字符变量:

unsignedcharc;

三.字符串常量

若干个字符用双引号括起来就构成了字符串常量。

如”Good morning!

”、”123”、”A”、”abcde”都是字符串常量。

C语言中在存储字符串常量时,除了存储双引号中的所有字符之外,在串的最后还要存放1个字符'\0',表示该字符串常量到此结束。

字符'\0'也称为字串结束标志。

因此字符串常量"abcde"占内存6个字节,字串结束标志'\0'多占了一个字节。

字符串常量"abcde"在内存是按如下方式存储的:

a

b

c

d

e

\0

利用C系统提供的输出函数printf和puts可以将字符串常量整体输出到屏幕,利用输入函数scanf和gets可以将字符串整体输入到内存。

另外字符常量’A’,和字符串常量"A"不同,前者为字符常量可直接赋值给字符变量,而后者为字符串常量可以赋给字符数组也可以赋值给字符指针变量,’A’占内存1个字节,而”A”占内存2个字节,字符串结束标志'\0'多占了一个字节。

C语言中没有专门的字符串变量,而是用一个字符型数组来存放一个字符串。

§2.6变量赋初值

变量赋初值:

指在定义变量时,对变量进行赋值。

又称为变量初始化。

变量赋初值一般有如下几种方式:

charch=’a’;

inti=0,j=1;  

inta,b=10,c;

intx=3,y=3,z=3;/*可用intx=y=z=3;*/

一个动态变量未经初始化、也未对其赋值,其值是不确定的。

例如在某函数中有以下程序段:

inti;

printf(“%d\n”,i);

执行后输出结果是个不确定的整数值。

静态存储变量和外部变量若未经初始化、也未对其赋值,其值为0值。

§2.7各类数值型数据间的混和运算

整型、实型(float,double)、字符型数据间可以混和运算。

不同类型的数据要先转换成同一类型,然后进行运算。

转换规则如下:

 

注意:

float型数据在运算时一律先转换成double型的,以提高运算精度。

即使是进行加法运算。

§2.8算术运算符和算术运算

一.C运算符简介

C的运算符有13类,15个级别。

(参见附录)

二.算术运算符和算术表达式

1.基本的算术运算符

  +(双目运算两数相加,如5+6,单目运算取正值,如+15)

-(双目运算两数相减,如5-6,单目运算取负值,如–19)

*(双目运算符,两数相乘,如5*6)

/(双目运算符,两数相除,如15/6)

%(双目运算符,取模或求余数,两个数必须都是整数,如15%6值为3)

所谓单目运算符是指对一个运算对象进行操作,例如:

-19。

双目运算符是对两个运算对象进行操作,这两个运算对象分别放在操作符的左边和右边。

如:

5+6。

说明:

1除法:

两个整数相除,结果为整数(取整数部分,不采用四舍五入)

如:

5/3值为1;-5/3值为-1。

若有一个数为实数,则结果为double型。

2求余:

两个数必须都是整数,结果的符号与运算符左边数的符号相同。

如:

5%3=2,-5%3=-2,5%(-3)=2,-5%(-3)=-2。

2.算术表达式和算术运算符的优先级与结合性

算术表达式:

用算术运算符和括号把运算对象连接起来的,符合C语法规则的式子。

运算对象:

包括常量、变量和函数。

算术表达式的值为整数或实数。

如 3*x+1.0/y-10*sqrt(x)。

注意:

算术表达式中可以使用多层圆括号,左、右括号必须配对。

运算时先计算出内层括号表达式的值,由内向外计算表达式的值。

优先级(同一行上的运算符,优先级相同):

() 圆括号          高

+、-  单目运算符,取正、取负    

*、/、%双目运算符,乘、除、取模  

+、-双目运算符,加、减    低

结合性:

在优先级相同时的求值顺序。

上面所有双目算术运算符的都是“从左到右”,而单目运算符取正“+”和取负“-”的结合方向是“从右到左”。

例如表达式(-16/3*2+1)%6的值是-3,先计算圆括号内的值,单目运算符“-”优先级高于其它双目运算符,先计算整数除 –16/3值为–5,-5*2+1值为–9,最后-9%6值为-3。

3.强制类型转换运算符

数据类型的转换有两种:

①系统自动进行类型转换。

如:

3+6.5

②强制类型转换。

如:

x为float型,(int)x%3

一般形式:

(类型名)(表达式)

如:

(double)a

(int)(x+y)

(float)(5%3)

强制类型转换只产生一个中间值,并不改变原变量的值和类型。

如:

main()

{floatx;

inti;

x=3.6;

i=(int)x;

printf(“x=%f,i=%d\n”,x,i);

}

结果为:

x=3.600000,i=3

4.自增、自减运算符

作用是使变量的值增1或减1。

++i、--i:

前缀运算符,这时是先使运算对象值增1或减1之后,再使用运算对象。

例如 i=1;j=++i;则变量i的值先增1变成2,然后把i的值赋给变量j,j的值为2。

同样的若有语句i=1;j=--i;执行后i的值为0,j的值为0。

i++、i--:

后缀运算符,这时是先使用运算对象,再使运算对象值增1或减1。

例如 i=1;j=i++;则先把i的值赋给变量j,j的值为1,然后变量i的值再增1变成2。

同样的若有语句i=1;j=i--;执行后i的值为0,j的值为1。

如:

i=3;

printf(“%d”,++i);输出结果为4,i的值为4。

i=3;

printf(“%d”,i++);输出结果为3,i的值为4。

增1与减1运算符如果仅仅只进行自加、自减运算,没有使用运算对象的值,作前缀运算符与作后缀运算符运算结果一样。

如语句i--;与语句--i;效果一样,都等同于语句i=i-1;

说明:

① ++,--都是单目运算符,其运算对象必须是变量,不能是常量和表达式。

例如语句i++;相当于语句i=i+1;又如语句i--;相当于语句i=i-1;这里有一个赋值的过程。

②“++”和“--”运算符的结合方向是“从右到左”。

例如i=1;j=-i++;由于取负运算符“-”和增1运算符“++”的优先级相同,结合方向是“从右到左”,即相当于-(i++),又由于是后缀运算符,则先取出i的值使用,把-i的值赋值给j,变量j的值为-1,然后使i的值增1变成2。

自增、自减运算符一般用于循环变量,指针变量等。

③容易搞混的几个问题:

Ⅰk=(i++)+(i++)+(i++);

若i=3;则多数系统先将i值取出相加,再完成三个i的自增,因此结果是k为9,i为6。

(TurboC也是如此)

若k=(++i)+(++i)+(++i);则先进行三个i的自增,再进行相加运算,因此结果为k为18,i为6。

Ⅱi+++j;

C编译在处理时尽可能多地(自左而右)将若干个字符组成一个运算符(包括标识符,关键字等)。

因此i+++j应解释为(i++)+j,而不是i+(++j)。

Ⅲ多数系统对函数参数的求值顺序是从右到左的:

i=3;

printf(“%d,%d”,i,i++);

输出的结果为:

4,3

这些问题不必死记,不同的系统处理方式也不相同,必要时上机试一下即可。

§2.9赋值运算符和赋值运算

一.赋值运算符:

=

作用:

将一个数据赋给一个变量。

如a=a+1

二.当“=”两边数据类型不一致时的类型转换

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

当前位置:首页 > 法律文书 > 调解书

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

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