版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、12.1 2.1 数据类型数据类型2.2 2.2 常量与变量常量与变量2.3 2.3 运算符与表达式运算符与表达式2.4 2.4 标准输入标准输入/ /输出输出2.5 2.5 数学函数数学函数2.6 2.6 随机数发生器函数随机数发生器函数2.7 2.7 案例应用案例应用2u计算机内部的信息都是用二进制二进制表示u计算机存储器是用半导体集成电路构成的u有两种稳定的工作状态:“导” 与“截止”,即电脉冲的“有”与“无”u分别用“1 1”和“0 0”表示一、数据在计算机中是以二进制形式存储的3u若相邻的8个二极管元件中第1,3,5,7个元件处于“导通”状态,第2,4,6,8个元件处于“截止”状态,
2、用“10101010”表示。导通导通 截止截止 导通导通 截止截止 导通导通 截止截止 导通导通 截止截止 1 0 1 0 1 0 1 0 4十进制数十进制数二进制数0 001 112 2103 3114 41005 5101十进制数十进制数二进制数6 61107 71118 810009 910011010101001232021202110105u位位(bit) ,又称“比特” 。每一个二极管元件称为一个“二进制位”,是存储信息的最存储信息的最小单位小单位。它的值是“1”或“0”。u字节字节(byte) ,又称“拜特” 。一般将8个“二进制位”组织成一组,称为“字节”。这是人们最常用的存储
3、单位最常用的存储单位。二、位、字节和地址6二、位、字节和地址200120022003200420052006 地址:地址:计算机的存储器包含许多存储单元,操作系统把所有存储单元以字节为单位编号。3457897枚举类型(枚举类型(enumenum)基本类型基本类型数据类型数据类型构造类型构造类型指针类型指针类型空类型(空类型(voidvoid)整型(整型(intint)实型(浮点型)实型(浮点型)字符型(字符型(charchar)结构体(结构体(structstruct)共用体(共用体(unionunion)单精度实型(单精度实型(floatfloat)双精度实型(双精度实型(doubledou
4、ble)数组数组8类型名称类型名称类型说明符类型说明符所占所占字节数字节数取值范围取值范围有符号基本整型有符号基本整型signed int4-21474836482147483647-232-1232-1-1有符号短整型有符号短整型signed short int2-3276832767-216-1216-1-1有符号长整型有符号长整型signed long int4-21474836482147483647-232-1232-1-1无符号基本整型无符号基本整型unsigned int4042949672950232-1无符号短整型无符号短整型unsigned short int2065535
5、0216-1-1无符号长整型无符号长整型unsigned long int4042949672950232-19 数据存储时在内存中所占字节数与具体的机器及系统有关。如int类型,在32位系统中Visual C+下所占4个字节,但是在Turbo C下int只占2个字节,表示范围就是:-3276832767。 编程时,可以用运算符sizeof()求出所使用环境中int类型究竟占用几个字节。 整数类型是以二进制数据形式存储的,确整数类型是以二进制数据形式存储的,确切地说是以二进制补码形式。切地说是以二进制补码形式。10u整数的存储方式u一个十进制整数,先转换为二进制形式u如整数15,以二进制形式表
6、示是11110 0 0 0 1 1 1 10 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1用一个字节存放用一个字节存放用两字节存放用两字节存放负数负数按按补码补码形式形式存放存放请问:请问:-15-15又是如何存储的呢?又是如何存储的呢?11uC语言中实型也称为浮点型浮点型,包括单精度单精度实型和双双精度精度实型。u实型与整型的区别实型与整型的区别在于是否包含小数部分,比如6是整数类型,6.00是实数类型。类型名称类型说明符所占字节数有效数字取值范围(绝对值)单精度实型float4约67位3.410-383.41038双精度实型double8约1516位1.710-3081.71
7、030812u实数的存储形式u实型数据按指数形式存储,分为小数部分(尾数)和指数部分(阶码)分别存放。 u123.456标准化指数形式为0.123456103+.12345+3数符 数值部分指数符号指数13u类型说明符为char。字符型数据只占字符型数据只占1 1个字节个字节,只能存放1个字符,无法存放多个字符组成的字符串,字符串的概念将在后面章节中介绍。u为了处理字符,计算机使用一种数字编码,用特定的整数表示特定的字符。应用最广泛的是编码是ASCIIASCII码(America Standard Cord for Information Interchange,美国信息交换标准码) 大写字母
8、大写字母A A的的ASCIIASCII码为码为6565,小写字母,小写字母a a的的ASCIIASCII码为码为9797,字符,字符00为为4848。14u字符的存储方式u对于字符,按ASCII代码存放uA的ASCII代码是65(1000001)01000001用一个字节存放用一个字节存放 由于这种与整型数据类似的存储方式,在由于这种与整型数据类似的存储方式,在1 1个字节个字节(0 0255255)范围内,字符型数据和整形数据可以)范围内,字符型数据和整形数据可以通用。通用。15 如果一个数据对象只有几种可能的取值,可以将这些值一一列举出来,即定义为枚举类型枚举类型。定义的格式为:定义的格式
9、为: enum 枚举类型名枚举类型名 枚举常量枚举常量1,枚举常量,枚举常量2,.,枚举常量,枚举常量n;16 C语言的基本数据类型并不能满足实际应用中的所有需求,用户可以利用整型、实型、字符型这些基本数据类型构造满足需要的数据类型,即构造构造类型。类型。数组类型数组类型构造类型构造类型结构体类型结构体类型共用体类型共用体类型17u指针类型。 指针指针是一种特殊的数据类型,也是很重要的一种数据类型,指针的值指的是内存中的地址值。u空类型 C语言中空类型用void表示,一般用于描述指针以及作为不返回值的函数的返回值类型。 18 在程序所处理的各种数据中,有些数据在程序所处理的各种数据中,有些数据
10、的值在程序使用前可以预先设定并在程序运的值在程序使用前可以预先设定并在程序运行过程中不会发生变化,称为行过程中不会发生变化,称为常量常量。有的数。有的数据在程序运行过程中可能会变化,称为据在程序运行过程中可能会变化,称为变量变量。 两者的区别两者的区别在于数据在程序运行过程中在于数据在程序运行过程中其值是否变化。其值是否变化。19u在程序运行过程中,其值不变的量称为常量常量。u常量区分为不同的类型:整型常量 100,125,-100,0实型常量 3.14 , 0.125,-3.789字符型常量 a, b,2字符串常量 “a”, “ab”,”1232”u以上四种称为字面常量字面常量。u还有一种叫
11、符号常量符号常量。20 整型常量即整常数。在语言中,整常数可用以下三种形式表示:u十进制整数:十进制整数:用10个数字09表示,如369, 9652。u八进制整数:八进制整数:以数字0开头,用8个数字07表示。 如:如:0123表示八进制数123,等于十进制数83,-011表示八进制数-11,即十进制数-9。u十六进制整数:十六进制整数:以0X或0 x开头(注意是数字0加字母X或x),用10个数字09和6个字母AF(或af)表示。 如:如:0 x123,代表16进制数123,等于十进制数 291。 -0 x12等于十进制数10。 注意:注意:正整数前面的正整数前面的“+”+”号可以省略号可以省
12、略。21常量的后缀表示列举如下:常量类型常量类型十进制数十进制数 八进制八进制 十六进制十六进制十进制的值十进制的值 长整型长整型 12L 014L 0XCL 12无符号整型无符号整型 15u 017u 0 xfu 15注意:注意:C把大多数整数常量识别为int类型,如果整数特别大,将会有不同的处理。比如,在程序中使用254时,通常会识别为int类型。当使用的整数超出了int类型的范围时,则识别为long类型。 22实型常量的表示形式:十进制形式:十进制形式:由数字由数字0 09 9和小数点组成(必须有小数点)。和小数点组成(必须有小数点)。 如:如:0.123 指数形式:由尾数、指数形式:由
13、尾数、E E(或(或e e)和整数指数(阶码)组成。)和整数指数(阶码)组成。 如:如:3e-3注意注意: :u整数或小数部分的数字可以省略,但二者不能同时省略并且小数点不能省略。 u字母e(或E)之前必须有数字,且e后面的指数必须为整数。23u在实型常量中不能有空格。u默认状态下,实型常量被识别为双精度(double)类型。可以使用后缀F或f表示单精度(float)类型,后缀L或l表示长双精度(long double)类型。比如123.56是double类型,123.56f是float类型,1.2356E2L是long double类型。 24(1)用单引号括起来的一个字符是字符型常量。字符
14、型常量。(2)只能包含一个字符。注意:注意:使用字符常量时要注意数字字符和数使用字符常量时要注意数字字符和数字的区别,例如,写法字的区别,例如,写法55表示符号表示符号5 5,而,而不是数值不是数值5 5,字符,字符5 5的的ASCIIASCII码值是码值是5353。a,Aa,A, 1, 1abcabc、“a”a”25 有些以有些以“”开头的特殊字符称为开头的特殊字符称为转义字符转义字符。n 换行t 横向跳格r 回车 反斜杠ddd ddd表示1到3位八进制数字xhh hh表示1到2位十六进制数字u0 0 与与00是有区别的是有区别的u字符类型的数据也可参与四则运算字符类型的数据也可参与四则运算
15、26字符串常量是一对双撇号括起来的字符序列.合法的字符串常量合法的字符串常量: :How do you do.How do you do., , CHINACHINA, a a, $123.45$123.45可以输出一个字符串,如printf(How do you do.);注意:注意:a表示的是一个字符串常量表示的是一个字符串常量 a表示的是一个字符常量表示的是一个字符常量27字符串常量与字符常量的区别:字符串常量与字符常量的区别:(1)(1)字符常量是由单引号括起来,而字符串常量则是由双引号字符常量是由单引号括起来,而字符串常量则是由双引号括起来。括起来。(2)(2)字符常量只能表示一个字
16、符,而字符串常量则可以包含字符常量只能表示一个字符,而字符串常量则可以包含1 1个或多个字符。个或多个字符。(3)(3)可以将可以将1 1个字符常量赋值给一个字符变量,但不能将个字符常量赋值给一个字符变量,但不能将1 1个字个字符串常量赋予一个字符变量。符串常量赋予一个字符变量。 (4)(4)字符常量在存储中只占一个字节,字符串常量占用的存储字符常量在存储中只占一个字节,字符串常量占用的存储空间的字节数等于双引号中所包含字符个数加空间的字节数等于双引号中所包含字符个数加1(1(结束符结束符0 )0 )。 28字符串常量与字符常量的区别:字符串常量与字符常量的区别:(5)(5)字符串中可以有转义
17、字符。字符串中可以有转义字符。(6)(6)单引号和双引号只是字符和字符串的定界符,如果字符单引号和双引号只是字符和字符串的定界符,如果字符常量本身是单引号,则要用转义字符,如常量本身是单引号,则要用转义字符,如 。空字符作为字符串常量的结束空字符作为字符串常量的结束aa是一个字符常量是一个字符常量aa是一个字符串常量是一个字符串常量aa029 用一个标识符来代表一个常量,称为符号常量符号常量。 符号常量在使用前必须先定义,用宏定义的形式,其一般定义格式为定义格式为: #define#define 标识符标识符 常量常量例:例: #define a 20#define a 20定义符号常量名时应
18、尽量做到定义符号常量名时应尽量做到“见名知意见名知意” , #define PRICE 20#define PRICE 2030#include#define PRICE 10 /定义价格符号常量定义价格符号常量PRICEPRICE为为1010void main() int num,total; scanf(“%d”,&num);/输入购买数量输入购买数量 total=num*PRICE;/计算总金额计算总金额 printf(“total=%d”,total); 31符号常量的性质和使用方法符号常量的性质和使用方法: :1 1、#define#define不是不是C C语句,该行的末尾
19、没有分号。它是一个语句,该行的末尾没有分号。它是一个“预预编译命令编译命令”。2 2、不要把符号常量与变量混淆、不要把符号常量与变量混淆, , 符号常量只是一个符号,不符号常量只是一个符号,不占存储单元。它只是简单地进行字符置换占存储单元。它只是简单地进行字符置换( (如把字符如把字符PRICEPRICE置换为字符置换为字符10)10)。不论置换的字符是否有含义都进行置换。不论置换的字符是否有含义都进行置换。 3 3、习惯上、习惯上, ,符号常量名用大写符号常量名用大写, ,变量名用小写变量名用小写, ,以示区别。以示区别。 4 4、使用符号常量的好处、使用符号常量的好处 u含义清楚含义清楚
20、u在需要改变一个常量时能做到在需要改变一个常量时能做到“一改全改一改全改”。 32u变量变量是指在程序运行过程中其值可以变化的量。是指在程序运行过程中其值可以变化的量。u语言要求在使用变量之前必须语言要求在使用变量之前必须先进行声明先进行声明。u给变量指定一个标识符,这个标识符称为给变量指定一个标识符,这个标识符称为变量名变量名;u变量名(标识符)的命名规则:变量名(标识符)的命名规则: 只能由字母、数字或下划线组成;只能由字母、数字或下划线组成; 第一个字符必须是字母或下划线。第一个字符必须是字母或下划线。33声明一个变量包括声明一个变量包括: :u指定该变量的数据类型,该类型决定了变量值的
21、指定该变量的数据类型,该类型决定了变量值的类型、表现形式和占用内存空间,以及对该变量能类型、表现形式和占用内存空间,以及对该变量能执行的运算;执行的运算;u指定变量的存储类型和变量的作用域。指定变量的存储类型和变量的作用域。变量声明的一般形式:变量声明的一般形式: 存储类型说明符存储类型说明符 数据类型说明符数据类型说明符 变量名变量名1 1 , ,变量名变量名2, 2, 变量名变量名3 3, 34变量名必须是一个合法的标识符,还应考虑变量名必须是一个合法的标识符,还应考虑“见名知意见名知意”的原则。的原则。 类型说明符后声明多个相同类型的变量,各变量之间用类型说明符后声明多个相同类型的变量,
22、各变量之间用逗号分隔逗号分隔。 变量声明必须放在变量使用之前,即变量声明必须放在变量使用之前,即先声明,后使用先声明,后使用。/变量声明示例变量声明示例#includevoid main() int a,b; /声明两个整型变量声明两个整型变量a a和和b b char c; /声明一个字符变量声明一个字符变量c c float f1,f2; /声明两个浮点型变量声明两个浮点型变量f1f1,f2f2数据类型说明符数据类型说明符35u声明变量,只是给变量分配内存空间,存储空间声明变量,只是给变量分配内存空间,存储空间中存放的值是随机的,变量值不确定的。中存放的值是随机的,变量值不确定的。uC C
23、语言允许在声明变量的同时给变量赋值即初始语言允许在声明变量的同时给变量赋值即初始化变量,这个值为变量的初值。化变量,这个值为变量的初值。 在变量声明中初始化赋值的一般格式为:在变量声明中初始化赋值的一般格式为: 存储类型说明符存储类型说明符 数据类型说明符数据类型说明符 变量名变量名1=1=值值1 1 , ,变量名变量名2=2=值值2, 2, ; ; 多个变量初始化赋值必须将其分别赋值,即多个变量初始化赋值必须将其分别赋值,即使所赋的值相同也是如此。使所赋的值相同也是如此。 int i=j=20;(错误)(错误) 应写成:应写成: int i=20,j=20;36/变量声明及初始化变量声明及初
24、始化#includevoid main() char c1=a,c2=b; / /* *声明声明c1c1和和c2c2为字符类型变量,为字符类型变量, c1c1初始化值分别为字符初始化值分别为字符aa、bb* */ / int i=20,j=20,k; / /* *声明声明i i,j j和和k k为基本整型变量,为基本整型变量, i i和和j j初始化值为初始化值为2020* */ /float f1=3.6,f2; / /* *声明声明f1f1和和f2f2为单精度类型变量,为单精度类型变量, f1f1初始化值为初始化值为3.63.6* */ / 37要注意区别要注意区别变量名变量名和和变量值变
25、量值: int k=26;26k3000存储单元存储单元变量名变量名变量地址变量地址变量值变量值38(1)(1)整型变量整型变量 有基本整型、短整型、长整型、无符号基本有基本整型、短整型、长整型、无符号基本整型、无符号短整型、无符号长整型整型、无符号短整型、无符号长整型6 6种。种。 在程序中使用变量,要考虑程序运行的环境和在程序中使用变量,要考虑程序运行的环境和变量的取值范围,当变量的取值超出变量类型所规变量的取值范围,当变量的取值超出变量类型所规定的范围时,会出现错误的运算结果。定的范围时,会出现错误的运算结果。/整型变量的定义与使用整型变量的定义与使用#includevoid main(
26、) int a=-10,b=20,c; /声明基本整型变量声明基本整型变量a a、b b、c c, /并对并对a,ba,b初始化初始化 unsigned k; /声明无符号基本整型变量声明无符号基本整型变量k k scanf(%u,&k); /用用scanfscanf()函数给()函数给k k输入一个值输入一个值 c=a+b; /将将a a、b b的和赋值给的和赋值给c c printf(c=%d,k=%un,c,k); /用用printfprintf()函数输出()函数输出c c、k k的值的值 39 使用整型变量时要注意它获取的值不要超过变使用整型变量时要注意它获取的值不要超过变量
27、的取值范围,否则会发生量的取值范围,否则会发生“溢出溢出”。/整型数据的溢出整型数据的溢出#includevoid main() short x=32767,y; y=x+1; printf(x=%d,y=%dn,x,y); 因为一个短整型变量所能表示数因为一个短整型变量所能表示数的范围是的范围是-32768-32767-32768-32767,将无法表,将无法表示大于示大于3276732767的数,这种情况叫溢出。的数,这种情况叫溢出。而程序在运行过程中并没有报错。而程序在运行过程中并没有报错。40(1)(1)实型变量实型变量 分为单精度实型和双精度实型,两者的区分为单精度实型和双精度实型,
28、两者的区别在于精度即有效数字位数。别在于精度即有效数字位数。/实型变量的有效位数实型变量的有效位数#includevoid main() floata=33.3333333333; double b=12.123456789012345678; printf(a=%21.18fn,a); /格式符格式符%21.18f%21.18f,输出,输出a a时总长度时总长度2121位,小数位数占位,小数位数占1818位位 printf(b=%21.18fn,b); float类型的数据只接收类型的数据只接收7 7位有效数字位有效数字 double类型的数据接收类型的数据接收1616位有效数字位有效数字
29、41在使用实型变量时应该注意以下两种情况:在使用实型变量时应该注意以下两种情况:实型常量没有加后缀实型常量没有加后缀F F(或(或f f)时,系统默认为)时,系统默认为doubledouble类型类型进行处理,具有较高精度,把该实型常量赋值给一个进行处理,具有较高精度,把该实型常量赋值给一个floatfloat类型的变量时,系统会截取相应的有效位数进行赋值。类型的变量时,系统会截取相应的有效位数进行赋值。应避免将很大的数和一个很小的数进行加减运算,否则会应避免将很大的数和一个很小的数进行加减运算,否则会丢失丢失“较小较小”的数。的数。/实型数据的舍入误差。实型数据的舍入误差。#includev
30、oid main() float a=123456789.0,b; b=a+1; printf(a=%fn,a); printf(b=%fn,b); 只能保证前只能保证前7 7位是准确的,位是准确的,后面几位是无效数字,后面几位是无效数字,把把1 1加在无效数字上,加在无效数字上,是无意义的。是无意义的。 42(1)(1)字符型变量字符型变量u每个字符变量每个字符变量占占一个字节的内存空间,存放一个字符,即一个字节的内存空间,存放一个字符,即字符变量的取值是一个字符常量。字符变量的取值是一个字符常量。u可以把字符型数据作为整型数据进行处理。允许对整型变可以把字符型数据作为整型数据进行处理。允许
31、对整型变量赋以字符值,也允许对字符变量赋以整型值。量赋以字符值,也允许对字符变量赋以整型值。u在输出时,允许把字符变量按整型形式输出,也允许把整在输出时,允许把字符变量按整型形式输出,也允许把整型数据按字符形式输出。型数据按字符形式输出。u注意,整型为注意,整型为4 4个字节,字符为个字节,字符为1 1个字节,当整型按字符型个字节,当整型按字符型量处理时,只有低八位参与处理。量处理时,只有低八位参与处理。/字符型变量示例字符型变量示例#includevoid main() char a,b; a=x; b=y; a=a-32; b=b-32; printf(%c,%cn%d,%dn,a,b,a
32、,b); 432.3.1 2.3.1 运算符运算符2.3.2 2.3.2 表达式表达式2.3.3 2.3.3 类型转换类型转换44语言语言的运算符有以下几类:的运算符有以下几类:算术运算符算术运算符 (+ - + - * * / % / %)关系运算符关系运算符 ( ! !)逻辑运算符逻辑运算符 (!(!|)位运算符位运算符 ( | |)赋值运算符赋值运算符 (及其扩展赋值运算符)(及其扩展赋值运算符)条件运算符条件运算符 (?:)(?:)逗号运算符逗号运算符 ( (,),)(8)(8)指针运算符指针运算符 (* *和)和)(9)(9)求字节数运算符()求字节数运算符()(10)(10)强制类
33、型转换运算符(强制类型转换运算符( ( (类型)类型) ) )(11)(11)分量运算符(分量运算符(-)(12)(12)下标运算符()下标运算符()(13)(13)其他其他 (如函数调用运算符()(如函数调用运算符()45使用运算符需要注意以下几点:使用运算符需要注意以下几点:运算符的功能运算符的功能对操作数(即运算对象)的要求对操作数(即运算对象)的要求u操作数的个数;操作数的个数;u操作数的数据类型。操作数的数据类型。运算符的优先级别运算符的优先级别运算符的结合方向运算符的结合方向运算结果运算结果参见附录参见附录B B46u (加法运算符,或正值运算符。如(加法运算符,或正值运算符。如:
34、 :、)、)u (减法运算符,或负值运算符。如(减法运算符,或负值运算符。如: :、)、)u* * (乘法运算符。如(乘法运算符。如: :* *)u (除法运算符。两个整数相除的结果为整数,(除法运算符。两个整数相除的结果为整数, 如如: :结果为)结果为)u (模运算符,或称求余运算符,两侧均应为整型数(模运算符,或称求余运算符,两侧均应为整型数据,如据,如: :的值为)。的值为)。注:注:1 1、/:/:如果两个整数相除,结果为整数(整除),结果如果两个整数相除,结果为整数(整除),结果“向零取向零取整整”。 例:例:8/5=18/5=1,8/-5=-18/-5=-1,-8/5=-1-8/
35、5=-1,8.0/5=1.68.0/5=1.6。 2 2、%:%:结果的符号与被除数符号相同。结果的符号与被除数符号相同。 例:例:8%5=38%5=3,-8%5=-3-8%5=-3,8%-5=38%-5=3。47u作用是使变量的值增或减作用是使变量的值增或减u+i+i,-i-i:在使用:在使用i i之前,先使之前,先使i i的值加(减)的值加(减)1 1ui+i+,i-i-:在使用:在使用i i之后,使之后,使i i的值加(减)的值加(减)1 1 注:注:由于自增和自减可以改变操作数自身的值,因此其由于自增和自减可以改变操作数自身的值,因此其运算对象只能是一个变量运算对象只能是一个变量。整型
36、、实型、字符型、。整型、实型、字符型、指针类型变量均可作为其运算对象。指针类型变量均可作为其运算对象。变量x初值表达式运算后x的值运算后表达式的值2+x332x+322-x112x-1248/自增自减综合应用自增自减综合应用#includevoid main() int i=8; printf(“%dn”,+i); printf(%dn,-i); printf(“%dn”,i+); printf(“%dn”,i-); printf(%dn,-i+); printf(“%dn”,-i-); printf(%dn,i); /输出输出9 9/输出输出8/输出输出8 8,但,但i i的值为的值为9 9
37、/输出输出9,但,但i的值为的值为8/输出输出-8-8,但,但i i的值为的值为9 9/输出输出-9,相当于,相当于-(i-)/此时输出多少呢?此时输出多少呢?49u “”是赋值运算符是赋值运算符u作用是将一个数据赋给一个变量作用是将一个数据赋给一个变量u也可以将一个表达式的值赋给一个变量也可以将一个表达式的值赋给一个变量 例:例:a=20a=20;的作用是;的作用是“将值将值2020赋给变量赋给变量a”a”。 赋值表达式一般形式为:赋值表达式一般形式为: 变量变量 赋值运算符赋值运算符 表达式表达式对赋值表达式对赋值表达式求解的过程求解的过程:求赋值运算符右侧的求赋值运算符右侧的“表达式表达
38、式”的值的值赋给赋值运算符左侧的变量赋给赋值运算符左侧的变量50赋值运算符左侧的标识符称为赋值运算符左侧的标识符称为“左值左值” 出现在赋值运算符右侧的表达式称为出现在赋值运算符右侧的表达式称为“右值右值” ” 注意:注意:并不是任何对象都可以作为左值的,表达式和常变量并不是任何对象都可以作为左值的,表达式和常变量就不能作为左值。任何左值都可做右值。就不能作为左值。任何左值都可做右值。赋值表达式赋值表达式“a=3a=3* *5”5”的值为的值为1515,对表达式求解后,对表达式求解后,变量变量a a的值和表达式的值都是的值和表达式的值都是1515“a=(b=5)”a=(b=5)”和和“a=b=
39、5”a=b=5”等价等价“a=b”a=b”和和“b=a”b=a”含义不同含义不同51u两侧类型一致时,直接赋值两侧类型一致时,直接赋值u两侧类型不一致,但都是两侧类型不一致,但都是数值型或字符型数值型或字符型,自动,自动将右侧的类型转换为左侧类型后赋值将右侧的类型转换为左侧类型后赋值u定义变量时要防止数据溢出定义变量时要防止数据溢出实型实型整型整型:直接取整,舍弃小数部分。直接取整,舍弃小数部分。整型整型实型实型:数值不变,但要补足相应的有效位数。数值不变,但要补足相应的有效位数。字符型字符型整型整型:将将ASCIIASCII码值赋给最低的码值赋给最低的8 8位。位。整型整型字符型字符型:只截
40、取最低的只截取最低的8 8位赋给字符型变量。位赋给字符型变量。 52复合的赋值运算符复合的赋值运算符 在赋值符在赋值符“”之前加上其他运算符,可以构之前加上其他运算符,可以构成复合的运算符成复合的运算符 等价于等价于 复合赋值运算符使用一般形式为:复合赋值运算符使用一般形式为: = 等价于:等价于: = /例如:例如:n+=1等价于n=n+1x*=y+1等价于x=x*(y+1)k%=i+k 等价于k=k%(i+k)要加括号要加括号53赋值表达式也可以包含复合的赋值运算符。赋值表达式也可以包含复合的赋值运算符。 例:例: 求解步骤如下求解步骤如下: 先进行先进行“-=-=* *”的运算,的运算,
41、 它相当于它相当于: : * *,a a的值为的值为1212144144132132。 再进行再进行“132”132”的运算,相当于的运算,相当于: : =a+(-132)=a+(-132),a a的值为的值为132-132132-132-264-264。如果变成:如果变成:54关系运算符及其优先次序关系运算符及其优先次序1. (小于)2. (大于)4. = (大于或等于)5. = (等于)6. != (不等于)优先级相同(高)优先级相同(高)优先级相同(低)优先级相同(低)说明:说明:关系运算符的优先级低于算术运算符关系运算符的优先级高于赋值运算符55关系表达式关系表达式 用关系运算符将两个
42、表达式起来的式子,称关系表达式。例:ab,a+bb+c,(a=3)(b=5),ab)(bb”的值为“真”,表达式的值为1。C C语言中没有专用语言中没有专用的逻辑值,的逻辑值,1 1代表代表真,真,0 0代表假代表假56#includevoid main() int a=1,b=2,c=3,d=4; / /* *声明变量声明变量a a,b b,c c,d d并初始化并初始化* */ / printf(“%dn”,a+bc+d); printf(“%dn”,a=2*b); printf(“%dn”,ad); printf(“%dn”,a!=(c=d); /结果为假,输出结果为假,输出0 0/结果
43、为真,输出结果为真,输出1 1/结果为真,输出结果为真,输出1 1/结果为真,输出结果为真,输出1 1printf(“%dn”,ab&()-&(与与)-|()-|(或或) )逻辑运算符中的逻辑运算符中的“&”&”和和“|”|”低于关系运算符,低于关系运算符,“!”!”高于算高于算 术运算符术运算符58/逻辑运算示例逻辑运算示例#includevoid main() char ch; printf(“input a letter:”); scanf(“%c”,&ch); /*输入一个字母输入一个字母*/ if(!(ch=A&ch=a&ch=
44、z) printf(“input error!n”); /*如果输入的不是字母则提示错误如果输入的不是字母则提示错误*/ 不能改成:不能改成:A=ch3&84-!0 自左向右运算自左向右运算 1&01&0逻辑值为逻辑值为0 0838353逻辑值为逻辑值为1 1表达式值为表达式值为0 061逻辑运算的逻辑运算的“短路短路”特性:特性:(1)(1)a&b&c 只有只有a a为真时,才需要判断为真时,才需要判断b b的值,的值, 只有只有a a和和b b都为真时,才需要判断都为真时,才需要判断c c的值。的值。(2)(2)a|b|c 只要只要a a为真,就不必
45、判断为真,就不必判断b b和和c c的值,的值, 只有只有a a为假,才判断为假,才判断b b。a a和和b b都为假才判断都为假才判断c c。例例: :(m=ab)&(n=cd)当当a=1,b=2,c=3,d=4,ma=1,b=2,c=3,d=4,m和和n n的原值为的原值为1 1时,由于时,由于“ab”ab”的值为的值为0 0,因此,因此m=0m=0,而,而“n=cd”n=cd”不被执行,因此不被执行,因此n n的值不是的值不是0 0而仍保持原值而仍保持原值1 1。62逗号运算符逗号运算符: :将两个表达式连接起来将两个表达式连接起来, ,又称为又称为“顺序求顺序求值运算符值运算符
46、”。 如:如:5 5, 一般形式一般形式: : 表达式,表达式表达式,表达式 ,表达式,表达式n n求解过程:求解过程: 先求解表达式,再求解表达式,依次。整个先求解表达式,再求解表达式,依次。整个逗号表达式的值是表达式逗号表达式的值是表达式n n的值。的值。 63例:例:逗号表达式逗号表达式 x=a=2*3,a*4,a+5; 分析分析: :赋值运算符优先级高于逗号运算符,先计算子表达赋值运算符优先级高于逗号运算符,先计算子表达式式x=a=2x=a=2* *3 3,a a和和x x被赋值为被赋值为6 6,再计算子表达式,再计算子表达式a a* *4 4,值为值为2424,最后计算子表达式,最后
47、计算子表达式a+5a+5,值为,值为1111,整个表达,整个表达式的结果取子表达式式的结果取子表达式a+5a+5的值,即的值,即1111。 例:例:逗号表达式逗号表达式 x=(a=2*3,a*4,a+5); 分析分析: :先计算括号中的逗号表达式先计算括号中的逗号表达式a=2a=2* *3,a3,a* *4,a+54,a+5,其中先,其中先计算子表达式计算子表达式a=2a=2* *3 3,a a被赋值为被赋值为6 6,再计算子表达式,再计算子表达式a a* *4 4,值为,值为2424,最后计算子表达式,最后计算子表达式a+5a+5,值为,值为1111,整个,整个逗号表达式的结果取子表达式逗号
48、表达式的结果取子表达式a+5a+5的值的值1111,再赋给,再赋给x x。 64条件运算符条件运算符是三目运算符,由两个符号是三目运算符,由两个符号“?:?:”组成,组成,需要需要3 3个运算对象。个运算对象。 一般形式一般形式: :表达式表达式1 1?表达式?表达式2 2:表达式:表达式3 3求解过程:求解过程: 若表达式若表达式1 1的值为真(非的值为真(非0 0),则执行表达式),则执行表达式2 2,其结果作为整个条件表达式的值,否则执行表达其结果作为整个条件表达式的值,否则执行表达式式3 3,其结果作为整个条件表达式的值。,其结果作为整个条件表达式的值。65说明:说明:(1).3(1)
49、.3个操作数可以是任意类型表达式。个操作数可以是任意类型表达式。 (2).(2).条件运算符优先级高于赋值运算符条件运算符优先级高于赋值运算符 ,低于关系运算符,低于关系运算符 和算术运算符,位于第和算术运算符,位于第1313优先级。优先级。 (3).(3).条件运算符的结合方向为条件运算符的结合方向为“自右至左自右至左”。 (4).“(4).“表达式表达式2”2”和和“表达式表达式3”3”不仅可以是数值表达式,不仅可以是数值表达式,还可以是赋值表达式或函数表达式。还可以是赋值表达式或函数表达式。(5).(5).如果表达式如果表达式1 1为真,只计算表达式为真,只计算表达式2 2,否则只计算表
50、达,否则只计算表达式式3 3。66/输入两个数,求其中较大的数和较小的数。输入两个数,求其中较大的数和较小的数。#includevoid main()int a,b,max,min; printf(“input a=”); scanf(“%d”,&a); /*输入变量输入变量a*/ printf(“input b=”); scanf(“%d”,&b); /*输入变量输入变量b*/ max=ab?a:b; min=ab?a: bc?b:c ; ()67 由于由于C C语言可直接对硬件编程,在系统软件设计中要语言可直接对硬件编程,在系统软件设计中要求能对位进行运算,因此,求能对位进
51、行运算,因此,C C语言提供了语言提供了6 6种位运算种位运算符,支持位运算等汇编操作。符,支持位运算等汇编操作。运算符运算符功能功能运算对象个数运算对象个数优先级优先级结合方向结合方向 按位取反按位取反单目单目2 2从右至左从右至左右移位右移位双目双目5 5从左至右从左至右& &按位与按位与双目双目8 8从左至右从左至右 按位异或按位异或双目双目9 9从左至右从左至右| |按位或按位或双目双目1010从左至右从左至右68 位逻辑运算符是以数据的二进制数位进行运算,位位逻辑运算符是以数据的二进制数位进行运算,位移动运算是按二进制位数进行左移和右移。移动运算是按二进制位数进行左移
52、和右移。(1)(1)位逻辑运算位逻辑运算ab a a(按(按位取反)位取反)a&ba&b(按(按位与)位与)a|ba|b(按(按位或)位或)abab(按(按位异或)位异或)110110100011011011001000691)1)按位取反按位取反u按位取反,运算符为按位取反,运算符为“”。把该运算对象的。把该运算对象的每个二进制位取反。每个二进制位取反。u例如,例如,5,运算如下(只列出了最低的,运算如下(只列出了最低的8个个二进制位):二进制位):0000010111111010702)2)按位与按位与u按位与,运算符为按位与,运算符为“&”。两个运算对象中对。两个
53、运算对象中对应的二进制位都是应的二进制位都是1,则该位结果为,则该位结果为1;否则,;否则,结果为结果为0。按位与运算通常用来对某些二进制。按位与运算通常用来对某些二进制位清位清0或保留某些二进制位。在需要清或保留某些二进制位。在需要清0的位的位置上,将与它进行与运算的运算对象的对应置上,将与它进行与运算的运算对象的对应的二进制位置的二进制位置0,需要保留原值的位置,则将,需要保留原值的位置,则将对应的二进制位置对应的二进制位置1。u例如,要保留例如,要保留155的最低的最低3位不变,其余置位不变,其余置0,可用可用155&7来实现,运算如下(只列出了最来实现,运算如下(只列出了最低的
54、低的8个二进制位):个二进制位):1 0 0 1 1 0 1 1(155的二进制形式)的二进制形式)&0 0 0 0 0 1 1 1 (7的二进制形式)的二进制形式)0 0 0 0 0 0 1 1(结果为(结果为3)713)3)按位或按位或u运算符为运算符为“|”。两个运算对象中对应的二进。两个运算对象中对应的二进制位有一个是制位有一个是1,则该位结果为,则该位结果为1;否则,结;否则,结果为果为0。按位或运算通常用来对某些二进制位。按位或运算通常用来对某些二进制位置置1或保留某些二进制位。在需要置或保留某些二进制位。在需要置1的位置的位置上,将与它进行或运算的运算对象的对应的上,将与
55、它进行或运算的运算对象的对应的二进制位置二进制位置1,需要保留原值的位置,则将对,需要保留原值的位置,则将对应的二进制位置应的二进制位置0。u例如,要保留例如,要保留129的最低的最低3位不变,其余置位不变,其余置1,可用可用129|248来实现,运算如下(只列出了来实现,运算如下(只列出了最低的最低的8个二进制位):个二进制位):1 0 0 0 0 0 0 1(129的二进制形式)的二进制形式)|1 1 1 1 1 0 0 0(248的二进制形式)的二进制形式)1 1 1 1 1 0 0 1(结果为(结果为249)724)4)按位异或按位异或u按位异或,运算符为按位异或,运算符为“”。两个运
56、算对象中。两个运算对象中对应的二进制位相同(都是对应的二进制位相同(都是1或都是或都是0),则),则该位结果为该位结果为0;不相同则结果为;不相同则结果为1。u例如,例如,155129,运算如下(只列出了最低,运算如下(只列出了最低的的8个二进制位):个二进制位):1 0 0 1 1 0 1 1 (155的二进制形式)的二进制形式)1 0 0 0 0 0 0 1 (129的二进制形式)的二进制形式)0 0 0 1 1 0 1 0(结果为(结果为26)73(2)(2)位移动运算位移动运算位移动运算表达式的位移动运算表达式的语法格式语法格式: 运算数据运算数据 位移动运算符位移动运算符 移动位数移
57、动位数左移位左移位,运算符为,运算符为“”。把左边的运算数据。把左边的运算数据的全部向左移指定的位数,高位丢弃,低位的全部向左移指定的位数,高位丢弃,低位补补0。例如,例如,a的值为的值为5,a”。把左边的运算数据。把左边的运算数据的全部向右移指定的位数,低位丢弃,对于的全部向右移指定的位数,低位丢弃,对于正数,高位补正数,高位补0,负数的符号位为,负数的符号位为1,最高位,最高位补补1还是补还是补0取决于编译器,多数情况是补取决于编译器,多数情况是补1。例如,例如,a的值为的值为15,a2则是把则是把a的二进制位全的二进制位全部向右移动部向右移动2位,即位,即15的二进制的二进制000011
58、11右移右移2位后为位后为00000011(十进制数为(十进制数为3),),相当于相当于a除以除以22取整。取整。75 sizeof()sizeof()运算符运算符,单目运算,第,单目运算,第2 2优先级,优先级,结合方向是从右至左。结合方向是从右至左。一般形式:一般形式: sizeofsizeof(变量名(变量名| |数据类型标识符数据类型标识符| |表达式)表达式) 功能:功能:计算该数据类型变量所占的字节数。计算该数据类型变量所占的字节数。例:例: int a=5;float x=3.2,y=6.4; sizeof(a) 值为:值为:4(4(在在TURBO CTURBO C中为中为2)2
59、) sizeof(char) 值为:值为:1 1 sizeof(x+y) 值为:值为:4 4 sizeof(double) 值为:值为:8 8 76u表达式:表达式:用运算符和括号将运算对象用运算符和括号将运算对象( (也称操作数)也称操作数)连接起来的、符合语法规则的式子,称为表达连接起来的、符合语法规则的式子,称为表达式。运算对象包括常量、变量、函数等。其中,单式。运算对象包括常量、变量、函数等。其中,单个的常量、变量、函数也称为表达式。个的常量、变量、函数也称为表达式。u表达式运算后只会产生一个结果,该结果是具有某表达式运算后只会产生一个结果,该结果是具有某种数据类型的数值。种数据类型的
60、数值。 uC C语言中,运算是自左向右的,运算符执行顺序通语言中,运算是自左向右的,运算符执行顺序通常由运算符的优先级和结合方向控制。常由运算符的优先级和结合方向控制。 u优先级较高的运算符先于优先级较低的执行,如生优先级较高的运算符先于优先级较低的执行,如生活中常说的先乘除后加减。活中常说的先乘除后加减。 u结合方向则控制具有相同优先级的多个运算符的执结合方向则控制具有相同优先级的多个运算符的执行顺序。行顺序。77C C语言提供了语言提供了3 3种类型转换方式:种类型转换方式: 自动转换、强制转换和赋值转换。自动转换、强制转换和赋值转换。 1 1、自动转换、自动转换( (也称隐式类型转换也称隐式类型转换) )说明:说明: 这种类型转换是由系统自这种类型转换是由系统自动进行的。动进行的。必定的转换必定的转换转换的方向转换的方向78例如,设例如,设folatfola
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版土地买卖居间合同签订与履行指导3篇
- 2025年度桶装纯净水销售数据分析与应用合同
- 二零二五年度医院布草用品消毒服务及质量监控合同3篇
- 二零二五年度商业场地租赁合同转让与租赁合同续签协议2篇
- 二手房交易协议(2024版)
- 2025版事业单位聘用合同正规范本(含岗位调整)3篇
- 2025立医院医用控温仪设备采购与安装服务合同2篇
- 2025年度绿植种子研发与种植合同3篇
- 二零二五年度农用货车运输保险代理服务合同
- 二零二五年度土地承包经营权租赁与农村电商服务合同
- 山东省青岛市2023-2024学年七年级上学期期末考试数学试题(含答案)
- 墓地销售计划及方案设计书
- 从偏差行为到卓越一生3.0版
- 优佳学案七年级上册历史
- 铝箔行业海外分析
- 纪委办案安全培训课件
- 超市连锁行业招商策划
- 医药高等数学智慧树知到课后章节答案2023年下浙江中医药大学
- 城市道路智慧路灯项目 投标方案(技术标)
- 【公司利润质量研究国内外文献综述3400字】
- 工行全国地区码
评论
0/150
提交评论