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

35
1 第第第 第第第第 第第第第第第第 第第第第 第第第第第 第第第第 第第第 第第第第第第 、、、; 第第 C 第第第第第第第第第第第 第第第第第第第第第第 第第第第第第 第第第第第第 第第第第第第 (、,) 第第第第第第第第第第 第第第第第第 第第第第第第 第第第第第第 (、,)

Upload: gage-bauer

Post on 03-Jan-2016

97 views

Category:

Documents


2 download

DESCRIPTION

第二讲 数据类型,运算符和表达式. 本讲要点 熟悉关键字、标识符、常量、变量等术语; 掌握 C 语言的三种基本数据类型; 掌握几种常见的运算符(算术运算符、赋值运算符,逗号运算符) 掌握几种常见的表达式(算术表达式、赋值表达式,逗号表达式). 1. 常量与变量. 常量: 在程序运行过程中,值不能被改变的量 。 如 : 123 , 1.5 ,‘ a’ ,“ hello” 等 ; 变量 : 在程序运行期间,值可以改变的量。 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第二讲 数据类型,运算符和表达式

1

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

本讲要点熟悉关键字、标识符、常量、变量等术

语;掌握 C 语言的三种基本数据类型;掌握几种常见的运算符(算术运算符、

赋值运算符,逗号运算符)掌握几种常见的表达式(算术表达式、

赋值表达式,逗号表达式)

Page 2: 第二讲 数据类型,运算符和表达式

2

1. 常量与变量 常量:在程序运行过程中,值不能被改变的量。 如: 123 , 1.5 ,‘ a’ ,“ hello” 等; 变量:在程序运行期间,值可以改变的量。

对于程序中每一个变量,在对程序编译连接时由编译系统给每一个变量分配对应的内存空间,用于存放变量的值,在变量名和内存地址之间由系统自动建立对应关系。从变量中取值,实际上是通过变量名找到相应的内存地址,从该存储单元中读取数据

Page 3: 第二讲 数据类型,运算符和表达式

3

变量命名规则 变量命名的规定:C语言规定标识符只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线。

例: 1 . sum , _total, month, Student_name , lotus_1_2_ 3, BASIC, li_ling

2 . M.D.John, ¥ 123,3D64,a>b

Page 4: 第二讲 数据类型,运算符和表达式

4

变量命名注意 编译系统将大写字母和小写字母认为是两个不同的字符。

建议变量名的长度最好不要超过 8 个字符。 在选择变量名时,应注意做到“见名知意”,即选有含意的英文单词 (或其缩写)。

要求对所有用到的变量作强制定义,也就是“先定义,后使用” 。

Page 5: 第二讲 数据类型,运算符和表达式

5

标识符、关键字 标识符标识符

标识符是变量,函数,标号等的标识符是变量,函数,标号等的名字或标记名字或标记 两类:两类:

系统定义的标识符,例如:系统定义的标识符,例如: printfprintf 、、 scanfscanf 、、 mainmain 等等 用户自己定义的,自己定义标识符时要考虑如下问题:用户自己定义的,自己定义标识符时要考虑如下问题:

只能用字母、 数字和下划线,并且第一个字母只能是字母或下划只能用字母、 数字和下划线,并且第一个字母只能是字母或下划线;线;

不能与关键字不能与关键字 (( 系统保留的特殊词汇系统保留的特殊词汇 )) 相同相同 ;; 区分大小写,即区分大小写,即 RR 和和 rr 是两个不同变量。是两个不同变量。 为便于阅读和理解,对象的取名尽可能直观为便于阅读和理解,对象的取名尽可能直观 , , 不要用系统定义的不要用系统定义的

标识符标识符 ,, 更不能用更不能用 CC 语言的关键字。语言的关键字。 关键字关键字

CC 语言中有特殊含义的词语言中有特殊含义的词 (( 在在 VCVC 中变蓝的词中变蓝的词 )) ,共,共 3232 个个

Page 6: 第二讲 数据类型,运算符和表达式

6

2. 数据类型

数据类型

基本类型

构造类型

指针类型空类型

整型

实型(浮点型)字符型 char

枚举类型数组类型结构体类型共用体类型

单精度实型 float

双精度实型 double

基本整型 int长整型 long int短整型 short int无符号整型 unsigned

Page 7: 第二讲 数据类型,运算符和表达式

7

整型变量的分类: 类型 类型说明符 长度 数的范围类型 类型说明符 长度 数的范围 基本型 基本型 int 2int 2 字节 字节 -32768-32768 ~~ 3276732767

短整型 短整型 short 2short 2 字节 字节 -2-21515 ~~ 221515-1 -1

长整型 长整型 long 4long 4 字节 字节 -2-23131 ~~ 223131-1-1

无符号整型 无符号整型 unsigned 2unsigned 2 字节 字节 00 ~~ 6553565535

无符号短整型 无符号短整型 unsigned short 2unsigned short 2 字节 字节 00 ~~ 6553565535

无符号长整型 无符号长整型 unsigned long 4unsigned long 4 字节 字节 00 ~(~( 223232-1-1 ))

3. 三种基本数据类型3.1 整型数据

整型数据的长度因系统的不同而变化;不同类型的整数其所能表示的数据范围不一样,在实际应用时根据具体情况来选择。

Page 8: 第二讲 数据类型,运算符和表达式

8

整型变量 整型变量的定义 : C规定在程序中所有用到的变量都必须在程序中定义,即“强制类型定义”。

格式:变量类型(后跟至少一个空格)变量名 例如 : int a,b (指定变量a、b为整型) unsigned short c,d; (指定变量c、d为

无符号短整型) long e,f;( 指定变量e、f为长整型)

Page 9: 第二讲 数据类型,运算符和表达式

9

例 3.2 整型变量的定义与使用

#include <stdio.h>void main (){ int a,b,c,d; /* 指定a、b、c、d为整型变量 * / unsigned u; / * 指定u为无符号整型变量 * / a= 12 ;b= -24 ;u= 10 ; c=a+u;d=b+u; printf (″a+u=%d,b+u=%d\n″,c,d); }

说明: 说明: 所有变量必须在第一条可执行语句前定义; 一条声明语句可声明多个同类型的变量; 可以看到不同种类的整型数据可以进行算术运算

说明: 说明: 所有变量必须在第一条可执行语句前定义; 一条声明语句可声明多个同类型的变量; 可以看到不同种类的整型数据可以进行算术运算

Page 10: 第二讲 数据类型,运算符和表达式

10

3.2 浮点型数据 浮点型数据的分类

浮点型变量分为单精度( float型)、双精度( double型)和长双精度型( long double)三类形式。

类型 字节 数的范围 有效数字类型 字节 数的范围 有效数字

float 4float 4 10 10-37 -37 ~ ~ 101038 38 66~~7 7 位位doubledouble 型 型 88 10 10-307-307~~1010308308 15 15~~1616 位位

long double 16 10long double 16 10-4931-4931~~10104932 4932 1818~~1919 位位

和整型数据一样,不同类型的浮点数其所能表示的数据范围不一样,在实际应用时根据具体情况来选择。

Page 11: 第二讲 数据类型,运算符和表达式

11

浮点型变量 浮点型数据的定义

格式:变量类型(后跟至少一个空格)变量名例如:

float a;(定义 a 变量为 float型 )double b,c;(定义 b 变量为 double型)long double c;(定义 c 变量为 long double)

Page 12: 第二讲 数据类型,运算符和表达式

12

3.3 字符型变量

字符型变量用来存放字符常量,注意只能放一个字符。

格式:变量类型(后跟至少一个空格)变量名 如字符变量的定义形式如下: char c1,c2;

一个字符变量在内存中占一个字节。

Page 13: 第二讲 数据类型,运算符和表达式

13

字符型数据字符数据在内存中的存储形式及其使用方法 一个字符常量存放到一个字符变量中,实际上并不是把该

字符的字型放到内存中去,而是将该字符的相应的ASCII代码放到存储单元中。这样使字符型数据和整型数据之间可以通用。

例 char c1=‘a’,c2=‘b’;注意 : 一个字符数据既可

以以字符形式输出,也可以以整数形式输出。

Page 14: 第二讲 数据类型,运算符和表达式

14

例 3.7 大小写字母的转换

#include <stdio.h>void main() {char c1,c2 ; c1=’a’; c2=’b’; c1=c1-32; c2=c2-32; printf(“ % c % c″ , c1,c2 ); }

运行结果:A B

说明:说明: 程序的作用是将两个小写字母 a 和 b 转换成大写字母 A 和 B 。从ASCII代码表中可以看到每一个小写字母比它相应的大写字母的 ASCII码大 32。

C语言允许字符数据与整数直接进行算术运算。     

说明:说明: 程序的作用是将两个小写字母 a 和 b 转换成大写字母 A 和 B 。从ASCII代码表中可以看到每一个小写字母比它相应的大写字母的 ASCII码大 32。

C语言允许字符数据与整数直接进行算术运算。     

Page 15: 第二讲 数据类型,运算符和表达式

15

字符串

字符串常量 字符串常量是一对双撇号括起来的字符序

列 . 合法的字符串常量 :  “ How do you do.”, “CHINA”, “ a” , “ $123.45”

可以输出一个字符串,如   printf(“How do you do.”);

Page 16: 第二讲 数据类型,运算符和表达式

16

字符和字符串

‘a’是字符常量,“a”是字符串常量,二者不同。

如:假设 c 被指定为字符变量 : char c

c=’a’; c=” a” ; c =” CHINA”;

结论:不能把一个字符串常量赋给一个字符变量。

Page 17: 第二讲 数据类型,运算符和表达式

17

字符和字符串 C规定:在每一个字符串常量的结尾加一个 “字符串结束

标志”,以便系统据此判断字符串是否结束。 C规定以字符’\0’作为字符串结束标志。

如:如果有一个字符串常量”CHINA” ,实际上在内存中是: C H I N A \0

它占内存单元不是5个字符,而是6个字符,最后一个字符为’\0’。但在输出时不输出’\0’。

Page 18: 第二讲 数据类型,运算符和表达式

18

4. 各类数值型数据间的混合运算混合运算:整型(包括 int,short,long)、浮点型(包括

float,double)可以混合运算。在进行运算时,不同类型的数据要先转换成同一类型 , 然后进行运算 .

说明: 横向表示必定的转换; 纵向表示运算对象为不同类型

时的转换方向; 这种类型转换是由系统自动进

行的。

说明: 横向表示必定的转换; 纵向表示运算对象为不同类型

时的转换方向; 这种类型转换是由系统自动进

行的。

说明:说明:有两种类型转换,一种是在运算时不必用户指定,系统自动进行的类型转换,如 3+6.5 。第二种是强制类型转换。当自动类型转换不能实现目的时,可以用强制类型转换。

说明:说明:有两种类型转换,一种是在运算时不必用户指定,系统自动进行的类型转换,如 3+6.5 。第二种是强制类型转换。当自动类型转换不能实现目的时,可以用强制类型转换。

Page 19: 第二讲 数据类型,运算符和表达式

19

强制类型转换运算符

可以利用强制类型转换运算符将一个表达式转换成所需类型。 一般形式 : (类型名)(表达式)例如: (double)a 将a转换成 double类型 (int)(x+y) 将 x+y的值转换成整型 (float)( 5%3) 将 5%3的值转换成 float型

Page 20: 第二讲 数据类型,运算符和表达式

20

5. 小结 1. 变量必须先定义,后使用; 2. 变量有不同的类型;根据需要来选择类型; 3. 不同的数据类型在内存中占用的字节数不一

样,所能表示的数据范围也不一样,; 4. 变量定义的格式: 类型名 变量名

中间至少一个空格

Page 21: 第二讲 数据类型,运算符和表达式

21

5. 一条语句可以定义多个同一类型的变量; 6. 变量命名需要遵从一定的规则(以字母

和下划线开头;见名知义;不能与 C 系统定义的标识符和关键字相同等);

7. 区分大小写

Page 22: 第二讲 数据类型,运算符和表达式

22

6. 变量赋初值 赋值运算符 “ =” 赋值表达式 由赋值元算符将一个变量和一

个表达式连接起来的式子。 格式:〈变量〉〈 = 〉〈表达式或常量〉

如 : int a=3; // 指定a为整型变量,初值为3  float f=3.56; // 指定f为浮点型变量,初值为3 .56 char c= ‘a’; // 指定c为字符变量,初值为‘ a’

Page 23: 第二讲 数据类型,运算符和表达式

23

复合的赋值运算符

复合的赋值运算符 在赋值符“=”之前加上其他运算符,可以构成复合的运算符。例如 : a+=3 等价于 a=a+3 x*=y+8 等价于 x=x*(y+8) x / =3 等价于 x=x/ 3

以“a+=3”为例来说明,它相当于使a进行一次自加3的操作。即先使a加3,

再赋给a。

Page 24: 第二讲 数据类型,运算符和表达式

24

7.1 基本的算术运算符• + (加法运算符,或正值运算符。如 : 3

+5、+3)• - (减法运算符,或负值运算符。如 : 5

-2、-3)• * (乘法运算符。如 : 3 * 5)• / (除法运算符。如 : 5/3)• % (模运算符,或称求余运算符,%两侧

均应为整型数据,如 : 7%4的值为3)。

7. 算术运算符和表达式

Page 25: 第二讲 数据类型,运算符和表达式

25

7.2 算术表达式 用算术运算符和括号将运算对象 ( 也称操

作数)连接起来的、符合C语法规则的式子,称为C算术表达式。运算对象包括常量、变量、函数等。

例如 : a *b/c-1 .5 +′ a′ 是一个合法的表达式

Page 26: 第二讲 数据类型,运算符和表达式

26

算术表达式的求解 C语言规定了运算符的优先级和结合性。

在表达式求值时,先按运算符的优先级别高低次序执行,例如先乘除后加减。 e.g. a-b*c+d;

对于同一优先级,C规定了各种运算符的结合方向( 结合性 )

算术运算符的结合方向为“自左至右”,即先左后右 。

运算对象与运算符的结合方向。如“左结合性”,表示运算对象先与左边的运

算符结合, e.g. a-b+c;

Page 27: 第二讲 数据类型,运算符和表达式

27

自增、自减运算符

++, - - 作用是使变量的值增1或减1如: ++i,--i(在使用i之前,先使i的值加 (减)1) i++,i--(在使用i之后,使i的值加( 减)1)例: i=3;j=i++;k=++i;请问j 和 k 的值是否一样?各

为多少?

j=3, k=4 , i=4

Page 28: 第二讲 数据类型,运算符和表达式

28

注意: (1)自增运算符(++),自减运算符(--),

只能用于变量,而不能用于常量或表达式, (2)++和--的结合方向是“自右至左”。

说明: 自增(减)运算符常用于循环语句中使循环变量自动加1。也用于指针变量,使指针指向下一个地址 C语言中有的运算符为一个字符,有的运算符由两个字符组成 ,为避免误解,最好采取大家都能理解的写法。 例如:不要写成i+++j的形式,而应写成 (i++)+j或者i+(++j)的形式 使用++,--时容易出现意想不到的问题,初学者慎用

Page 29: 第二讲 数据类型,运算符和表达式

29

8. 逗号运算符和逗号表达式 逗号运算符: “,” 逗号表达式:将两个表达式连接起来,又称为“顺序求值运算符”

一般形式 : 表达式1,表达式2 如:3+ 5,6+8

求解过程: 先求解表达式1,再求解表达式2。整个逗号表达式的

值是表达式2的值。 逗号表达式 的

值为 14

Page 30: 第二讲 数据类型,运算符和表达式

30

9. 总结 本讲主要涉及到 C 中的一些基本语法知识,

对于语法知识没有太多“为什么?”,需要记忆的必须在理解的基础上记忆;

对于语法知识,先掌握常用的一些,一开始不必细扣太多,后面有了一定的基础后再补充;

开始学习写程序,多读别人的程序,在读懂的基础上加以模仿、借鉴、应用。

Page 31: 第二讲 数据类型,运算符和表达式

31

课堂练习 1 :求圆的周长和面积编写 C 程序计算圆的周长和面积,并输出。

问题的分析 用户:请给我计算一下圆的周长和面积。 计算机:请问半径是多少? 用户: 5.3 。 计算机:圆的周长 =2*π*5.3=33.3 ; 圆的面积 =π*5.3*5.3=88.25

Page 32: 第二讲 数据类型,运算符和表达式

32

算法

要求用户输入半径要求用户输入半径

计算周长和面积计算周长和面积

输出计算结果输出计算结果

开始

结束分析:

1. 需要用到几个变量?

2. 变量是什么类型?

3. 变量之间的关系是什么?

Page 33: 第二讲 数据类型,运算符和表达式

33

参考程序 #include<stdio.h> main() { float r,C,S; /* 定义了三个 float 型变量 */ r=3; /* 给半径赋初值 */ C=2*3.14*r; /* 给出计算周长的表达式 */ S=3.14*r*r; /* 给出计算面积的表达式 */ printf(“C=%f,S=%f”,C,S);/* 输出 */ }

printf 函数:•一般格式: printf( 格式控制,输出表列 ) •格式控制:“ ”引起的字符串。包括两个方面信息:格式说明(由 % 和格式字符组成,如 %d , %f… )和普通字符(原样输

出)

Page 34: 第二讲 数据类型,运算符和表达式

34

课堂练习 2 年龄计算问题 小名今年 5岁,他父亲的年龄是他的 5倍还多 3岁,他爷爷的年龄是他的 15倍还差 2岁,他妈妈的年龄刚好是他的 5倍,编程求出小名父母及爷爷的年龄。

分析:

1. 他们的年龄如何表示?

2. 需要几个变量?

3. 变量的类型是什么?

4. 变量之间的关系是什么?

Page 35: 第二讲 数据类型,运算符和表达式

35

作业 P67 3.7 3.8 3.10