




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 计算机计算机程序程序的功能是对的功能是对数据数据进行进行加工和处理加工和处理。通常,一个程序应包括对数据的描述和对数据处理通常,一个程序应包括对数据的描述和对数据处理的描述。的描述。第第2 2章章 基本类型数据及其运算基本类型数据及其运算 对数据的描述,即对数据的描述,即数据结构数据结构。对数据处理的描。对数据处理的描述,即述,即算法算法。在。在C C语言中,数据结构以数据类型的形语言中,数据结构以数据类型的形式出现,算法由语句序列实现。式出现,算法由语句序列实现。 2.1 C2.1 C语言的数据类型语言的数据类型 2.3 2.3 整型数据整型数据 2.4 2.4 实型数据实型数据 2.5
2、2.5 字符型数据字符型数据 第2章 基本类型数据及其运算2.9 2.9 顺序结构程序设计顺序结构程序设计 2.6 2.6 运算符与表达式运算符与表达式 2.72.7数据的类型转换数据的类型转换 2.82.8数据的输入与输出数据的输入与输出 第2章 基本类型数据及其运算2.1 C2.1 C语言的数据类型语言的数据类型 数据的值有两种不同的表现形式:常量和变量。 C语言提供了丰富的运算符和表达式,以完成各种数值计算和非数值计算。2.1 C2.1 C语言的数据类型语言的数据类型 本章将着重介绍基本数据类型中的整型、实型和字符型数据,数据的运算及输入输出。 在C语言中,标识符就是常量、变量、数组、函
3、数、类型和语句的名称,分为关键字、预定义标识符和用户标识符3种类型。 2.2.1 2.2.1 标识符标识符 ANSI C标准C共有32个关键字,1999年ISO推出的C99标准新增了5个关键字(见附录C)。 根据关键字的作用,可以将关键字分为数据类型关键字和流程控制关键字两大类。 1. 数据类型关键字(1) 基本数据类型(5个)voidcharint float double(2) 类型修饰关键字(4个)short long signed unsigned2.2.1 2.2.1 标识符标识符 (3) 复杂类型关键字(5个)struct union enum typedef sizeof(4)
4、存储级别关键字(6个)auto static register extern const volatile2. 流程控制关键字(1) 跳转结构(4个)return continue break goto(2) 分支结构(5个)if else switch case default (3) 循环结构(3个)for do whileC99新增5个关键字:inlinerestrict_bool_Complex_Imaginary2.2.1 2.2.1 标识符标识符 2.预定义标识符 预定义标识符通常包括C编译系统提供的标准库函数名(如printf、scanf等)和编译预处理命令名(如define 、
5、include等)。2.2.1 2.2.1 标识符标识符 在C语言中,预定义标识符也有特定的含义。虽然预定义标识符也可以作为用户标识符使用,但这样会失去系统规定的原意。 3.用户标识符 C程序中用于标识变量、符号常量、数组、函数和数据类型等对象的一个字符序列,统称为用户定义标识符。 C语言规定用户标识符只能由字母、数字和下划线组成,且以字母或下划线开头。2.2.1 2.2.1 标识符标识符 2.2.1 2.2.1 标识符标识符 说明:说明:(1)C语言中同一字母的大小写,被认为是两个不同的字符。例如: total、TOTAL、ToTaL、tOtAl 不同的用户标识符。(2)C语言的关键字不能不
6、能用作用户标识符。例如:int 不合法Int、INT、iNt 合法(3)用户标识符的命名要见名知意。 例如:name/xm(姓名)、sex/xb(性别)、age/nl(年龄)。2.2.1 2.2.1 标识符标识符 (4)避免使用易混字符。例如: 1、l、i;0、o、O;p、P;x、X;2、z、Z等。file6、stu_name、DeFault、_9、xandy 正确6file、stu-name、default、-9、x&y 不正确 在程序运行过程中,其值不能被改变的量称为常量。 常量分为直接常量和符号常量。2.2.2 2.2.2 常量常量 直接常量的类型从字面上就能够区分出来,如:12
7、5 为整型常量,12.56 为实型常量,a 为字符常量,china 为字符串常量。1.直接常量 直接常量即常数,分为整型常量、实型常量、字符常量和字符串常量。2.2.2 2.2.2 常量常量 2. 符号常量 符号常量是用一个用户标识符来代表一个常量。一般格式为: define define 标识符标识符 常量常量例如:define PI 3.14159262.2.2 2.2.2 常量常量 【例2-1】已知圆的半径,求圆的周长和面积。#define PI 3.14159int main()int radius; float circumference,area; radius=5;circumf
8、erence=2*PI*radius;area=PI*radius*radius; printf(周长fn,circumference); printf(面积%f,area); return 0; 2.2.2 2.2.2 常量常量 使用符号常量的好处如下:(1)含义清楚。 在程序中有些常量具有特定含义,用符号常量名代表它,含义清楚,提高程序的可阅读性。(2) 一改全改。 2.2.3 2.2.3 变量变量 变量代表内存中具有特定属性的一个存储空间来放数据,其中的数据称为变量的值。在程序运行期间,变量值是可以改变的。 编译系统将对每一个变量根据它的类型分配相应字节的连续内存单元,称为变量存储空间。
9、 每个变量都必须有一个名字,变量名实际上是以一个名字代表一个内存地址。 把这几个内存单元地址中较低的地址称为变量地。变量地址可用“&变量名”求得。2.2.3 2.2.3 变量变量 变量名、变量地址、变量存储空间和变量值之间的关系如图2-2所示。 2.2.3 2.2.3 变量变量 1.变量定义 在语言中,要求对所有用到的变量必须先定义、后使用。 变量定义的一般格式如下: 类型说明符类型说明符 变量名变量名1 1 , ,变量名变量名2 2, , ,变量名变量名n n; ; 例如: int i,j,k; float x,y,z; 2.2.3 2.2.3 变量变量 2.变量赋值 变量赋值有如下
10、几种方式。 (1)变量赋初值。定义变量时直接赋值,也称为变量的初始化。例如: int a=10,b=9,c=6; float x=3.0,y=1.0,z=2.0;注:不能将同初值的变量赋初值时写成以下形式: int a=b=c=6;只能写成: int a=6, b=6, c=62.2.3 2.2.3 变量变量 (2)用赋值语句赋值。 先定义变量,之后用赋值语句给变量赋值。例如:float x;x10.0;(3)从键盘输入数据给变量赋值。在程序执行过程中,通过调用输入函数从键盘输入数据给变量赋值。例如:int a;scanf(%d,&a);(4)从磁盘文件读数据给变量赋值。 2.3 2.
11、3 整型数据整型数据 整型数据包括整型常量和整型变量。2.3.1整型常量 整型常量即整数,在语言中有3种表示形式(1)十进制整型常量。由数字09组成,例如: -10、0、8、10。 (2)八进制整型常量。以0开头,由数字07组成。如:010,012 如果写成0478则是非法的。 (3)十六进制整型常量。以0 x或0X开头,由09、af、AF组成。例如: 0 x10、0 xa4f、-0X8aC、0 x34592.3 2.3 整型数据整型数据 2.3.2整型变量 1. 整型数据存放形式 整型数据在内存中以二进制补码形式存放。原码:最高位存放数的符号(0为正,1为负),其余位 以二进制形式存储数值部
12、分。反码:正数的反码是原码本身;负数的反码为对原码 按位(除符号位外)取反。补码:正数的补码与原码相同;负数的补码等于其反 码加1(在最低位加1)。 2.3 2.3 整型数据整型数据 例如:290和-290的原码、反码和补码如图2-3所示。2.3 2.3 整型数据整型数据 2. 整型变量的分类 根据占用内存字节数的不同,整型变量分为:(1)基本整型(类型关键字为int)。(2)短整型(类型关键字为short int)。(3)长整型(类型关键字为long int)。 Turbo C 2.0和Turbo C+ 3.0为short和int分配2个字节,为long分配4个字节; VC+ 6.0为sho
13、rt分配2个字节,为int和long分配4个字节。2.3 2.3 整型数据整型数据 3.整型变量的符号属性(1)有符号整型数据。 有符号整型数据的最高位为符号位,符号位为0表示正数,符号位为1表示负数。有符号型又分为:有符号基本整型(signed int)有符号短整型(signed short int)有符号长整型(signed long int) 2.3 2.3 整型数据整型数据 (2)无符号整型数据。 无符号整型数据表示的都是正数,其最高位不是符号位而是数值位。无符号型又分为:无符号基本整型(unsigned int)无符号短整型(unsigned short int)无符号长整型(uns
14、igned long int) 2.3 2.3 整型数据整型数据 4.整型数据值域 整型数据所占字节数和数值范围如表2-1所示。 2.3 2.3 整型数据整型数据 有符号和无符号整型数据在2个字节中存放形式如图2-4和图2-5所示。 2.4 2.4 实型数据实型数据 实型数据包括实型实型数据包括实型常量常量和实型和实型变量变量。2.4.12.4.1实型常量实型常量 有两种表示形式:有两种表示形式:1.1.小数小数形式形式 实型常量的小数形式由数字序列和小数点组成,实型常量的小数形式由数字序列和小数点组成,小数点不能省略。小数点不能省略。 例如:例如: 3.1415926 3.1415926、-
15、0.15-0.15、0.150.15、.15.15、2.02.0、2. 2. 2.4 2.4 实型数据实型数据 2.2.指数指数形式形式 实型常量的指数形式如:实型常量的指数形式如: 123.456e2 123.456e2或或123.456E2123.456E2,相当于,相当于123.456123.45610102 2 e e或或E E前面前面必须有必须有数字,后面的指数必须为数字,后面的指数必须为整数整数。 0.235e40.235e4、24458.6e-424458.6e-4、5.7854e7 5.7854e7 合法合法125e4.5125e4.5、e4e4、.e4.e4、e e 不合法不
16、合法 123.456123.456可以写成:可以写成: 123.456e0123.456e0、12.3456e112.3456e1、1.23456e21.23456e2、 0.123456e30.123456e3、1234.56e-11234.56e-1 等。等。其中:其中: 1.23456e2 1.23456e2 规范化的指数形式规范化的指数形式2.4 2.4 实型数据实型数据 2.4.22.4.2实型变量实型变量实型数据的存放形式实型数据的存放形式 实数可以写成:实数可以写成: N N = = M M2 2E E 其中:其中:M M称为称为N N的尾数,的尾数,E E称为称为N N的阶码,
17、的阶码, M M前面的正、负号称为数符。前面的正、负号称为数符。 系统把实型数据的数符、尾数和阶码分别存放。系统把实型数据的数符、尾数和阶码分别存放。 以以floatfloat型为例,实型数据在其中存放形式如图型为例,实型数据在其中存放形式如图2-62-6所示。所示。 2.4 2.4 实型数据实型数据 例如:十进制数例如:十进制数100.625100.625在内存存放:在内存存放:N = 1100100.101= 1.100100101N = 1100100.101= 1.1001001012 26 6 尾数尾数M = 10010010100000000000000 (M = 10010010
18、100000000000000 (省略了整数部分省略了整数部分1 1,定点,定点小数部分补足小数部分补足2323位位) ) 每个阶码都加上一个正的常数(称偏移值),使能表示的所有每个阶码都加上一个正的常数(称偏移值),使能表示的所有阶码都为正整数,即阶码都为正整数,即阶码阶码E = 127E = 1271010 + 6 + 61010 = 133 = 1331010 = 10000101 = 100001012 2(把十进制指数(把十进制指数6 6转转化为二进制时,先加上化为二进制时,先加上127127) 2.4 2.4 实型数据实型数据 2.2.实型变量分类实型变量分类 C C语言中实型变量
19、有语言中实型变量有3 3种类型:种类型: (1) (1)单精度型。类型关键字为单精度型。类型关键字为floatfloat。 (2) (2)双精度型。类型关键字为双精度型。类型关键字为doubledouble。 (3) (3)长双精度型。类型关键字为长双精度型。类型关键字为long doublelong double。 实型数据所占字节数及数值范围如表实型数据所占字节数及数值范围如表2-22-2所示。所示。 2.5 2.5 字符型数据字符型数据 字符型数据包括字符字符型数据包括字符常量常量和字符和字符变量变量。2.5.12.5.1字符常量字符常量 字符常量是指字符常量是指单个字符单个字符,用一对
20、,用一对单引号单引号及其所括及其所括起来的字符表示。起来的字符表示。 字符常量有两种表示形式。字符常量有两种表示形式。 普通字符普通字符 能在屏幕上能在屏幕上显示显示的字符称为普通字符,可直接将的字符称为普通字符,可直接将这类字符用单引号扩起来,例如:这类字符用单引号扩起来,例如: A A、88、 + 2.5 2.5 字符型数据字符型数据 2. 2. 转义字符转义字符 以反斜杠以反斜杠“ ”开头后跟规定的开头后跟规定的单个字符单个字符或或数字数字的转义字符。的转义字符。注意:注意: 如果反斜杠、双引号或单引号本身作为字符常量,如果反斜杠、双引号或单引号本身作为字符常量,必须使用转义字符,即:必
21、须使用转义字符,即: 、 、 。 2.5 2.5 字符型数据字符型数据 常用转义字符见表常用转义字符见表2-32-3所示。所示。 2.5 2.5 字符型数据字符型数据 dddddd:最多用:最多用3 3位位八八进制数来表示所对应的一个进制数来表示所对应的一个ASCIIASCII码字符,例如:码字符,例如: 40 40表示空格字符,表示空格字符,101101表示字符表示字符AA。xhhxhh:最多用:最多用2 2位位十六十六进制数来表示所对应的一个进制数来表示所对应的一个ASCIIASCII码字符,例如:码字符,例如: x20 x20表示空格字符,表示空格字符,x41x41表示字符表示字符AA。
22、2.5.2 2.5.2 字符变量字符变量 字符字符变量变量在内存中占在内存中占1 1个字节的存储空间。个字节的存储空间。 用关键字用关键字charchar来定义,例如:来定义,例如: char a,b; char a,b; ch1= ch1=A A; ch2=; ch2=a a; / ; / 给字符变量赋值给字符变量赋值 将一个字符常量存储到一个字符变量中,实际上将一个字符常量存储到一个字符变量中,实际上是将该字符的是将该字符的ASCIIASCII码值存储到内存单元中。码值存储到内存单元中。2.5.2 2.5.2 字符变量字符变量 执行上述赋值操作后,将字符执行上述赋值操作后,将字符AA的的A
23、SCIIASCII码值码值6565存储到字符变量存储到字符变量ch1ch1所占的一个字节中,将字符所占的一个字节中,将字符aa的的ASCIIASCII码值码值9797存储到字符变量存储到字符变量ch2ch2所占的一个所占的一个字节中,如图字节中,如图2-82-8和图和图2-92-9所示。所示。 2.5.2 2.5.2 字符变量字符变量 字符型数据存储形式与整数的存储形式一样,字符型数据存储形式与整数的存储形式一样,语言允许字符型数据与整型数据相互转换。语言允许字符型数据与整型数据相互转换。 【例例2-22-2】字符型数据既可以字符形式输出,也可以字符型数据既可以字符形式输出,也可以整数形式输出
24、。整数形式输出。#include #include int main()int main() char ch1,ch2;char ch1,ch2;ch1=A; ch2=97; ch1=A; ch2=97; printf(ch1=%c,ch2=%cn,ch1,ch2);printf(ch1=%c,ch2=%cn,ch1,ch2);printf(ch1=%d,ch2=%dn,ch1,ch2);printf(ch1=%d,ch2=%dn,ch1,ch2);return 0;return 0; 2.5.2 2.5.2 字符变量字符变量 【例例2-32-3】整型数据既可以字符形式输出,也可以整整型数据既
25、可以字符形式输出,也可以整数形式输出。数形式输出。#include #include int main()int main() int ch1,ch2; int ch1,ch2; ch1=A; ch2=97; ch1=A; ch2=97; printf(ch1=%c,ch2=%cn,ch1,ch2); printf(ch1=%c,ch2=%cn,ch1,ch2); printf(ch1=%d,ch2=%dn,ch1,ch2); printf(ch1=%d,ch2=%dn,ch1,ch2); 2.5.2 2.5.2 字符变量字符变量 (3)(3)整型数据和字符型数据可以进行运算整型数据和字符型数
26、据可以进行运算 字符型数据和整型数据进行运算时,是其字符型数据和整型数据进行运算时,是其ASCIIASCII码值码值参与运算。例如:参与运算。例如:A+3A+3 / /值为值为6868,对应字符,对应字符D D 5-05-0 / /值为值为5 55+05+0 / /值为值为5353,对应字符,对应字符55 2.5.3 2.5.3 字符串常量字符串常量 字符串常量是用一对双引号括起来的字符序列。字符串常量是用一对双引号括起来的字符序列。例如:例如: “How do you do. How do you do. ”、“the day is 2012-1-5.the day is 2012-1-5.
27、”、“24562456”等都是字符串常量。等都是字符串常量。 双引号里可以有任意多个字符,也可以没有字符。双引号里可以有任意多个字符,也可以没有字符。 没有字符的字符串称为没有字符的字符串称为空串空串,表示为,表示为 字符串常量中可以包含转义字符,例如:字符串常量中可以包含转义字符,例如: printf(A 102 x43);printf(A 102 x43); 输出结果:输出结果:A B CA B C 2.5.3 2.5.3 字符串常量字符串常量 C C语言规定:在存储字符串常量时,由系统在字语言规定:在存储字符串常量时,由系统在字符串的末尾自动加一个符串的末尾自动加一个00 (空字符)作为
28、字符串的(空字符)作为字符串的结束标志。结束标志。 空字符(空字符(NULNUL)是)是ASCIIASCII码值为码值为0 0的字符,不要与的字符,不要与空格字符(空格字符(ASCIIASCII码值为码值为3232)相混淆。)相混淆。 字符串字符串studentstudent在内存中的实际存储形式如图在内存中的实际存储形式如图2-102-10所示:所示: 2.6 2.6 运算符与表达式运算符与表达式 2.6.1 2.6.1 运算符概述运算符概述 理解和掌握以下理解和掌握以下C C语言运算符的概念:语言运算符的概念: (1) (1)运算符运算符功能功能。 (2) (2)运算符与运算对象(即操作数
29、)的关系。运算符与运算对象(即操作数)的关系。 运算对象个数。运算对象个数。 单目单目运算符、运算符、双目双目运算符和运算符和三目三目运算符。运算符。 运算对象运算对象类型类型。2.6 2.6 运算符与表达式运算符与表达式 所谓结合性是指当一个运算对象所谓结合性是指当一个运算对象两侧两侧的运算符具的运算符具有有相同相同的优先级时,该运算对象是先与左边的运算符的优先级时,该运算对象是先与左边的运算符结合,还是先与右边的运算符结合。结合,还是先与右边的运算符结合。 自左至右的结合方向,称为左结合性,反之,称自左至右的结合方向,称为左结合性,反之,称为右结合性。为右结合性。 (3)(3)运算符运算符
30、优先级优先级 运算符优先级分为运算符优先级分为1515个级别,从个级别,从1-151-15 (4)(4)运算符运算符结合性结合性 2.6 2.6 运算符与表达式运算符与表达式 2.6.22.6.2 表达式概述表达式概述 用用运算符运算符和和括号括号将将运算对象运算对象(常量、变量和函数(常量、变量和函数等)连接起来并符合语言等)连接起来并符合语言语法规则语法规则的式子,称为表的式子,称为表达式。达式。 求表达式值时,从求表达式值时,从左往右左往右逐步执行。逐步执行。 如果一个运算对象两侧的运算符优先级如果一个运算对象两侧的运算符优先级不同不同,则,则按运算符的优先级按运算符的优先级高低高低次序
31、执行。次序执行。 如果一个运算对象两侧的运算符优先级如果一个运算对象两侧的运算符优先级相同相同,则,则按按结合性结合性进行。进行。2.6 2.6 运算符与表达式运算符与表达式 结合性:即结合方向结合性:即结合方向自左向右自左向右 如:如:+ + 、- - 、* * 、/ /自右向左自右向左 如:赋值运算符如:赋值运算符 = = 、自增、自减、自增、自减、 条件运算符条件运算符 ? : a b * c a b + c2.6.3 2.6.3 算术运算符与算术表达式算术运算符与算术表达式 1. 1. 算术运算符算术运算符2.6.3 2.6.3 算术运算符与算术表达式算术运算符与算术表达式 除法运算符
32、除法运算符 / / :当两个操作数均为:当两个操作数均为整数整数时,运算结时,运算结果为果为整数整数(即小数部分被舍弃),否则结果为(即小数部分被舍弃),否则结果为实数实数。例如:例如:5 / 2 = 25 / 2 = 2而而 5.0/2=2.5 5.0/2=2.5。求余数运算符求余数运算符:求两个数相除的余数,要求两侧的:求两个数相除的余数,要求两侧的运算对象运算对象必须必须为为整型整型数据。数据。例如:例如:5%2 = 1 5%-2 = 1 -5%2 =-1 -5%-2= -15%2 = 1 5%-2 = 1 -5%2 =-1 -5%-2= -1(2)(2)运算对象个数:运算对象个数:+
33、+(取正)、(取正)、- -(取负)是单目运(取负)是单目运算符,其它为双目运算符。算符,其它为双目运算符。2.6.3 2.6.3 算术运算符与算术表达式算术运算符与算术表达式 2.2.算术表达式算术表达式 用用算术算术运算符将运算对象连接起来的合法式运算符将运算对象连接起来的合法式子称为算术表达式。子称为算术表达式。 例如:例如:3 + 6 3 + 6 * * 9 9、(x + y) / 3 - 1(x + y) / 3 - 1注意:注意: x x2 2 + + 3x3x + 5 + 5写成写成C C语言表达式为:语言表达式为: x x * * x + 3 x + 3 * * x + 5 x
34、 + 5。 2.6.3 2.6.3 算术运算符与算术表达式算术运算符与算术表达式 3. 3. 算术运算类型转换算术运算类型转换 如果一个运算符如果一个运算符两侧两侧的运算对象的数据类型的运算对象的数据类型不同不同,则系统首先将两侧数据自动转换成,则系统首先将两侧数据自动转换成同一同一类类型,然后在同一类型数据间进行运算。型,然后在同一类型数据间进行运算。 转换规则如图转换规则如图2-112-11所示。所示。2.6.3 2.6.3 算术运算符与算术表达式算术运算符与算术表达式 例如:例如:char ch;char ch;int i; short s;int i; short s;float f;
35、 double d;float f; double d;ch / s + f ch / s + f * * i - d i - d intintintintintdoubledoubledoubledoubledouble2.6.4 2.6.4 赋值运算符和赋值表达式赋值运算符和赋值表达式 1.1.赋值运算符赋值运算符(1)(1)简单赋值运算符简单赋值运算符“= =” 一般形式为:一般形式为: 变量变量= =表达式表达式功能功能: :先求先求“= =”号右侧表达式的值,然后将这个值存号右侧表达式的值,然后将这个值存入左侧变量所占的存储单元中,即给变量赋值。入左侧变量所占的存储单元中,即给变量赋
36、值。例如:例如: x = 5 / x = 5 /将常量将常量5 5赋值给变量赋值给变量x x。2.6.4 2.6.4 赋值运算符和赋值表达式赋值运算符和赋值表达式 (2)复合赋值运算符 C语言有10种复合赋值运算符: +=、-=、*=、/=、%=; /复合算术运算符 &=、=、|=、=、/复合位运算符2.6.4 2.6.4 赋值运算符和赋值表达式赋值运算符和赋值表达式 一般形式为:一般形式为: 变量变量 双目运算符双目运算符 = = 表达式表达式 复合赋值运算符复合赋值运算符等价于:等价于:变量变量 = = 变量变量 双目运算符双目运算符 ( (表达式表达式) )例如:例如: x +=
37、 3 x += 3 / / 等价于等价于x=x+3 x=x+3 y y * *= x + 6= x + 6 / / 等价于等价于y=yy=y* *(x+6)(x+6)而不是而不是: : y=y y=y* *x+6x+6 2.6.4 2.6.4 赋值运算符和赋值表达式赋值运算符和赋值表达式 例如:例如: a = 5 / a a = 5 / a的值的值5 5就是赋值表达式就是赋值表达式a=5a=5的值。的值。 赋值运算符的优先级为赋值运算符的优先级为1414,结合方向为自右至,结合方向为自右至左。左。 a=b=8%3a=b=8%3 / 表达式的值为表达式的值为2 2 2.2.赋值表达式赋值表达式
38、由赋值运算符将一个变量和一个表达式连接起由赋值运算符将一个变量和一个表达式连接起来的式子,称为赋值表达式。来的式子,称为赋值表达式。 被赋值被赋值变量的值变量的值就是就是赋值表达式的值赋值表达式的值。2.6.4 2.6.4 赋值运算符和赋值表达式赋值运算符和赋值表达式 int a=6int a=6a-=aa-=a* *=a+4 /=a+4 /等价于等价于:a=a-(a=a:a=a-(a=a* *(a+4)(a+4)其求解过程为:其求解过程为: (1) (1)先运算先运算a+4a+4的值为的值为1010,a a的值不变仍为的值不变仍为6 6; (2) (2)再运算再运算a=aa=a* *1010
39、,因此,因此a=6a=6* *1010,a a的值为的值为6060; (3) (3)最后运算最后运算a=a-60a=a-60,因此,因此a=60-60a=60-60,a a的值为的值为0 02.6.4 2.6.4 赋值运算符和赋值表达式赋值运算符和赋值表达式 3. 3. 赋值类型的转换赋值类型的转换 转换规则如下:转换规则如下: (1)(1)整型数据与实型数据之间类型转换整型数据与实型数据之间类型转换 整型整型数据赋给数据赋给实型变量实型变量时,数值上不发生任何时,数值上不发生任何变化,但以浮点型数据存储到变量中。变化,但以浮点型数据存储到变量中。例如:例如: float f=100; flo
40、at f=100; 则将则将100100转换成实型数据转换成实型数据100.0100.0,再以指数形式存到,再以指数形式存到f f所占存储单元中。所占存储单元中。2.6.4 2.6.4 赋值运算符和赋值表达式赋值运算符和赋值表达式 实型数据赋给整型变量时,小数部分将被舍弃。实型数据赋给整型变量时,小数部分将被舍弃。例如:例如: int a = int a = 3 3.6415; .6415; 则将取整后的整数则将取整后的整数3 3以补码形式存到以补码形式存到a a所占内存单元中所占内存单元中 (2)(2)实型数据之间类型转换实型数据之间类型转换 floatfloat数据赋给数据赋给double
41、double变量时,数值不变,有变量时,数值不变,有效数据扩展到效数据扩展到1616位,存储到位,存储到doubledouble变量中。变量中。 doubledouble数据赋给数据赋给floatfloat变量时,截取前面变量时,截取前面7 7位有位有效数据,存储到效数据,存储到floatfloat变量中。变量中。 2.6.4 2.6.4 赋值运算符和赋值表达式赋值运算符和赋值表达式 (3)(3)整型数据之间、整型数据与字符型数据之间类型整型数据之间、整型数据与字符型数据之间类型转换转换 短短(字节数少)的数据赋给(字节数少)的数据赋给长长(字节数多)的(字节数多)的变量变量 短的短的有符号有
42、符号数据赋给长的变量时,需要进行符号数据赋给长的变量时,需要进行符号位位扩展扩展。 将数据赋给变量的将数据赋给变量的低低字节,如果数据的符号位为字节,如果数据的符号位为0 0,则变量的则变量的高字节补高字节补0 0;反之,变量的;反之,变量的高字节补高字节补1 1,以保,以保持数值不改变。如图持数值不改变。如图2-122-12所示。所示。2.6.4 2.6.4 赋值运算符和赋值表达式赋值运算符和赋值表达式 2.6.4 2.6.4 赋值运算符和赋值表达式赋值运算符和赋值表达式 短的短的无无符号数据赋给长的变量时,将数据赋符号数据赋给长的变量时,将数据赋给变量的低字节,高字节补给变量的低字节,高字
43、节补0 0。如图。如图2-132-13所示。所示。 2.6.4 2.6.4 赋值运算符和赋值表达式赋值运算符和赋值表达式 长长的数据赋给的数据赋给短短的变量时,只将的变量时,只将低低字节数据字节数据原封不原封不动动地赋给变量。如图地赋给变量。如图2-142-14所示所示2.6.4 2.6.4 赋值运算符和赋值表达式赋值运算符和赋值表达式 将数据赋给长度将数据赋给长度相同相同的变量时,原样赋值,如图的变量时,原样赋值,如图2-2-1515所示。所示。2.6.5 2.6.5 自增、自减运算符自增、自减运算符 + +、-是是单目单目运算符,运算对象只能是运算符,运算对象只能是变量变量,优,优先级为先
44、级为2 2,结合方向为,结合方向为自右至左自右至左。 自增、自减运算符有两个功能:自增、自减运算符有两个功能: (1) (1)取由该运算符构成表达式的值取由该运算符构成表达式的值 (2) (2)实现变量(运算对象)自身的加实现变量(运算对象)自身的加1 1或减或减1 1运算运算2.6.5 2.6.5 自增、自减运算符自增、自减运算符 自增、自减运算符都有两种用法:自增、自减运算符都有两种用法:(1)(1)前置前置运算运算例如:例如:i i、i i 先使变量先使变量i i的值增(或减),然后再以变化后的值增(或减),然后再以变化后i i的值作为表达式的值参与其它运算,即先增减、后求的值作为表达式
45、的值参与其它运算,即先增减、后求值。值。(2)(2)后置后置运算运算例如:例如:i i、i i 先将变量先将变量i i的值作为表达式的值参与其它运算,的值作为表达式的值参与其它运算,然后再使变量然后再使变量i i的值增(或减),即先求值、后增的值增(或减),即先求值、后增减。减。2.6.5 2.6.5 自增、自减运算符自增、自减运算符 i=2;i=2;j=i+; / j=i+; / 相当于相当于: j=i; i=i+1;: j=i; i=i+1;j=+i; / j=+i; / 相当于:相当于:i=i+1;j=i;i=i+1;j=i;2.6.5 2.6.5 自增、自减运算符自增、自减运算符 【例
46、例2-42-4】自增、自减运算符的用法自增、自减运算符的用法#include #include int main()int main() int x=6, y; int x=6, y; printf(x=%dn,x); printf(x=%dn,x); y = +x; y = +x; printf(y=+x: x=%d,y=%dn,x,y); printf(y=+x: x=%d,y=%dn,x,y); y = x-; y = x-; printf(y=x-: x=%d,y=%dn,x,y); printf(y=x-: x=%d,y=%dn,x,y); return 0;return 0; 运行
47、结果:运行结果:x=6x=6y=+x: x=7,y=7y=+x: x=7,y=7y=x-: x=6,y=7 y=x-: x=6,y=7 2.6.5 2.6.5 自增、自减运算符自增、自减运算符 说明说明: :(1)(1)自增、自减运算常用于循环语句中,或用于指针自增、自减运算常用于循环语句中,或用于指针变量中。变量中。(2)(2)自增、自减运算符不能用于常量和表达式,例如:自增、自减运算符不能用于常量和表达式,例如:5+5+、-(a+b)-(a+b)等都是非法的表达式。等都是非法的表达式。(3)(3) 最好避免这种用法,例如:最好避免这种用法,例如:(i+)+(i+)+(i+)(i+)+(i+
48、)+(i+)2.6.6 2.6.6 逗号运算符、逗号表达式逗号运算符、逗号表达式 用逗号运算符用逗号运算符“,”连接起来的式子,称为逗号连接起来的式子,称为逗号表达式,一般形式为:表达式,一般形式为: 表达式表达式, , 表达式表达式2, 2, , , 表达式表达式n n 逗号运算符的优先级为逗号运算符的优先级为1515,结合方向为自左至右。,结合方向为自左至右。 逗号表达式求解过程为:自左至右,依次计算各逗号表达式求解过程为:自左至右,依次计算各表达式的值,表达式的值,“表达式表达式n n” 的值作为整个逗号表达式的值作为整个逗号表达式的值。的值。2.6.6 2.6.6 逗号运算符、逗号表达
49、式逗号运算符、逗号表达式 a=3a=3* *5,a5,a* *4 /4 /逗号表达式的值为逗号表达式的值为6060。a=3,aa=3,a* *4,a+ /4,a+ /逗号表达式的值为逗号表达式的值为3 3。注意:并不是任何地方出现的逗号,都是逗号运算符。注意:并不是任何地方出现的逗号,都是逗号运算符。很多情况下,逗号仅用作分隔符,例如:很多情况下,逗号仅用作分隔符,例如:printf(printf(%d%d%d%d%d%d,a,b,c);,a,b,c); 2.7 2.7 数据的类型转换数据的类型转换 数据的类型转换有数据的类型转换有隐式隐式类型转换和类型转换和强制强制类型转换类型转换两种。两种
50、。 当出现下述情况时将进行隐式类型转换:当出现下述情况时将进行隐式类型转换: 运算运算转换转换-不同类型数据混合运算时进行转换;不同类型数据混合运算时进行转换; 赋值赋值转换转换-把一个值赋给与其类型不同的变量时把一个值赋给与其类型不同的变量时进行转换;进行转换; 输出输出转换转换-输出时转换成指定的输出格式输出时转换成指定的输出格式 2.7 2.7 数据的类型转换数据的类型转换 数据类型强制转换的一般格式为:数据类型强制转换的一般格式为: ( (数据类型数据类型)()(表达式表达式) )例如:例如:(double)(double)a a / / 将变量将变量a a的值转换成的值转换成doub
51、ledouble型型(int)(int)3.753.75 / / 将将3.753.75转换成转换成intint型值型值3 3(int)(int)(5.8+3.45.8+3.4) / ) / 将将5.85.8与与3.43.4的和的和9.29.2转换成整转换成整型值型值9 9 2.7 2.7 数据的类型转换数据的类型转换 注意:注意: 强制转换类型得到的是一个所需类型的中间量,原强制转换类型得到的是一个所需类型的中间量,原表达式类型并不发生变化,表达式类型并不发生变化,例如:例如:int a=3;int a=3; (double) (double)a;a; (2) (2) 如果被转换表达式不是简单
52、表达式时,外边的一如果被转换表达式不是简单表达式时,外边的一对圆括号不能省,例如:对圆括号不能省,例如: (int)5.8+3.4 (int)5.8+3.4 2.8 2.8 数据的输入数据的输入/ /输出输出 输入是由输入设备向计算机主机输入数据。输入是由输入设备向计算机主机输入数据。 输出是指由计算机主机向输出设备输出数据。输出是指由计算机主机向输出设备输出数据。 通常输入设备为通常输入设备为键盘键盘,输出设备为,输出设备为显示器显示器。 磁盘磁盘文件即是文件即是输入输入设备又是设备又是输出输出设备。设备。 2.8 2.8 数据的输入数据的输入/ /输出输出 在在C C语言中,没有专门的输入
53、输出语句,所有语言中,没有专门的输入输出语句,所有的输入输出操作都是通过调用标准的输入输出操作都是通过调用标准输入、输出库函输入、输出库函数数来完成的。来完成的。 在调用标准输入输出函数时需要用到头文件在调用标准输入输出函数时需要用到头文件“stdio.hstdio.h”,因此在程序开头应该有以下的预编译,因此在程序开头应该有以下的预编译命令:命令: include include stdio.hstdio.h或或 includeincludestdio.hstdio.h 2.8.1 2.8.1 格式化输出函数格式化输出函数printfprintf printf printf一般格式为:一般格
54、式为: printf( printf( 格式控制格式控制,输出项列表输出项列表) 输出项是输出项是表达式表达式,printfprintf函数的功能是将表达式函数的功能是将表达式的值按指定格式输出。当有多个输出项时,各项之的值按指定格式输出。当有多个输出项时,各项之间用间用逗号逗号分隔。分隔。 格式控制是用格式控制是用双引号双引号括起来的括起来的字符串字符串,它包括两,它包括两部分内容:部分内容: 1.1.普通字符与转义字符普通字符与转义字符 2.2.输出输出格式说明格式说明,以,以“% %”开始,后跟格式字符,开始,后跟格式字符, 2.8.1 2.8.1 格式化输出函数格式化输出函数print
55、fprintf 输出项与前面的输出项与前面的“输出格式说明输出格式说明”必须由左至必须由左至右一一对应,例如:右一一对应,例如: 2.8.1 2.8.1 格式化输出函数格式化输出函数printfprintf 1.1.输出格式说明输出格式说明一般形式为:输出格式说明输出格式说明一般形式为: % % 2.8.1 2.8.1 格式化输出函数格式化输出函数printfprintf (2)(2)修饰符。修饰符用于指定输出数据所占的宽度、修饰符。修饰符用于指定输出数据所占的宽度、对齐方式以及保留小数位数等,修饰符可以省略。对齐方式以及保留小数位数等,修饰符可以省略。 2.8.1 2.8.1 格式化输出函数
56、格式化输出函数printfprintf 2.2.整型整型数据输出数据输出 整型数据可以用格式符整型数据可以用格式符d d、u u、o o、x x输出,例如:输出,例如:int a = -1;int a = -1;printf(printf(有符号十进制有符号十进制= %d = %d 无符号十进制无符号十进制= %un= %un 八进制八进制= %o = %o 十六进制十六进制= %xn,a,a,a,a);= %xn,a,a,a,a);运行结果:运行结果:有符号十进制有符号十进制= -1 = -1 无符号十进制无符号十进制 = 4294967295 = 4294967295 八进制八进制= 37
57、777777777 = 37777777777 十六进制十六进制= ffffffff= ffffffff 2.8.1 2.8.1 格式化输出函数格式化输出函数printfprintf 说明:在说明:在VC+6.0VC+6.0中,给中,给a a分配分配4 4个字节,将个字节,将-1-1的补码的补码存储到存储到a a所占的存储单元中,存放形式如图所占的存储单元中,存放形式如图2-162-16所所示。示。 2.8.1 2.8.1 格式化输出函数格式化输出函数printfprintf 3.3.字符型数据输出字符型数据输出 字符型数据即可按字符形式输出,也可按整数形字符型数据即可按字符形式输出,也可按整
58、数形式输出,例如式输出,例如: char c = A; char c = A; printf( printf(字符字符= %= %c c ASCII= % ASCII= %d d,c,c);,c,c);运行结果:运行结果:字符字符= A ASCII= 65= A ASCII= 65 2.8.1 2.8.1 格式化输出函数格式化输出函数printfprintf 4.4.实型数据输出实型数据输出 实型数据(实型数据(floatfloat型和型和doubledouble型)即可用格式符型)即可用格式符f f以小数形式输出,也可用格式符以小数形式输出,也可用格式符e e以指数形式输出,以指数形式输出,
59、例如:例如: float f=12.3456789; float f=12.3456789; printf(f=% printf(f=%f f , f=% , f=%e en,f,f);n,f,f);运行结果:运行结果: f=12.345679 , f=1.234568e+001f=12.345679 , f=1.234568e+001 2.8.1 2.8.1 格式化输出函数格式化输出函数printfprintf 5.5.修饰符修饰符m m 如果输出数据长度如果输出数据长度不足不足m m列,输出数据右对齐,列,输出数据右对齐,左补空格;左补空格; 如果如果m m前加一个负号前加一个负号“- -
60、”,则输出数据左对齐,则输出数据左对齐,右补空格。右补空格。 如果输出数据长度如果输出数据长度大于大于m m列,则按数据实际长度列,则按数据实际长度输出。修饰符输出。修饰符m m及其作用如表及其作用如表2-72-7所示。所示。 2.8.1 2.8.1 格式化输出函数格式化输出函数printfprintf 6.6.修饰符修饰符.n.n 修饰符修饰符.n.n可以用于输出可以用于输出实型实型数据和数据和字符串字符串7.7.修饰符修饰符h h、l l 格式符格式符d d、u u、o o、x x用于输出基本整型(用于输出基本整型(intint)数)数据,修饰符据,修饰符h h用于输出用于输出短短整型数据,修饰符整型数据,修饰符l l用于输用于输出出长长整型数据。整型数据。 2.8.1 2.8.1 格式化
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年人格心理考试题目及答案
- 2025年外科专科考试试题及答案
- 即兴评述高考试卷及答案
- 专职网格员考试题及答案
- 音乐考试科普知识题及答案
- 恐龙派对课件
- 江苏太仓中考试题及答案
- 急诊临床知识培训内容课件
- 沈阳消防考试题目及答案
- 软技能培训考试题及答案
- 2025年电子商务设计师国家资格考试试题及答案解析
- 2025版化学检验工高级工考核题库(含答案)
- 综合执法局执法考试试题库(附答案)
- 环境保护与节能减排课件
- 2025年软件开发实习生笔试模拟题及面试技巧
- 教科版新版科学三年级上册《8.天气的影响》教案
- 宣传广告板、宣传彩页制作合同协议书范本
- 工厂数据采集与分析系统方案
- 2025证券股份面试题目及答案
- 2025上海浦东新区国资委直属单位公开招聘试题含答案
- 2025年AI应用AI Agent架构新范式报告
评论
0/150
提交评论