




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 数据形式 数据定义 运算符 表达式 运算过程与类型 输入输出 2.1 数据类型和存储形式数据类型和存储形式常数、变量、函数和表达式是程序中的基本操作对象,它们都隐式或显式地与一种数据类型相联系。 2.1 数据类型和存储形式数据类型和存储形式数据类型是指数据的内在表现形式,类型是在高级语言中的一个非常重要的概念,因为类型确定数据的存储形式和值域,类型确定相应数据所允许执行的运算。C C中中的的类类型型划划分分基本类型基本类型构造类型构造类型短整型短整型( (short int )short int )整型整型( (int)int)长整型长整型( (long int)long int)整型整型实
2、型实型数组类型数组类型结构类型结构类型( (struct)struct)共用体共用体( (union)union)文件类型文件类型( (FILE)FILE)指针类型指针类型空类型(空类型(voidvoid)单精度型单精度型( (float)float)双精度型双精度型( (double)double) 不 同 类 型的数据在计算机中的存储格式也不同,以32位机为例说明。存储特点:顺序存放,精确表示实数存储特点:指数与小数分别存放,近似表示。1.1.专用符号专用符号: : + +,- -,* *,/ /,;,;等等多为操作运算符多为操作运算符。2.2.单词单词: : 保留字(关键字)保留字(关键
3、字):具有固定含义的字,作用是用来具有固定含义的字,作用是用来命名命名C C语句、数据类型、变量属性及个别运算符,一律用语句、数据类型、变量属性及个别运算符,一律用小写字母表示。小写字母表示。数据存储类别限止符:数据存储类别限止符:auto, extern, register, static;数据类型限止符:数据类型限止符:long, short, unsigned, struct, union;数据类型:数据类型:char, double, float, int;C语句:语句: break, case, continue, default, do, else, for, goto,if,re
4、turn, switch, while;其其 它:它: entry, sizeof, typedef;*C预处理:预处理:define, include, undef, ifdef, ifndef, endif,; 2.2 2.2 基本语法单位基本语法单位 用户标识符用户标识符作用作用:标记常数、变量、自定义数据类型、函数及标记常数、变量、自定义数据类型、函数及程序的名字程序的名字 取名规则取名规则: 以字母或下划线以字母或下划线_ _中任一字符打头;中任一字符打头; 在第一字符之后,可以是任意的字母、下划线或数在第一字符之后,可以是任意的字母、下划线或数字组成的字符序列,这个字符序列可以是空
5、串。字组成的字符序列,这个字符序列可以是空串。 用户标识符用户标识符 说明说明: 不要与保留字同名;不要与保留字同名; C C语言中大小写字母有不同的含义,即区分大小写。语言中大小写字母有不同的含义,即区分大小写。namename和和NameName在在C C中是两个不同的标识符;中是两个不同的标识符; 习惯上除了符号常数,一般都用小写字母表示;习惯上除了符号常数,一般都用小写字母表示; 标识符长度不限,但只识别前标识符长度不限,但只识别前8 8个字符。个字符。例例: : 正确:正确:a, a1, f_1, area, _age a, a1, f_1, area, _age 错误:错误:2 2
6、a, last name, no#, a, last name, no#, - -xy, charxy, char2.3 2.3 C C语言中的常数分类语言中的常数分类算术常数算术常数 ( (整型常数整型常数) ) 十进制整常数十进制整常数:值域:值域之间,之间,n n为机器字长;为机器字长;例:例:123123,100100 长整数常数长整数常数:值域:值域之间,占两个机器字长之间,占两个机器字长,表示形式表示形式为为在整常数后加字母在整常数后加字母l l或或 L L; ;例:例:123123l, 123L, 100l, 100Ll, 123L, 100l, 100L 八进制整常数八进制整常
7、数:由数字:由数字0 0打头,后跟一串八进制数字(打头,后跟一串八进制数字(0 07 7)例:例:01230123, 01000100, 0505, 032727032727 十六进制整常数十六进制整常数:以:以0 0 x x打头,随后跟十进制数字(打头,随后跟十进制数字(0 09 9)和六)和六个字母(个字母(A AF F或或a af f分别分别对应十进制的对应十进制的10101515 )组成的串。组成的串。例:例:0 0 x10, 0 x1A, 0 x1f, 0 x20 x10, 0 x1A, 0 x1f, 0 x2012211nn1221212nn算术常数算术常数 ( (实型常数实型常数
8、 ) )在在C C语言中单精度和双精度实常数的表示方法相同,语言中单精度和双精度实常数的表示方法相同,编译程序总是把实常数处理成双精度后再进行运算的。编译程序总是把实常数处理成双精度后再进行运算的。10E517893246整数部分完整形式:指数部分小数部分实常数的实常数的组成规则实常数的组成规则: 上述三个部分可以有一部分或二部分缺省,但整数部分和小数部上述三个部分可以有一部分或二部分缺省,但整数部分和小数部分不能同时缺省;分不能同时缺省; 如果一个实常数有一个小数点,则小数点左右至少有一边有数字;如果一个实常数有一个小数点,则小数点左右至少有一边有数字; 如果实常数如果实常数e e或或E E
9、,则两边至少至少都要有一位数字;则两边至少至少都要有一位数字; 指数部分必须是整数。指数部分必须是整数。实常数一般有两种书写形式:小数形式和指数形式实常数一般有两种书写形式:小数形式和指数形式 小数形式小数形式: 3. , 123.4 , .0233. , 123.4 , .023 指数形式指数形式: 1.21.2E4 , 6.5eE4 , 6.5e- -5 , 20e35 , 20e3实数的取值范围实数的取值范围1010- -383810103838:当数值大于:当数值大于10103838时时产生上溢,小于产生上溢,小于1010- -3838时产生下溢,通常用时产生下溢,通常用0 0近似,近
10、似,一般一个普通实常数在机内表示时具有一般一个普通实常数在机内表示时具有6 67 7位十进位十进制有效数字,双精度实数具有制有效数字,双精度实数具有1616位十进制有效数字。位十进制有效数字。算术常数算术常数 ( (实型常数实型常数 ) )字符常数字符常数(单个字符(简称字符)和字符串)(单个字符(简称字符)和字符串)单个字符常数单个字符常数:是由一对单引号括起来的单个字符或转义字:是由一对单引号括起来的单个字符或转义字符所构成。在内存中占一个字节的存储单元。符所构成。在内存中占一个字节的存储单元。例:例:A A, ,2 2, ,# #, ,+ +, , n n, , 0 0, , t t,
11、, 。 转义字符的意思是将反斜杠转义字符的意思是将反斜杠 后面的字符或数值转换成后面的字符或数值转换成另外的意义。利用它可以表示另外的意义。利用它可以表示ASCIIASCII字符集中任何一个字符。字符集中任何一个字符。 n n: :作为换行控制字符作为换行控制字符 101101: :代表字母代表字母A A 040040: :代表空格符,代表空格符,ASCIIASCII码为码为3232 0 0或或 000000: :代表空操作符,代表空操作符,即空字符,即空字符,ASCIIASCII码为码为0 0系统作为字符串结束符使用 常用的转义字符及其作用常用的转义字符及其作用ASCIIASCII代码代码含
12、义含义字符形式字符形式1 1到到2 2位位1616进制数所代表的字符进制数所代表的字符 xhhxhh1 1到到3 3位位8 8进制数所代表的字符进制数所代表的字符 dddddd3434双引号字符双引号字符 3939单引号字符单引号字符 9292反斜杠字符反斜杠字符“ ” 1212换页,将当前位置移到下页开头换页,将当前位置移到下页开头 f f1313回车,将当前位置移到本行开头回车,将当前位置移到本行开头 r r8 8退格,将当前位置移到前一列退格,将当前位置移到前一列 b b9 9水平制表(跳到下一个水平制表(跳到下一个tabtab位置)位置) t t1010换行,将当前位置移到下一行开头换
13、行,将当前位置移到下一行开头 n nASCIIASCII代码代码含义含义字符形式字符形式1 1到到2 2位位1616进制数所代表的字符进制数所代表的字符 xhhxhh1 1到到3 3位位8 8进制数所代表的字符进制数所代表的字符 dddddd3434双引号字符双引号字符 3939单引号字符单引号字符 9292反斜杠字符反斜杠字符“ ” 1212换页,将当前位置移到下页开头换页,将当前位置移到下页开头 f f1313回车,将当前位置移到本行开头回车,将当前位置移到本行开头 r r8 8退格,将当前位置移到前一列退格,将当前位置移到前一列 b b9 9水平制表(跳到下一个水平制表(跳到下一个tab
14、tab位置)位置) t t1010换行,将当前位置移到下一行开头换行,将当前位置移到下一行开头 n n 字符串常数字符串常数是用一对双引号括起来的零个或多个字符序列。采是用一对双引号括起来的零个或多个字符序列。采用数组形式存放,并且编译系统自动为串加串结束符用数组形式存放,并且编译系统自动为串加串结束符 0 0,以表示串的结束。,以表示串的结束。注意注意:由于字符串末尾都被加上:由于字符串末尾都被加上 0 0串结束串结束符,所以字符串在内部表示所占的空间要比实符,所以字符串在内部表示所占的空间要比实际字符多一个字节,际字符多一个字节, 所以长度为所以长度为1 1的字符串与的字符串与单字符常数是
15、不同的。单字符常数是不同的。例:例:USTC,zhang san,A,C:USTC,zhang san,A,C: Program FilesProgram Files 注意字符与字符串的区别字符型字符型( (char)char)以一字节以一字节8 8位存放,存放形式:位存放,存放形式:17 6 5 4 3 2 1 01000000A在内存中在内存中逻辑形态逻辑形态A由于字符串末尾都被加上由于字符串末尾都被加上 0 0串结束符,所以字符串结束符,所以字符串在内部所占的空间要比实际字符多一个字节。串在内部所占的空间要比实际字符多一个字节。11000000“A”A00000000逻辑形态逻辑形态0由
16、于字符串末尾都被加上由于字符串末尾都被加上 0 0串结束符,所以字符串结束符,所以字符串在内部所占的空间要比实际字符多一个字节。串在内部所占的空间要比实际字符多一个字节。11000000“A”A00000000逻辑形态逻辑形态0 符号常数符号常数 符号常数习惯上用大写字母表示;符号常数习惯上用大写字母表示; 经过定义,标识符与后面的常数就具有等价的作用;经过定义,标识符与后面的常数就具有等价的作用; 使用符号常数的目的是便于大程序的修改和阅读直使用符号常数的目的是便于大程序的修改和阅读直观。观。定义形式:定义形式: #define #define 标识符标识符常数常数例:例: # #defin
17、e PI 3.14159define PI 3.14159#define EOF #define EOF - -1 1 2.4 2.4 变量及其类型变量及其类型 变量的定义变量的定义变量表示在变量表示在C C程序中的基本存储单元。变量是指在程程序中的基本存储单元。变量是指在程序运行过程中其值可以改变的量。变量必须序运行过程中其值可以改变的量。变量必须“先定义先定义后使用后使用”。定义一般形式:定义一般形式:类型类型变量标识符表;变量标识符表;例例:int age, index;int age, index;float x, y; double zfloat x, y; double z; ;
18、定义变量的作用:定义变量的作用: 使一变量属于某一确定的类型,即规定该使一变量属于某一确定的类型,即规定该变量的取值范围及它能执行的运算操作变量的取值范围及它能执行的运算操作 ; 编译时能为其分配相应的存储单元,并确编译时能为其分配相应的存储单元,并确定其存储形式,同时根据其定义检查该变量所定其存储形式,同时根据其定义检查该变量所进行的运算合法性进行的运算合法性 。定义一般形式:定义一般形式:类型类型变量标识符表;变量标识符表; 整型变量的定义整型变量的定义int age, index;int age, index;/定义整形变量定义整形变量long int count; long int c
19、ount; /定义长整形变量定义长整形变量或或long count;long count;short int day, month; short int day, month; /定义短整形变量定义短整形变量或或short day, month;short day, month;unsigned addr;unsigned addr;/定义无符号整变量定义无符号整变量 存储单元的字长一般依赖于各系统的硬件环境,略有不同。 说明说明: 单精度和双精度的值域相同单精度和双精度的值域相同1010- -383810103838,双精度仅,双精度仅提高精度。提高精度。 在运算过程中,单精度变量的值总是转
20、换为双精度在运算过程中,单精度变量的值总是转换为双精度后再参与运算的,目的是提高精度。后再参与运算的,目的是提高精度。 实型变量的定义实型变量的定义float x, y;float x, y;/定义单精度实型变量(定义单精度实型变量(4 4字节)字节)double z;double z;/定义双精度实型变量(定义双精度实型变量(8 8字节)字节) 字符型变量定义字符型变量定义void main()void main()char c1=a, c2=b;char c1=a, c2=b;/定义字符变量并赋初值定义字符变量并赋初值c1=c1c1=c1- -32; c2=c232; c2=c2- -32
21、;32;/转换为大写字母转换为大写字母printf(%c %c ,c1,c2); printf(%c %c ,c1,c2); /以字符形式输出以字符形式输出printf(%d %dprintf(%d %d n,c1,c2); n,c1,c2); /以整数形式输出以整数形式输出 输输出出:A B A B 65 6665 66 字符型量可直接参与数值运算,它的值是该变量当前所含字符在字符集中的序数值,因此实际上是一个整数值 。 字符型量与整数的关系及其数值运算和输出形式11000010字符字符a a和和b b的存储形式同整数的存储形式同整数9797和和9898,实际上是一,实际上是一个整数值;由此
22、个整数值;由此C C语言中字符型量从属与整型数据,可语言中字符型量从属与整型数据,可参与算术运算;参与算术运算;由此字符型量既可用字符形式由此字符型量既可用字符形式% %c c输出,也可采用整输出,也可采用整型型% %d d输出,具体采用那一种方式,由计算机根据输出输出,具体采用那一种方式,由计算机根据输出格式符或运行环境自动判定。格式符或运行环境自动判定。10100010a97ASCII码码转成二进制转成二进制b98ASCII码码转成二进制转成二进制a97ASCII码码转成二进制转成二进制b98ASCII码码转成二进制转成二进制字符存储单元c1c2 字符串变量实际上是一个分量为字符型量的字符
23、数组字符串变量实际上是一个分量为字符型量的字符数组以上语句说明以上语句说明namename和和addressaddress是两个字符串变量,是两个字符串变量,分别含有分别含有2020个分量和个分量和3232个分量,每个分量是一个字符。个分量,每个分量是一个字符。定义形式:定义形式: char char 标识符标识符 整形表达式整形表达式 ; :数组:数组下标运算符,因此标识符属于数组名性下标运算符,因此标识符属于数组名性质,方括号中的整型表达式的值确定数组的分量个数。质,方括号中的整型表达式的值确定数组的分量个数。例:例:char name20,address32;char name20,ad
24、dress32; 关于字符数组的说明关于字符数组的说明: 存放在字符数组中的字符串应以字符串结束符存放在字符数组中的字符串应以字符串结束符 0 0束,占一个字节的存储空间,但不计入串长之内。它束,占一个字节的存储空间,但不计入串长之内。它只是作为字符串的结束标志而已。此规定是为了编译只是作为字符串的结束标志而已。此规定是为了编译程序和用户能判断字符串的实际长度,便于字符串的程序和用户能判断字符串的实际长度,便于字符串的处理。处理。数组分量序号的排列从数组分量序号的排列从0 0开始,故开始,故namename和和addressaddress数数组的分量分别为组的分量分别为:name0, name
25、1, name3, name0, name1, name3, ,name19name19。address0, address0, address0, address0, address0, address0, ,address0,address0, 正确区分字符串长度与存放字符串所需空间大小 数组名代表相应数组存储单元的起始地址,即通过数组名代表相应数组存储单元的起始地址,即通过数组名可以查找定位相应字符串的存储位置,可以说数组名可以查找定位相应字符串的存储位置,可以说字符数组名代表相应字符串。当数组名作为函数的参字符数组名代表相应字符串。当数组名作为函数的参数时,数据传递的方式属于传地址方式
26、。数时,数据传递的方式属于传地址方式。name name 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 191920002000 0 0nasgnahz 0 0nasgnahz 变量的初始化变量的初始化语法形式:语法形式:数据类型数据类型 变量名变量名 = 常量表达式;常量表达式;main( )main( )int age=19; char scx=int age=19; char scx=M M; ;double pi=3.141592653;double pi=3.141592653;int convert=int convert=A A- -a a; ;
27、执行语句;执行语句; 数据说明定义数据说明定义语句,在编译语句,在编译时有效。时有效。数据说明定义数据说明定义语句,在编译语句,在编译时有效。时有效。执行语句,运执行语句,运行期间有效。行期间有效。执行语句,运执行语句,运行期间有效。行期间有效。 2.5 2.5 表达式和表达式语句表达式和表达式语句 表达式的组成:表达式的组成:1)1) 表达式可由常数、变量、函数调用、运算表达式可由常数、变量、函数调用、运算符、及圆括号内的表达式组成;符、及圆括号内的表达式组成;2)2) 单个常数、单个变量、或单个函数调用也单个常数、单个变量、或单个函数调用也都可以看作是一个表达式。都可以看作是一个表达式。表
28、达式是计算机求解问题的基础表达式是计算机求解问题的基础表达式的学习过程中须注意表达式的表达式的学习过程中须注意表达式的书写和运算规则,关心表达式的值和类书写和运算规则,关心表达式的值和类型,要求熟练正确地掌握各类表达式的型,要求熟练正确地掌握各类表达式的求解技能。求解技能。 2.5 2.5 表达式和表达式语句表达式和表达式语句丰富的运算符与数据可构成多种表达式,表达式求丰富的运算符与数据可构成多种表达式,表达式求值时各运算分量之间类型的转换极为灵活,适用性强。值时各运算分量之间类型的转换极为灵活,适用性强。整形表达式整形表达式浮点表达式浮点表达式算术运算符算术运算符关系运算符关系运算符逻辑运算
29、符逻辑运算符增减运算符增减运算符赋值运算符赋值运算符位运算符位运算符算术表达式算术表达式关系表达式关系表达式逻辑表达式逻辑表达式赋值表达式赋值表达式逗号表达式逗号表达式条件表达式条件表达式表达式运算的最后结果作为表达式的值, 该值的类型即为表达式的类型一、整表达式一、整表达式: :对整型量进行运算最终得整型值的表达式对整型量进行运算最终得整型值的表达式允许的运算:允许的运算:+-/自增自减运算符自增自减运算符* */ %/ %/乘、除和求余运算符乘、除和求余运算符+ +- -/加减运算符加减运算符说明:说明:(1 1)C C的运算符除具有优先级外还具有结合方向的特的运算符除具有优先级外还具有结
30、合方向的特征征,相关规则如下:,相关规则如下:C C的运算符的运算符的相关规则的相关规则:1)1) 同一优先级的运算符级别相同,运算次序由结合方向同一优先级的运算符级别相同,运算次序由结合方向决定。决定。2)2) 不同的运算符要求有不同的运算对象。不同的运算符要求有不同的运算对象。按运算符所要求的对象个数分类,有:按运算符所要求的对象个数分类,有:单目运算符:单目运算符:- -a, i+, a, i+, -i i双目运算符:双目运算符:3*5/43*5/4三目运算符:三目运算符:x ? a : bx ? a : b ( ? : ( ? : 为条件运算符为条件运算符) )3)3) 运算符与对象的
31、结合:运算符与对象的结合:C C编译程序在处理时尽可能多编译程序在处理时尽可能多地地“自左而右自左而右”将若干字符组成运算符(在处理标识将若干字符组成运算符(在处理标识符、关键字时也按同一原则处理)符、关键字时也按同一原则处理)a+b+c+a+b+c+( (a+)+(b+)+(c+)a+)+(b+)+(c+)处理为处理为 学习运算符时应特别注意运算符的三个特性学习运算符时应特别注意运算符的三个特性运算符运算符优先级优先级结合方向结合方向运算对象运算对象+ -高高从右到左从右到左单目运算符单目运算符* /* /% %+ +- -低低(2 2)两整型量相除商为整数。两整型量相除商为整数。17/51
32、7/53 35/17 05/17 0(3 3)模运算符模运算符% %的两个操作数必须为整型。的两个操作数必须为整型。从左到右从左到右双目运算符双目运算符使用说明:使用说明:+i, i, -i i在使用在使用i i之前,先使之前,先使i i的值加的值加( (减减)1)1;i+, ii+, i-在使用在使用i i之后,再使之后,再使i i的值加的值加( (减减)1)1;(4 4)+自增运算符和自增运算符和自减运算符,是两个自减运算符,是两个特殊的单目运算符,其运算对象只能是变量特殊的单目运算符,其运算对象只能是变量( (一般为一般为整整型型) ) ,不能是表达式,操作结果分别使变量增,不能是表达式
33、,操作结果分别使变量增1 1或减或减1 1。 增减运算符出现在表达式中的运算符多于一个的情增减运算符出现在表达式中的运算符多于一个的情况况设设i i的原值都为的原值都为3 3,以下各式的运算过程和结果分别为:,以下各式的运算过程和结果分别为:1)1) j=+i j=+i 运算过程:运算过程:i=i+1, j=i; i=i+1, j=i; 运算结果:运算结果:j=4, i=4j=4, i=42)2) k=i+ k=i+ 运算过程:运算过程:k=i, i=i+1; k=i, i=i+1; 运算结果:运算结果:k=3, i=4k=3, i=43)3) l=l=-i i 运算过程:运算过程:i=ii=
34、i- -1, l=i; 1, l=i; 运算结果:运算结果:l=2, i=2 l=2, i=2 4)4) m=im=i运算过程:运算过程:m=i, i=im=i, i=i- -1; 1; 运算结果:运算结果:m=3, i=2 m=3, i=2 若如若如 +i; i+;i; i+;-i;i; i i-; ; 形式形式,分别作为单一分别作为单一表达式语句操作时,前缀和后缀的操作结果是相同表达式语句操作时,前缀和后缀的操作结果是相同的。的。 (此情况常出现在循环语句中)(此情况常出现在循环语句中)二、浮点表达式:二、浮点表达式:由浮点量及相应运算符组成,表达式由浮点量及相应运算符组成,表达式的的值为
35、实型值为实型, ,允允许的运算:许的运算:运算符运算符优先级优先级结合方向结合方向运算对象运算对象* /* /高高+ + - -低低从左到右从左到右双目运算符双目运算符设有:设有:int i, j; float x, y; double r;int i, j; float x, y; double r; 则以则以下都为合法的表达式:下都为合法的表达式:123.456123.456e5,e5,x, sqrt( r ) /x, sqrt( r ) /简单表达式简单表达式( ( i + x ) * ( j + r )i + x ) * ( j + r )/组合表达式组合表达式说明:说明:1)1) 可
36、以整型、单精度和双精度量的混合运算,类型转可以整型、单精度和双精度量的混合运算,类型转换规则为:将整型、单精度量都转换为双精度量,换规则为:将整型、单精度量都转换为双精度量,然后进行运算。然后进行运算。1)1) 转换和运算是逐步进行的。转换和运算是逐步进行的。( ( i + x ) * ( j + r )i + x ) * ( j + r )整整单单整整双双双双+ + 双双双双双双+ + 双双双双+ + 双双双双双双* *双双双双* *双双+ + r r双双双双+ + r r双双说明:说明:(1 1)综合运算时相关运算符的优先级:综合运算时相关运算符的优先级:算术运算符算术运算符关系运算符关系
37、运算符赋值运算符赋值运算符高高低低(2 2)关系表达式的值是整型的。当关系(为真)时其关系表达式的值是整型的。当关系(为真)时其值为值为1 1;当关系不成立(为假)时其值为;当关系不成立(为假)时其值为0 0;即以即以1 1代表代表“真真”,以,以0 0代表代表“假假”,所以说,所以说C C语言的关系表达式语言的关系表达式的值是整型的,并可参与通常的算术运算。的值是整型的,并可参与通常的算术运算。注意:注意: 正确书写数学表达式,区别由运算规则不同引起的正确书写数学表达式,区别由运算规则不同引起的差异。设差异。设x x的值为的值为2 2,则,则数数 学学 表表 达达 式:式:1 1 ? x x
38、 ? 1 1不成立不成立错误的错误的C C表达式表达式 :- -1 = 1 = x = 1x = 1成立成立正确的正确的C C表达式表达式 :( (- -1 = 1 = x) & ( x = 1)x) & ( x = 1)不成立不成立 关系运算符两侧可以是不同类型的算术量,系统自关系运算符两侧可以是不同类型的算术量,系统自动由低向高转换。动由低向高转换。数 学 表 达 式:1 x 1 不成立四、逻辑表达式四、逻辑表达式由代表逻辑值的基本常量、变量、函数、关系表达式、由代表逻辑值的基本常量、变量、函数、关系表达式、逻辑运算符及括号内的逻辑表达式组成。逻辑运算符及括号内的逻辑表达式组成。C C编译
39、系统在给出逻辑运算结果时,以数值编译系统在给出逻辑运算结果时,以数值1 1代表代表真真,以,以0 0代表代表假假,但判断一个量是否为,但判断一个量是否为真时,以真时,以0 0代表代表假假,以非零代表,以非零代表真真,即把一,即把一个非零数值作为个非零数值作为真真。 故其值总是整数故其值总是整数1 1和和0 0,因此也可以把逻辑表达式看成是整型表达式,因此也可以把逻辑表达式看成是整型表达式,亦可参与数值运算。亦可参与数值运算。说明:说明:(1 1)综合运算时相关运算符的优先级:综合运算时相关运算符的优先级:!算术运算符算术运算符关系运算符关系运算符& | & | 赋值运算符赋值运算符高高低低(2
40、 2)由由&和和|的结合性则(自左至右),操的结合性则(自左至右),操作时有:作时有:若若&的左操作数为零,则不再对右操作数进行的左操作数为零,则不再对右操作数进行计算,因为必定为零。计算,因为必定为零。若若|的左操作数为非零,则不再对右操作数进的左操作数为非零,则不再对右操作数进行计算,因为此时必定为行计算,因为此时必定为1 1。设:设:int a=1,b=2; int a=1,b=2; 则表达式则表达式( ( a = 0 ) & ( b = 1 )a = 0 ) & ( b = 1 )操作后结果为:操作后结果为:表达式的值为表达式的值为0 0,且,且a=0, b=2a=0, b=2。常见的
41、逻辑表达式有:常见的逻辑表达式有:ch =ch =& ch =a ach =ch =& ch =A Adigit digit | digit 9 9说明:说明:(1 1)表达式有值与类型的概念,左操作数)表达式有值与类型的概念,左操作数(变量)的值和所属类型,即为该表达式的值(变量)的值和所属类型,即为该表达式的值和类型。和类型。(2 2)类型的赋值转换:若赋值运算符两边类)类型的赋值转换:若赋值运算符两边类型不一致,但都属数值型和字符类型时,则型不一致,但都属数值型和字符类型时,则= =右边的表达式值的类型将自动转换成左右边的表达式值的类型将自动转换成左边变量的类型(即赋值表达式值的类型)。
42、边变量的类型(即赋值表达式值的类型)。(4 4)复合赋值运算符(自反运算符):由)复合赋值运算符(自反运算符):由= =之前加其它双目运算符复合而成。之前加其它双目运算符复合而成。复合赋值运算符组成形式:复合赋值运算符组成形式:双目操作符双目操作符= =由此构成:由此构成:+= -= *= /= %=五种算术运算符= &= = |=五种位运算符说明:说明:(1 1)逗号表达式在语法上相当与一个表达式;)逗号表达式在语法上相当与一个表达式;(2 2)求解过程:先求表达式)求解过程:先求表达式1 1,再求表达式,再求表达式2 2,依次类推;依次类推;(3 3)运算是逐步进行的,注意变量值的变化。)
43、运算是逐步进行的,注意变量值的变化。4+5,7+8 4+5,7+8 逗号表达式的值为:逗号表达式的值为:1515a=3*4, a*5a=3*4, a*5逗号表达式的值为:逗号表达式的值为:6060a=3*4, a*5, a+8a=3*4, a*5, a+8逗号表达式的值为:逗号表达式的值为:2020七、条件表达式:七、条件表达式:条件运算符:条件运算符:? :(三目运算符)(三目运算符)条件表达式:条件表达式:e1 ? e2 : e3e1 ? e2 : e3其中其中 e1,e2,e3 e1,e2,e3 分别代表三个不同的表达式分别代表三个不同的表达式执行情况:执行情况:取取 e2e2 作为该作
44、为该表达式的值表达式的值取取e3e3作为该作为该表达式的值表达式的值e1?e1?非零非零0 0取取 e2e2 作为该作为该表达式的值表达式的值取取e3e3作为该作为该表达式的值表达式的值e1?e1?非零非零0 0 条件表达式简洁、灵活,有广泛的应用。其结果的类型为取e2、e3两者中更为高级的一种。八、类型转换:八、类型转换:(1 1)字符、整型、单精度、双精度量字符、整型、单精度、双精度量可以混合运算。混合运算时类型转换的三种基本规则:可以混合运算。混合运算时类型转换的三种基本规则: 属同一类型,但存属同一类型,但存储单元长度不同之间的储单元长度不同之间的必然转换,短字节向长必然转换,短字节向
45、长字节转换字节转换 整型与浮点数之间整型与浮点数之间的转换,低级向高级转的转换,低级向高级转换。换。 整型量有符号与无整型量有符号与无符号之间的转换和长字符号之间的转换和长字节的转换。节的转换。doublefloatint unsignedlongcharshort例:设例:设int i; float f; double d; long e;int i; float f; double d; long e;10 + 10 + a a + i * f + i * f d / ed / e双双 双双双双 双双 双双双双双双 双双双双双双9797 整整1071079797 整整107107双双 双双
46、双双 双双双双双双运算是逐步完成的,类型转换由系统自动进行。 (2 2)赋值转换赋值转换:其值和类型由赋值运算符左边的变量确定。其值和类型由赋值运算符左边的变量确定。(3 3)强制类型转换:语法形式)强制类型转换:语法形式(类型标识符)表达式(类型标识符)表达式作用:将表达式的值显式地转换成所指定的类型。作用:将表达式的值显式地转换成所指定的类型。例:设例:设int a; float x, y;int a; float x, y;(int)5.3%3(int)5.3%3,sqrt(double)a)sqrt(double)a),(int)(x+y)(int)(x+y)九、长度运算符九、长度运算
47、符语法形式:语法形式:例:例:sizeof(int)sizeof(int)/结果一般为结果一般为4 4sizeof(double) /sizeof(double) /结果一般为结果一般为8 8sizeof(sizeof(类型标识符类型标识符) ) 或或sizeof sizeof 表达式表达式作用:给出其运算对象以字节为单位的存储单元的长度。作用:给出其运算对象以字节为单位的存储单元的长度。十、表达式语句十、表达式语句语法形式:语法形式:例:例:i+i+x=y+1x=y+1/是表达式是表达式printf(printf(“x=%dx=%d n n”,n ) ,n ) /函数调用表达式函数调用表达式
48、表达式表达式 ;表达式语句,即表达式后加分号构成的语句。其中表达式语句,即表达式后加分号构成的语句。其中分号是语句的终结符,是语句的组成部分。分号是语句的终结符,是语句的组成部分。i+;i+;x=y+1x=y+1;/是表达式语句是表达式语句printf(printf(“x=%dx=%d n n”,n ),n );/函数调用语句函数调用语句a=3*4, a*5,a+8a=3*4, a*5,a+8;/逗号表达式语句逗号表达式语句十一、十一、C C语言的运算符、优先级、结合性和运语言的运算符、优先级、结合性和运算对象算对象优优先先级级类类别别运算运算符符含义含义要求运算要求运算对象的个对象的个数数结
49、合结合方向方向1 1初初等等运运算算符符( ) - - . .圆括号圆括号下标运算符下标运算符指向结构体成员运指向结构体成员运算符算符结构体成员运算符结构体成员运算符自自左左至至右右附录附录III III 运算符运算符和和结合性结合性优优先先级级类类别别运算符运算符含义含义要求运算要求运算对象的个对象的个数数结合结合方向方向2 2单单目目运运算算符符! ! +- -( (类型类型) )* *& &sizeofsizeof逻辑非运算符逻辑非运算符按位取反运算符按位取反运算符自增运算符自增运算符自减运算符自减运算符负号运算符负号运算符类型转换运算符类型转换运算符指针运算符指针运算符地址与运算符地址
50、与运算符长度运算符长度运算符(1 1)单目运算单目运算符符自自右右至至左左要求运算对要求运算对象的个数象的个数结合结合方向方向(2 2)双目运算符双目运算符自左自左至右至右(2 2)双目运算符双目运算符自左自左至右至右优优先先级级优优先先级级类类别别类类别别运算运算符符运算运算符符含义含义含义含义3 3 3 3算算术术运运算算符符算算术术运运算算符符* */ /% %* */ /% %乘法运算符乘法运算符除法运算符除法运算符求余运算符求余运算符乘法运算符乘法运算符除法运算符除法运算符求余运算符求余运算符4 4 4 4+ +- -+ +- -加法运算符加法运算符减法运算符减法运算符加法运算符加法
51、运算符减法运算符减法运算符5 5 5 5位位运运算算位位运运算算左移运算符左移运算符右移运算符右移运算符左移运算符左移运算符右移运算符右移运算符(2 2)双目运算符双目运算符自左自左至右至右优优先先级级类类别别运算运算符符含义含义6 6关关系系运运算算 = =小于小于小于等于小于等于大于大于大于等于大于等于7 7=!= =等于等于不等于不等于要求运算要求运算对象的个对象的个数数结合方结合方向向(2 2)双目运算双目运算符符自左自左至右至右自左自左至右至右(2 2)双目运算双目运算符符自左自左至右至右自左自左至右至右优优先先级级类类别别运算运算符符含义含义8 8位位运运算算& &按位与运算符按位
52、与运算符9 9 按位异或运算符按位异或运算符1010| |按位或运算符按位或运算符要求运算要求运算对象的个对象的个数数结合结合方向方向(2 2)双目运算双目运算符符自左自左至右至右(2 2)双目运算双目运算符符自左自左至右至右(2 2)双目运算双目运算符符自左自左至右至右优优先先级级类类别别运算运算符符含义含义1111逻逻辑辑运运算算&逻辑与运算符逻辑与运算符1212|逻辑或运算符逻辑或运算符要求运算要求运算对象的个对象的个数数结合结合方向方向(2 2)双目运算双目运算符符自左自左至右至右(2 2)双目运算双目运算符符自左自左至右至右优优先先级级类类别别运算运算符符含义含义1313条条件件运运
53、算算? :? :条件运算符条件运算符要求运算要求运算对象的个对象的个数数结合结合方向方向(3 3)三目运算三目运算符符自右自右至左至左优优先先级级类类别别运算符运算符1414赋赋值值运运算算符符= += +=- -= *= *=/= %=/= %= = =&= =&= =!=!=1515逗逗号号,含义含义赋值运算符赋值运算符逗号运算符逗号运算符要求运算要求运算对象的个对象的个数数结合结合方向方向(2 2)双目运算双目运算符符自右自右至左至左自左自左至右至右2.6 2.6 输入输出补充输入输出补充介绍介绍getchar(),putchar()getchar(),putchar()的应用,与字符输
54、入输出的应用,与字符输入输出相关概念。相关概念。例例1 1:一个将输入一个将输入( (stdin)stdin)拷贝到输出拷贝到输出( (stdout)stdout)的文件拷贝程序的文件拷贝程序。算法描述:算法描述:读入一个字符读入一个字符while(while(字符不是文件结束标志字符不是文件结束标志) ) 输出刚才读入的字符;输出刚才读入的字符;再读入下一个字符。再读入下一个字符。 完整的程序:完整的程序:# #include include void main()void main()char c;char c;c=getchar();c=getchar();while( c != EOF
55、 )while( c != EOF )putchar(c);putchar(c);c=getchar();c=getchar(); 运行测试结果:abcde12345abcde12345Z# #include include void main()void main()char c;char c;while(c=getchar()!=EOF) putchar(c);while(c=getchar()!=EOF) putchar(c); EOFEOF是文件结束标志。在是文件结束标志。在“stdio.hstdio.h”中有如下定义:中有如下定义:# #define EOF define EOF -
56、 -1 1 程序运行时,程序运行时,getchar()getchar()遇文件结束标志返回值遇文件结束标志返回值- -1 1 ; ; UNIXUNIX系统键盘标准输入文件的结束符号为:系统键盘标准输入文件的结束符号为:CTRL+DCTRL+D ; 微机系统键盘标准输入文件的结束符号为:微机系统键盘标准输入文件的结束符号为:CTRL+ZCTRL+Z ;该程序可优化成如下形式: 键盘输入的是一个字符流,空格是字符,回车也是键盘输入的是一个字符流,空格是字符,回车也是字符,除非使用格式符作数值的转换处理。字符,除非使用格式符作数值的转换处理。 C C表达式高效灵活,在一个表达式中可以完成多种功表达式
57、高效灵活,在一个表达式中可以完成多种功能的运算。这种运算是按算符的优先级和结合方向性,能的运算。这种运算是按算符的优先级和结合方向性,逐步完成的。因此要注意表达式的实际运算次序。逐步完成的。因此要注意表达式的实际运算次序。# #include include void main()void main()char c;char c;while(c=getchar()!=EOF) putchar(c);while(c=getchar()!=EOF) putchar(c); 该程序可优化该程序可优化成如下形式:成如下形式:例例1 1:自顶向下逐步求精的编程方法示例自顶向下逐步求精的编程方法示例为进行
58、交通流量的统计,在路边设置了一个车辆探为进行交通流量的统计,在路边设置了一个车辆探测器,探测器用线路连接到计算机。当有车辆通过时,测器,探测器用线路连接到计算机。当有车辆通过时,探测器传送信号探测器传送信号1 1给计算机;探测器中有一计时器,每给计算机;探测器中有一计时器,每一秒钟发出一个数字信号一秒钟发出一个数字信号2 2传送给计算机,该计算机从传送给计算机,该计算机从开始探测时计时,探测结束时传递一个数字信号开始探测时计时,探测结束时传递一个数字信号0 0给计给计算机,编写程序读入这一系列的信号并输出下列结果:算机,编写程序读入这一系列的信号并输出下列结果: 进行了多长时间的统计调查;进行
59、了多长时间的统计调查; 记录到的车辆数;记录到的车辆数; 在车辆之间最长的时间间隔是多少在车辆之间最长的时间间隔是多少一、数据分析一、数据分析1 1 车辆通过车辆通过输入信号(输入信号(signsign)2 2 秒钟信号秒钟信号0 0 探测结束探测结束进行了多长时间的统计调查(进行了多长时间的统计调查(secondsseconds)记录到的车辆数(记录到的车辆数(numsnums)在车辆之间最长的时间间隔(在车辆之间最长的时间间隔(longestlongest)是多少是多少, ,由此派生出的车辆间隔变量由此派生出的车辆间隔变量(interinter)要求要求输出输出结果结果进行了多长时间的统计
60、调查(进行了多长时间的统计调查(secondsseconds)记录到的车辆数(记录到的车辆数(numsnums)在车辆之间最长的时间间隔(在车辆之间最长的时间间隔(longestlongest)是多少是多少, ,由此派生出的车辆间隔变量由此派生出的车辆间隔变量(interinter)要求要求输出输出结果结果根据以上数据特性,类型都可定义为整型(根据以上数据特性,类型都可定义为整型(intint)二、自顶向下,逐步求精的算法描述过程二、自顶向下,逐步求精的算法描述过程一级算法:一级算法:beging beging 1.1. 数据定义与赋初值数据定义与赋初值2.2. 读入探测信号读入探测信号sig
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 编辑中级职称试题及答案
- 深度解读2025年汽车共享平台运营数据与用户忠诚度提升策略报告
- 2025南航招聘笔试题目及答案
- 积极应变面试题及答案
- 有效团队沟通的商务英语试题及答案
- 教师教育教学反思在政策导向下的调整与适应研究试题及答案
- 电池技术进步对市场的效应试题及答案
- 深入解读2025年创业扶持政策与企业责任的关系试题及答案
- 教育游戏化在儿童教育中的创新应用:2025年教学设计策略与实践探索报告
- 深入探讨音符的组合与构建2025年乐理考试试题及答案
- GA/T 751-2024公安视频图像屏幕显示信息叠加规范
- 2025至2030中国长链氯化石蜡行业供需现状与前景策略研究报告
- 租地盖大棚合同协议
- 自体输血知识培训课件
- 人教A版高一下册必修第二册高中数学8.6.2直线与平面垂直【课件】
- 小学生涯课件
- 西藏拉萨中学2024-2025学年高三第二学期英语试题4月月考试卷含解析
- GB/T 45421-2025城市公共设施非物流用智能储物柜服务规范
- 档案相关法律法规知识复习试题及答案
- 汉语方言与地方文化认同的关系研究论文
- 西北四省(陕西山西青海宁夏)2025届高三下学期第一次联考数学试卷含答案
评论
0/150
提交评论