Top Banner
1 3 3 第第第第第第第第 第第第第第第第第 第第第第第第第第第 第第第第 第第第 第第第 第第第第第 第 、、、、、 第第 第第第第 第第第第第第第第第第第 、、。
44

第 3 章 数据类型及表达式

Mar 20, 2016

Download

Documents

heba

第 3 章 数据类型及表达式. 本章主要学习标识符、关键字、常量、变量、数据类型、运算符、表达式、数据类型转换等知识点。. 第 3 章 数据类型及表达式. 标识符、关键字及分隔符. 数据类型. 数据类型. 常量与变量. 赋值运算符与赋值表达式. 自增与自减运算符. 关系运算符与关系表达式. 运算符及表达式. 条件运算符与条件表达式. 逗号运算符与逗号表达式. 长度运算符. 本章内容. 算术运算符与算术表达式. 逻辑运算符与逻辑表达式. 第 3 章 数据类型及表达式. 重点和难点 重点: (1) 变量的定义与使用 - PowerPoint PPT Presentation
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 第 3 章     数据类型及表达式

1

第第 33 章 数据类型及表达式章 数据类型及表达式 本章主要学习标识符、关键字、常量、变量、数据类型、运算符、表达式、数据类型转换等知识点。

Page 2: 第 3 章     数据类型及表达式

2

数 据 类型

运 算 符 及 表达式

赋值运算符与赋值表达式自增与自减运算符关系运算符与关系表达式

数据类型常量与变量

标识符、关键字及分隔符

条件运算符与条件表达式逗号运算符与逗号表达式长度运算符

本章内容本章内容

算术运算符与算术表达式

逻辑运算符与逻辑表达式

第第 33 章 数据类型及表达式章 数据类型及表达式

Page 3: 第 3 章     数据类型及表达式

3

第第 33 章 数据类型及表达式章 数据类型及表达式重点和难点 重点: (1) 变量的定义与使用

(2) 各种运算符及表达式的使用 难点: (1) 数据类型的转换 (2) 自增与自减运算符的使用

Page 4: 第 3 章     数据类型及表达式

4

3.1 3.1 数据类型及表达式引例数据类型及表达式引例【例 3.1 】实现输入一个职工的姓名、年龄、工资的程序并输出。

#include <stdio.h>main(){ char employname[6]; int employage; float employwage; printf(" 请输入职工姓名: "); scanf("%s",employname); printf(" 请输入职工年龄: "); scanf("%d",&employage); printf(" 请输入职工工资: "); scanf("%f",&employwage); printf(“ 此职工 姓名 :%s 年龄 :%d 工资 :%0.2f\n",employname, employage, employwage); }

Page 5: 第 3 章     数据类型及表达式

5

3.2     C3.2     C 语言的数据类型语言的数据类型

3.2.1 标识符、关键字及分隔符3.2.2 数据类型3.2.3 常量与变量

Page 6: 第 3 章     数据类型及表达式

6

1. 标识符C 语言中,变量,函数都需要有一个名称,这个名称就叫做标识符。C 语言标识符命名规则:

( 1 )标识符由字母( A~Z , a~z )、下划线( _ )、数字( 0- 9 )组成。( 2 )标识符必须以字母( A~Z , a~z )或下划线( _ )开头。( 3 ) C 语言中标识符严格区分字母大小写。如: aB12 、

Ab12 、 AB12 、 ab12 是不同的标识符。( 4 )标识符不能使用 C 语言的关键字,如: char 、 do 、 f

or 、 if 、 int 等。

3.2.1 3.2.1 标识符、关键字及分隔符标识符、关键字及分隔符

Page 7: 第 3 章     数据类型及表达式

7

3.2.1 3.2.1 标识符、关键字及分隔符标识符、关键字及分隔符用户在定义标识符时还要注意以下几个问题:( 1 )标识符时尽量做到“见名知意”。( 2 )标识符的长度不要太长,建议在 8 个字符以 内。( 3 )标识符中不能出现全角字符与空格。下列标识符是不合法的标识符:

5abc 、 aa-bb 、 a&b 、 M.H.Thatcher 、a# 、 ab ¥、 if下列标识符的是合法的标识符:

A123 、 a_123 、 _123 、 Aa_B029b

Page 8: 第 3 章     数据类型及表达式

8

2. 关键字 关键字是 C 语言编译程序本身所规定使用的专用词,它们有特定的含义。如 int 用来定义整数类型。所有的

C 语言关键字不能用作标识符,关键字必须用小写字母表示。 C 语言的关键字如表 3-1 所示。

3.2.13.2.1 标识符、关键字及分隔符标识符、关键字及分隔符

表 3-1 ANSI C 标准规定的关键字

Page 9: 第 3 章     数据类型及表达式

9

3. 分隔符 分隔符用来使编译器确认代码在何处分隔, C 语言中分隔符包括注释符、空白符及普通分隔符。( 1 )注释符 用“ /*” 开头以“ */” 结尾,中间可以写一行或多行内容,之间的内容对程序的执行没有任何影响,被编译器忽略。在程序中加入注释可增加程序可读性,使程序利于维护与移交。

如: int a , b ; /* 定义了 a , b 两个变量 */( 2 )空白符 空白符包括空格、回车、换行和制表符( Tab 键)符号,用来分隔程序的各基本成分。一个或多个空白符的作用完全一样。

3.2.13.2.1 标识符、关键字及分隔符标识符、关键字及分隔符

Page 10: 第 3 章     数据类型及表达式

10

( 3 )普通分隔符 普通分隔符的作用也是用来分隔程序的各成分,在程序中有特定的含义。不能省略。

3.2.13.2.1 标识符、关键字及分隔符标识符、关键字及分隔符

表 3-2 C 语言的普通分隔符

Page 11: 第 3 章     数据类型及表达式

11

C 语言的数据类型分为:基本数据类型:整型、字符型、实型、空类型。构造类型: 数组型、结构体型、共用体型、

枚举类型、指针类型。本章主要介绍基本数据类型。

3.2.3.2.2 2 数据类型

Page 12: 第 3 章     数据类型及表达式

12

3.2.33.2.3 常量与变量常量与变量1. 常量 在程序执行过程中,值不能发生改变的量称为常量。 (1) 整型常量 不含小数的整数值,由数字 0~9 组成,前面可加正号“ +” 或负号“ -” 。可采用十进制、八进制、十六进制形式表示。十进制常量以非 0 开头后跟多个 0~9 之间的数字,如 351 、 +78 、 -98 。八进制常量以 0 开头后跟多个 0~7 之间的数字,如 0745 、 -0123 、 +03

51 。十六进制常量以 0 和字母 x (或 X )开头后跟多个 0~9 之间的数字或字母 a~f 之间的小写字母或 A~F 之间的大写字母,如 0x456 、 0X456f 、 -0X123FF 、 0xa4d5 、 +0x9abf 。下面 3条语句:

printf("%d\n",28); printf("%d\n",034);

printf("%d\n",0x1c); 输出 3 个 28 ,这是把 28 分别以十进制、八进制、十六进制形式表示。

Page 13: 第 3 章     数据类型及表达式

13

(2) 实型常量C 语言中实型常量有两种表示方法:

① 十进制形式:由数字和小数点组成,且必须有小数点,如 123.0 、 -0.123 、 -.369 、 0.1 、 0.0 。

② 科学计数法形式:由整数部分、小数点、小数部分、 e (或 E )、指数部分组成。要求 e(或 E )后面指数部分必须为整数, e (或E )前要有数字。如: 0.2468E3 、 2.468e2 、2.468E+2 都表示 246.8 ,而 2.468E2.5 、 e36 、0.236E5.5 、 E+898 为非法表示。

3.2.33.2.3 常量与变量常量与变量

Page 14: 第 3 章     数据类型及表达式

14

(3) 字符型常量字符常量是用一对单引号括起来的单个字符。它是 ASCII码字符集里的字符。C 语言中字符常量的类型是 char 型。C 语言中字符常量有 3 种表示方法:

①用单引号括起来的一个 ASCII 字符。如:‘ a’ 、‘ A’ 、‘ 0’ 、‘ =’ 、‘ 5’ 、‘ +’ 。②直接用该字符的 ASCII 码的数值表示一个字符常量。如 97可表示字符‘ a’ , 48 可表示字符‘ 0’ , 10 可表示换行符。③用“ \”后面连一个特定的字母或特定符号或 1 到 3位八进制数或 1 到 2位十六进制数并用单引号括起,这样的组合又有了其它的意义,称之为转义字符。如:‘ \n’ 、‘ \0’ 、‘ \104’ 、‘ \’ 。

3.2.33.2.3 常量与变量常量与变量

Page 15: 第 3 章     数据类型及表达式

15

常见的转义字符见下表常见的转义字符见下表 3-33-3 。。

Page 16: 第 3 章     数据类型及表达式

16

【例 3.2 】分析下面程的输出结果。#include <stdio.h>main(){ printf("0123456789\n"); printf("abc\tde\babc\n"); printf("abcdea\rbcde\n");

printf("abcdea\nbcde\n"); }

程序运行后,屏幕显示:

0123456789abc dabcbcdeeaabcdeabcdePress any key to continue

Page 17: 第 3 章     数据类型及表达式

17

(4) 字符串常量字符串常量是由双引号括起来的由多个字符组成的字符序列。如:“ John Wilson” 、“张三”、“ A-32_64” 、“ 123.456789” 、“ a” 。注意:不要将字符串常量与字符常量混淆,如下:“ a” 与‘ a’ 是不同的,一个是字符串常量一个是字符常量。注: C 语言在存储字符串常量时要开辟字符串中字符数+1 的字节的空间,多出的那个字节用来存放‘ \0’ ,它用来表示字符串的结束。字符串常量“ A6029” 这个字符串是如下方式存放的:

因此字符串“ A6029” 在内存中占用 6 个字节。

3.2.33.2.3 常量与变量常量与变量

Page 18: 第 3 章     数据类型及表达式

18

(5) 符号常量在 C 语言中可用一个标识符来表示一个常量,有两种使用方法。① 用 #define形式定义符号常量。格式: #define 常量名 常量值如 :#define MAX 10#define MIN 0#define DOLLARtoRMB 6.82652 分别用 MAX 、 MIN 、 DOLLARtoRMB 这三个标识符来代替常量 10 、 0 、

6.82652 这三个常量,在程序的运行过程中 MAX 、 MIN 、 DOLLARtoRMB 的值是不能改变的。

②用 const 关键字来定义符号常量格式: const 数据类型 常量名 = 常量值如 :const int MAX =10 ;const int MIN =0 ;const double DOLLARtoRMB = 6.82652 ;功能与上例同。

3.2.33.2.3 常量与变量常量与变量

Page 19: 第 3 章     数据类型及表达式

19

2. 变量( 1 )变量定义格式

数据类型 < 变量名 1[[= 变量 1初值 ] ,变量名2[= 变量 2初值 ] ,…… ]> ;

在定义时可以一次定义多个变量。其中:数据类型:可以是表 3-4 中的某种数据类型。

3.2.33.2.3 常量与变量常量与变量

Page 20: 第 3 章     数据类型及表达式

20

表表 3-4 ANSI C3-4 ANSI C 基本数据类型定义基本数据类型定义

注:编译器不同各别数据类型占用的字节数不一定相同。如: int 型在Turboc2.0 中占用 2 个字节 16 位,而在 Visual C++6.0 编译器下占用 4 个字节 32 位,与 long 类型相同; long double 类型在 Turboc2.0 中占用 10个字节 80 位,而在 Visual C++6.0 中占用 8 个字节 64 位。

Page 21: 第 3 章     数据类型及表达式

21

(2) 变量的初始化:C 程序中可以在定义变量时为变量赋初值,即变量的初始化。同时定义多个变量时,可以只把部分变量初始化,如:

int x,y,z=5 ;float f1,f2=1.0,f3 ;如果同时定义多个同种类型的变量并赋同样的初值,可做如下处理:int a=b=c=5 ;float f1=f2=f3=1.0 ;在 C 程序中变量的初始化是分两步完成的。如:int i=8 ; /* 定义变量 i 并对其赋初值 8*/相当于执行了如下两条语句:int i ; /*声明变量 i 为整数类型 */i=8 ; /* 为变量 i赋值 8*/

3.2.33.2.3 常量与变量常量与变量

Page 22: 第 3 章     数据类型及表达式

22

#include <stdio.h>main(){ int i=32767; short s=32767; long l=2147483647;

unsigned ui=65535; unsigned short us=65535;unsigned long ul=4294967295;

char c='c'; unsigned char uc=99;float f=0.23f;double d=0.7E-3; long double ld=1.23456789E15;printf(" 整型变量 i=%d",i);printf("\n短整型变量 s=%d",s);printf("\n 长整型变量 l=%ld",l);printf("\n无符号整型变量 ui=%d",ui);printf("\n无符号短整型变量 us=%d",us);printf("\n无符号长整型变量 ul=%ld",ul);printf("\n 字符型变量 c=%c",c);printf("\n无符号字符型变量 uc=%c",uc);printf("\n单精度浮点型变量 f=%f",f);printf("\n双精度浮点型变量 d=%f",d);printf("\n 长双精度浮点型变量 ld=%f\n",ld);

}

【例 3.3 】变量声明示例。

Page 23: 第 3 章     数据类型及表达式

23

(3) 变量类型的转换①自动类型转换自动类型转换需满足两个条件,第一两种类型彼此兼容,第二目标类型的取值范围大于源类型。C 语言的数据类型的取值范围由小到大的依次为:char→short→int→long→float→double→long double如:int i=5 ;double x=i ;int 型变量 i 自动转换为 double 型并赋值给 x 。char c=‘a’ ;int j=c ;char 型变量 c 自动转换为 int 型的 97 并赋值给 j 。

3.2.33.2.3 常量与变量常量与变量

Page 24: 第 3 章     数据类型及表达式

24

②强制类型转换当两种类型彼此不兼容或目标类型取值范围小于源类型时,就无法进行自动转换了,这时需要进行强制转换。强制转换格式如下:

(数据类型) < 变量名 >

3.2.33.2.3 常量与变量常量与变量

Page 25: 第 3 章     数据类型及表达式

25

【例【例 3.43.4 】强制转换示例。】强制转换示例。#include <stdio.h>void main(){ char c;

int b;float f=128.6;b=(int)f;

c=(char)f; printf( "将 float 类型 f强制转化为 int 类型 b 的结果为:%d \n",b);printf( "将 float 类型 f强制转化为 char 类型 c 的结果为:%d \n",c);

}

【例 3.4 】强制转换示例。

Page 26: 第 3 章     数据类型及表达式

26

3.3 3.3 运算符及表达式运算符及表达式3.3.1赋值运算符与赋值表达式3.3.2 算术运算符与算术表达式3.3.3 自增与自减运算符3.3.4 关系运算符与关系表达式3.3.5逻辑运算符与逻辑表达式3.3.6条件运算符与条件表达式3.3.7逗号运算符与逗号表达式3.3.8 长度运算符

Page 27: 第 3 章     数据类型及表达式

27

运算符是表示某种操作的符号,在 C 语言中,除控制语句和输入输出函数外,其他所有基本操作都作为运算符处理。运算符的操作对象称为运算数,用运算符把运算数连接起来的一个有意义的式子就叫做表达式。 这里主要介绍赋值运算符、算术运算符、关系运算符、条件运算符、逻辑运算符、逗号运算符和求字节数运算符及其相应表达式。其它运算符在后续章节中学习。

3.3 3.3 运算符及表达式运算符及表达式

Page 28: 第 3 章     数据类型及表达式

28

3.3.13.3.1 赋值运算符与赋值表达式赋值运算符与赋值表达式1. 赋值运算符与赋值表达式赋值运算符是“ =” ,作用是将右边的表达式的值赋给左边的变量,同时赋值表达式的值为左边变量得到的值。如

a=5 是把数值 5存储到变量 a 所指向的内存单元中,同时a=5 这个表达式的值为 5 。赋值运算符的结合方向是“从右至左”。如表达式 a=b=3+5 的计算过程为:先计算 3+5 的值为 8赋给 b ,则 b 的值为 8 ,又将 b=3+5 的值 8赋给变量 a 。C 语言中赋值运算符的优先级仅高于逗号运算符,低于其它运算符。

2. 复合赋值运算符在赋值运算符前加上其它运算符号构成复合运算符号。如:+= , -= , *= , /= 。在 C 语言中规定可以使用 10 种复合运算符。即:+= , -= , *= , /= , %= , <<= , >>= , &= ,∧= , | =后 5 种是有符合位运算符,将在第 9 章介绍。

Page 29: 第 3 章     数据类型及表达式

29

复合赋值的用法请参照如【例复合赋值的用法请参照如【例 3.53.5 】】/* 源文件名: Li3_5.c功能:复合赋值测试 */#include <stdio.h>void main(){int a=2,b=3,c=5,x=6; printf("x*=a+b+c 执行后 x 值为: %d\n", x*=a+b+c );

printf("a*=c+=(b+=8)%5 执行后 a 的值为: %d\n", a*=c+= ( b += 8 ) % 5 );printf(" 执行完以上表达式后 a=%d, b=%d, c=%d\n",a,b,c);

}

【例 3.5 】复合赋值示例。

Page 30: 第 3 章     数据类型及表达式

30

3.3.1 3.3.1 赋值运算符与赋值表达式赋值运算符与赋值表达式3. 赋值表达式中的类型转换规则( 1 )将实型数据赋值给整型变量时,舍弃实数的小数点部分。如: int i=12345.6789;i 的值为 12345 。( 2 )将整型数据赋值给实型变量时,数值不变,但以浮点数形式存储到变量中。如: float f=765;将 765 转化为 765.0000 ,再存储到变量 f 中。( 3 )将字符型数据赋给整型变量时,字符型占用 1个字节即 8位,将字符数据位放到整型变量的低 8位中。整型变量的高位根据字符数据最高位是 0或 1相应的补 0 或 1 。

Page 31: 第 3 章     数据类型及表达式

31

( 4 )将 int 、 short 、 long 型数据赋值给 char 型变量时,只将低 8位放到 char 型变量中。如:int i=296; char c;c=i;

在 Visual C++6.0 中, int 型数据占用 4 个字节,赋值情况如图 3.1 所示: 如: printf("c=%c",c); 输出: c=

A printf("c=%d",c); 输出: c=65

图 3.1

3.3.1 3.3.1 赋值运算符与赋值表达式赋值运算符与赋值表达式

Page 32: 第 3 章     数据类型及表达式

32

3.3.2 3.3.2 算术运算符与算术表达式算术运算符与算术表达式1. 算术运算符C 语言的基本算术运算符有 5 种,分别是:+ (两数相加或取正值运算,如: 2+3 、 +5 )- (两数相减或取负值运算,如: 6-3 、 -2 )* (两数相乘,如: 2*3 )/ (两数相除,如: 6/3 值为 2 , 7/3 值为 2,当分子分母都为整数时结果也为整数,小数部分舍去)% (模除运算符或称取余运算符, % 两边的数须是整数 如: 9%5 的值为 4 、 6%2 的值为 0 )2. 算术表达式及运算符的优先级用算术运算符及括号将运算对象连接起来,组成一个符合

C 语言语法的式子,这样的式子就是算术表达式。运算对象可以是常量、变量、函数,如: 123+‘a’*78%12-65 、 a+b%c*e+1.5/4 都是合法的算术表达式。

Page 33: 第 3 章     数据类型及表达式

33

3.3.2 3.3.2 算术运算符与算术表达式算术运算符与算术表达式C 语言中算术运算符的优先级由高到低依次为:括号()→正、负( + 、 - )→乘、除、取余( * 、 / 、 % )→加、减( + 、 - )运算顺序:确定符号后,先算乘除后算加减,有括号先算括号,对于同一级运算,则按从左到右的顺序进行。如:算术表达式:( 3+5 ) *6%17+7 的计算方法为先算 3+5 为 8 ,然后 8*6 为 48 ,接着计算 48%17 为 14 ,再计算 14+7 值为 21 。3. 各种数值型数据的混合运算在 C 语言中可以使用 char 、 short 、 int 、 unsigned 、 long 、 fl

oat 、 double 、 long double 这些类型的数据组成表达式进行混合运算,这就涉及到参与运算的各个操作数具体应转换成什么类型,及结果的类型。在处理这样的表达式时,首先将参与混合运算的不同数据类型的数据转换成相同的数据类型再进行运算。

Page 34: 第 3 章     数据类型及表达式

34

图 3.2 中向左的箭头表示一定会发生转换,如 char 型, short 型在参与运算时首先转化成 int 型后再计算。向上的纵向箭头表示数据类型级别的高低,各种不同类型数据转换的方向。如 int型与 float 型参与运算,把 int 型与 float 型转化为 double 型再运算,结果为double 型。

如: 123.456789*32767/‘a’ ,首先把整型 32767 转化成 double型进行运算, 123.456789*32767 结果为 double 型 4045308.605163 ,再把‘ a’ 转化为 double 型 97.0再进行除法运算, 4045308.605163/97.0 结果为 41704.212424 。

图 3.2

3.3.2 3.3.2 算术运算符与算术表达式算术运算符与算术表达式

Page 35: 第 3 章     数据类型及表达式

35

3.3.3 3.3.3 自增与自减运算符自增与自减运算符自增( ++ )运算符使变量增 1 ,自减( -- )运算符使变量减 1 。如: i++ , ++i , i-- , --i类似 i=i+1 ; i=i-1 ;但又不同。以自增为例:i++ ;是先取得 i 的值后再使 i 自增 1 ,即表达式 i++ 的值还是 i 的值。++i ;是先使 i 自增 1后再取得 i 的值,即表达式 ++i 的值为 i 自增 1后的值。i-- 与 --i 同样如此。如: int i=1 ;j=i++ ; /* 使用变量之后 i 的值自增 1 变为 2 ,此时 j 的值为 1*/j=++i ; /* 使用变量之前 i 的值自增 1 变为 2 ,此时 j 的值为 2*/自增与自减运算符应注意以下几点:( 1 )自增与自减只能是对变量进行操作,不能对常量和表达式进行自增自减,如: 8-- 、( x*y ) ++ 是错误的。( 2 )自增自减的结合方向是由“自右到左”,与算术表达式的结合顺序不同。( 3 )一个变量在一个表达式中出现两次或两次以上,不宜使用自增或自减运算。否则在不同的编译器下执行的顺序不同易出现结果不同的情况。

Page 36: 第 3 章     数据类型及表达式

36

3.3.4 3.3.4 关系运算符与关系表达式关系运算符与关系表达式关系运算实际上就是比较运算,是将两个值进行比较,判断比较的结果是否符合给定的条件,如满足表达式结果为“真”,不满足表达式结果为“假”。( 1 )关系运算符

< (小于)、 > (大于)、 >= (大于等于)、 <= (小于等于)、 = = (等于)、 != (不等)注意:关系表达式等于号“ = =” 不同于“ =” ,后者是赋值运算符。其中前四种关系运算符( < 、 > 、 >= 、 <= )的优先级相同,后两种关系运算符( = = 、 != )的优先级相同,且前四种的优先级高于后两种。关系运算符是双目运算符,相同的优先级的关系运算符结合方向是“从左至右”,在所有的运算符中关系运算符的优先级低于算术运算符高于赋值运算符。( 2 )关系表达式用关系运算符将表达式(可以是算术表达式、关系表达式、逻辑表达式、赋值表达式、逗号表达式和字符表达式等)连接起来的式子称关系表达式。关系表达式的结果为“真”或“假”,用“ 1” 代表“真”,“ 0” 代表“假”。

Page 37: 第 3 章     数据类型及表达式

37

合法的关系表达式如: 8>9 、‘ a’= =97 、 56<89 、 1>(‘a’ <‘b’) 、‘ a’<‘b’>0这 5 个关系表达式的值分别为: 0 、 1 、 1 、 0 、 1又如: x=3 , y=5 , z=8 ,则:关系表达式: x>y 的值为 0 , z>y>x 的值为 0(因其等价于( z>y ) >x , z>y 的值为 1 ,同时1>x 的值为 0 ,故表达式的为 0 ), z= =x+y 的值为 1 (因算术运算符 + 的优先级的高于关系运算符 = = ,所以此表达式等价于 z= = ( x+y ), x+y 的值 8 与 z 的值相等,故表达式的值为 1 )。

3.3.4 3.3.4 关系运算符与关系表达式关系运算符与关系表达式

Page 38: 第 3 章     数据类型及表达式

38

3.3.5 3.3.5 逻辑运算符与逻辑表达式逻辑运算符与逻辑表达式关系运算解决较简单的条件判断,对于较复杂的判断可以用逻辑运算来完成。( 1 )逻辑运算符

&& (逻辑与)、 || (逻辑或)、!(逻辑非)其中前两种逻辑运算符( && 、 || )是双目运算符,后面的逻辑运算符( ! )是单目运算符。逻辑运算符在所有运算符中优先级如图 3.3 。逻辑运算符的优先级:

图 3.3

Page 39: 第 3 章     数据类型及表达式

39

( 2 )逻辑表达式用逻辑运算符将符合 C 语言的表达式连接起来的式子称为逻辑表达式。逻辑表达式的结果亦为“真”或“假”,在 C 语言中逻辑表达式的结果以数值 1 代表“真”,数值 0 代表“假”。

3.3.5 3.3.5 逻辑运算符与逻辑表达式逻辑运算符与逻辑表达式

表表 3-5 3-5 逻辑表达式运算法则逻辑表达式运算法则

Page 40: 第 3 章     数据类型及表达式

40

3.3.6 3.3.6 条件运算符与条件表达式条件运算符与条件表达式“ :?”为条件运算符。条件运算符有 3 个操作数,是 C 语言中唯一的三目运算符。由其连接的表达式为条件表达式。格式如下:< 表达式 1>? < 表达式 2> : < 表达式 3>其中:表达式 1 :是一个关系表达式或逻辑表达式,用作判断条件。表达式 2 :是一个合法的 C 语言表达式。表达式 3 :也是一个合法的 C 语言表达式。

Page 41: 第 3 章     数据类型及表达式

41

3.3.7 3.3.7 逗号运算符与逗号表达式逗号运算符与逗号表达式C 语言中可用逗号(“,”)运算符把合法的表达式连接起来构成逗号表达式。格式为:表达式 1 ,表达式 2 ,……表达式 n说明:( 1 )逗号运算符是 C 语言中优先级最低的运算符。( 2 )结合方向是“从左至右”,即先计算表达式 1 ,再计算表达式

2……最后计算表达式 n ,逗号表达式的值为最右侧表达式(即表达式 n )的值。#include<stdio.h>main(){int x=2, y=3,z=5,a=1,b=2,c=3;a=b++,c++; printf("a=%d,b=%d,c=%d\n",a,b,c);x+=(y++,z*=y);printf("x=%d,y=%d,z=%d\n",x,y,z);}

【例 3.6 】逗号表达式应用示例。

Page 42: 第 3 章     数据类型及表达式

42

3.3.8 3.3.8 求字节运算符求字节运算符求字节运算符用来计算各种数据类型的数据占用的字节数,用 sizeof() 来实现。

使用格式:sizeof( 数据类型 ) ;sizeof( 变量 ) ;如:在 Visual C++6.0 中 sizeof(int) 的值为 4 , sizeof(long)值为 4 , sizeof(long double) 的值为 8 , sizeof ( char )值为 1 等。

int x;long y;double d;则 sizeof(i) 的值为 4 , sizeof(y) 的值也为 4 , sizeof(d) 的值为 8 。

Page 43: 第 3 章     数据类型及表达式

43

小 结小 结本章介绍了标识符、关键字、常量、变量、数据类型、运算符、表达式、数据类型转换等内容。1. 标识符是为操作的对象起个名字以便使用,但名字要符合 C 语言的规范。2. 关键字是 C 语言中已有特殊功能的标识符。3. 常量是值不能发生变化的量。类型有:整数,长整数,无符号数,浮点数,字符,字符串,符号常数,转义字符等。4. 变量是用来临时存放数据的地方,但是这个空间该有多大,可以存放什么样的数据,这些是在指定变量的类型时指定的。为了方便操作所以又给变量起个名字。5. 数据类型分为本类型和构造类型。6. 运算符优先级:表达式求值按运算符的优先级和结合性所规定的顺序进行。一般而言,单目运算符优先级较高,赋值运算符优先级较低, 算术运算符优先级较高,关系和逻辑运算符优先级较低。

Page 44: 第 3 章     数据类型及表达式

44

小 结小 结7. 运算符种类有:赋值、算术、自增与自减、关系、逻辑、条件、逗号、长度运算符。8. 运算符的结合性,多数运算符具有左结合性 ( 自左至右 ) 如算术运算符,而单目运算符、三目运算符、 赋值运算符具有右结合性 ( 自右至左 ) 。9. 表达式是由运算符连接常量、变量、函数所组成的式子。 每个表达式都有一个值和类型。表达式求值按运算符的优先级和结合性所规定的顺序进行。10. 数据类型转换。自动转换:在不同类型数据的混合运算中,由系统自动实现转换, 由少字节类型向多字节类型转换。 不同类型的量相互赋值时也由系统自动进行转换,把赋值号右边的类型转换为左边的类型。强制转换:由强制转换运算符完成转换。