1、第第3章章 最简单的最简单的C程序设计程序设计顺序程序设计顺序程序设计信息学院信息学院 王燕王燕11/14/20221主要内容主要内容3.1 顺序程序设计顺序程序设计举例举例3.2 数据数据的表现形式及其运算的表现形式及其运算3.3 C语句语句3.4 数据数据的输入输出的输入输出11/14/20222重点难点重点难点数据类型及其运算数据类型及其运算数据输入输出数据输入输出格式输入输出格式输入输出顺序结构程序设计顺序结构程序设计11/14/202233.2 数据的表现形式及其运算数据的表现形式及其运算3.2.1 常量和变量常量和变量3.2.2 数据类型数据类型3.2.3 整型数据整型数据3.2.
2、4 字符型数据字符型数据3.2.5 浮点型数据浮点型数据3.2.6 怎样确定常量的类型怎样确定常量的类型3.2.7 运算符和表达式运算符和表达式11/14/202243.2.1 常量和变量常量和变量1.常量常量:在程序运行过程中,值不能被改变的量:在程序运行过程中,值不能被改变的量整型常量:如整型常量:如1000,12345,0,-345实型常量实型常量十进制小数形式:如十进制小数形式:如0.34 -56.79 0.0指数形式:如指数形式:如12.34e3(代表代表12.34 103)字符常量:如字符常量:如?转义字符:如转义字符:如n字符串常量:如字符串常量:如boy符号常量:符号常量:#d
3、efine PI 3.141611/14/202253.2.1 常量和变量常量和变量例符号常量的使用例符号常量的使用#include stdio.h#define PRICE 30void main()int num,total;num=10;PRICE=40;total=num*PRICE;printf(total=%dn,total);运行结果:运行结果:total=300说明:说明:程序中用程序中用#define命令行定义命令行定义PRICE代表代表常量常量30,此后凡在本文件中出现的,此后凡在本文件中出现的PRICE都都代表代表30,可以和常量一样进行运算。,可以和常量一样进行运算。说
4、明:说明:如再用赋值语句给如再用赋值语句给PRICE赋值是错的赋值是错的 PRICE=40;/错误,不能给符号常量赋值错误,不能给符号常量赋值11/14/202263.2.1 常量和变量常量和变量2.变量变量:在程序运行期间,变量的值是可以改变的:在程序运行期间,变量的值是可以改变的变量必须先定义,后使用变量必须先定义,后使用定义变量时指定该变量的名字和类型定义变量时指定该变量的名字和类型变量名变量名和和变量值变量值是两个不同的概念是两个不同的概念变量名实际上是以一个名字代表的一个变量名实际上是以一个名字代表的一个存储地址存储地址从变量中取值,实际上是通过变量名找到相应的内从变量中取值,实际上
5、是通过变量名找到相应的内存地址,从该存储单元中读取数据存地址,从该存储单元中读取数据变量值变量值是存储单元中的数据是存储单元中的数据11/14/202273.2.1 常量和变量常量和变量变量的特征变量的特征(1)变量名变量名:存储空间的名字,通过它对变量进行访问。:存储空间的名字,通过它对变量进行访问。一个标识符,通常用小写字母表示;一个标识符,通常用小写字母表示;(2)变量类型变量类型:决定存储单元的大小:决定存储单元的大小 整型变量、实型变量、字符型变量等整型变量、实型变量、字符型变量等(3)变量值变量值:存储单元中存储的数值。:存储单元中存储的数值。如如 y=x+5;其中其中x和和y都是
6、变量,以上语句是将都是变量,以上语句是将x+5的值赋给的值赋给y11/14/202283.2.1 常量和变量常量和变量3.常变量:常变量:const int a=3;4.标识符:一个对象的名字,用来标识变量名、符号标识符:一个对象的名字,用来标识变量名、符号常量名、数组名、函数名等的有效字符序列。常量名、数组名、函数名等的有效字符序列。C语言规定标识符只能由语言规定标识符只能由字母字母、数字数字和和下划线下划线3种字种字符组成,且符组成,且第一个字符第一个字符必须为字母或下划线。必须为字母或下划线。sum,_total,month,Student_name,lotus_1_2_3,BASIC,
7、li_lingM.D.John,¥123,3D64,ab11/14/20229举例举例program to_ _to file_2 ab1_c3为合法标识符为合法标识符yes?123go toa_80%if含有不合法字符含有不合法字符“?”出现非法字符出现非法字符“”标识符中不允许有空格标识符中不允许有空格第一个字符不能为数字第一个字符不能为数字与关键字相同与关键字相同11/14/2022103.2.1 常量和变量常量和变量保留字保留字:C语言规定的具有特定意义的字符串,也语言规定的具有特定意义的字符串,也称称关键字关键字。C语言的保留字(关键字)共有语言的保留字(关键字)共有37个,附录个,
8、附录C11/14/202211变量小结变量小结要求对所有用到的变量作强制定义,也就是要求对所有用到的变量作强制定义,也就是“先先定义,后使用定义,后使用”。标识符不能与标识符不能与C语言的保留字、系统标准库函数语言的保留字、系统标准库函数同名。同名。编译系统将大写字母和小写字母认为是两个不同编译系统将大写字母和小写字母认为是两个不同的字符。的字符。建议变量名的长度最好不要超过建议变量名的长度最好不要超过8个字符。个字符。在选择变量名和其它标识符时,应注意做到在选择变量名和其它标识符时,应注意做到“见见名知意名知意”,即选有含意的英文单词,即选有含意的英文单词 (或其缩写)(或其缩写)作标识符。
9、作标识符。11/14/2022123.2.2 数据类型数据类型p43 图图3.4数据类型派生类型枚举类型 enum空类型 void指针类型数组类型结构体类型 struct共用体类型 union基本类型整型 int字符型 char实型(浮点型)单精度实型float双精度实型double复数浮点型complex布尔型 bool函数类型11/14/2022133.2.3 整型数据整型数据1.整型数据的分类整型数据的分类最基本的整型类型最基本的整型类型l基本整型基本整型(int型型):占:占2个或个或4个字节个字节l短整型短整型(short int):VC+6.0中占中占2个字节个字节l长整型长整型(
10、long int):VC+6.0中占中占4个字节个字节l双长整型双长整型(long long int):C99新增的新增的11/14/2022143.2.3 整型数据整型数据2.整型变量的符号属性整型变量的符号属性整型变量的值的范围包括负数到正数整型变量的值的范围包括负数到正数可以将变量定义为可以将变量定义为“无符号无符号”类型类型扩充的整型类型:扩充的整型类型:p4611/14/2022153.3 整型数据整型数据3.整型常量的表示方法整型常量的表示方法 整型常量即整常数。在整型常量即整常数。在C语言中,整常数可用以下语言中,整常数可用以下三种形式表示:三种形式表示:(1)十进制十进制整数。
11、如:整数。如:123,-456(2)八进制八进制整数,以整数,以0头的数是八进制数。头的数是八进制数。如:如:0123表示八进制数表示八进制数123,等于十进制数,等于十进制数83,-011表示八进表示八进制数制数-11,即十进制数即十进制数-9。(3)十六进制十六进制整数。以整数。以0 x开头的数是开头的数是16进制数。如:进制数。如:0 x123,代表,代表16进制数进制数123,等于十进制数等于十进制数 291。-0 x12等于十进制数等于十进制数-18。11/14/2022163.3 整型数据整型数据4.整型数据在内存中的存放形式整型数据在内存中的存放形式 数据在内存中是以数据在内存中
12、是以二进制二进制形式存放的。形式存放的。如如:int i;/*定义为整型变量定义为整型变量*/i=10;/*给给i赋以整数赋以整数10*/说明:说明:内存中存储的内存中存储的是是 0000101011/14/2022173.3 整型数据整型数据5.整型变量的定义整型变量的定义C规定在程序中所有用到的变量都必须在程序中定规定在程序中所有用到的变量都必须在程序中定义,即义,即“强制类型定义强制类型定义”。例如例如:int a,b;(指定变量(指定变量a,b为整型)为整型)unsigned short c,d;(指定变量(指定变量c,d为无符号短整型)为无符号短整型)long e,f;(指定变量(指
13、定变量e,f为长整型)为长整型)11/14/2022183.3 整型数据整型数据例整型变量的定义与使用例整型变量的定义与使用#include void main()int a,b,c,d;unsigned u;a=12;b=-24;u=10;c=a+u;d=b+u;printf(a+u=%d,b+u=%dn,c,d);说明:说明:不同种类的整型数据可以不同种类的整型数据可以进行算术运算进行算术运算 运行结果:运行结果:a+u=22,b+u=-1411/14/2022193.2.4 字符型数据字符型数据1.字符与字符代码字符与字符代码大多数系统采用大多数系统采用ASCII字符集字符集字母:字母:
14、AZ,az数字:数字:09专门符号:专门符号:29个:个:!#&()*等等空格符:空格、水平制表符、换行等空格符:空格、水平制表符、换行等不能显示的字符:空不能显示的字符:空(null)字符字符(以以0表示表示)、警、警告告(以以a表示表示)、退格、退格(以以b表示表示)、回车、回车(以以r表表示示)等等11/14/2022203.2.4 字符型数据字符型数据字符字符1和整数和整数1是不同的概念:是不同的概念:字符字符1只是代表一个形状为只是代表一个形状为1的符号,在需的符号,在需要时按原样输出,在内存中以要时按原样输出,在内存中以ASCII码形式码形式存储,占存储,占1个字节个字节整数整数1
15、是以整数存储方式(二进制补码方式)是以整数存储方式(二进制补码方式)存储的,占存储的,占2个或个或4个字节个字节0 0 1 1 0 0 0 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 111/14/2022213.2.4 字符型数据字符型数据1.字符常量字符常量(1)用用单引号单引号包含的一个字符是字符型常量包含的一个字符是字符型常量(2)只能包含只能包含一个一个字符字符a,A,1abc、a11/14/2022223.2.4 字符型数据字符型数据有些以有些以“”开头的特殊字符称为开头的特殊字符称为转义字符转义字符转义字符转义字符 功能功能 n 回车换行符,光标移到下一行行首回
16、车换行符,光标移到下一行行首 r 回车不换行,光标移动到本行行首回车不换行,光标移动到本行行首 t 横向跳格(横向跳格(8位为一格,光标跳到下一格起位为一格,光标跳到下一格起 始位置,如第始位置,如第9或或17位等)位等)b 退一格,光标往左移动一格退一格,光标往左移动一格 11/14/202223转义字符转义字符 功能功能 用于输出反斜杠字符用于输出反斜杠字符“”用于输出单引号字符用于输出单引号字符“”用于输出双引号字符用于输出双引号字符“”ddd一到三一到三位位八八进制数进制数ddd对应的对应的ASCII码字码字符符 xhh一到两位一到两位十六十六进制数进制数hh对应的对应的ASCII码码
17、字符字符f 走纸换页走纸换页11/14/202224举例举例练习:练习:printf(Youre my good friend!n);在显示器输出什么在显示器输出什么?Youre my good friend!11/14/202225举例举例例转义字符的使用例转义字符的使用#include void main()printf(ab ct derftgn);printf(htibbj kn);运行结果:运行结果:f gdeh j k11/14/2022263.2.4 字符型数据字符型数据2.字符变量字符变量字符型变量用来存放字符常量,只能放一个字符。字符型变量用来存放字符常量,只能放一个字符。字
18、符变量的定义形式如下:字符变量的定义形式如下:char c1,c2;可以用下面语句对可以用下面语句对c1,c2赋值:赋值:c1=a;c2=b;一个字符变量在内存中占一个字节。一个字符变量在内存中占一个字节。在字符变量中实际上存储的是字符的在字符变量中实际上存储的是字符的ASCII码,其码,其存储形式与整数的存储形式相同。存储形式与整数的存储形式相同。字符数据与整型数据可相互赋值,直接运算。字符数据与整型数据可相互赋值,直接运算。例如:例如:char c;c=97;相当于相当于c=a;11/14/202227字符数据的存储形式字符数据的存储形式11/14/2022283.2.4 字符型数据字符型
19、数据例向字符变量赋以整数例向字符变量赋以整数#include void main()char c1,c2;c1=97;c2=98;printf(%c%cn,c1,c2);printf(%d%dn,c1,c2);说明:说明:在第在第3和第和第4行中,将整数行中,将整数97和和98分分别赋给别赋给c1和和c2,它的作用相当于以下两,它的作用相当于以下两个赋值语句:个赋值语句:c1=a;c2=b;因为因为a和和b的的ASCII码为码为97和和98运行结果:运行结果:a b 97 9811/14/2022293.2.4 字符型数据字符型数据例大小写字母的转换例大小写字母的转换#include void
20、 main()char c1,c2;c1=a;c2=b;c1=c1-32;c2=c2-32;printf(%c%c,c1,c2);说明:说明:程序的作用是将两个小写字母程序的作用是将两个小写字母a和和b转换成大写字母转换成大写字母A和和B。从。从ASCII代码表代码表中可以看到每一个小写字母比它相应的中可以看到每一个小写字母比它相应的大写字母的大写字母的ASCII码大码大32。运行结果:运行结果:11/14/2022303.2.4 字符型数据字符型数据3.字符串常量是一对双引号括起来的字符序列。字符串常量是一对双引号括起来的字符序列。合法的字符串常量:合法的字符串常量:How do you d
21、o.,CHINA,a,$123.45可以输出字符串,如可以输出字符串,如printf(How do you do.);每个字符串尾自动加一个每个字符串尾自动加一个0作为字符串结束标志作为字符串结束标志例字符串例字符串hello在内存中在内存中占内存单元不是占内存单元不是5个字符,个字符,而是而是6个字符,最后一个字符为个字符,最后一个字符为0,但在输出时不,但在输出时不输出输出0h e l l o 011/14/2022313.2.4 字符型数据字符型数据a是字符常量,是字符常量,a是字符串常量。是字符串常量。如:假设如:假设c被指定为字符变量被指定为字符变量:char c;c=a;c=a;c
22、=CHINA;结论:不能把一个结论:不能把一个字符串字符串常量赋给常量赋给一个一个字符字符变量。变量。11/14/2022323.2.5 浮点型数据浮点型数据浮点型数据是用来表示具有小数点的实数浮点型数据是用来表示具有小数点的实数float型(单精度浮点型)型(单精度浮点型)编译系统为编译系统为float型变量分配型变量分配4个字节个字节数值以规范化的二进制数指数形式存放,数值以规范化的二进制数指数形式存放,p50图图3.11ldouble型(双精度浮点型)型(双精度浮点型)l编译系统为编译系统为double型变量分配型变量分配8个字节个字节l15位有效数字位有效数字llong double(
23、长双精度型)(长双精度型)11/14/2022333.2.5 浮点型数据浮点型数据浮点型常量的表示方法浮点型常量的表示方法两种两种表示形式表示形式小数小数指数指数0.1233e-3注意:注意:字母字母e(或或E)之前必须有数字,且之前必须有数字,且e后面的指数后面的指数必须为整数必须为整数1e3、1.8e-3、-123e-6、-.1e-3e3、2.1e3.5、.e3、e 11/14/2022343.2.5 浮点型数据浮点型数据规范化的指数形式:规范化的指数形式:在字母在字母e(或(或E)之前的小数部分中,小数点左边应)之前的小数部分中,小数点左边应有一位(且只能有一位)非零的数字。有一位(且只
24、能有一位)非零的数字。例如例如:123.456可以表示为:可以表示为:123.456e0,12.3456e1,1.23456e2,0.123456e3,0.0123456e4,0.00123456e其中的其中的1.23456e3称为称为“规范化的指数形式规范化的指数形式”。11/14/2022353.2.6 怎样确定常量的类型怎样确定常量的类型字符常量:由单撇号括起来的单个字符或转字符常量:由单撇号括起来的单个字符或转义字符义字符整型常量:不带小数点的数值整型常量:不带小数点的数值系统根据数值的大小确定系统根据数值的大小确定int型还是型还是long型等型等浮点型常量:凡以小数形式或指数形式出
25、现浮点型常量:凡以小数形式或指数形式出现的实数的实数lC编译系统把浮点型常量都按双精度处理编译系统把浮点型常量都按双精度处理l分配分配8个字节个字节11/14/202236变量赋初值变量赋初值(1)C语言允许在定义变量的同时使变量初始化,如:语言允许在定义变量的同时使变量初始化,如:int a=3;/指定指定a为整型变量,初值为为整型变量,初值为3 float f=3.56;/指定指定f为浮点型变量,初值为为浮点型变量,初值为3.56char c=a;/指定指定c为字符变量,初值为为字符变量,初值为a11/14/202237变量赋初值变量赋初值(2)可以使被定义的变量的一部分赋初值。可以使被定
26、义的变量的一部分赋初值。如如:int a,b,c=5;表示指定表示指定a,b,c为整型变量,但只对为整型变量,但只对c初始化,初始化,c的初值为的初值为5(3)如果对几个变量赋以同一个初值,应写成:如果对几个变量赋以同一个初值,应写成:int a=3,b=3,c=3;表示表示a,b,c的初值都是的初值都是3。不能写成。不能写成 int a=b=c=3;注意:初始化不是在编译阶段完成的而是在程序注意:初始化不是在编译阶段完成的而是在程序运行时执行本函数时赋初值的,相当于有一个运行时执行本函数时赋初值的,相当于有一个赋值语句。赋值语句。11/14/202238数值型数据的混合运算数值型数据的混合运
27、算混合运算:整型(包括混合运算:整型(包括int,short,long)、浮点型)、浮点型(包括(包括float,double)可以混合运算。运算时,不同)可以混合运算。运算时,不同类型的数据要先转换成同一类型,然后进行运算。类型的数据要先转换成同一类型,然后进行运算。说明:说明:这种类型这种类型转换是由系统转换是由系统自动进行的。自动进行的。11/14/202239 3.2.7 运算符和表达式运算符和表达式C运算符简介运算符简介(1)算术运算符算术运算符(+-*/%)(2)关系运算符关系运算符(=!=)(3)逻辑运算符逻辑运算符(!&|)(4)位运算符位运算符 (|&)(5)赋值运算符赋值运
28、算符(=及其扩展赋值运算符)及其扩展赋值运算符)(6)条件运算符条件运算符(?:)(7)逗号运算符逗号运算符 (,)11/14/202240 3.2.7 运算符和表达式运算符和表达式(8)指针运算符指针运算符(*和和&)(9)求字节数运算符(求字节数运算符(sizeof)(10)强制类型转换运算符(强制类型转换运算符((类型类型))(11)成员运算符(成员运算符(-)(12)下标运算符(下标运算符()(13)其他其他(如函数调用运算符(如函数调用运算符())11/14/202241 3.2.7 运算符和表达式运算符和表达式(1)基本的算术运算符基本的算术运算符:+(加法运算符,或正号运算符。如
29、(加法运算符,或正号运算符。如:3+5、+3)-(减法运算符,或负号运算符。如(减法运算符,或负号运算符。如:5-2、-3)*(乘法运算符。如(乘法运算符。如:3*5)/(除法运算符。如(除法运算符。如:5/3)(模运算符,或称(模运算符,或称求余求余运算符,运算符,%两侧均应为整型两侧均应为整型数据,如数据,如:7%4的值为的值为3)。)。11/14/202242 3.2.7 运算符和表达式运算符和表达式除法运算符除法运算符“/”进行求商运算。对于不同类型的运进行求商运算。对于不同类型的运算对象,除法表达式计算结果的类型也会不同。算对象,除法表达式计算结果的类型也会不同。例:例:计算计算x/
30、y如果如果x,y是是整型整型,则结果为,则结果为整型整型,小数部分被,小数部分被略去。略去。5/2结果为结果为2,整型量,整型量 2/5结果为结果为0,整型量,整型量如果如果x,y其中一个为实型量,则结果为实型其中一个为实型量,则结果为实型5.0/2.0结果为结果为2.511/14/202243 3.2.7 运算符和表达式运算符和表达式(2)算术表达式:用算术运算符和括号将运算对象算术表达式:用算术运算符和括号将运算对象(也称操作数)连接起来的、符合(也称操作数)连接起来的、符合C语法规则的式语法规则的式子,称为子,称为C算术表达式。算术表达式。运算对象运算对象包括常量、变量、函数等。包括常量
31、、变量、函数等。例如例如:a*b/c-1.5+a是一个合法的表达式。是一个合法的表达式。11/14/202244 3.2.7 运算符和表达式运算符和表达式数学式子改写成数学式子改写成C语言表达式应注意以下几点:语言表达式应注意以下几点:乘号不能省。如:乘号不能省。如:ab应写成应写成 a*b。所有符号写成一行。所有符号写成一行。上下角标不能直接写,需要转换。上下角标不能直接写,需要转换。C语言中只有圆语言中只有圆括号,可以嵌套使用,避免两个运算符并置。如括号,可以嵌套使用,避免两个运算符并置。如a*b/-c应该为应该为a*b/(-c)。调用标准数学函数时,自变量应写在一对括号内。调用标准数学函
32、数时,自变量应写在一对括号内。如:如:|-2163|应写成应写成fabs(-2163),SIN12 应写成应写成sin(12)11/14/202245 3.2.7 运算符和表达式运算符和表达式三角函数的自变量应使用弧度。如三角函数的自变量应使用弧度。如SIN50 应写成应写成sin(50*3.1415926/180)要使所写的算术表达式与数学式子等价。例要使所写的算术表达式与数学式子等价。例 3x2+4xysin56 -|x-y|e2.3 3*x*x+4*x*y*sin(56*3.1415926/180)-fabs(x-y)*exp(2.3)sin +cos sin sin(alf)+cos(
33、alf)*sin(bate)11/14/202246举例举例一般数学式一般数学式a(b+c)+dac22rxyyxx1算术表达式算术表达式(a*(b+c)+d)*a*c 将方括号改成圆括将方括号改成圆括号,号,*不能省略不能省略x/(x+y)+1.0/(x*y)其中不能出现分其中不能出现分数,改用除法运算符,圆括号不数,改用除法运算符,圆括号不能缺少能缺少3.14159*r*r/2.0 其中其中 为非字母为非字母字符,要用实型常量代替字符,要用实型常量代替11/14/202247 3.2.7 运算符和表达式运算符和表达式C语言规定了运算符的优先级语言规定了运算符的优先级 在表达式求值时,先按运
34、算符的优先级别高低次序在表达式求值时,先按运算符的优先级别高低次序执行,例如先乘除后加减。执行,例如先乘除后加减。C规定了各种运算符的结合方向(结合性)规定了各种运算符的结合方向(结合性)算术运算符的结合方向为算术运算符的结合方向为“自左至右自左至右”,即先左后,即先左后右右。11/14/202248 3.2.7 运算符和表达式运算符和表达式(3)强制类型转换运算符强制类型转换运算符可以利用强制类型转换运算符将一个表达式转换成可以利用强制类型转换运算符将一个表达式转换成所需类型。所需类型。一般形式一般形式:(类型名)(表达式)(类型名)(表达式)例如:例如:(double)a 将将a转换成转换
35、成double类型类型(int)(x+y)将将x+y的值转换成整型的值转换成整型(float)(5%3)将将5%3的值转换成的值转换成float型型11/14/202249 3.2.7 运算符和表达式运算符和表达式自动转换规则:自动转换规则:floatdoublelongunsignedintcharshort低低高高11/14/202250举例举例有有如下变量如下变量类型:类型:char c;int i;float f;double d;计算表达式:计算表达式:c+f+i+dchar float int doublec +f +i +d int double double double该表达
36、式值的类型该表达式值的类型是是double类型类型 doubledoubledouble11/14/202251 3.2.7 运算符和表达式运算符和表达式例强制类型转换例强制类型转换#include void main()float x;int i;x=3.6;i=(int)x;printf(x=%f,i=%dn,x,i);说明:说明:有两种类型转换,一种是在运有两种类型转换,一种是在运算时不必用户指定,系统自动进行算时不必用户指定,系统自动进行的类型转换,如的类型转换,如3+6.5。第二种是强。第二种是强制类型转换。当自动类型转换不能制类型转换。当自动类型转换不能实现目的时,可以用强制类型转
37、换。实现目的时,可以用强制类型转换。运行结果:运行结果:x3.600000,i=311/14/202252 3.2.7 运算符和表达式运算符和表达式(4)自增、自减运算符(自增、自减运算符(+-)作用是使作用是使变量变量的值增的值增1或减或减1+i,-i(在使用(在使用i之前,先使之前,先使i的值加的值加/减减1)i+,i-(在使用(在使用i之后,使之后,使i的值加的值加/减减1)11/14/202253 3.2.7 运算符和表达式运算符和表达式i+与与+i的区别:的区别:+i是先执行是先执行i=i+1后,再使用后,再使用i的值;的值;i+是先使用是先使用i的值后,再执行的值后,再执行i=i+
38、1。例如:假设例如:假设 i 的值为的值为3j=+i;i的值先变成的值先变成4,再赋给再赋给j,j的值均为的值均为4j=i+;先将;先将 i的值的值3赋给赋给j,j的值为的值为3,然后,然后i变为变为411/14/202254举例举例 int x,m,n;x=10;m=x+;n=+x;该语句执行后,该语句执行后,m=10,x=11该语句执行后,该语句执行后,n=12,x=1211/14/202255 3.2.7 运算符和表达式运算符和表达式注意:注意:(1)自增运算符自增运算符+,自减运算符,自减运算符-,只能用于变量,只能用于变量,而不能用于常量或表达式而不能用于常量或表达式 (2)+和和-
39、的结合方向是的结合方向是“自右至左自右至左”自增(减)运算符常用于循环语句中使循环变量自自增(减)运算符常用于循环语句中使循环变量自动加动加1。也用于指针变量,使指针指向下一个地址。也用于指针变量,使指针指向下一个地址11/14/202256 3.2.7 运算符和表达式运算符和表达式(5)有关表达式使用中的问题说明有关表达式使用中的问题说明 ANSI C并没有具体规定表达式中的子表达式的求并没有具体规定表达式中的子表达式的求值顺序,允许各编译系统自己安排。值顺序,允许各编译系统自己安排。例如:对表达式例如:对表达式 a=f1()+f2()并不是所有的编译系统都先调用并不是所有的编译系统都先调用
40、f1(),然后调用然后调用f2(),在有的情况下结果可能不同。,在有的情况下结果可能不同。11/14/202257 3.2.7 运算符和表达式运算符和表达式 C语言中有的运算符为一个字符,有的运算符由两语言中有的运算符为一个字符,有的运算符由两个字符组成个字符组成,为避免误解,最好采取大家都能理解,为避免误解,最好采取大家都能理解的写法。的写法。例如:不要写成例如:不要写成i+j的形式,而应写成的形式,而应写成 (i+)+j的形式。的形式。11/14/202258举例举例#include stdio.hvoid main()int i=1,j=2;printf(i=%d,j=%dn,i,j);
41、printf(i+j=%dn,i+j);i=1;j=2;printf(i+(+j)=%dn,i+(+j);i=1;j=2;printf(i+)+j=%dn,(i+)+j);printf(i=%d,j=%dn,i,j);11/14/202259 3.2.7 运算符和表达式运算符和表达式在调用函数时,实参数的求值顺序,在调用函数时,实参数的求值顺序,C标准并无统标准并无统一规定。一规定。例如:例如:i的初值为的初值为3,如果有下面的函数调用:,如果有下面的函数调用:printf(%d,%d,i,i+)在有的系统中,从左至右求在有的系统中,从左至右求值,输出值,输出“3,3”。在多数系统中对函数参数
42、的求值顺。在多数系统中对函数参数的求值顺序是自右而左,序是自右而左,printf函数输出的是函数输出的是“4,4”。以上这。以上这种写法不宜提倡,种写法不宜提倡,最好改写成最好改写成 j=i+;printf(%d,%d,j,i)11/14/2022603.3 C语句语句3.3.1 C语句的作用和分类语句的作用和分类3.3.2 最基本的语句最基本的语句赋值语句赋值语句3.3.*逗号运算符和逗号表达式逗号运算符和逗号表达式11/14/2022613.3.1 C语句的作用和分类语句的作用和分类C程序程序源程序文件源程序文件1源程序文件源程序文件2源程序文件源程序文件n预处理命令预处理命令函数函数n函
43、数函数1数据声明数据声明函数首部函数首部函数体函数体数据声明数据声明执行语句执行语句11/14/2022623.3.1 C语句的作用和分类语句的作用和分类一个一个C程序可以由若干个程序可以由若干个源程序文件源程序文件组成组成一个源文件可以由若干个一个源文件可以由若干个函数函数和预处理命令以及全和预处理命令以及全局变量声明部分组成局变量声明部分组成一个函数由函数首部和一个函数由函数首部和函数体函数体组成组成函数体由数据声明和执行语句组成函数体由数据声明和执行语句组成C语句分为语句分为5类类控制语句控制语句函数调用语句函数调用语句表达式语句表达式语句空语句空语句复合语句复合语句11/14/2022
44、633.3.1 C语句的作用和分类语句的作用和分类一、控制语句:完成一定的控制功能一、控制语句:完成一定的控制功能1、if()else 条件语句条件语句2、for()循环语句循环语句3、while()循环语句循环语句4、do while();循环语句循环语句5、continue 继续语句继续语句6、break 间断语句间断语句7、switch()开关语句开关语句8、goto 转向语句转向语句 9、return 返回语句返回语句11/14/2022643.3.1 C语句的作用和分类语句的作用和分类二、函数调用语句二、函数调用语句一个函数调用加一个分号构成一个语句一个函数调用加一个分号构成一个语句
45、printf(This is a C statement.);三、表达式语句三、表达式语句一个表达式加一个分号构成一个语句一个表达式加一个分号构成一个语句a=3;分号分号赋值表达式赋值表达式表达式语句表达式语句11/14/2022653.3.1 C语句的作用和分类语句的作用和分类四、空语句:只有一个分号的语句四、空语句:只有一个分号的语句什么也不做什么也不做用来做流程的转向点用来做流程的转向点用来作为循环语句中的循环体用来作为循环语句中的循环体五、复合语句:用一对五、复合语句:用一对括起来的语句括起来的语句z=x+y;t=z/100;printf(%f,t);11/14/2022663.3.2
46、 最基本的语句最基本的语句赋值语句赋值语句赋值语句是由赋值表达式加上一个分号构成赋值语句是由赋值表达式加上一个分号构成例:例:a=100 赋值表达式赋值表达式 a=100;赋值语句赋值语句11/14/2022673.3.2 最基本的语句最基本的语句赋值语句赋值语句(1)赋值运算符赋值运算符赋值符号赋值符号“=”就是赋值运算符,它的作用是将一就是赋值运算符,它的作用是将一个数据赋给一个变量。如个数据赋给一个变量。如“a=3”的作用是执行一的作用是执行一次赋值操作(或称赋值运算)。把常量次赋值操作(或称赋值运算)。把常量3赋给变量赋给变量a。也可以将一个表达式的值赋给一个变量。也可以将一个表达式的
47、值赋给一个变量。(2)类型转换类型转换如果赋值运算符两侧的类型不一致,但都是数值型如果赋值运算符两侧的类型不一致,但都是数值型或字符型时,在赋值时要进行类型转换。或字符型时,在赋值时要进行类型转换。11/14/202268举例举例#include void main()unsigned a;int b=-1;a=b;printf(%un,a);说明:说明:“%u”是输出无符号数时是输出无符号数时所用的格式符。如果所用的格式符。如果b为正值,为正值,且在且在032767之间,则赋值后之间,则赋值后数值不变。数值不变。运行结果:运行结果:6553511/14/2022693.3.2 最基本的语句最
48、基本的语句赋值语句赋值语句(3)复合的赋值运算符复合的赋值运算符在赋值符在赋值符“=”之前加上其他运算符,可以构成复之前加上其他运算符,可以构成复合的运算符。合的运算符。例如:例如:a+=3 等价于等价于 a=a+3x*y+8 等价于等价于 x=x*(y+8)x%=3 等价于等价于 x=x%311/14/2022703.3.2 最基本的语句最基本的语句赋值语句赋值语句C语言规定可以使用语言规定可以使用10种复合赋值运算符:种复合赋值运算符:+=,-=,*=,/=,%=,=,&=,=,|=注意:如果右侧是包含若干项的表达式,则相当于注意:如果右侧是包含若干项的表达式,则相当于它有括号。它有括号。
49、x%=y+3x=x%(y+3)不要错写成不要错写成x=x%y+311/14/2022713.3.2 最基本的语句最基本的语句赋值语句赋值语句(4)赋值表达式赋值表达式 由赋值运算符将一个变量和一个表达式连接起由赋值运算符将一个变量和一个表达式连接起来的式子称为来的式子称为“赋值表达式赋值表达式”。一般形式为:一般形式为:例如:例如:“a=5”是一个赋值表达式是一个赋值表达式11/14/2022723.3.2 最基本的语句最基本的语句赋值语句赋值语句对赋值表达式求解的过程是:对赋值表达式求解的过程是:求赋值运算符右侧的求赋值运算符右侧的“表达式表达式”的值的值;赋给赋值运算符左侧的变量。赋给赋值
50、运算符左侧的变量。例如例如:赋值表达式赋值表达式“a=3*5”的值为的值为15,执行表达式,执行表达式后,后,变量变量a的值的值也是也是15。11/14/2022733.3.2 最基本的语句最基本的语句赋值语句赋值语句左值左值(lvalue):赋值运算符左侧的标识符赋值运算符左侧的标识符变量可以作为左值变量可以作为左值表达式不能作为左值(如表达式不能作为左值(如a+b)常量也不能作为左值常量也不能作为左值右值右值(rvalue):出现在赋值运算符右侧的表达式:出现在赋值运算符右侧的表达式 n左值也可以出现在赋值运算符右侧,因而左值左值也可以出现在赋值运算符右侧,因而左值 都可以作为右值都可以作