
C语言程序设计第2章C语言基础.ppt
81页•授课教师:授课教师:•厦门理工学院厦门理工学院 软件学院软件学院C语言程序设计语言程序设计第2章 C语言基础C C 语言程序设计语言程序设计3本章主要内容本章介绍C语言的基础,包括:•C语言使用的合法字符?单词?–字符集–标识符:单词的组成原则,•程序处理的对象是数据–数据类型:数据的存储、参与的运算–数据表现形式:变量和常量–数据操作:运算符和表达式•C语言的语句类型4例如:【例2.1】计算圆的面积,半径为 5 cm 程序如下:main( ){ float r r, , areaarea ; ; r r=5 5 ; ; areaarea=3.143.14*r r*r r; ; printf ("%f\n ", areaarea) ; }运算结果是输出运算结果是输出运算结果是输出运算结果是输出圆的面积:圆的面积:圆的面积:圆的面积:78.50000078.500000程序中用到的数据:程序中用到的数据:r、、area、、5、、3.14对数据进行的运算:对数据进行的运算:* 、、=数据的名称是标识符数据的名称是标识符例例jc2_15分析:计算机操作处理时,要表示各种处理的对象•出现在程序的符号和字符可以使用英文字母吗? 可以使用中文字符吗?– 合法的字符集合•半径用 r表示 ,面积 用 area 表示。
对象可以取什么样的名称?– 标识符: 可以用作各种对象的名字涉及涉及C语言最语言最基本组成基本组成6分析:计算机操作处理时,首先要解决数据的存放:•事先要在内存中给半径 r 和运算结果 area 开辟存储空间,存放它们的值应该留多大的地方来存放它们的值?•数据 5 和 3.14 与 r 、area 不同,它们是在编写程序时就给出确定的值,在运算过程中不会改变这样的数计算机怎么处理?•对整数 5 和小数3.14 ,计算机存放时是否有区别?涉及数据类型涉及数据类型的基本知识的基本知识72.1 C程序的符号系统•主要内容:–基本字符–标识符82.1.1 基本字符 •大写英文字母:A B C …… X Y Z •小写英文字母:a b c …… x y z •数字:0 1 2 …… 9 •空白符:空格符、换行符、制表符 •特殊字符:+ - * / < > ( ) [ ] { } _ = ! # % . , ; : ‘ “ | & ? $ ^ \ ~ 92.1.2 标识符 •由字母、下划线和数字组成的字符序列•用于程序中的变量、符号常量、数组、函数、数据类型等操作对象的名字1 1.系统定义标识符.系统定义标识符––具有固定名字和特定含义的标识符具有固定名字和特定含义的标识符––分为分为关键字关键字和和预定义标识符预定义标识符 2 2.用户定义标识符.用户定义标识符 ––用于对用户使用的变量、数组、函数用于对用户使用的变量、数组、函数等操作对象进行命名等操作对象进行命名 10关键字 •数据类型:数据类型: intint、、charchar、、floatfloat、、doubledouble、、shortshort、、longlong、、voidvoid、、signedsigned、、unsignedunsigned、、enumenum、、structstruct、、unionunion、、constconst、、typedeftypedef、、volatilevolatile •存储类别:存储类别:autoauto、、staticstatic、、registerregister、、externextern •语句命令字:语句命令字:breakbreak、、casecase、、continuecontinue、、defaultdefault、、dodo、、elseelse、、forfor、、gotogoto、、if if、、returnreturn、、switchswitch、、whilewhile •运算符:运算符:sizeofsizeof 11预定义标识符•系统标准库函数scanf、printf、putchar、getchar、strcpy、strcmp、sqrt等•编译预备处理命令include、define等12对标识符的规定 •用户定义标识符–必须以字母或下划线“_”开头–不能含有除字母、数字和下划线“_”外的其他字符–标识符中大小写字母含义不同•关键字必须用小写字母。
不允许使用关键字为变量、数组、函数等操作对象命名•预定义标识符允许用户对它们重新定义,当重新定义后将改变它们原来的含义13正确区分标识符•正确区分哪些是合法标识符,哪些是不合法标识符其中合法标识符中哪些是关键字,哪些是预定义标识符,哪些是用户定义标识符Abc define 2x double studentm+y a# b-4 _1 Whileint let x%y name doπ wtm Ctrl swicth include 142.2 C语言的数据类型 C数据类型数组类型数组类型结构体类型结构体类型共用体类型共用体类型枚举类型枚举类型整型整型整型整型 字符型字符型字符型字符型 实实实实型型型型( (浮浮浮浮点点点点型型型型) ) 空类型空类型空类型空类型单精度型单精度型单精度型单精度型 双精度型双精度型双精度型双精度型 基本类型基本类型基本类型基本类型指针类型指针类型构造类型构造类型本章讨论本章讨论本章讨论本章讨论基本类型数据基本类型数据基本类型数据基本类型数据152.2.1 整型数据 1.整型数据的类型–基本整型数据 int ,分配 4 Byte–短整型数据 short int,分配 2 Byte–长整型数据 long int,分配 4 Byte整型数据均以二进制补码形式存储问题:问题:为什么要采用补码?为什么要采用补码?如何表示?如何表示?16计算机中正、负数的表示 例如:109 =(1101101)2要区别:+109 和 -109 方法是:将符号也数码化即:正的符号 +用 0 表示 负的符号 -用 1 表示 ∴∴ 计算机中的数表示方法是:计算机中的数表示方法是: 符号位符号位++二进制数值二进制数值(以以 8bit 为例为例) ++109 → ++110 1101 → 0110 1101--109 → --110 1101 → 1110 110117问题:计算机计算复杂化例如计算: (-19)+(+22)1001 0011 + 0001 0110解决的方法是:解决的方法是: 使用使用补码补码的表示方法能将减法一律转的表示方法能将减法一律转换为加法。
换为加法 需要判断符号是否相同:需要判断符号是否相同:·如果相同,结果符号不变,并进行绝对值相加如果相同,结果符号不变,并进行绝对值相加如果相同,结果符号不变,并进行绝对值相加如果相同,结果符号不变,并进行绝对值相加·如果不同,结果取绝对值大的数的符号,并进如果不同,结果取绝对值大的数的符号,并进如果不同,结果取绝对值大的数的符号,并进如果不同,结果取绝对值大的数的符号,并进行绝对值相减行绝对值相减行绝对值相减行绝对值相减18整型数据的类型及规定•方括号表示可选项•short 分配2 Byte,int、 long分配4 Byte类型名称类型名称类型符类型符bitbit取值范围取值范围( (短整型短整型) )[ [signed] signed] shortshort [int] [int] 1616- -2 21515~~2 21515-1-1(-32768(-32768~~32767 )32767 )无符号短整型无符号短整型unsigned shortunsigned short [int] [int]16160 0 ~~2 21616-1-1(0(0~~65535 )65535 )整型整型长整型长整型[ [signed] signed] int int [ [signed] signed] longlong [int] [int]3232-2-23131~~2 23131- 1- 1无符号整型无无符号整型无符号长整型符号长整型unsigned unsigned [int][int]unsigned longunsigned long [int] [int]32320 0 ~~2 23232-1-119说明1. 有符号和无符号整型数据–有符号的整型数据 signed short–无符号的整型数据 unsigned short区别是将最高位看作符号位还是数据位例如:例如: 1111 1111 1010 1000•作为作为有符号数有符号数使用时,最高为符号位使用时,最高为符号位为负数,值是:为负数,值是:- 88(再求一次补)(再求一次补)•作为作为无符号数无符号数使用时,最高为数据位使用时,最高为数据位为无符号的数,值是:为无符号的数,值是:6544820例如:main( ){ unsigned short int m; m= 6544865448; printf("\nm=%%d d\n",m); printf("m=%%u u\n",m); cout << m << " :"<<(short int)m << endl; }输出结果:输出结果: m=65448m=6544865448 : -88按有符号数输出按有符号数输出按无符号数输出按无符号数输出21说明2:整数溢出问题:超出范围系统为系统为short short 型数型数分配的存储空间为分配的存储空间为: : 16 16 bit bit (2Byte)(2Byte) =2=21515-1=32767-1=327670 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0问题:上数再加问题:上数再加问题:上数再加问题:上数再加1 1是多少?是多少?是多少?是多少?=-2=-21515=-32768=-32768表示范围:表示范围:-32768 -32768 ~ 3276732767使用中注意数的范围使用中注意数的范围有符号有符号有符号有符号shortshort型整数的最型整数的最型整数的最型整数的最大大值值值值有符号有符号有符号有符号shortshort型整数的最型整数的最型整数的最型整数的最小小值值值值22例如:void main( ){ short int a,b; a= 3276732767; b=a+1; printf(“a=%d\nb=%d\n“,a,b);}输出结果:输出结果: a =m=32767-32768232.2.2 实型数据 1.实型数据的类型 –单精度实型数据 float,分配4 Byte–双精度实型数据double,分配 8 Byte2.实型数据的存储 单精度实型单精度实型单精度实型单精度实型指数部分指数部分指数部分指数部分小数部分小数部分小数部分小数部分 小数的符号位小数的符号位指数的符号位指数的符号位24实型数据的类型及规定 • •C C标准并未具体规定各种实型数据所占字节数,也不规标准并未具体规定各种实型数据所占字节数,也不规定具体小数和指数部分的位数。
定具体小数和指数部分的位数• •一般而言,小数部分位数多,数据表示的有效数字多,一般而言,小数部分位数多,数据表示的有效数字多,精度就高;而指数部分位数多,则表示的数据范围更大精度就高;而指数部分位数多,则表示的数据范围更大有效数字的意义?有效数字的意义?类型类型类型符类型符ByteByte绝对值的范围绝对值的范围有效数字有效数字单精度型单精度型 floatfloat4 41010-37 -37 ~ 10~ 1038387 7~~8 8 位位双精度型双精度型 doubledouble8 81010-307 -307 ~10~103083081515~~1616位位25例如:void main( ){ float x=12345.54321; double y=445566778899.987654321; printf(“x=%f\ny=%f\n“,a,b);}输出结果:输出结果: x=y=有效数字的具体含义有效数字的具体含义12345.54296912345.542969445566778899.987670445566778899.987670262.1.3 字符型数据 •字符型数据char,分配 1 Byte •字符型数据是指字母、数字、各种符号等用ASCII值表示的字符•例如 'a' 是一个char类型数据,称作字符常量,存储:0 1 1 0 0 0 0 1最高位为最高位为0272.1.4 空类型(void) •通常与指针或函数结合使用eg. void main() {} 282.3 常量、变量•主要内容:–常量–变量292.3.1 常量 •在运行程序的过程中值保持不变的量1.整型常量 –十进制十进制::0~90~9–八进制八进制::0~70~7,以,以 0 0开头开头–十六进制十六进制::0~90~9,,A~F/A~F/a~fa~f,,以以 0 0x x或或 0 0X X 开头开头例如:例如:100 -8 0 +123100 -8 0 +123010 024 0100 073010 024 0100 0730 0x38 0x10 x38 0x10 0X100X10 0XFF 0x0a 0XFF 0x0a301. 整型常量注意:注意:l l十六进制常量中可以使用大写字母十六进制常量中可以使用大写字母A~~F,,也可以使用小写字母也可以使用小写字母a~~f。
l l八进制常量中不能出现数字八进制常量中不能出现数字 8 或或 9例如:例如:018、、0921非法非法•可以表示成8进制,10进制和16进制31说明. 整型常量的类型•根据值大小默认类型•int a = 5; int a = 5; •long a=5;long a=5;•short b=32768;short b=32768;32说明. 整型常量的类型•整型常量后面加l或L,则认为是long int型 例如:123L、0L、432l、0x100l•整型常量后面加u或U,则认为是unsigned型 例如:15u、234u、 017u、0123u 0xFu、0xACu 15Lu、543Lu332. 实型常量 –十进制形式十进制形式 1.0 1. +12.0 -12.0 0.0–指数形式指数形式 1e3 1.8e-3 -123E-6 -.1E-3等价于:等价于:等价于:等价于:1×101×103 3 1.8×10 1.8×10-3-3 - - - -123×10123×10-6-6 - - - -0.1×100.1×10-3-3•指数只能是整数,而尾数则可以是整数也可以是指数只能是整数,而尾数则可以是整数也可以是小数小数 ,无论指数或尾数均不能省略,无论指数或尾数均不能省略例如:例如:1 1e e、、、、E.5E.5、、、、E-3E-3 非法非法•实型常量的类型:默认为实型常量的类型:默认为doubledouble型,后面加型,后面加F F((或或f f),),则强调表示该数是则强调表示该数是float类型类型例如:例如:3.5f f、、1e2F F 343. 字符型常量 •可视字符常量可视字符常量 –单引号括起来的单个可视字符单引号括起来的单个可视字符例如:例如:' 'a' a'、、'A'A' ' 、、'+' '+' 、、'3''3'、、' ' ' ' 等等 •转义字符常量转义字符常量–单引号括起来的单引号括起来的 \ \ 与与可视字符可视字符组合,例如:组合,例如:\0\0字符串结束标志字符串结束标志\ \n n回车换行回车换行\ \t t跳到下一个输出位置跳到下一个输出位置\" \"双引号字符双引号字符\ \dddddddddddd为为1 1到到3 3位八进制数所代表的字符位八进制数所代表的字符\ \xhhxhhhhhh为为1 1到到2 2位十六进制数所代表的字符位十六进制数所代表的字符例例例例ex2_4ex2_4ex2_4ex2_4354. 字符串常量 •用双引号括起的一个字符序列–例如:"ABC"、"123"、"a"、 "\n\tn\t " " "\nGoodnGood morning" morning"•字符串常量的长度 :–所包含的字符个数 •字符串常量的存储方式: \ \n nG G o o o o d dmm o or rn ni i n n g g \0\0a a\0\0所占存储单元数:所占存储单元数:串长度+串长度+1例如:例如:字符串字符串结束标记结束标记36说明 字符串常量与字符常量 字符串字符标志“”‘’长度多个字符单个字符内存字符个数+11个字节变量无字符串变量有字符变量转义字符 支持, 特别\”支持,特别\’375. 符号常量 •以标识符来代表的常量以标识符来代表的常量•事先编译预处理命令事先编译预处理命令definedefine定义定义•编译时先由系统替换为它所代表的常量,再进行编译时先由系统替换为它所代表的常量,再进行编译编译例如:例如: # #define define LENLEN 2.52.5main( )main( ){ float a,b;{ float a,b; a= 2*3.14 * a= 2*3.14 *LENLEN; ; b=3.14* b=3.14*LENLEN* *LENLEN; ; printf("a=%f,b=%f\n",a,b); printf("a=%f,b=%f\n",a,b);} }定义符号常量定义符号常量定义符号常量定义符号常量使用符号常量使用符号常量使用符号常量使用符号常量编译前系统进行替换编译前系统进行替换编译前系统进行替换编译前系统进行替换385. 符号常量main( ){ float a,b; a= 2*3.14 *2.5; b=3.14*2.5*2.5; printf("a=%f, b=%f\n",a,b);}•define是编译预处理命令,必须以是编译预处理命令,必须以“#”开开头头•编译预处理命令在后续章节会继续讨论。
编译预处理命令在后续章节会继续讨论替换为替换为替换为替换为392.3.2 变量 1. 变量的有关概念•在程序运行过程中,其值改变的数据,称为变量,变量用标识符表示,称为变量名•变量必须“先定义后使用”•系统为变量分配存储单元,存储变量的值 •编写程序时通过变量名来存、取变量值a a510510变量值变量值变量值变量值为变量分配的为变量分配的为变量分配的为变量分配的存储单元存储单元存储单元存储单元变量名变量名变量名变量名例如:例如:有有变量变量a a它的值是它的值是5 51010402. 变量定义变量定义的一般格式: 数据类型说明符 变量列表;例如:int i, j; long k, m; float x,yx,y; ; char ch1,ch2;•变量名:变量名:•必须使用合法的标识符作变量名必须使用合法的标识符作变量名•不能使用关键字为变量命名不能使用关键字为变量命名多个变量之间用,分隔多个变量之间用,分隔多个变量之间用,分隔多个变量之间用,分隔变量必须先定义后使用变量必须先定义后使用变量必须先定义后使用变量必须先定义后使用41说明: 变量定义注意事项•多个变量之间用,分隔•变量必须先定义后使用•int i,j; i = j = 1;•int i, int j;•int a; b=10;√ √× ×× ×423. 变量的初始化: 允许在说明变量的时候对变量赋初值。
例如:int a=5,b=10+2; double x=23.568,y ; char ch1='a',ch2=66,ch3='\142'; 表示定义变量并对变量存储单元赋值错误的初始化: int a=3+b,b=5; float m=n=23.16; 432.4 运算符和表达式•主要内容:–算术运算符和算术表达式–赋值运算符和赋值表达式–关系运算符和关系表达式–逻辑运算符和逻辑表达式–位运算符和位运算表达式–条件运算符和条件表达式–逗号运算符和逗号表达式–其他运算符及其运算44运算符的有关概念•作用:–对运算对象完成规定的操作运算•类型:–按运算对象分:•单目、双目、三目单目、双目、三目–按功能分:•算术、赋值、关系、逻辑算术、赋值、关系、逻辑•条件、逗号、位、其他条件、逗号、位、其他45运算符的优先级和结合性•优先级–指各种运算符号的运算优先顺序指各种运算符号的运算优先顺序例如:例如:算术运算优先于关系运算算术运算优先于关系运算 算术运算中先算术运算中先 * / * / 后后 + - + -l l结合性结合性– –指运算符号和运算对象的结合方向指运算符号和运算对象的结合方向指运算符号和运算对象的结合方向指运算符号和运算对象的结合方向– –分为:从左向右分为:从左向右分为:从左向右分为:从左向右( (左结合左结合左结合左结合) )和从右向左和从右向左和从右向左和从右向左( (右结合右结合右结合右结合) )例如:例如:例如:例如:算术运算符为算术运算符为算术运算符为算术运算符为左结合左结合左结合左结合 a-ba-b+ +4 4 赋值运算符为赋值运算符为赋值运算符为赋值运算符为右结合右结合右结合右结合 a= b = 5a= b = 5(((( C C语言规定见教材语言规定见教材语言规定见教材语言规定见教材 附录附录附录附录))))46本章涉及的运算符+ - * / % + - * / % ++ -- + -++ -- + -= += -= *= /= %== += -= *= /= %=&= |= ^= >>= <<=&= |= ^= >>= <<= > < >= <= == != > < >= <= == != && || && || ! !& | ^ & | ^ ~ ~ << >> << >>?:?:, ,& & sizeofsizeof ( (数据类型标识符数据类型标识符) )类型类型种类种类算术运算符算术运算符赋值运算符赋值运算符关系运算符关系运算符逻辑运算符逻辑运算符位运算符位运算符条件运算符条件运算符逗号运算符逗号运算符其他运算符其他运算符47表达式的有关概念•什么是表达式–由运算符将运算对象连接成的式子,它描述了一个具体的求值运算过程。
•计算表达式的值–按照运算符的运算规则求值–求值时注意运算符的优先级和结合性•表达式值的类型–自动转换–强制转换 48算术运算•算术运算符的优先级 ( ) + - ++ -- * / % + - 同级 同级 同级 单目单目 双目双目 高高高高 低低低低l l没有乘方运算符没有乘方运算符没有乘方运算符没有乘方运算符,要计算,要计算,要计算,要计算a a3 3要写作要写作要写作要写作 a*a*a a*a*a 的连乘,的连乘,的连乘,的连乘,或用标准库函数或用标准库函数或用标准库函数或用标准库函数 pow(apow(a, 3), 3)l l “ “/ /” ”的运算对象可为各种类型数据,但是当进行两的运算对象可为各种类型数据,但是当进行两的运算对象可为各种类型数据,但是当进行两的运算对象可为各种类型数据,但是当进行两个整型数据相除时,运算结果也是整型数据个整型数据相除时,运算结果也是整型数据个整型数据相除时,运算结果也是整型数据个整型数据相除时,运算结果也是整型数据 l l“ “%%” ”要求运算对象必须是整型数据,功能是求两要求运算对象必须是整型数据,功能是求两要求运算对象必须是整型数据,功能是求两要求运算对象必须是整型数据,功能是求两数相除的余数,余数的符号与被除数的符号相同。
数相除的余数,余数的符号与被除数的符号相同数相除的余数,余数的符号与被除数的符号相同数相除的余数,余数的符号与被除数的符号相同 例例例例ex2_8ex2_8ex2_8ex2_849自增自减运算•++ --是单目运算符•有前缀和后缀两种形式 –前缀形式: 先自增(自减)再引用;–后缀形式: 先引用再自增(自减);•功能: 前缀形式 ++ a 等价于 a = a + 1 -- a 等价于 a = a – 1 后缀形式 a ++ 等价于 a = a + 1 a -- 等价于 a = a – 1表达式的值会不同表达式的值会不同50例如:当 a=5 时⑴ ++a 表达式的值为 6,且 a=6 ⑵ a++ 表达式的值为5 ,且 a=6⑶ b=++a 等价于 a=a+1; b=a 表达式的值为6,且 a=6, b=6⑷ b=a++ 等价于 b=a; a=a+1 表达式的值为5,且 a=6, b=5 例例例例ex2_9ex2_9ex2_9ex2_951说明:•++++ 和和 -- -- 的运算对象只能是变量(或运算结果是变量的运算对象只能是变量(或运算结果是变量的表达式)的表达式), , 不能是常量(或运算结果是数值的表达不能是常量(或运算结果是数值的表达式)。
式) 例如:例如: 5++5++、、( (a+2)++a+2)++ 不合法 •具有右结合性,结合方向为从右到左具有右结合性,结合方向为从右到左例如:例如: – –a++a++ 等价于等价于 -( -(a++)a++) •如果有多个运算符连续出现时,如果有多个运算符连续出现时,C C系统尽可能多的从系统尽可能多的从左到右将字符组合成一个运算符左到右将字符组合成一个运算符例如:例如: i +++ ji +++ j 等价于等价于 ( ( i++)+ji++)+j - -i+++-ji+++-j 等价于等价于 -( -(i++)+(-ji++)+(-j) ) 例例例例ex2_8ex2_8ex2_8ex2_852赋值运算•赋值运算符(右结合) = += -= *= /= %= &= |= ^= >>= <<= •赋值表达式–将表达式的值存入变量对应的内存单元中m=12b=(++a)-2 m%=3+n 等价于 m=m%(3+n) x *= (x = 5)53说明:•赋值号左边必须是变量,右边可以是C语言任意合法的表达式例如:n= t +210 等价于:a= (b=( (b*c)>10) )•赋值号与数学中的等号含义不同例如:数学中 a=b 等价于 b=a C语言中 a=b 不等价于 b=a54赋值表达式的转换规则•实型 赋给 整型变量整数部分赋给整型变量,舍去小数部分int x; x = 6.89; 后 x=•整型 赋给 实型 例如: float x; x=6; 后 x = •赋值号与数学中的等号含义不同例如:数学中 a=b 等价于 b=a C语言中 a=b 不等价于 b=a6 66.06.0根据左值确定表达式的类型,右边精度高,根据左值确定表达式的类型,右边精度高,会丢失一部分数据会丢失一部分数据55关系运算•关系运算符关系运算符 ( (左结合)左结合) > >= < <=> >= < <= == !=== != 较高较高 较低较低•关系表达式关系表达式–用关系运算符将运算对象连接成的式子用关系运算符将运算对象连接成的式子 例如:例如:1212< < 'C''C'+ +1 1 ((字符型数据比较字符型数据比较ASCIIASCII值)值) a a====b b>=>=c c 等价于等价于 a == ( b>=c )a == ( b>=c ) 与与 ( (a==b)>=c a==b)>=c 不等价不等价•关系运算符优先于赋值,低于算术关系运算符优先于赋值,低于算术56说明:•关系运算的结果应该是逻辑值。
C语言用数值用 1 表示逻辑真, 0 表示逻辑假例如: 7>5 的值是 1,5>7 的值是 0 'a'>'b'的值是 0, 'a'<'b' 的值是1即关系表达式的值:0 或1 •关系运算符两边的运算对象的数据类型不同时,系统自动转换成相同数据类型后再进行运算(转换规则后面介绍)57说明:•关系表达式中含有多个关系运算符时,注意与数学式的区别例如: 6>x>0数学式:表示x的值在0到6之间关系表达式:表示6与x的比较结果(0或1)再与0比较 •实型数可进行大于或小于比较,但通常不进行 == 或 != 的关系运算float x,y; x=y=1.25; fabs(x-y)<1e-5 58逻辑运算符•逻辑运算符 && || ! •逻辑运算符的运算规则 运算对象逻辑运算结果aba&&ba || b!a非0非0110非000100非00110000159逻辑表达式•逻辑表达式–用逻辑运算符将运算对象连接成的式子 例如:0&&'b' a &&b || c&&dc&&d a || b-5 || c/4 !x+y >= z >= z •逻辑运算符的优先级 和结合性:–!是单目运算符,右结合,高于算术–&& 和 || 是双目运算符,左结合,高于赋值运算符,低于关系运算符60逻辑运算规则•从左到右依次进行逻辑计算–运算对象为非0表示逻辑真–运算对象为 0 表示逻辑假•逻辑运算的结果为 0 或 1例如设:a=15,b=0,c=-2 a && b && c 结果为0 a || b || c 结果为1 (a+c) || b && c ) || b && c 结果为结果为1 161逻辑运算规则(续)•运算按照从左至右的顺序进行,一旦能够确定逻辑表达式的值,就立即结束运算——逻辑运算的短路性质例如设:a=1,b=0,c=-2a && b && c(a++) || ++ b&& --c为为 0,运算终止,表达式,运算终止,表达式值值为为 0为非为非0,运算终止,表达式值为,运算终止,表达式值为 1且且a为为2,,b为为0,,c为为-2 (b,c保持原值保持原值)62关系与逻辑运算符的应用•表示数学公式a>b>c •判断a, b, c三条线段能否组成一个三角形 •a, b不同时为负 a+b>c && a+c>b && b+c>aa>=0 || b>=0!(a<0 && b<0) ( (a<0&&b>=0)||(a>=0&&b<0)||(a>=0&&b>=0)a<0&&b>=0)||(a>=0&&b<0)||(a>=0&&b>=0)a>b && b>c63位运算•有兴趣自学•不要求64条件运算符和条件表达式•条件运算符:? :•条件表达式的一般形式 表达式1 ? 表达式2 : 表达式3例如:m
例如:例如:w
只起说明作用,不产生可执行的机器指令代码 例如:例如:int a,b; float function( int, int);C C程序由函数组成函数的格式:程序由函数组成函数的格式:程序由函数组成函数的格式:程序由函数组成函数的格式:函数名(参数表)函数名(参数表)函数名(参数表)函数名(参数表){ { 说明部分;说明部分;说明部分;说明部分; 执行部分;执行部分;执行部分;执行部分;} }数据类型说明语句数据类型说明语句可执行语句可执行语句77/41•表达式后面加一个分号,构成表达式语句x=3; y=y+5; x=a-b && c || d ; printf("x=%d, y=%=%d, y=%d\n",x,yd\n",x,y); ); sort(a,10); 2 表达式语句 赋值语句赋值语句函数调用语句函数调用语句l l注意:注意: ①①①① 分号是语句必不可少的一部分分号是语句必不可少的一部分分号是语句必不可少的一部分分号是语句必不可少的一部分②②②② 单独的一个分号单独的一个分号单独的一个分号单独的一个分号“ “; ;” ” 构成一个空语句构成一个空语句构成一个空语句构成一个空语句例如:例如:例如:例如:;;;;(空语句,是最简单的(空语句,是最简单的(空语句,是最简单的(空语句,是最简单的C C语句)语句)语句)语句)78/413 控制语句1.选择分支控制语句 if ( ) …else … switch ( ) { … } 2.循环控制语句 for ( ) … while ( ) …do … while ( )3.其他控制语句 break、continue、gotoreturn79/414 复合语句 •用一对花括号“{}”括起来的若干条语句 •花括号中可以是说明语句、表达式语句、控制语句,也可以是复合语句例如:例如:⑴⑴ if (a>b) { max=a; min=b; } ⑵⑵ for(n=1; n<10 ;n++) { p = n + p; if( p >= 100 ) { printf(“%%d\n”, p); break; } }80/414 复合语句(续)•复合语句中如果有说明性语句,应该写在可执行语句的前面例如:例如: main( ) { int a,b; a=b=100; { float c=10.23; printf("%f\n",c); } printf("%d %d\n",a,b); }要特别注意:要特别注意:l l花括号的配对花括号的配对l l花括号的位置花括号的位置C C C C语言学习语言学习语言学习语言学习的难点之的难点之的难点之的难点之一一一一812.7 案例分析【案例】数字金额转换为大写金额问题:•输入的金额,数据类型为实数。
•输出的金额是中文字符组成的字符串运行ex2_14。












