1 / 98

第二章 数据描述与基本操作

第二章 数据描述与基本操作. 本章学习重点: C 语言的基本数据类型 ; C 语言的变量与常量 ; 运算符与表达式以及数据类型的转换; 掌握条件编译的格式及使用方法。. 本章目录. 第二讲 基本数据类型、变量与常量 第三讲 运算符与表达式、数据类型的转换 第四讲 数据的输入与输出 本章小结. 结束. 第二讲 基本数据类型、变量与常量. 基本数据类型、变量与常量 练一练 本讲小结. 返回到本章目录. 基本数据类型、变量与常量. 【思考题 2 -1 】 已知一个圆的半径,求这个圆的周长和面积。 ( 一 )程序分析 :

rhys
Télécharger la présentation

第二章 数据描述与基本操作

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第二章 数据描述与基本操作 本章学习重点: C语言的基本数据类型; C语言的变量与常量; 运算符与表达式以及数据类型的转换; 掌握条件编译的格式及使用方法。

  2. 本章目录 第二讲 基本数据类型、变量与常量 第三讲 运算符与表达式、数据类型的转换 第四讲 数据的输入与输出 本章小结 结束

  3. 第二讲 基本数据类型、变量与常量 基本数据类型、变量与常量 练一练 本讲小结 返回到本章目录

  4. 基本数据类型、变量与常量 【思考题2-1】已知一个圆的半径,求这个圆的周长和面积。 (一)程序分析 : 如果我们用r代表圆的半径,用l代表圆的周长,用s代表圆的面积,用PI代表圆周率π,那么圆的周长公式是l=2πr,圆的面积公式是s=πr2。在这两个公式里,PI是圆周率,固定不变的,而半径是可变的,则圆的周长与圆的面积也是可变的,那么,这些元素如何在C语言里进行说明并表示出来?这就是我们这一讲要重点讲述的内容。 返回到本章目录

  5. (二)编写程序代码如下: #include "stdio.h" /*文件包含命令*/ #define PI 3.14 /*定义符号常量圆周率π*/ main() { int r; /*定义圆的半径r*/ float area,length; /*定义圆的面积s和周长l,为单精度浮点型*/ r=3; /*为半径变量r设置初始值*/ length=2*PI*r; /*计算圆周长,并把结果赋值给l*/ area=PI*r*r; /*计算圆的面积,并把结果赋值给s*/ printf("r=%d\n length=%f\narea=%f\n",r,length,area); /*输出运算结果*/ } 返回到本章目录

  6. (三)调试程序及运行结果 按“Ctrl+F9”键,对程序进行编译,然后按“Alt+F5”键查看结果,程序运行结果如下所示: 返回到本章目录

  7. 1.标识符 (1)所谓标识符,是指用来标识程序中用到的变量、函数、类型、数组、文件以及符号常量等的有效字符序列。简言之,标识符就是一个名字。C语言中的标识符可以分为三类:即关键字、预定义标识符和用户自定义标识符。 返回到本章目录

  8. (1)关键字 关键字又称保留字,是C语言规定的具有特定意义的标识符,它已被Turbo C 2.0本身使用, 不能作其它用途使用,每个关键字都有固定的含义。C语言的关键字分为以下四类: ① 标识数据类型的关键字(14个) int,long,short,char,float,double,signed,unsigned struct,union,enum,void,volatile,const ② 标识存储类型的关键字(5个) auto,static,register,extern,typedef 返回到本章目录

  9. ③ 标识流程控制的关键字(12)个 goto,return,break,continue,if,else,while,do,for,switch,case,default ④ 标识运算符的关键字(1个) sizeof 例如【思考题2-1】程序中的“float”就是数据类型的关键字,它表示单精度浮点型数据。 返回到本章目录

  10. 预定义标识符 预定义标识符是一类具有特殊含义的标识符,用于标识库函数名和编译预处理命令。系统允许用户把这些标识符另作它用,但这将使这些标识符失去系统规定的原意,为了避免误解,建议不要将这些预定义标识符另作它用。 返回到本章目录

  11. C语言中常见的有以下几种: ① 编译预处理命令 define,ifdef,ifndef,endif,include,line,if,else等 例如【思考题2-1】程序中的“include”和“define”就是两个预定义标识符,要在其前面加“#”号,一般写在主函数main的上面。 ② 标准库函数 包括数学函数:sqrt,fabs,sin,pow等,还有输入输出函数:scanf,printf,getchar,putchar,gets,puts等。 例如思考题例程中的“printf”就是一个输出函数,通过这个函数可以把结果在显示器上显示出来。 返回到本章目录

  12. (3)用户定义标识符 用户定义标识符是程序员根据自己的需要定义的用于标识变量、函数、数组等的一类标识符。用户在定义标识符时应符合C语言标识符的命名规则。 在C语言中,标识符的命名规则如下: ① 只能由字母、数字和下划线三种字符组成。 ② 第一个字符必须为字母或下划线。 例如【思考题2-1】程序中的“PI,r,l,s“就是用户自己定义的标识符,只要符合C语言标识符的命名规则即为合法。 返回到本章目录

  13. 短整型(short) 整型 整型(int) 长整型(long) 基本类型 单精度型(float) 实型(浮点型) 双精度型(double) 字符类型(char) 数组类型 C数据类型 结构体类型(struct) 构造类型 共用体类型(union) 枚举类型(enum) 空类型(void) 1.基本数据类型 返回到本章目录

  14. 返回到本章目录

  15. 3.变量 (所谓变量,是指在程序运行过程中其值可以改变的量。一个变量应该有一个名字,在内存中占据一定的存储单元。变量定义必须放在变量使用之前。一般放在函数体的开头部分。 变量定义的格式如下: 存储类型符 数据类型符 变量名表; 返回到本章目录

  16. 说明: ① 存储类型符用来说明变量的存储类型,存储类型可以是自动类型(auto),寄存器类型(register)、静态类型(static)、外部类型(extern),默认为自动类型(auto),如果对存储类型未做任何说明,则按默认的自动类型处理。 ② 数据类型符用来说明变量的数据类型,数据类型可以是C语言中任意一种基本数据类型或构造数据类型标识符。 ③ 变量名表中可以只有一个变量,也可以有多个变量,如果有多个变量,变量之间用逗号隔开。 返回到本章目录

  17. (2)变量的赋值 定义变量后,在使用之前需要给定一个初始值。在C语言中,可以通过赋值运算符“=”给变量赋值。变量赋值语句的一般格式是: 变量名=表达式; 返回到本章目录

  18. 变量的赋值,一般有以下两种情况: ① 先定义变量,后赋值。 如【思考题2-1】程序开头的部分代码: int r; …… r=1; ② 变量的初始化。 在定义变量的同时为其赋值,称为变量的初始化。定义的变量可以全部初始化,也可以部分初始化。对于上面的程序段我们也可以这样写: int r=1; 即定义了整型变量r的同时,对其赋初值为1。 返回到本章目录

  19. 赋值的注意事项 在给变量赋值时,应注意以下几个问题: ① 变量在某一时刻只有一个确定的值,变量获得新值后,其原值将不再存在。例如: int r; …… r=1; r=2; 该程序执行后,变量r的值是2,而不是1。 ② 定义多个同类型变量时,如果给所有变量赋同一个值,只能逐个处理。如有三个整型变量x,y,z,且初值均为10,可以写成下面的形式: int x=10,y=10,z=10; ③ 如果变量的类型与所赋数据的类型不一致,所赋数据将被转换成与变量相同的类型。 例如,下面的定义是合法的: int x=10.5; long y=99; 该程序执行后,变量x的值是整数10(只将整数部分赋给变量x),变量y的值是长整数99。 返回到本章目录

  20. 4.常量 常量又称常数,是指在程序运行过程中其值不能改变的量。C语言中的常量又分字面常量和符号常量。字面常量又称直接常量,就是常说的常数。字面常量可以分为不同的类型,有整型常量、实型常量、字符型常量与字符串常量。 返回到本章目录

  21. (1)整型常量 整型常量又称整数,在C语言中,整数可以用三种数制来表示: ① 十进制整常数:十进制整常数没有前缀。其数码为0~9。 ② 八进制整常数:八进制整常数必须以0开头,即以0作为八进制数的前缀。数码取值为0~7。八进制数通常是无符号数。 ③ 十六进制整常数:十六进制整常数的前缀为0X或0x。其数码取值为0~9,A~F或a~f。 ④ 整型常数的后缀:在16位字长的机器上,基本整型的长度也为16位,因此表示数的范围也是有限定的。 返回到本章目录

  22. (2)实型(浮点型)常量 实型也称为浮点型,实型常量也称为实数或者浮点数。在C语言中,实数只采用十进制。它有两种形式:十进制小数形式和指数形式。 ① 十进制小数形式。 小数形式是由数码0~9和小数点组成(注意:必须有小数点)。例如:6.789,.789,6.,0.0都是十进制小数形式的合法表示。 ② 指数形式。 指数形式又称科学计数法。由十进制小数加上阶码标志“e”或“E”以及阶码(只能为整数,可以带符号)组成。其一般形式为: 其中a为十进制数,n为十进制整数,其值为 a*10n。 a E n 返回到本章目录

  23. (3)字符型常量 ① 字符常量的定义 字符常量是用单引号括起来的一个字符。例如:'a','A','@', '?'等。 ②字符常量的特点: • 字符常量只能用单引号括起来,不能用双引号或其它括号。单引号只是字符与其它符号的分隔符,或者说是字符常量的定界符,不是字符常量的一部分,当输出一个字符常量时不输出此单引号。 • 字符常量只能是单个字符,不能是多个字符。 • 字符可以是字符集中任意字符。但数字被定义为字符型之后就不能参与数值运算。如'5'和5是不同的。'5'是字符常量,不能参与运算。 返回到本章目录

  24. 字符型数据在内存中的存储形式及使用方法 每个字符变量被分配一个字节的内存空间,因此只能存放一个字符。 (4)字符串常量 ① 字符串常量的定义 • 字符串常量是用一对双引号括起来的零个或多个字符序列。如: "hello","","abc","123"等。 • 字符串以双引号为定界符,但双引号并不属于字符串。要在字符串中插入双引号,应该借助转义字符'\ "'才行。字符串的长度等于字符串中包含的字符个数。例如字符串"hello"的长度为5个字符。 返回到本章目录

  25. ② 字符常量与字符串常量的区别 • 字符常量由单引号括起来,字符串常量由双引号括起来。 • 字符常量只能是单个字符,字符串常量则可以含一个或多个字符。 • 可以把一个字符常量赋予一个字符变量,但不能把一个字符串常量赋予一个字符变量。在C语言中没有相应的字符串变量。这是与BASIC 语言不同的。但是可以用一个字符数组来存放一个字符串常量。在数组一章内予以介绍。 • 字符常量占一个字节的内存空间。字符串常量占的内存字节数等于字符串中字节数加1。增加的一个字节中存放字符'\0' (ASCII码为0)。这是字符串结束的标志。 返回到本章目录

  26. (5)符号常量 在C语言中,也可以用一个标识符来表示一个常量,称之为符号常量。符号常量在使用之前必须先定义,其一般形式为: 符号常量的特点是: ① 习惯上符号常量的标识符用大写字母,变量标识符用小写字母,以示区别。 ② 符号常量与变量不同,它的值在其作用域内不能改变,也不能再被赋值。 使用符号常量的好处是:含义清楚,并且能做到“一改全改”。 #define 标识符 常量 返回到本章目录

  27. 练一练 【练习2-1】 请判断下列哪些用户自定义标识符是合法的?( ) A)a&b , 1_xy , e5 , a.b B)exam , x1 ,int ,define C)ram , _mn , 3ep ,x*y D)ch , x_3_1 , z2 ,num 解:因为标识符只能由英文大小写字母,数字和下划线三种字符组成,且开头字母只能由字母和下划线组成。所以只有D中的所有标识符是正确的。注意用户自定义标识符不能是系统的保留字(关键字),而C语言中的int和define是关键字,不能做标识符,也是错误的。 【练习2-2】 下面哪个是合法的字符串常量( ) A)'a' B)'\076' C)"Hello" D)Hello 解:因为字符常量是用一对单引号引起来的一个字符,字符串是用一对双引号引起来的零个或多个字符序列。所以必须得有一对双引号,里面可以有n(n≥0)个字符的序列。所以选择C。而A和B都是字符常量,D可以是一个标识符。 返回到本章目录

  28. 【练习2-3】 下面哪个表示浮点数的科学计数表示法是正确的?( ) A)3e2.5 B)1.25e C)3.45e-5 D)e+8 解:因为科学计数法有两点要求:(1)e或E前后必须有数字,(2)e或E后的数字必须是整数。所以答案C是正确的。A错误在于e后的数字为小数,B错误在于e后没有数字,D错误在于e前面没有数字。 【练习2-4】 下面的变量定义及初始化语句哪个是正确的?( ) A)int a=3;b=5; B)int a=3 b=5 C)int a=3,b=5; D)int a==3,b==5; 解:因为变量定义及初始化语句格式是: 类型符 变量名1=初值1,变量名2=初值2,……; 各变量之间用逗号分隔,语句结束标志为分号“;”变量初始化的赋值运算符为“=”,所以正确答案为C。 返回到本章目录

  29. 本讲小结 本次课主要介绍基本标识符的定义及其分类情况,C语言的数据类型及各代表符号,siaeof运算符的使用,变量的定义、初始化、赋值,常量的定义与应用。 返回到本章目录

  30. 第三讲 运算符与表达式、数据类型的转换 一、算术运算与赋值运算 二、关系运算、逻辑运算与条件运算 三、圆括号运算符、逗号运算符和sizeof运算符 练一练 本章小节 返回到本章目录

  31. 一、算术运算与赋值运算 【思考题2-2】有两个变量x、y,x的初始值为9,y的初始值为4,分别求出x与y的和、差、积、商与余数。 (一)程序分析 通过上一讲中我们讲了变量的声明与初始化,可以对变量x与y进行声明与初始化,用变量a、b、c、d、e分别表示x与y的和、差、积、商与余数。 返回到本章目录

  32. (二)编写程序代码 main() { int x=9,y=4,a,b,c,d,e; a=x+y; b=x-y; c=x*y; d=x/y; e=x%y; printf("x+y=%d\nx-y=%d\nx*y=%d\nx/y=%d\nx%%y=%d\n",a,b,c,d,e); } 返回到本章目录

  33. (三)调试程序及运行结果 程序运行结果如下: 返回到本章目录

  34. (1)x/y的结果为2,而不是2.25,这是因为“/”号在C语言中的除法有两种运算:(1)x/y的结果为2,而不是2.25,这是因为“/”号在C语言中的除法有两种运算: 如果两个运算符都为整型变量时,结果为舍去取整。 如果两个运算符中有一个为小数(即浮点型变量)时,结果为正常的小数。 (2)输出“x%y”时,输出的格式“x%%y=%d”。因为“%”为格式化输入输出时的起始字符,所以要在屏幕上输出“%”可以连续打两个“%”,就可以在屏幕上显示一个“%”字符。 返回到本章目录

  35. 1.算术运算符及算术表达式 返回到本章目录

  36. (1)求余运算符“%” 又称取模运算符,要求“%”的两侧必须为整型数,它的作用是取两个整型数相除的余数,余数的符号与被除数的符号相同。例如【思考题2-2】中的e=x%y,x的值为9,y的值为4,因此e=x%y即相当于e=9%4,它的结果是1。现在假设x的值为-9,则-9%4的结果就是-1,如果x不变,y为-4,则-9%-4的结果是-1。 返回到本章目录

  37. (2)除法运算符“/” 当两个操作数都是整数时,运算的结果是整数(舍去取整),即表示“整除”。如果参加运算的两个数中有一个是实数,则结果是实数。在【思考题2-2】中,x与y分别是9和4,是两个整数,x/y的结果是2,那么,如果把x定义为:float x=9.0,则x/y的结果就变为2.250000。 返回到本章目录

  38. (3)自增运算符“++”或自减运算符“--” 自增运算符“++”或自减运算符“--的作用是使运算对象的值增1或减1。它们既可以作前缀运算符(位于运算对象的前面),例如++x和—x,也可以作后缀运算符(位于运算对象的后面),例如x++和x--。 • 使用自增运算符或自减运算符,应注意以下几个问题: • ① 使用自增或自减运算符只适合用于整型或字符型变量,而不能用于常量或表达式。例如(x+y)++和++9都是不合法的。 返回到本章目录

  39. 自增或自减运算符,通常用于循环语句中,使循环语句的值加1或减1,也可以用于指针变量,使指针变量指向下一个地址或前一个地址。 • ③ 在只需对变量本身进行加1或减1而不考虑表达式值的情况下,前缀运算和后缀运算的效果完全相同,否则,结果是有不一样的: • ④ 自增(减)运算符的结合性是“自右向左”。 返回到本章目录

  40. 2.赋值运算符与赋值表达式 返回到本章目录 “=”是C语言的赋值运算符,在【思考题2-2】中,语句a=x+y中“=”就是赋值符号,而不是我们数学意义上的“等于号”,数学上的“等于号”(相当于关系运算符中的“比较等于”)在C语言中用“==”表示。 C语言允许在赋值运算符“=”之前加上其他运算符,构成复合赋值运算符。C语言共有10种复合赋值运算符,如下表所示:

  41. 返回到本章目录

  42. 注意: (1)赋值运算符和复合赋值运算符的结合方向均为从右到左,优先级只高于逗号运算符,而比其他运算符的优先级都低。 例如:表达式x*=y+2等价于x=x*(y+2)。 赋值表达式是由赋值运算符“=”将一个变量和表达式连接起来的式子。赋值表达式的一般格式为: (2)赋值运算符左边必须是变量。赋值表达式的值就是被赋值后的变量值。如果一个语句中出现多个复合赋值表达式时,从右向左依次进行赋值。 变量名=表达式 返回到本章目录

  43. 二、关系运算、逻辑运算与条件运算 【思考题2-3】 输入一个字母,判断它是否是小写字母,若是则转换成大写字母,否则不转换,并输出所得的结果。 (一) 程序分析 在输入一个字符时,先判断它的取值区间,如果是大写字母“A~Z”,则它的ASCII值是65~90,如果是小写字母“a~z”的ASCII码值是97~122,大小写字母ASCII码的差值为32,因此半小写字母转换成大写字母只需将其ASCII码减去32即可,反之将大写字母转换成小写字母只需将其ASCII码加上32即可。 返回到本章目录

  44. (二)编写程序代码 main() { char c; /*定义变量c为字符数据类型*/ printf("\ninput char:"); scanf("%c",&c); /*输入字符c*/ c=(c>='a'&&c<='z')?c-32:c; /*若c在'a'~'z'范围内,转换成大写字母*/ printf("\noutput char:%c\n",c); /*输出转变后的结果c*/ } (三) 调试运行程序 程序运行结果如下: 返回到本章目录

  45. 3.关系运算与关系表达式 C语言的关系运算符表 返回到本章目录

  46. 使用关系运算符时,应注意以下几个问题: (1)在上述6个运算符中,前4个运算符的优先级高于后两个运算符的优先级。 (2)应将等于关系运算符“==”与赋值运算符 “=”相区别。“==”是关系运算符,用于比较运算,而“=”是赋值运算符,用于赋值运算。 (3)关系运算符的优先级低于算术运算符而高于赋值运算符。它们的结合性是自左至右。 ④ 因为“<”的优先级大于“==”,所以要先进行2<n的运算,结果为1,再进行m==1的运算,结果为0,表达式m==2<n的值为0。 返回到本章目录

  47. 4.逻辑运算符与逻辑表达式 返回到本章目录 C语言的逻辑运算符及功能

  48. 使用逻辑运算符,应注意以下几个问题: (1)三个逻辑运算符的优先次序为:!(逻辑非)→ &&(逻辑与)→ ||(逻辑或),即逻辑非“!”最高,逻辑与“&&”次之,逻辑或“||”最低。 (2)逻辑非“!”的优先级高于算术运算符,逻辑与“&&”和逻辑或“||”的优先级低于算术运算符和关系运算符,高于赋值运算符。在c>='a'&&c<='z'中,就要先进行“c>='a'”和“c<='z'”的关系运算,再进行逻辑与运算。 (3)逻辑运算符中逻辑非“!”的结合方向是自右至左,逻辑“&&”和逻辑或“||”的结合方向是自左至右。 返回到本章目录

  49. 逻辑运算的真假值表 返回到本章目录

  50. 5.条件运算符与条件表达式 表达式1 ? 表达式2 : 表达式3 返回到本章目录 条件运算符是由字符“?”和“:”组成的,要求有三个运算对象,是C语言中惟一的三目运算符。条件运算符的优先级高于赋值运算和逗号运算符,而低于其他运算符。其结合性为自右至左。 条件表达式是由条件运算符将运算对象连接起来的式子。它的一般格式为:

More Related