资源预览内容
第1页 / 共81页
第2页 / 共81页
第3页 / 共81页
第4页 / 共81页
第5页 / 共81页
第6页 / 共81页
第7页 / 共81页
第8页 / 共81页
第9页 / 共81页
第10页 / 共81页
亲,该文档总共81页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
C语言程序设计数据类型、运算符、表达式及简单数据类型、运算符、表达式及简单的输入输出函数的输入输出函数第四章第四章第四章第四章数据类型、运算符、表达式及简单的输入输出函数数据类型、运算符、表达式及简单的输入输出函数数据类型数据类型常量常量变量变量运算运算和运算和运算符符运算表达式运算表达式简单的输入输出函数简单的输入输出函数 字符集:编程可使用的字符字符集:编程可使用的字符字符集:编程可使用的字符字符集:编程可使用的字符C C语言程序的基本标识符语言程序的基本标识符语言程序的基本标识符语言程序的基本标识符l英文字母英文字母 a a z,A Z;l阿拉伯数字阿拉伯数字 0 0 9;l特殊符号特殊符号 (!%*:;!%*:;?/ /以及空格、换行等)以及空格、换行等)12cd, $123,#11, M.D.Ritchie。这里所表示的标识符都是错误的。这里所表示的标识符都是错误的。错:错:标识符:标识符:标识符规定:标识符规定:例:例:sun,day,month,student_name, c1string_2。1. 标识符由字母标识符由字母、下划线下划线、数字三种字符组成,且数字三种字符组成,且第一个字符必须是字母或者下划线。第一个字符必须是字母或者下划线。 + * . 汉字等汉字等均不能出现。均不能出现。 2. 字母区分大小写;字母区分大小写;3. 标识符不能是关键字。标识符不能是关键字。用来标明变量名用来标明变量名、函数名函数名、数组名数组名、结构体名结构体名、文件、文件名、类型名名、类型名等的符识。标识符就是有效字符的序列,等的符识。标识符就是有效字符的序列,一个名字。一个名字。用英文!用英文!l保留字(关键字)(见书保留字(关键字)(见书P43 P43 表表4-1 C4-1 C语言的保留字)语言的保留字)l预定义标识符预定义标识符( (库函数名,如:库函数名,如:stdiostdio;预编译命令,如:;预编译命令,如:include)include)l用户定义标识符用户定义标识符4.2 数据类型数据类型整型整型实型实型(浮点型)字符型字符型(字符串)枚举型单精度型单精度型双精度型双精度型数组类型数组类型结构体类型结构体类型共同体类型共同体类型基本类型基本类型构造类型构造类型指针类型指针类型数组数组类型相同的数据集合类型相同的数据集合常量形式常量形式变量形式变量形式结构体结构体类型不同的数据集合类型不同的数据集合 按进制分类:按进制分类: 十进制。例:十进制。例:10 , 35, -1289。 八进制,以八进制,以 0 开头。开头。 例:例:010(o是字母是字母)。对应十进制。对应十进制 8 十六进制,以十六进制,以 0x 开头。例:开头。例:0x10。 对应十进制对应十进制 16 按字节长度分类:按字节长度分类: 短型短型 2个字节。个字节。 长型长型 4个字节。长型常量后加字母个字节。长型常量后加字母L。 例:例:15L , 0x10, 010。程序运行中数值不改变的量程序运行中数值不改变的量 十进制数形式,由数字和小数点组成。十进制数形式,由数字和小数点组成。 例:例:1. 3415926 指数形式指数形式, 由尾数、字母由尾数、字母e或或E和指数组成。和指数组成。 例:例:1E3 表示表示: 1乘乘10的三次方(的三次方(1 103)。)。4.3 常量常量返回1、整型数、整型数2、实型、实型(浮点数浮点数)数数字符常量字符常量3、字字符型数据符型数据字符串常量字符串常量转义字符转义字符即普通字符用单引号括起来。即普通字符用单引号括起来。在在C语言中,字语言中,字符型数据符型数据是用是用ASCII码来表示码来表示(储存)的。储存)的。 例:例:A (65),a (97)。在在C语言中,字语言中,字符型数据与整型数据可通用:符型数据与整型数据可通用:10+R即一串普通字符用双引号括起来。即一串普通字符用双引号括起来。 例:例:“ Turbo C ”,“ China ”。以以“ ”开头的字符表示特定的含义。开头的字符表示特定的含义。此时字符转变为另外的意义。此时字符转变为另外的意义。 例:例: n 表示回车表示回车换行换行 , r 表示回表示回车。车。(1)数)数(2)字符常量)字符常量(3)字符串常量)字符串常量A和和 “A”不相同不相同!小小 结结注注意意用用“”包围的一个或多个字符包围的一个或多个字符 ,如,如 :“ hello”单一字符,用单一字符,用 包围,包围, 如:如:A,8类类 型型 进进 制制 表表 示示 范范 围围整型数整型数 八、八、 十、十六十、十六 015, 15, 0x15 -215 215-1长整型数长整型数 八、八、 十、十六十、十六 015L, 15L, 0x15L -231 231-1实型数实型数 十十 123.5, 1.235e+2 10-381038(4)特殊的字符常量)特殊的字符常量(转义字符) 后跟一个字符或一个数字,表示控制代码和用于后跟一个字符或一个数字,表示控制代码和用于功能定义的字符功能定义的字符 如如:字符字符 功能功能 n 回车换行回车换行 r 回车回车 t 水平制表水平制表 b 退格退格 v 垂直制表垂直制表 f 换页换页 a 响铃警报响铃警报 “ 双引号字符双引号字符 101 A x41 A符号常量符号常量对常量命名,即用符号代替常量;对常量命名,即用符号代替常量;先定义后使用;先定义后使用;格式:格式: #define 符号常量符号常量 常量常量 例:例: #define PI 3.1415926宏定义,不用分号;宏定义,不用分号;好处:好处:1. 增强可读性增强可读性 2. 可维护性,避免多处修改(如:求周长,体积)。可维护性,避免多处修改(如:求周长,体积)。 常量与变量常量的本质常量的本质不占据任何存储空间不占据任何存储空间属于指令的一部分,编译后不再更改属于指令的一部分,编译后不再更改变量:程序运行时可以随时改变变量:程序运行时可以随时改变定义变量时,给变量分配存储单元(如:一个字节),如宿舍定义变量时,给变量分配存储单元(如:一个字节),如宿舍号码对应一个房间,变量名对应一段存储空间。号码对应一个房间,变量名对应一段存储空间。通过变量对内存修改、存取;对变量的存取就是对存储单元的通过变量对内存修改、存取;对变量的存取就是对存储单元的存取。存取。要先定义变量的类型,决定占用的内存空间,才能存取。要先定义变量的类型,决定占用的内存空间,才能存取。 2.3.1 变量的数据类型变量的数据类型 2.3.2 变量的使用变量的使用 2.3.3 变量数据的存储与读取变量数据的存储与读取 2.3.4 其它变量其它变量2.3 变量变量返回12cd, $123,#11, M.D.Ritchie。这里所表示的标识符都是错误的。这里所表示的标识符都是错误的。错:错:变量:变量:变量名:变量名:标识符:标识符:标识符规定:标识符规定:例:例:sun,day,month,student_name, c1string_2。用来标明变量名用来标明变量名、函数名函数名、数组名数组名、结构体名结构体名、文件名、类、文件名、类型名型名等的符识。等的符识。名字。英文!名字。英文!变量的名字。用标识符标识变量名。变量的名字。用标识符标识变量名。程序运行中其值改变的量。程序运行中其值改变的量。标识符由字母(区分大小写)标识符由字母(区分大小写)、下划线下划线、数字三种字符数字三种字符组成,且第一个字符必须是字母或者下划线。组成,且第一个字符必须是字母或者下划线。书书P5,表,表1-2,C语言的语言的31个保留字。个保留字。1、整型变量:、整型变量:表示整型数据(整数)的变量表示整型数据(整数)的变量。2、实型变量:、实型变量:2.3.1 变量的数据类型变量的数据类型 1)按照存储空间分三种(限制了表达范围):)按照存储空间分三种(限制了表达范围): 基本型基本型: int 变量名变量名 2个字节。个字节。 短整型短整型: short int 变量名变量名 2个字节。个字节。 长整型长整型: long int 变量名变量名 4个字节。个字节。 2)符号(正负号)符号(正负号) : int变量名变量名 无符号型无符号型: unsigned short int 变量名变量名 long int 变量名变量名表示实型数据(实数)的变量。表示实型数据(实数)的变量。单精度型:单精度型:float 变量名变量名 4个字节。个字节。双精度型:双精度型:double 变量名变量名 8个字节。个字节。3、字符型变量:、字符型变量:4、字符串数组:、字符串数组:表示字符型数据的变量。表示字符型数据的变量。 char 变量名变量名 1个字节个字节 。表示字符串型数据的数组。表示字符串型数据的数组。 char 变量名变量名 下标下标 字符串数组:是一个地址量。字符串数字符串数组:是一个地址量。字符串数组表示字符串的第一个字符的地址。组表示字符串的第一个字符的地址。2.3.1 变量的数据类型变量的数据类型5、表、表 变量的变量的数据类型数据类型、字节长度、位数、字节长度、位数、数据范围数据范围1、变量的定义(声明)、变量的定义(声明)例:例: int a; float b, c, d; char c1,string;变量定义的格式:变量定义的格式:存储类型存储类型 数据类型标识符数据类型标识符 变量变量1,变量,变量2, 变量变量n;2.3.2 变量的使用变量的使用 在在C语言中,所使用的每一个变量在引用前都须先定义,否则在程语言中,所使用的每一个变量在引用前都须先定义,否则在程序编译时会发生错误。变量的定义就是按一定的方式为其使用的变量指序编译时会发生错误。变量的定义就是按一定的方式为其使用的变量指定数据类型(标识符定数据类型(标识符 )、变量名(标识符)。在程序编译时,为其分配变量名(标识符)。在程序编译时,为其分配存储空间。存储空间。 变量的定义意义在于,计算机在编译时,对每一个变量分配对应和固定变量的定义意义在于,计算机在编译时,对每一个变量分配对应和固定的存储单元(地址)的存储单元(地址),为其程序的使用创造必要条件为其程序的使用创造必要条件 。 int i, j number ; float x, y ; char name ;static double u, v ; int a; int a1;extern float a2;extern char str;变量定义举例变量定义举例:例:例: int a =3; int b=0,c=0; float f =5.8; char c1=e; char string 10=“Beijing”; 2、变量的初始化、变量的初始化 给变量赋初值的过程叫变量的初始化。给变量赋初值的过程叫变量的初始化。 C 语言允许在定义变量的同时对变量赋值。语言允许在定义变量的同时对变量赋值。注意:没有赋初值的变量,并不意味着该变量中没有数值。此时,对于静态型(static)变量中的值是0,其它存储类型变量一个随机数。变量初始化的意义:程序编译完成后,变量已被赋值。 (1) 初始化:定义的同时赋值初始化:定义的同时赋值 int i=5, j=6; float x=10.1 ; char name=A; (2) 先先定义,后赋值。定义,后赋值。 int i; float x=10.1; char name; i=5; x=20.5; name=A; i=d; 变量的赋值的方法变量的赋值的方法: 在程序中使用变量,称为变量的引用。如进行数值计算、数据处理等。在程序中使用变量,称为变量的引用。如进行数值计算、数据处理等。使用变量时,使用变量时,先定义,后引用先定义,后引用。3、变量的引用、变量的引用例:例: main( ) int a=55; int b; int c; b=45; c=(a+b)/100; printf(“a=%d b=%d c=%d”,a,b,c); 结果:结果:a=55 b=45 c=1对变量的引用对变量的引用2.3.3 变量数据的存储与读取变量数据的存储与读取 变量所代表的数据是存储在(计算机)内存中。在使用中往往希望变量所代表的数据是存储在(计算机)内存中。在使用中往往希望数据的存储应灵活、多样,以便于编程。数据的存储应灵活、多样,以便于编程。变量数据的存储形式有:变量数据的存储形式有: 静态存储静态存储 static 静态型静态型 extern 外部型外部型 动态存储动态存储 auto 自动型自动型 register 寄存器型寄存器型这部分的内容在第五章函数中详细介绍。这部分的内容在第五章函数中详细介绍。1、变量数据的存储、变量数据的存储变量 内存ab变量 地址 内 存 a 2000 b 2002直接读取:直接读取:间接读取:间接读取:2、变量数据的读取、变量数据的读取 变量名实际代表一个确定的存储单变量名实际代表一个确定的存储单元。程序编译完成后,变量就与数据存元。程序编译完成后,变量就与数据存储单元一一对应。对变量读取操作,就储单元一一对应。对变量读取操作,就是到对应的存储单元中读取数据。是到对应的存储单元中读取数据。 (指针)变量中存放的是数据内存(指针)变量中存放的是数据内存的地址,在这种情况下,首先拿存放数的地址,在这种情况下,首先拿存放数据的地址,然后,再到对应的地址中读据的地址,然后,再到对应的地址中读取数据。取数据。2.3.4 其它变量其它变量指针变量(第六章):指针变量(第六章):数组变量(第四章)数组变量(第四章) :结构体变量(第八章)结构体变量(第八章) :联合体变量(第八章)联合体变量(第八章) :类型标识符类型标识符 *变量名;变量名;类型标识符类型标识符 数组名数组名下标下标;struct 结构体名结构体名 结构体成员表结构体成员表 结构体变量;结构体变量;union 联合体名联合体名 联合体成员表列联合体成员表列;变量的存储类型:变量的存储类型: 存储类型存储类型 数据类型数据类型 变量名变量名auto 自动型,使用最多,可缺省不写。自动型,使用最多,可缺省不写。static 静态型。静态型。register寄存器型,寄存器型, 少用。少用。extern 外部型。外部型。变量说明格式变量说明格式 : 英文字母、数字、下划线;英文字母、数字、下划线; 首字符必须是字母;首字符必须是字母; 中间不能有空格,一般用小写;中间不能有空格,一般用小写; 不要和关键字重名。不要和关键字重名。 变量名:变量名:小小 结结2.4 运算和运算符运算和运算符 2.4.1 运算运算 2.4.2 运算符运算符 返回2.4 运算和运算符运算和运算符2.4.1 运算运算运算运算运算符运算符运算量运算量运算表达式运算表达式对数据进行处理的过程对数据进行处理的过程表示各种数据处理的符识表示各种数据处理的符识被处理的数据被处理的数据运算符运算符 + 运算量运算量(1) 算术运算符算术运算符(2) 关系运算符关系运算符(3) 逻辑运算符逻辑运算符(4) 赋值运算符赋值运算符(5) 自反赋值运算符自反赋值运算符(6) 自增自减运算符自增自减运算符(7) 逗号运算符逗号运算符(8) 条件运算符条件运算符(9) 指针运算符指针运算符(10) 地址运算符地址运算符(11) 结构体成员运算符结构体成员运算符(12) 指向结构体成员运算符指向结构体成员运算符(13) 下标运算符下标运算符 (14) 圆括号运算符圆括号运算符(15) 大括号运算符大括号运算符(16) 长度运算符长度运算符(17) 数据类型转换运算符数据类型转换运算符(18)位运算运算符位运算运算符 2.4.2 运算符运算符+、-、*、/、% 、=、= =、!、!=&、|、!、!=+=、-=、*=、/=、%= + +、- -,?:?:*&.- ( ) sizeof(类型标识符类型标识符)(类型标识符类型标识符)表达式表达式&、|、返回(1) 算术运算符算术运算符 名称名称 运算符运算符 运算规则运算规则 正正 + 取原值取原值 负负 - 取负值取负值 加加 + 加法加法 + 减减 - 减法减法 - 乘乘 * 乘法乘法 * 除除 / 除法除法 / 对于整数,则为整除,余数舍去;对于整数,则为整除,余数舍去; 实数则不然。实数则不然。 例:例: 1/3*3=0 1.0/3.0*3.0=1.0 模模 % 整除取余整除取余 (只适用于整数)(只适用于整数) 分子分子分母分母 ,结果,结果=余数。例:余数。例: 12%5 分子分子分母分母 ,结果,结果=分子。例:分子。例: 2%5 注意:注意:C 语言中乘法、除法运算符的表示与数学中的表示不同。语言中乘法、除法运算符的表示与数学中的表示不同。 ( 乘法不乘法不能写成能写成mn, m n, mn ;没有乘方运算符。没有乘方运算符。 除法不能写成除法不能写成m n) 注:避免除数为注:避免除数为0 (2)关系运算符:关系运算符:对两个操作量进行大小比较的运算符对两个操作量进行大小比较的运算符(3) 名名 称称 运算符运算符 小于小于 小于等于小于等于 大于等于大于等于 =等于等于 = =不等于不等于 ! =注意:注意:C 语言中小于等于语言中小于等于 、大于等于、等于、不等于运算符的表示与数学中、大于等于、等于、不等于运算符的表示与数学中的表示的表示( )不同。不同。(3) 逻辑运算符逻辑运算符1. 逻辑运算把一切逻辑运算把一切“非非 0” 的数作为真的数作为真(用用1表示表示),把,把“0” 数作为假数作为假(用用0表示表示)。 逻辑运算是逻辑运算是“非非 0”和和“0”两类数据或真和假两类种状态的运算。两类数据或真和假两类种状态的运算。2. 名名 称称 运算符运算符 非非 ! 单目运算符单目运算符 与与 & 双目运算符双目运算符 或或 | 双目运算符双目运算符 ! 非非| 或或 3. 真值表决定逻辑运算结果真值表决定逻辑运算结果!非0(真)0 (假 )0 (假 )非0(真)& 与与AB结果0 假非0真0 假非0真 0 假0 假0 假0 假0 假非0真 非0真非0真有假则假,全真则真。有假则假,全真则真。有真则真,全假则假。有真则真,全假则假。(4) 赋值运算符赋值运算符(5) 自反赋值运算符自反赋值运算符名名 称称 运算符运算符 赋赋 值值 = 格式格式 : 变量变量 = 表达式表达式 ;先计算等号右边的表达式,然后将其值赋给等号左边的变量。先计算等号右边的表达式,然后将其值赋给等号左边的变量。名名 称称 运算符运算符 加赋值加赋值 += 减赋值减赋值 - = 乘赋值乘赋值 *= 除赋值除赋值 / = 模赋值模赋值 % =例:a + =b a=a + b a -=b a=a ba*=b a=a*ba/=b a=a/ba%=b a=a%b例:x = x+10 ;y = x*x+x ;C语言赋值运算符与数学中的等号其含义有着本质的不同。赋值表语言赋值运算符与数学中的等号其含义有着本质的不同。赋值表示操作,有结果。示操作,有结果。(6) 自增自减运算符:让变量自己加自增自减运算符:让变量自己加1或者减或者减1 名名 称称 运算符运算符 说说 明明 例例增增 1(前缀)(前缀) + + 先加先加1,后使用。,后使用。 + i 增增 1(后缀)(后缀) + + 先使用,后加先使用,后加1。 i +减减 1(前缀)(前缀) - - 先减先减1,后使用。,后使用。 - - i减减 1(后缀)(后缀) - - 先使用,后减先使用,后减1。 i - - 例:例: int j; i=3; j=+i; 结果结果 :j的值为的值为4。 i的值为的值为4。 而而int j; i=3;j=i+; 结果:变量结果:变量j的值为的值为3, 变量变量i将将3赋给赋给j后自加后自加1变为变为4。自增自减运算仅限用于变量。自增自减运算仅限用于变量。 自增自减运算不能用于常量或表达式。自增自减运算不能用于常量或表达式。单目运算符,结合性为自右向左。单目运算符,结合性为自右向左。(8) 条件运算符条件运算符(9) 指针运算符指针运算符(10) 地址运算符地址运算符(11) 结构体成员运算符结构体成员运算符(12) 指向结构体成员运算符指向结构体成员运算符(7) 逗号运算符逗号运算符,?:?:*&.-(13) 下标运算符下标运算符 名名 称称 运算符运算符下标下标 用于数组运算。用于数组运算。详细内容在第四章数组中介绍。详细内容在第四章数组中介绍。 (14) 圆括号运算符圆括号运算符 名名 称称 运算符运算符圆括号圆括号 ( ) 例:(例:(3+5)*88-21/7在函数的定义、引用中也应用圆括号。在函数的定义、引用中也应用圆括号。详细内容在第五章函数中介绍。详细内容在第五章函数中介绍。(15) 大括号运算符大括号运算符(16) 长度运算符长度运算符 ( 函数函数 )名名 称称 运算符运算符大括号大括号 用于含括函数的函数体、分程序的程序体。用于含括函数的函数体、分程序的程序体。名名 称称 运算符运算符长度长度 sizeof 格式:格式:求数据类型或表达式结果值的字节长度。求数据类型或表达式结果值的字节长度。例:例: sizeof (int ); 结果:等于结果:等于2。sizeof (数据类型标识符数据类型标识符 或表达式或表达式 );(18) 位运算运算符位运算运算符(17) 数据类型转换运算符数据类型转换运算符& 对应的位均为对应的位均为1,该位结果才为,该位结果才为1 。测试某位是否为。测试某位是否为0 | 对应的位均为对应的位均为0,该位结果才为,该位结果才为0 。设置某位为。设置某位为1 对应的位不同为对应的位不同为1,相同为,相同为0 。使各位翻转。使各位翻转。 逢逢1变变0,逢,逢0变变1(数据类型标识符数据类型标识符)表达式表达式按位与按位与按位或按位或按位异或按位异或取反取反左移左移右移右移名名 称称 运算符运算符数据类型转换格式:数据类型转换格式:相当于乘相当于乘2的的n次方,左边移出的舍去,右边补次方,左边移出的舍去,右边补0 :例:例: x=1,则,则x4之后,之后,x=10000,即十进制,即十进制16;相当于除以相当于除以2的的n次方,右边移出的舍去,左边补次方,右边移出的舍去,左边补0 运算符运算符运算符优先级运算符优先级 结合性(见附录结合性(见附录B)返回例例 (1) 注意表达式的正确书写:注意表达式的正确书写: 写出写出 5x10 的的c语言表达式:语言表达式:5x10 错!错!5x&x5&(b=20)ax5|(b=20)ax=5|(b=20)ax=10&(b=20)a0 b=10 1 b=201 b=101 b=20(3) 若已知若已知 a=5,b=3,c=2,d=6,则则ab?a:cd?c:d 的值为多少?的值为多少?条件运算符的结合性是条件运算符的结合性是自右至左自右至左,上式相当于,上式相当于ab?a:(cd?c:d) 5(4)3x a+b 的的c语言表达式:语言表达式:3*x/(a+b)与运算:第一个为与运算:第一个为0,则第二个不再计算则第二个不再计算或运算:第一个为非或运算:第一个为非0,则第二个不再计算则第二个不再计算2.5 运算表达式运算表达式 2.5.1 算术表达式算术表达式 2.5.2 关系表达式关系表达式 2.5.3 逻辑表达式逻辑表达式 2.5.4 条件表达式条件表达式 2.5.5 赋值表达式赋值表达式 2.5.6 逗号表达式逗号表达式 2.5.7 混合表达式混合表达式返回2.5.1 算术表达式算术表达式由算术运算符连接常量、变量或表达式构成。由算术运算符连接常量、变量或表达式构成。结果是:整数、实数。结果是:整数、实数。优先级:先乘除、后加减。优先级:先乘除、后加减。结合性(双目运算符):自左向右。结合性(双目运算符):自左向右。运算表达式运算表达式 用运算符将运算对象连接的算式。例:例:2*a+b/3 4.0/3*3.14159*R*R*R1/6*3.14159*D*D 球体积、表面积球体积、表面积求算术表达式的值:求算术表达式的值:1+ 5 * 3 / 4 结果:结果:42.5.2 关系表达式关系表达式1. 由关系运算符连接常量、变量或表达式构成。由关系运算符连接常量、变量或表达式构成。2. 关系表达式的关系表达式的结果:逻辑型结果:逻辑型 关系不满足,结果为:假(用关系不满足,结果为:假(用0表示)。表示)。 如:如:103. 优先级优先级: 1) = b 若:若:a=300,b=301,则关系表达式结果为:,则关系表达式结果为:0 2) 5 (45) 结果为:结果为:1 3) 若若x=10, y=5, 则关系表达式的值则关系表达式的值 x=y+5 结果为:结果为:1 (x=3)5+y 结果为:结果为:1 * x=yy+5 结果为:结果为:x=1 (运算符的优先级运算符的优先级+ =) 5) 除了整型、实型以外,字符型除了整型、实型以外,字符型(ASCII码码)也可参与计算也可参与计算: a 1 & b 若若 :a=1, b=5, 结果为结果为0。例例:a +6 | bb ? a : b 结果结果: a如果大于如果大于b表达式等于表达式等于a, 否则否则表达式等于表达式等于b。例例: ! a ? 2*b : b表达式表达式 1 ?表达式?表达式 2 :表达式:表达式 3;条件表达式格式:条件表达式格式:表达式表达式1 等于表达式等于表达式2等于表达式等于表达式30 假非0 真2.5.5 赋值表达式赋值表达式由赋值运算符连接常量、变量或表达式构成。由赋值运算符连接常量、变量或表达式构成。例:例:赋值表达式格式:赋值表达式格式:变量变量 = 常量、变量、表达式常量、变量、表达式; 例:例:例例:int x,y; x=5;y=10;x=10*(y=5);char c1;c1=a;char str20=“Microsoft”;自反赋值表达式格式:自反赋值表达式格式: 变量变量 += 表达式表达式; 变量变量 -= 表达式表达式; 变量变量 *= 表达式表达式; 变量变量 /= 表达式表达式; 变量变量 %= 表达式表达式; 例例:int a=1,b=1,c=3;a+=5;b*=5;c%=1;c/=1;a=a+5;b=b*5;c=c%1;c=c/1;注意:左端注意:左端只能为变量!只能为变量!赋值运算与自反赋值运算的结合性是自右至左。赋值运算与自反赋值运算的结合性是自右至左。例:已知例:已知 x=10, 则则x+=x-=20的值为:的值为: (1) x-=20 x=x-20 x=-10(2) x+=-10 x=x+(-10) x=-20-20例:例:int x,y,a; x=y=10; y+a=20;错错逗号表达式逗号表达式1. 由逗号运算符连接常量、变量或表达式构成。由逗号运算符连接常量、变量或表达式构成。3. 逗号表达式求解过程,顺序求表达式的值(先求表达式逗号表达式求解过程,顺序求表达式的值(先求表达式1,再求表达式再求表达式2,再求,再求,直到求表达式,直到求表达式n ),整个表达式的值),整个表达式的值是最后一个表达式的值。是最后一个表达式的值。 4. 优先级最低,自左向右结合。优先级最低,自左向右结合。2. 逗号表达式格式:逗号表达式格式:表达式表达式 1 ,表达式,表达式 2 , 表达式表达式 n;例:例:例:例:例:例:例例:3+5, 6+8; 结果结果: 14。a = 3*5, a*4; 结果结果: 60。 x = (a = 3,6*3); 结果结果: x=18。x = a = 3,6*3; 结果结果: 18。注意:在逗号表达式中,前后表达式使用同一个变量时,注意:在逗号表达式中,前后表达式使用同一个变量时,前一变量的计算结果会影响后面表达式的计算结果。而不前一变量的计算结果会影响后面表达式的计算结果。而不能简单将表达式的值等于最后一个表达式的值。能简单将表达式的值等于最后一个表达式的值。 高 double float long unsigned 低 int char, short 2.5.7 混合表达式混合表达式由各种运算符连接常量、变量或表达式构成。由各种运算符连接常量、变量或表达式构成。数据类型的转换规则:数据类型的转换规则:由低(字节长度短)向高(字节长度长)转换。由低(字节长度短)向高(字节长度长)转换。混合运算应注意三个问题:混合运算应注意三个问题: 优先级优先级 结合性结合性 数据类型的转换数据类型的转换能被能被4整除而不能被整除而不能被100整除或能被整除或能被400整除(判断闰年的条件)。整除(判断闰年的条件)。 例:例: 隐式转换:隐式转换: 例例: 显式转换:显式转换:(数据类型标识符)表达式;(数据类型标识符)表达式;显式转换格式:显式转换格式:例例:例例:例:例:( int ) 1.5; 结果:结果:1。(float) 1; 结果:结果:1.0 。a*b/c+1.5-a; (ch =A& ch 10&!y=a%2 1运算符优先次序为运算符优先次序为 (1)!)! (2)%(3)+ (4) =2)x+yA&1=a%2; x+y65&1= a%2 x+y65&1=1 1&1 1简单的输入输出函数简单的输入输出函数字符输入输出函数字符输入输出函数字符串输入输出函数字符串输入输出函数格式化输入输出函数格式化输入输出函数返回理解、使用理解、使用C 库函数的几个要点:库函数的几个要点:函数的功能函数的功能函数的引用格式函数的引用格式函数要使用的头文件(包含文件)函数要使用的头文件(包含文件) *.h在使用函数前应首先了解清楚函数的功能。在使用函数前应首先了解清楚函数的功能。调用(使用)函数的格式。调用(使用)函数的格式。函数名(实参表)函数名(实参表)4.10.1 字符输入函数字符输入函数getchar和字符输出函数和字符输出函数putchar1、字符输入函数、字符输入函数 getchar #includemain( ) int c; c=getchar ( );#includemain( ) char c; c=getchar ( );例:例:功能功能:要求:要求:从从键盘上读取一个(键的)字符。键盘上读取一个(键的)字符。程序开始要使用预编辑命令程序开始要使用预编辑命令 #include 。例:例:函数引用格式:函数引用格式:getchar ( )2、字符输出函数、字符输出函数 putchar #include “stdio.h”main( ) int c=97; putchar ( c );#includemain( ) char c; c=a; putchar ( c );例:例:函数引用函数引用格式格式:功能:功能:要求:要求:向显示终端输出一个字符。向显示终端输出一个字符。程序开始使用预编辑命令程序开始使用预编辑命令 #include “stdio.h”。例:例:putchar ( ch ) ;例:用例:用getchar、putchar函数编一个程序。要求从键盘输入函数编一个程序。要求从键盘输入一个字符,并将其显示在显示器上。一个字符,并将其显示在显示器上。 B B运行程序运行程序# include main ( ) char c; c=getchar ( ); putchar ( c );例:用例:用putchar函数输出函数输出BOY字母。字母。BOY#include “stdio.h”main ( ) char a,b,c; a=B;b=O;c=Y; putchar(a); putchar(b); putchar(c);运行程序运行程序1、字符串输入函数、字符串输入函数 gets P72页:字符串输入函数页:字符串输入函数gets和字符串输出函数和字符串输出函数puts#include main( ) char filename 30; gets( filename ); 函数引用函数引用格式格式:功能:功能:要求:要求: gets (str) ;从键盘读取一串字符,用从键盘读取一串字符,用回车键结束回车键结束字符串的输入,并字符串的输入,并将其赋给字符串数组将其赋给字符串数组str, 即存入即存入str所指向的存储区。所指向的存储区。程序开始要使用预编辑命令程序开始要使用预编辑命令 #include 。例:例:2、字符串输出函数、字符串输出函数 puts #include main() char str10=“abc”; puts( str ); puts( “ABC” );函数引用格式函数引用格式:功能:功能:要求:要求:将字符串常量或字符串数组将字符串常量或字符串数组str指向的字符串输出指向的字符串输出到显示器上。字符数组到显示器上。字符数组str指向要输出的字符串。指向要输出的字符串。程序开始要使用预编辑命令程序开始要使用预编辑命令 #include 。puts (str) ;例:例:运行结果:运行结果:abc ABC 例:用例:用gets、 puts函数编一个程序。要求从键盘输入函数编一个程序。要求从键盘输入 一个字符串,并将其显示在显示器上。一个字符串,并将其显示在显示器上。Test string I/OABCDEFG ABCDEFG #include main ( )char str20; puts(“Test string I/O”); gets (str); puts (str);运行程序运行程序4.10.2 格式化输入、输出函数格式化输入、输出函数 scanf (“输入格式输入格式”,输入项地址表列,输入项地址表列);scanf ( “%d%f ”, &a, &x);2、格式化输入函数、格式化输入函数 printf (“输出格式输出格式”,输出项表列,输出项表列);输出格式:输出格式:%d 十进制整数十进制整数%x 十六进制整数十六进制整数%f 浮点小数浮点小数%c 单一字符单一字符%s 字符串字符串printf ( “a=%d, x=%f ”, a, x);1、格、格式化输出函数式化输出函数 格式化输入输出函数可以将各种类型的数据从计算机中格式化输入输出函数可以将各种类型的数据从计算机中输出到显示器上、从键盘上将数据输入到计算机中。输出到显示器上、从键盘上将数据输入到计算机中。引用格式:引用格式:1、格式化输出函数、格式化输出函数 printf功能:功能:要求:要求:printf( “输出格式输出格式”,输出项表列,输出项表列 );); 按照指定的格式,将输出项表列的各项,输出到显示器上。按照指定的格式,将输出项表列的各项,输出到显示器上。程序开始要使用预编辑命令程序开始要使用预编辑命令 # include 。常量、变量、表达式格式符格式符输出格式输出格式输出项表列输出项表列用于规定相应输出项的格式。输出格式用格式符来说明。用于规定相应输出项的格式。输出格式用格式符来说明。是由一系列格式转换说明符是由一系列格式转换说明符(简称格式符简称格式符)组成。组成。用双引号括起来的字符串,包含两种信息:用双引号括起来的字符串,包含两种信息:格式说明。用于规定相应输出项的格式,用格式符来说明,格式说明。用于规定相应输出项的格式,用格式符来说明,如上面如上面printf函数双引号中的函数双引号中的%d、%f等。等。普通字符。即需要原样输出的字符。如上面普通字符。即需要原样输出的字符。如上面printf函数双引号函数双引号中的中的a=、b=、逗号。、逗号。 是指定要输出的数据是指定要输出的数据, 可以是变量、常量或表达式。可以是变量、常量或表达式。 多个变量、常量或表达式时,用逗号多个变量、常量或表达式时,用逗号“ ,”分隔。分隔。 输出变量、常量或表达式的个数要与格式符个数相同、输出变量、常量或表达式的个数要与格式符个数相同、 前后顺序一一对应。前后顺序一一对应。printf ( “a=%d, x=%f ”, a, x);格式符:格式符:% + - 0 m .n l % 是格式符的开始标识记号。是格式符的开始标识记号。 数据类型说明字母数据类型说明字母 指定输出项输出数据的数据类型和格式。指定输出项输出数据的数据类型和格式。%d 带符号十进制整数输出。带符号十进制整数输出。%f 以小数形式输出,含以小数形式输出,含6位小数。位小数。%e 以指数形式输出以指数形式输出,其中尾数部分其中尾数部分6位小数位小数,指数指数3位位,正负号正负号1位位,e1位。位。%s 以字符串输出。以字符串输出。%c 以单个字符输出。以单个字符输出。%x 以十六进制整数输出。以十六进制整数输出。%o 以八进制整数输出。以八进制整数输出。%u 无符号十进制整数输出。无符号十进制整数输出。%g 以以%e %f 格式中输出长度较短的一种格式输出,不输出无意格式中输出长度较短的一种格式输出,不输出无意义的义的0。例例: main( ) float a=111111.111; float b=222222.222; printf (“%fn ”,a+b); 6 位小数位小数运行结果:333333.328125 有效位有效位7 位位 无效位无效位 数据类型说明字母数据类型说明字母2-008%f以小数形式输出,含以小数形式输出,含6位小数。位小数。单精度输出数据有效位单精度输出数据有效位7位。位。 双精度输出数据有效位双精度输出数据有效位16位。位。2-007例例: main ( ) int a=123, b=12345; printf (“%d, %dn”, a,b); 程序结果:123, 12345%d带符号十进制整数输出带符号十进制整数输出例例: main ( ) char c=a, ; int i=97; printf (“%c, %dn”,c,c); printf (“%c, %dn”,i,i ); 运行结果:运行结果:a, 97 a, 97 2-0112-010数据类型说明字母数据类型说明字母%s例例: main ( ) printf (“%sn”, “Beijing”); 运行结果:Beijing%c以单个字符输出以单个字符输出以字符串输出以字符串输出例例: main ( ) printf (“%e”,123.456); 运行结果:1.234560e+002 6 位小数 3位指数2-009%e以指数形式输出以指数形式输出,其中尾数部分其中尾数部分6位小数位小数,指数指数3位位,正负号正负号1位位,e1位位m表示输出项输出数据(字符)的总长度。表示输出项输出数据(字符)的总长度。无无 .n 部分部分格式符:格式符:% + - 0 m .n l 输出整数输出整数:输出实数输出实数:输出字符输出字符:例:例:例:m表示输出项输出数据(字符)的总长度。表示输出项输出数据(字符)的总长度。n 表示输出项输出数据的小数部分数据表示输出项输出数据的小数部分数据(字符字符)的长度。的长度。 m表示输出项输出数据字符的总长度。表示输出项输出数据字符的总长度。n表示输出项输出数据字符的实际个数。表示输出项输出数据字符的实际个数。m . n 指定输出数据的长度指定输出数据的长度main( ) int x=123; printf (“ %3d ”,x);123运行结果main( ) char str20= “Beijing”; printf (“ %5.3s ”,str);Bei运行结果main( ) float pi=3.14159; printf (“%7.5f”, pi);3.1416运行结果%7.4表示输出的数据共占7个字符位置 ,其中小数占4个字符位置。2-0052-004格式符:格式符:% + - 0m .n l + - 指定输出项输出数据的输出位置。指定输出项输出数据的输出位置。 0 对输出项数据空位置填数字对输出项数据空位置填数字0或空白(空格)。或空白(空格)。例:例:main( ) int x=456; printf (“%05dn”, x ); printf (“%5dn” ,x );00456 456 运行结果指定指定0,输出显示时填,输出显示时填0。不指定不指定0,输出显示时填空白(空格)。,输出显示时填空白(空格)。 指定指定“+”或缺省时,输出项输出数或缺省时,输出项输出数据(字符)的输出位置右边靠齐。据(字符)的输出位置右边靠齐。 指定指定“-”时,输出项输出数据时,输出项输出数据(字符)的输出位置左边靠齐。(字符)的输出位置左边靠齐。main( ) char str10=“ABCD”; printf (“%+5sn”,str); printf (“%-5sn”,“ABCD”); ABCDABCD运行结果2-006格式符:格式符:% + - 0m .n l l 对输出项输出数据的数值对输出项输出数据的数值, 指定输出的精度和类型。指定输出的精度和类型。对整型数对整型数对实型数对实型数例:如果不指定 l 输出产生错误。d (十进制), x (十六进制), o (八进制), u (无符号十进制)。l: long 型精度。h: short 型精度。缺省时, int 型精度。e (指数形式), f (小数形式), g。l: double 精度。缺省时, float 精度。main( ) long x=12345678; printf (“%ldn”,x);12345678 运行结果引用格式:引用格式:2、格式化输入函数、格式化输入函数 scanf功能:功能:要求:要求:scanf (“输入格式输入格式”, 输入项地址表列);输入项地址表列);从标准文件,即键盘上,按输入格式为指定的输入项变量输入数据。从标准文件,即键盘上,按输入格式为指定的输入项变量输入数据。程序开始要使用预编辑命令程序开始要使用预编辑命令 #include 。输入格式:输入格式:输入项表列:输入项表列:格式符:格式符:用于规定输入项输入数据的格式。输入格式用格式符来说明。用于规定输入项输入数据的格式。输入格式用格式符来说明。是由若干个变量的地址组成。一般情况下,在每个是由若干个变量的地址组成。一般情况下,在每个变量前加地址运算符变量前加地址运算符&。有多个输入项变量地址时有多个输入项变量地址时,从键盘上输入的各个数从键盘上输入的各个数据之间可用空格键据之间可用空格键、回车键或回车键或TAB键作分隔符键作分隔符,进进行分隔。行分隔。%m l 格式符格式符变量地址变量地址格式符:格式符:%m l 数据类型说明字母:数据类型说明字母: l :对整型数对整型数对实型数对实型数 m :d (十进制十进制), x (十六进制十六进制), o (八进制八进制), u (无符号十进制无符号十进制)。指定指定 l, 表示输入项输入数据为表示输入项输入数据为long 型型精度。精度。指定指定 h, 表示输入项输入数据为表示输入项输入数据为short 型精度。型精度。缺省时,缺省时,int型精度。型精度。e (指数形式指数形式), f(小数形式小数形式), g。指定指定 l, 表示输入项输入数据为表示输入项输入数据为double精度。精度。缺省时,缺省时, float精度。精度。d、o、 x、c 、s 、e 、f 含义与含义与printf 相同。相同。指定输入项输入数据的精度。指定输入项输入数据的精度。指定输入项输入数据的长度。含义与指定输入项输入数据的长度。含义与 printf 中相同。中相同。scanf函数在输入多个数据时非常容易出错。我们看一个例子:函数在输入多个数据时非常容易出错。我们看一个例子:例例 用用scanf函数输入多个数据。函数输入多个数据。(1)10 #include 20 main( )30 int a,b,c;40 scanf(“%d%d%d”,&a,&b,&c);50 printf(“a=%d,b=%d, c=%d”,a,b,c);60 行号为行号为40的语句要求为变量的语句要求为变量a、b、c输入数据。输入数据。前面我们说了,输入多个数据时,可以用空格键、回车键或前面我们说了,输入多个数据时,可以用空格键、回车键或TAB键键作分隔符进行分隔,故:作分隔符进行分隔,故:5 6 7或者或者567 或者或者5 6 7这三种输入方法都可以,输出结果是这三种输入方法都可以,输出结果是a=5,b=6,c=7(2)但是如果但是如果scanf的双引号里有的双引号里有“,”、“:”、“;”、“ ”(空格)、(空格)、“a=”等等的普通字符,等等的普通字符,我们在输入的时候一定要原样输入,否则可能会发生严重的错误。我们在输入的时候一定要原样输入,否则可能会发生严重的错误。#include main( ) int a,b,c; scanf(“a=%d;b=%d;c=%d”,&a,&b,&c); printf(“a=%d,b=%d, c=%d”,a,b,c);这里,输入时就应该为这里,输入时就应该为 a=5;b=6;c=7运行程序 例题例题 543 543a amain( ) int a ; scanf(“%d”,&a); printf(“%d”,a); main( )char c; scanf(“%c”,&c); printf(“%c”,c); 例:例:运行程序main( ) int a,b,c; scanf(“%d%d%d”,&a,&b,&c); printf(“%d%d%d”,a,b,c); 例:运行程序运行程序567 或或5 6 756735,45,2.5 35 45 2.500000例:main( ) int x, y; float z; scanf(“%d,%d,%f”,&x,&y,&z); printf(“%d %d %f”,x,y,z);scanf(“x=%d,y=%d”,&x,&y);则输入形式为:则输入形式为:x=10,y=29#include main( ) char a,b; a=getchar( ); putchar(a); putchar(n); b=a+a-A; printf(a=%c b=%cn,a,b); printf(a=%d b=%dn,a,b); 例:例: 在键盘上输入一个在键盘上输入一个大写大写字符字符, 将它转换成将它转换成小写后输出。小写后输出。运行程序A ASCIIA ASCII码码为为 65 65a ASCIIa ASCII码为码为 97 97 a- A = 32a- A = 32 将大写转换成小写MMa=M b=ma=77 b=109将字母大写转换成小写加32,将字母小写转换成大写减32。 例:例:已知三角形的三个边长。用面积公式:已知三角形的三个边长。用面积公式: ,其中:其中: s=1/2(a+b+c)。求三角形的面积。求三角形的面积。abc#include#includemain( ) float a,b,c,s,area; printf(”Enter a,b,c:); scanf(%f,%f,%f,&a,&b,&c); s=1.0/2*(a+b+c); area=sqrt(s*(s-a)*(s-b)*(s-c); printf(a=%7.2f b=%7.2f c=%7.2fn,a,b,c); printf(s=%7.2f area=%7.4fn,s,area);Enter a,b,c: 5.0,6.0,7.0 a= 5.00 b= 6.00 c=7.00s= 9.00 area=14.6969运行程序例:求方程例:求方程ax2+bx+c=0的实根。的实根。#include#includemain( ) float a,b,c,disc,x1,x2,p,q; printf(enter a,b,c:); scanf(%f,%f,%f,&a,&b,&c); disc=b*b-4*a*c; p= -b/(2*a); q=sqrt(disc)/(2*a); x1=p+q; x2=p-q; printf(a=%7.2f b=%7.2f c=%7.2fn,a,b,c); printf(x1=%7.2fnx2=%7.2fn,x1,x2);main( ) int x=315; char ch=a,c; float f=3.5; c=x; x=f; f=c; f=x;例例: 指出下列程序在执行过程中各个变量的取指出下列程序在执行过程中各个变量的取值。值。315的二进制形式为: 0000000100111011。其赋给字符变量 c 取低八位即: 00111011。所以 c 的值为: 59。 x 的值为: 3。 f 的值为: 59.0。 f 的值为: 3.0。例:例:main( ) char str10; scanf(“%s”,str); printf(“n%s”,str);运行程序How are you ? How are you ?字符串数组前不要加地址符字符串数组前不要加地址符 &,因为,因为字符串数组名表示的是字符串的第一字符串数组名表示的是字符串的第一个字符的地址,地址量。个字符的地址,地址量。结结 束束
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号