第2章C语言程序设计的初步知识.ppt

上传人:本田雅阁 文档编号:2252279 上传时间:2019-03-11 格式:PPT 页数:38 大小:285.51KB
返回 下载 相关 举报
第2章C语言程序设计的初步知识.ppt_第1页
第1页 / 共38页
第2章C语言程序设计的初步知识.ppt_第2页
第2页 / 共38页
第2章C语言程序设计的初步知识.ppt_第3页
第3页 / 共38页
亲,该文档总共38页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《第2章C语言程序设计的初步知识.ppt》由会员分享,可在线阅读,更多相关《第2章C语言程序设计的初步知识.ppt(38页珍藏版)》请在三一文库上搜索。

1、1,第2章 C语言程序设计的初步知识,本章要点: 标识符命名规则 常量和变量 基本数据类型 常用运算符及表达式 运算符的优先级及结合性 本章难点: 不同类型数据间的混合运算 运算符的优先级 自增(+)自减(-)运算符的使用,2,2.1 C语言的数据类型,3,2.2 常量、变量和标识符,2.2.1标识符 C语言中的标识符可以分为系统定义标识符和用户定义标识符。 系统定义标识符 关键字 关键字是C语言系统使用的具有特定含义的标识符,不能作为预定义标识符和用户定义标识符使用。C语言定义了32个关键字,如表2.1所示。 2) 预定义标识符 预定义标识符也是具有特定含义的标识符,包括系统标准函数名和编译

2、预处理命令等,如scanf、printf、define和 include等都是预定义标识符。,4,表2.1 C语言中的关键字,关键字必须用小写字母;不允许使用关键字为变量、数组和函数等操作对象命名。,5,2. 用户定义标识符 用户定义标识符用于对用户使用的变量、数组和函数等操作对象进行命名。例如将一个变量命名为a,将一个数组命名为date,将一个函数命名为fun等。 用户标识符命名时要注意: (1) C语言对英文字母的大小写敏感,即同一字母的大小写被认为是两个不同的字符。例如total与TOTAL是不同的标识符。 (2) 标识符必须由字母或下划线开头,并且除了字母、数字和下划线外,不能含有其他

3、字符。 (3) 标识符的命名要见名知意,即通过变量名就知道变量值的含义。 (4) 标识符的有效长度随系统而异,但至少前8个字符有效。如果超长,则超长部分被舍弃。,6,2.2.2 常量 1.定义:在程序执行期间,其值不可改变的量称为常量 2.类型: 数值常量 例如:5,-10 , 3.14等 符号常量 即用一个符号代表一个常量 例2.1 用标识符代表常量。 #define PI 3.1415926 main() float s,r; r=5; s=PI*r*r; printf(“%f“,s); ,7,说明:,符号常量必须先定义后才能用它表示一个数值。 符号常量的值在其作用域内不能改变,也不能再被

4、赋值。 符号常量名习惯用大写字母表示。,8,2.2.3 变量,1. 变量概念:程序执行期间值可以改变的量。 命名规则: 变量名由标识符表示,只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线。 例如:以下为不合法的变量名: M.D.Jess , 1add ,age /*定义了整型变量a*/,9,3. 变量的初始化 C语言允许在定义变量的同时给变量赋值,这称为变量的初始化。变量初始化的一般格式为: 数据类型标识符 变量名1=初值1,变量名2=初值2,变量名n=初值n; C语言允许在定义变量的同时初始化变量,如: int a=2; /*指定a为整型变量,初值为2*/ float

5、f=3.45; /*指定f为实型变量,初值为3.45*/ char c=A; /*指定c为字符变量,初值A*/ 也可以使被定义的变量的一部分赋初值,如: int a=1, b=-3,c;,10,在C语言中,变量必须强制定义,其目的是: 1、凡未被事先定义的,不作为变量名。 2、每一个变量被指定为一确定的类型,在编译时就能为 其分配相应的存储单元。 3、指定每一个变量为一确定的类型,在编译时据此检查 该变量所进行的运算是否合法。 * 选变量名时,要做到“见名知意” 例如:name st_age xm nl class sum * 大小写字母是两个不同的字符,C变量名习惯 用小写字母表示。 * 建

6、议变量名的长度不要超过8个字符。,注意:,11,2.3 整型数据,2.3.1整型常量 1.整型常量的形式 十进制整数 :由数字(0-9)和正负号表示 例如:123、-456、0 等 八进制整数:以0开头数是八进制数 例如: 0123 即(123)8 =( 83) 10 (123) 8=182+2 81+3 80 =( 83) 10 十六进制整数:以0x或0X开头, 例如: 0x123 即 (123) 16 =( 291) 10 main() int a=0123;b=0x123; /*0123是八进制数,0x123是十六进制*/ printf(“a=%d,b=%d“,a,b); 程序运行结果为

7、: a=83,b=291,12,原码、反码、补码 正数的原码、反码、补码相同 负数的原码为该数二进制最高位为1 负数的反码:除符号位外,按位取反 负数的补码:反码加一,13,14,2. 整型常量的类型 我们已知整型变量可分为int、short int、1ong int和unsigned int、unsigned short、unsigned long等类别。 (1) 一个整常量,如果其值在-32 768+32 767范围内,则认为它是int型。可以将它赋值给int型和1ong int型变量。 一个整常量,如果其值超过了上述范围,而在-2 147 483 6482 147 483 647范围内,

8、则认为它是1ong int型。 (3) 如果某一计算机系统的C版本确定的short int 与int型数据在内存中占据的长度相同,则它的表示范围与int型相同。 (4) 常量中无unsigned型,但一个非负值的整常量可以赋值给unsigned型整变量,只要它的范围不超过变量的表示范围即可。 (5) 在一个整常量后面加一个字母l或L则认为是1ong int型常量,例如123l、432L,这往往用于函数调用中。,15,2.3.2整型变量的分类,基本型:以 int 表示 短整型:以 short int 或 short 表示 1.类型 长整型:以 long int 或 long 表示 (123l、

9、123L) 无符号基本型(unsigned int) 无符号型 无符号短整型(unsigned short) 无符号长整型(unsigned long),(-3276832767),一个无符号整型变量中可以存放的正数的范围比一般整型变量中正数的范围扩大一倍。 int i; /* 变量i 的数值范围: -3276832768 */ unsigned int j; /* 变量j的数值范围:065535 */,1.整型变量的类型,16,整型变量的字长 short型字长16位(2个字节)。 long 型字长32位(4个字节)。 int 型随编译程序而定(可以是2个字节,也可以是4个字节) C要求 lo

10、ng型数据长度不短于int型, short型不长于int型。( short=int=long) long 型可以得到大范围的数据,但同时会降低运算速度,因此除非不得已,不要随便使用long型。,17,整型数据的溢出: main() int a,b; a=32767; b=a+1; printf(“”%d,%d”,a,b); 运行结果:32767,-32767 改进:将变量a和b改成long型,并按 %ld 格式输出。,18,2. 整型变量的定义 前面已提到,C规定在程序中所有用到的变量都必须在程序中指定其类型,即“定义”。这是和BASIC、FORTRAN不同的,而和PASCAL相类似。例如:

11、int a,b; /*指定变量a,b为整型*/ unsigned short c,d; /*指定变量c,d为无符号短整型*/ 1ong e,f; /*指定变量e,f为长整型*/ 对变量的定义,一般是放在一个函数的开头部分(也可以放在程序中间,但作用域只限于某一部分程序)。 例2.4 整型变量的定义与使用。 main() int a,b,c,d; /*指定a,b,c,d为整型变量*/ unsigned u; /*指定为无符号整型变量*/ a=20;b=-40;u=10; c=a+u;d=b+u; printf(“c=%d d=%d“,c,d); ,运行结果为: c30,d= -30,19,2.4

12、实型数据,2.4.1实型常量 1.实型常量的形式(两种): 十进制数形式:由数字和小数点及正负号组成。 (注意:必须有小数点) 例如:3.14 8.6 -23. 指数形式:由数字、小数点、字母e或E及正负号组成。 (注:e或E之前必须有数字,且后指数必须为整数) 例如:正确:3.5E-5 2e3 错误:E2 3.6e3.5 .e6 2. 实型常量的类型 多数C编译系统对实型常量按双精度(double)类型处理,以 提高运算精度。此时系统为实型常量分配8个字节的存储空间。 如果在实型常量后加字母f或F,则强调表示该数是float型 常量,这时系统会为其分配4个字节的存储空间。,20,2.4.2

13、实型变量 实型变量可分为: 单精度(float型) 如: float x , y ; 双精度型(double型) 如:double a , b , c ; 说明: 1. float 型变量在内存中占4个字节;double 型变量在内存中占8个字节。 2. 单精度实数提供7位有效数字;双精度实数提供1516位有效数字。 3. 一个实型常量不分float 和 double 型, 一个实型常量 可以赋给一个float 型或 double 型变量,并根据变量的类型截取实型常量中相应的有效位数字。 例如: float a; double b; a=123456.789e5 ; b=123456.789

14、;,21,3.5 字符型数据,3.5.1字符常量 1.字符常量:用单引号括起来的一个字符。 例如: a B # ! 2. 转义字符 :指不能用符号直接表示的字符常量。 将反斜杠()后面的字符转变成另外的意义。 如n中的“n”不代表字母n而作为“换行”符。 例如: n 换行 t 横向跳格(水平制表) b 退格 反斜杠字符 r 回车 f 换页 a 报警 0 空字符 main() printf(“Yb=n“); 运行结果: 程序运行时在屏幕上显示结果:= 程序运行时在打印机上输出结果:,22,注意: 字符常量首尾的单引号是定界符,不占存储空间。 在C语言中,a和a是不同的。前者代表字符常量,后者代表

15、一个标识符。 a和A是不同的字符常量。前者存储的是小写字母a的ASCII码值为97,后者存储的是大写字母A的ASCII码值为65。 转义字符代表一个字符,在内存中只占一个字节的存储空间。 转义字符0就是ASCII码值为0的字符,常用于表示字符串结束的标志符。 ddd形式的转义字符是用ASCII码(八进制数)表示的一个字符,例如101代表字符A,012代表“换行”。 xhh形式的转义字符也代表一个字符,反斜杠后必须以小写字母x开头,后面的两位数字为十六进制数。例如,x a和x A都代表回车换行符,等价于转义字符 n 。,23,3.5.2字符变量,定义形式: char 标识符1,标识符2, ,标识

16、符n 例如: char c1, c2, c3, ch ; c1=a ; c2=b ; c3=c ; ch= d; 说明: 1、字符变量在内存中占一个字节。 2、在内存中,是把字符对应的ASCII码值放到存储单元中. 3、字符型数据与整型数据之间可以通用.,24,main() char c1,c2; c1=97;c2=98; printf(“%c %cn”,c1,c2); printf(“%d %dn”,c1,c2); 输出结果: a b 97 98,main() int i; char c; i=a; c=97; printf(“%c,%dn”,c,c); printf(“%c,%dn”,i,

17、i); 输出结果: a, 97 a, 97,25,2.5.3字符串常量,1.定义:括在一对双引号之内的字符序列或转义字符序列称为字符串常量。 例如:“How are you!” “a” “*abcnt” 2.存储:字符串中的字符依次存储在内存中一块连续的区域内,并且把空操作字符 0自动附加到字符串的尾部作为字符串的结束标志。故字符个数为n的字符串在内存中应占n+1个字节。 例:c=“china”,c h i n a 0,26,b 与B是否相同? b 与“b”是否相同?,b为98,B为66 b是字符常量,“b“是字符串常量,思考?,注意: 字符串常量首尾的双引号是定界符,不属于字符串的内容。如果

18、字符串本身包括了双引号或反斜杠,必须使用转义字符。 不要将字符常量与字符串常量混淆,a是字符常量,“a”是字符串常量,二者不同。前者只占一个字节的存储空间,存放字符a的ASCII码值;后者占两个字节的存储空间,分别存放字符a和字符串结束标志0。 字符串常量中包含转义字符时,一定要注意其长度的计算。 在写字符串时不必加0,字符0是系统自动加上的。,27,2.6 算术运算符和算术表达式,2.6.1 基本的算术运算符和算术表达式 1. 基本的算术运算符 在C语言中,基本的算术运算符有5个: +(加法运算符,正值运算符),-(减法运算符,负值运算符),*(乘法运算符),/(除法运算符),%(模运算符)

19、 注意: 除法运算符“/”的运算对象可以是各种类型的数据,但是当进行两个整型数据相除时,运算结果也是整型数据,即只取商的整数部分;而操作数中有一个为实型数据时,则结果为双精度实型数据,即double型。例如,5.0/10的运算结果是0.5,5/10的运算结果是0,而不是0.5,10/4的运算结果是2。 求余运算符“%”要求运算对象必须是整型操作数,它的功能是求两个操作数相除的余数,余数的符号与被除数的符号相同。例如,11%3的值为2,-11%3的值为-2,2%-5的值为2。,28,2. 算术表达式 算术表达式是指用算术运算符和括号将运算对象(也称操作数,如常量、变量、函数等)连接起来、符合C语

20、法规则的式子,如: a*b/c-1.5+a 在算术表达式中,运算对象可以是各种类型的数据,包括整型、实型或字符型的常量、变量及函数调用。 2.6.2 算术运算符的优先级、结合性 在5个算术运算符中,*、/和%的优先级相同且高于+、-。 当运算符的优先级相同的情况下,这5个运算符的结合方向为从左至右(先左后右,简称左结合)。例: a - b + c 由于算术运算符为左结合,故先执行a-b,再执行加c的运算。,29,2.7 赋值运算符和赋值表达式,2.7.1 基本赋值运算符(=) 形式:变量名=常量或表达式 作用:将右边常量或表达式的值赋给左边的变量 例如: b=c+d 赋值符号“=”就是赋值运算

21、符,它的作用是将一个数据赋给一个变量。如x=5的作用是执行一次赋值操作,将常量5赋给变量x。 结合方向:从右向左。 例如:“a=b=c=10;”等价于“a=(b=(c=10);”即先将常量10赋给变量c,然后再将10赋给变量b,最后将10赋给变量a。,注意:如果表达式类型与左边的变量的类型不匹配,自动进行类型转换。,30,2.7.2 复合赋值运算符 复合赋值运算符:在赋值符“=”之前加上其它运算符 共有10种复合赋值运算符 +=,-=,*=,/=,%= /*复合算术运算符5个*/ &=,=,|=,= /*复合位运算符5个*/ 例如:a+=3 a=a+3 x*=y+3 x=x*(y+3) 注意,

22、a=a+b如果b是包含若干项的表达式,则相当于它有括号。如: x=y+3 x=(y+3) x=x%(y+3) /*不要写成x=xy+3*/,31,2.8 逗号运算符和逗号表达式,1.逗号运算符:即“,” 优先级:为所有运算符中级别最低的。 2.逗号表达式 形式:表达式1,表达式2,表达式n 求解过程:顺次求解表达式1,表达式2 最后求解表达式n。 逗号表达式的值为表达式n的值。 例如:a=3*4,a*5 a=3*4,a*5,a+5 注意:并不是任何地方出现的逗号都是作为逗号运算符,函数参数也是用逗号来间隔的,60,17,32,2.9 自增运算符、自减运算符及C语言运算符的优先级,2.9.1 自

23、增运算符 自增运算符(+)是单目运算符,其作用是使单个变量的值增1。自增运算符种类有两种: 前置 +i,先执行i+1,再使用i值; 后置 i+,先使用i值,再执行i+1。 例如: j=3; k=+j;则k=4,j=4; j=3; k=j+;则k=3,j=4。,33,2.9.2 自减运算符 自减运算符(-)是单目运算符,其作用是使单个变量的值减1。自减运算符种类也有 两种: 前置 -i,先执行i-1,再使用i值; 后置 i-,先使用i值,再执行i-1。 例如: j=3; k=-j;则k=2,j=2; j=3; k=j-;则k=3,j=2。 注意: 自增运算符(+)、自减运算符(-),只能用于变量

24、,不能用于常量和表达式。例如,5+、- (a+b)等都是非法的。 +和-的结合方向是“自右至左”,其优先级高于算术运算符。例如i=3, -i+相当于-(i+),因此表达式的值为-3,i=4。 自增运算符、自减运算符,常用于循环语句中,使循环控制变量加(或减)1,以及指针变量中,使指针指向下(或向上)一个地址。,34,2.9.3 C语言运算符的优先级与结合性,C的运算符有以下几类。 (1) 算术运算符 ( + - * / %) (2) 关系运算符 ( = | &) (5) 赋值运算符 (= 及其扩展赋值运算符) (6) 条件运算符 (? :) (7) 逗号运算符 (,) (8) 指针运算符 (*

25、 和 &) (9) 求字节数运算符 (sizeof) (10) 强制类型转换运算符 (类型) (11) 分量运算符 ( -) (12) 下标运算符 ( ) (13) 其他 (如函数调用运算符(),35,C语言规定了运算符的优先级和结合性。 运算符的优先级别从高到低依次为: 初等运算符,如()、 、 -、.; 单目运算符,如 !、+、-、*(指针)、&、(类型); 算术运算符(先乘除,后加减); 关系运算符; 逻辑运算符(不包括!); 条件运算符; 赋值运算符; 逗号运算符。 所谓结合性是指,当一个操作数两侧的运算符具有相同的优先级时,该操作数是先与左边的运算符结合,还是先与右边的运算符结合。自

26、左至右的结合方向,称为左结合性;反之,称为右结合性。结合性是C语言的独有概念。除单目运算符、赋值运算符和条件运算符是右结合性外,其他运算符都是左结合性。,36,2.10 不同类型数据间的混合运算,1. 隐式类型转换 隐式类型转换主要又可分为两类:算术转换和赋值转换。 (1) 算术转换 当表达式中的运算对象不同时,系统会进行类型的自动转换。转换的基本原则是:自动将精度低、表示范围小的运算对象类型向精度高、表示范围大的运算对象转换。 (2) 赋值转换 赋值转换主要出现在赋值表达式中,不管赋值运算符右边是什么类型,都要转换为赋值运算符左边的类型。若赋值运算符右边的值表示范围更大,则左边赋值所得到的值

27、将失去右边数据的精度。,37,2. 强制类型转换 C语言提供了强制类型转换运算符来实现强制类型转换。 格式: (类型)表达式 例如: (int)3.5 注意:在进行类型转换时,操作数的值并不发生改变,改变的只是表达式值的类型。 例如: float x=3.5;i=(int)x; /* i的值为3*/ 使用强制转换类型得到的是一个所需类型的中间量,原表达式类型并不发生变化。例如,(double)a只是将变量a的值转换成一个double型的中间量,其数据类型并未转换成double型。 (int)(x+y); /* 将x+y的值转换为int类型 */ (int)x+y; /* 将x的值转换为int类

28、型,再与y相加 */,38,2.11 本章小结,(1) C语言的数据类型有:基本类型、构造类型、指针类型和空类型。其中基本数据类型包括整型、实型(包括单精度实型和双精度实型)、字符型和枚举类型等。构造类型包括数组类型、结构体类型和共用体类型。 (2) C语言标识符的构造规则: 标识符由字母、数字和下划线组成。 标识符必须以字母或下划线开头。 (3) 常量是指在程序运行过程中其值不能被改变的量。常量通常有4种类型,整型常量、实型常量、字符型常量、字符串常量。整型常量有十进制、八进制和十六进制表示。实型常量有小数和指数两种表示形式,均按double类型处理。字符常量是用单引号(即撇号)括起来的单个

29、可视字符或转义字符。字符串常量是用一对双引号括起来的若干字符序列,存储时系统会自动在其末尾加0作为字符串的结束标志,因此字符串常量所占存储空间等于字符串长度加1。 (4) 在程序运行时,其值能被改变的量叫变量,变量必须先定义后使用。变量的类型由定义语句中的数据类型标识符指定。系统根据变量类型分配相应的存储空间,存放变量的值。通过变量初始化可以给变量赋初值。不能直接使用未经赋值的变量,因为它的值是一个不确定的数据。 (5) 在C语言中,基本的算术运算符有5个,分别是+、-、*、/、%。其中*、/和%的优先级相同且高于+、-。当运算符的优先级相同的情况下,这5个运算符的结合方向为从左至右(先左后右,简称左结合)。 (6) 在进行混合运算时,如果一个运算符两侧的运算对象的数据类型不同,系统则按“先转换,后运算”的原则,首先将数据自动转换成同一类型,然后在同一类型数据间进行运算。 C语言提供了强制类型转换运算符来实现强制类型转换,其格式为:(类型)表达式,

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

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1