黄开元四版第3章new顺序结构程序设计_第1页
黄开元四版第3章new顺序结构程序设计_第2页
黄开元四版第3章new顺序结构程序设计_第3页
黄开元四版第3章new顺序结构程序设计_第4页
黄开元四版第3章new顺序结构程序设计_第5页
已阅读5页,还剩91页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、3.1 用用printf()函数输出数据函数输出数据 3.2 用用scanf()函数输入数据函数输入数据 3.3 输入输出字符数据输入输出字符数据 3.4 语言知识补遗语言知识补遗 3.5 程序设计举例程序设计举例 相关知识点相关知识点3.1.1 固定数值的加法程序固定数值的加法程序3.1.2 printf()函数函数1程序程序#includevoid main()int a,b,c; a=8;b=2000;c=a+b;printf(%dn,c);2程序解析程序解析加法运算的结果由加法运算的结果由printf()函数输出。函数输出。printf()函数的参数由两部分构成函数的参数由两部分构成第

2、一部分是第一部分是“%dn”,称为输,称为输出格式控制串,它规定出格式控制串,它规定printf()函数输出的结果的形式;函数输出的结果的形式;第二部分是变量第二部分是变量c,称为输出,称为输出表达式,它是要输出的具体数据。表达式,它是要输出的具体数据。“%d”可以理解为占位符,表可以理解为占位符,表示在该位置输出一个整数,实际示在该位置输出一个整数,实际数值由输出表达式部分的数值由输出表达式部分的c确定。确定。 “n”是换行控制符,输出是换行控制符,输出c之后之后自动完成换行操作。自动完成换行操作。 运行输出结果:运行输出结果:2008_printf()printf()函数是函数是C C语言

3、系统提供的格式化输出函数语言系统提供的格式化输出函数, , 用于向标准输出设备用于向标准输出设备(通常为显示器)按规定格式输出信息。(通常为显示器)按规定格式输出信息。printf()printf()函数一般使用格式函数一般使用格式说明:说明: “ “表达式表表达式表”是要输出的一系列表达式,各表达式之间用是要输出的一系列表达式,各表达式之间用“,”分隔。分隔。 “ “格式化字符串格式化字符串”用于说明要输出表达式的形式:用于说明要输出表达式的形式:以以“%”%”开始的格式控制参数,它规定对应表达式的输出格式;开始的格式控制参数,它规定对应表达式的输出格式;对普通字符按原样输出,对转义字符,输

4、出的是其转义后的形式。对普通字符按原样输出,对转义字符,输出的是其转义后的形式。 输出表达式的个数必须与格式化字符串所说明的输出参数个数相同输出表达式的个数必须与格式化字符串所说明的输出参数个数相同, ,且顺序要与格式串中要求输出的内容一一对应。且顺序要与格式串中要求输出的内容一一对应。 printf()函数中常用的格式控制符及其功能函数中常用的格式控制符及其功能 格式控制符格式控制符功能功能是否常用是否常用%d输出一个输出一个int型数据型数据是是%f输出一个输出一个float型数据型数据是是%c输出一个输出一个char型数据型数据是是%ld输出一个输出一个long int型数据型数据一般一

5、般%s输出一个字符串输出一个字符串是是%u输出一个十进制无符号整数输出一个十进制无符号整数否否%e输出一个指数形式的浮点数输出一个指数形式的浮点数否否%x或或%X输出一个以十六进制表示的无符号整数输出一个以十六进制表示的无符号整数否否%O输出一个以八进制表示的无符号整数输出一个以八进制表示的无符号整数否否%g自动选择自动选择%f或或%e格式中输出宽度较短的一种形式格式中输出宽度较短的一种形式否否printf()函数的转义字符及其功能函数的转义字符及其功能字符形式字符形式功能功能是否常用是否常用n换行,将当前位置移到下一行开头换行,将当前位置移到下一行开头是是t水平跳格,跳到下一个水平跳格,跳到

6、下一个Tab位置位置一般一般b退格,将当前位置移到前一列退格,将当前位置移到前一列否否r回车,将当前位置移到本行开头回车,将当前位置移到本行开头否否反斜杠字符反斜杠字符“”否否单引号字符单引号字符否否双引号字符双引号字符否否ddd8进制数表示的对应进制数表示的对应ASCII码字符码字符一般一般xhh16进制数表示的对应进制数表示的对应ASCII码字符码字符一般一般例例3-2 3-2 输出格式控制举例一。输出格式控制举例一。#include#includevoid main()void main() int a,b; int a,b; a=8;a=8;b=2000;b=2000;printf(p

7、rintf(+ += =n,n, , , , ,); ); 在在“%”和格式控制符之间插进数字,表示输出项的最大域宽。和格式控制符之间插进数字,表示输出项的最大域宽。#includevoid main() float r=5.7693,s; s=3.1416*r*r; printf(R,r,s); 运行输出结果:运行输出结果:R= 5.769,S= 104.568_在在“%”和格式控制符之间加入一个和格式控制符之间加入一个- 号,控制输出为左对号,控制输出为左对齐,否则为右对齐。齐,否则为右对齐。 运行输出结果:运行输出结果:R=5.769 ,S=104.568_ 字符型数据既可以使用字符型数

8、据既可以使用“%c”格式符输出,也可以使格式符输出,也可以使用用“%d”格式符输出。当使用格式符输出。当使用“%c”格式符时输出字符本格式符时输出字符本身,当使用身,当使用“%d”格式符时输出字符对应的格式符时输出字符对应的ASCII码。码。#include#includevoid main()void main() char ch=A; char ch=A; printf(%c,%dn,ch,ch); printf(%c,%dn,ch,ch); 运行输出结果:运行输出结果: A,65_3.2.1 任意数值的加法程序任意数值的加法程序 3.2.2 scanf()函数函数例例3-6 一个改进的加

9、法程序。一个改进的加法程序。2程序解析程序解析输入功能由输入功能由“scanf(%d,%d,&a,&b);”语句实语句实现,执行该语句后,计算机进入等现,执行该语句后,计算机进入等待状态,当从键盘输入数据后,再待状态,当从键盘输入数据后,再继续执行程序,通过继续执行程序,通过“c=a+b;”语语句实现加法运算,最后由句实现加法运算,最后由“printf(%d+%d=%dn,c);”语句语句输出加法运算结果。输出加法运算结果。scanf()函数的参数由函数的参数由“%d,%d”和和“&a,&b”两部分构成:两部分构成:“%d,%d”规定输入数据的格式,规定输入数据

10、的格式,表示输入两个整数,它们之间以表示输入两个整数,它们之间以“,”分隔;分隔;“&a,&b”指定接收数据的变指定接收数据的变量分别是量分别是a和和b。 1程序程序#includevoid main() int a,b,c; printf(Input a,b:); scanf(%d,%d,&a,&b); c=a+b; printf(%d+%d=%dn,c);Input a,b:35, 5435+54=89_scanf()scanf()是格式化输入函数,从标准输入设备为变量输入数据。是格式化输入函数,从标准输入设备为变量输入数据。scanf()scanf()函数

11、一般使用格式函数一般使用格式说明:说明: “格式化字符串格式化字符串”用于说明输入数据的类型和数据格式,使用用于说明输入数据的类型和数据格式,使用的格式控制符与的格式控制符与printf()printf()函数相同。函数相同。 “ “变量地址表变量地址表”是接受输入数据的变量的地址,它们之间以逗是接受输入数据的变量的地址,它们之间以逗号号“,”,”分隔。当接受数据的变量是简单变量时,变量地址的表示分隔。当接受数据的变量是简单变量时,变量地址的表示形式如下:形式如下: “ “格式化字符串格式化字符串”中的格式控制参数之间通常用逗号中的格式控制参数之间通常用逗号“,”,”或空或空格分隔,也可以不使

12、用任何分隔符号。当使用格分隔,也可以不使用任何分隔符号。当使用“,”,”分隔时,输入分隔时,输入数据时各个数据之间也要使用数据时各个数据之间也要使用“,”,”分隔;当使用空格分隔或不使分隔;当使用空格分隔或不使用任何分隔符时,输入的数据之间可以使用空格分隔,也可以使用用任何分隔符时,输入的数据之间可以使用空格分隔,也可以使用回车符分隔。回车符分隔。(3) “(3) “格式字符串格式字符串”中控制参数的个数必须与变量地址的个数一致。中控制参数的个数必须与变量地址的个数一致。 注意注意: scanf函数中使用的是函数中使用的是变量的地址变量的地址,而不是变量名而不是变量名 如如: int a; 如

13、果写成如果写成 scanf(%d, &a); scanf(%d, a); -错误错误如果在如果在格式控制格式控制字符串中包含了其它字符字符串中包含了其它字符,则在输入数据时则在输入数据时 在相应的位置输入这些字符在相应的位置输入这些字符 如如: int a,b; scanf(%d,%d,&a,&b); 与与 scanf(%d%d,&a,&b); 输入输入: 1 , 2 输入输入: 1 2 必须以必须以,分隔分隔 以一个或多个空格分隔以一个或多个空格分隔 或者以回车键或或者以回车键或tab键分隔键分隔 但是不能用但是不能用“,” 用用 %c 输入字符时输入

14、字符时,所有字符所有字符(包括空格和转义字符包括空格和转义字符)都是有效输都是有效输 入。如入。如: scanf(%c%c%c,&c1,&c2,&c3); 如果输入如果输入: a b c 则则c1=a c2=(空格空格) c3=b 如果输入如果输入: anc 则则c1=a c2= c3=n 可以用域宽来指定输入数据的所占的列数可以用域宽来指定输入数据的所占的列数,由系统自动按域宽由系统自动按域宽 来截取所需的数据来截取所需的数据(%mc)。 如如: scanf(%3d%3d,&a,&b); 输入输入:123456 则系统自动将则系统自动将123赋给赋给a

15、, 456赋给赋给b *但如果用于字符的输入但如果用于字符的输入,则取这些列的字符中的第一个字符则取这些列的字符中的第一个字符 如如: scanf(%3c,&c); 输入输入: abc 则则 c=a输入数据时不能规定精度,如:输入数据时不能规定精度,如:scanf(“%5.2f”,&a);输入数据时输入数据时, 如果遇到如果遇到 : (1) 空格、回车、跳格空格、回车、跳格(t) (2) 宽度结束宽度结束 (3) 非法输入非法输入 则认为该数据输入结束则认为该数据输入结束如果在如果在%后有一个后有一个“*”符,表示跳过它指定的列数。符,表示跳过它指定的列数。 例如:例如: sc

16、anf(%2d %*3d %2d, &a,&b ) ; 输入:输入:1234567 将将12赋给赋给 a,%*3 表示跳过表示跳过3 位整数不赋给任何变量,位整数不赋给任何变量, 67赋给赋给 b。如:如:scanf(%d%f,&a,&b) ;输入:输入: 1379 135o.6 a 1379 b 135 scanf(%3d%f,&a,&b) ;输入输入: 1379 1350.6 a 137 b9.000000 输入输入long整型变量时,要求使用整型变量时,要求使用 %ld格式格式 如:如: long a ; scanf(%ld,&a)

17、 ; 如:如:scanf(a=%d,&a); 输入时要求键入:输入时要求键入:a=3 参见书参见书P84-86例如:例如: 输入输入3 3个值个值main() char a,b,c;scanf(%c%c%c,&a,&b,&c);printf(“%c%c%cn”,a,b,c);运行程序:运行程序:第一次运行时,从键盘上键入第一次运行时,从键盘上键入e ef fgg。第二次运行。第二次运行时,从键盘上键入时,从键盘上键入efg运行结果:运行结果: e f g e f g e f e f efg efg efg efg例如:例如: 输入输入3 3个值个值main()

18、char a,b,c;scanf(%c%c%c,&a,&b,&c);printf(“%c%c%cn”,a,b,c);运行程序:运行程序:第一次运行时,从键盘上键入第一次运行时,从键盘上键入e ef fgg。第二次运行。第二次运行时,从键盘上键入时,从键盘上键入efg运行结果:运行结果: e f g e f g e f e f efg efg efg efg思考:思考:同一程序,键入相同的值,但格式不同,同一程序,键入相同的值,但格式不同,输出结果却不同,原因何在?输出结果却不同,原因何在?原因原因: 两次运行,输入值分别如下:两次运行,输入值分别如下:又例如:又例如:

19、输入输入/输出输出3个数据。个数据。 main() int a,b,c; scanf(%d%d%d,&a,&b,&c); printf(%d%d%dn,a,b,c); 问:若想让变量问:若想让变量a,b,c分别为分别为5,6,7,应在键,应在键盘上如何输入数据?盘上如何输入数据?问:若将问:若将scanf 语句改为语句改为scanf(%d,%d,%d,&a,&b,&c); 又如何输入?又如何输入?问:若将问:若将scanf 语句改为语句改为scanf(a=%d,b=%d,c=%d,&a,&b,&c);又如何又如何输入?输入

20、?5 6 75,6,7a=5,b=6,c=7此输入较繁!工程师多用:此输入较繁!工程师多用:printf(“input a ,b,c:); scanf(%d,%d,%d,&a,&b,&c);Data:85 92Average: 88_功能:从键盘输入的字符串中读入一个字符。功能:从键盘输入的字符串中读入一个字符。调用格式:调用格式:功能:向标准输出设备输出一个字符。功能:向标准输出设备输出一个字符。调用格式:调用格式: 说明:说明:ch为一个字符变量名或字符常量,为一个字符变量名或字符常量,putchar(ch)函数函数 将将ch的字符显示在屏幕上。的字符显示在屏幕上。

21、例例3-8 3-8 从键盘输入一个字符,然后再显示出来。从键盘输入一个字符,然后再显示出来。#include#includevoid main() void main() char ch; char ch; ch=ch=; ; ; getchar()函数也可以直接作为函数也可以直接作为putchar()函数的参数使用。函数的参数使用。#include#includevoid main() void main() putchar(getchar()putchar(getchar(); ; 运行输出结果:运行输出结果:aa_3.4.1 数据类型数据类型3.4.2 常量详解常量详解3.4.3 简单变

22、量详解简单变量详解3.4.4 算术运算算术运算3.4.5 赋值运算赋值运算*3.4.6 宏命令宏命令 C语言支持的数据类型非常丰富,它包括:基本数语言支持的数据类型非常丰富,它包括:基本数据类型,构造数据类型,指针类型,空类型四大类据类型,构造数据类型,指针类型,空类型四大类 数据类型数据类型构造类型构造类型指针类型指针类型 *空 类 型 (空 类 型 ( 无 值 类 型 )无 值 类 型 ) voidvoid枚举类型枚举类型 enumenum数组类型数组类型 结构体类型结构体类型 structstruct共用体类型共用体类型 unionunion基本类型基本类型整型整型 intint字符型字

23、符型 charchar实型(浮点型)实型(浮点型)单精度实型单精度实型 floatfloat双精度实型双精度实型 double1.基本类型基本类型 整型、浮点型、字符型整型、浮点型、字符型2.派生类型派生类型 数组,结构体,共用体数组,结构体,共用体3.指针类型指针类型4.空类型空类型5.枚举型枚举型参见书参见书P43 图图3.4 对于基本数据类型量,根据其取值是否可改变可分对于基本数据类型量,根据其取值是否可改变可分为常量和变量两种。为常量和变量两种。3.2.1 常量常量常量常量: :其值不发生改变的量称为常量。其值不发生改变的量称为常量。常量可与数据类常量可与数据类型结合起来分类。例如,整

24、型常量、实型常量、字符型型结合起来分类。例如,整型常量、实型常量、字符型常量、字符串常量和符号常量。在编程过程中,常量是常量、字符串常量和符号常量。在编程过程中,常量是可以不经说明而直接引用的,而变量则必须要先定义后可以不经说明而直接引用的,而变量则必须要先定义后使用。使用。常用常量如下所示:整型常量:常用常量如下所示:整型常量:2525、0 0、-7-7;实型常量:;实型常量:5.65.6、-6.9-6.9;字符常量:;字符常量:aa、bb。必须为整数必须为整数必须有数字必须有数字下面是一些合法和不合法的实数表示:下面是一些合法和不合法的实数表示:合法实数合法实数 不合法实数不合法实数 3.

25、14159 0.2E 6.026e-27 0.2E2.3 0.23 e -5E后无整数后无整数E后为小数后为小数E前无数字前无数字3字符常量字符常量 1)用两个英文单引号限定的一个字符。如:)用两个英文单引号限定的一个字符。如:a 、9 、 Z 、%。 2)特殊字符常量:转义字符)特殊字符常量:转义字符 转义字符以反斜线转义字符以反斜线“ ”开头,后跟一个或几个字开头,后跟一个或几个字符。转义字符具有特定的含义,不同于字符的原意,符。转义字符具有特定的含义,不同于字符的原意,故称故称“转义转义”字符。如,输出函数中用到的字符。如,输出函数中用到的“n”n”其其意义是意义是“回车换行回车换行”

26、C C语言中,转义字符有三种:语言中,转义字符有三种: 简单转义字符、简单转义字符、 八进制转义字符和八进制转义字符和 十六进制转义字符。十六进制转义字符。n n 换行换行 t t 横向跳格(水平制表横向跳格(水平制表8 8列)列)b b 退格退格(输出位置移到前一列输出位置移到前一列)r r 回车回车a a 报警:执行到此:电脑报警:执行到此:电脑“嘟嘟”响一声响一声 反斜杠反斜杠 单引号单引号 ” ” 双引号双引号 dddddd ddd ddd表示表示1 1到到3 3位八进制数字位八进制数字 xhhxhh hh hh表示表示1 1到到2 2位十六进制数字位十六进制数字参见书参见书 P48

27、表表3-3转义字符转义字符字符形式字符形式所表示的所表示的功能、功能、字符字符nn换行换行( (输出位置移到下一行开头输出位置移到下一行开头) )tt横向跳格横向跳格( (输出位置移到下一个输出区:输出位置移到下一个输出区:Tab) )bb退格退格( (输出位置移到前一列输出位置移到前一列) )rr回车回车( (输出位置移到本行首输出位置移到本行首) )反斜杠字符反斜杠字符“ ”单引号单引号( (撇号撇号) )字符字符双引号字符双引号字符dddddd1到到3位位八进制数八进制数dddddd所代表字符,如所代表字符,如 141 141 为字符为字符 aa,3232为空格为空格xhhxhh1到到2

28、位位十六进制数十六进制数hhhh所代表的字符所代表的字符, , 如如 x61x61为字符为字符aa,x20 x20为空格为空格走纸换页走纸换页( (输出位置移到下一页输出位置移到下一页) )ff参见书参见书P40 表表3-1输输出出格格式式控控制制输输出出字字符符*说明:说明: 101 代表字符代表字符A x41 代表字符代表字符A 376 代表图形字符代表图形字符 w 代表字符代表字符w j 代表字符代表字符j 6565254*例例3-9 转义字符的使用:转义字符的使用:#include void main( ) printf(“ ab ct derftgn); printf(“htibbj

29、 kn); ab c defgi j k j k h5符号常量符号常量 定义符号常量的一般格式:定义符号常量的一般格式:#define 符号常量名符号常量名 常量常量例如:例如: #define MAX 200该命令定义了符号常量该命令定义了符号常量MAX,它表示常数,它表示常数200。 用英文双引号限定的一个字符序列。用英文双引号限定的一个字符序列。这个字符序列包括的字符个数称为字符串的长度,其长度允许为这个字符序列包括的字符个数称为字符串的长度,其长度允许为0。 Hello world 长度为长度为11 “ 长度为长度为1注意:注意: C语言中无字语言中无字符串变量,字符串变量,字符串变量

30、由数符串变量由数组存放组存放 不要混淆字符常量与字符串常量不要混淆字符常量与字符串常量 !(1)“a” 与与 a 的区别的区别 : “a”分配分配 2 个字节,存放个字节,存放 a 和和字符串字符串 结束符结束符 0 , 而而 a只分配只分配 1 个字节。个字节。(2)字符串常量不能赋给一个字符变量字符串常量不能赋给一个字符变量 如如 : c = a ;- 非法非法 ( C语言中的语言中的字符串可以用字符串可以用字符型数组字符型数组(后面讲)后面讲)来存放来存放 ) 97 0 97aa注意注意 : #include #define PRICE 50 void main( ) int a, to

31、tal ; a=9; total=a*PRICE; printf(“total=%d”,total); 习惯上习惯上符号常量名用大写符号常量名用大写,变变量用小写量用小写,以示区别。,以示区别。使用符号常量的好处是:使用符号常量的好处是:含义清楚;含义清楚;在需要改变一个常量时能做在需要改变一个常量时能做到到“一改全改一改全改”。常量也可以用标识符代表,称为常量也可以用标识符代表,称为符号常量符号常量。定义方法:定义方法:#define 标识符标识符 常量常量 *符号常量符号常量 例例 3-10注意:此处无注意:此处无 ;号号total=450 *符号常量符号常量 如:如:#define PI

32、 3.14159不占内存单元不占内存单元不可赋值不可赋值不指定类型不指定类型名称通常大写名称通常大写使用符号常量的好处使用符号常量的好处 P.41C99新增新增存储方式和用法都是变量,但只能在定义时赋存储方式和用法都是变量,但只能在定义时赋值一次值一次Const int b=5; 参见书参见书P42变量分类变量分类类型标识符类型标识符类型名称类型名称存储数据存储数据完整形式完整形式简化形式简化形式整型变量整型变量signed intint有符号基本整型有符号基本整型整型数据整型数据signed short intshort有符号短整型有符号短整型signed long intlong有符号长整

33、型有符号长整型unsigned int unsigned int无符号基本整型无符号基本整型unsigned short intunsigned short无符号短整型无符号短整型unsigned long intunsigned long无符号长整型无符号长整型实型变量实型变量floatfloat单精度实型单精度实型实型数据实型数据doubledouble双精度实型双精度实型字符型变量字符型变量charchar字符型字符型字符数据字符数据注意:注意: C语言中无字符串变量,语言中无字符串变量, 字符串变量由数组存放字符串变量由数组存放 变量名变量名=表达式表达式 (1)定义变量的同时为变量赋

34、初值)定义变量的同时为变量赋初值 (2)先定义变量,然后再为变量赋值)先定义变量,然后再为变量赋值 类型说明符字节数值范围字符型char1C字符集基本整型int2-32768-327683276732767短整型short int2-3276832767长整型long int4-214783648214783647无符号型unsigned20 06553565535无符号长整型unsigned long404294967295单精度实型float410-371038双精度实型double810-30710308字符类型数据在内存中以相应的ASCII码值存放,占一个字节。 3.4.5 各类数值型

35、数据的混合运算各类数值型数据的混合运算 1.1.整型、实型、字符型数据之间可以混合运算整型、实型、字符型数据之间可以混合运算例如:表达式例如:表达式10+a+1.5-8765.123410+a+1.5-8765.1234* *bb是合是合法的。法的。运算规则:不同类型的数据先转换成同一类型,然运算规则:不同类型的数据先转换成同一类型,然后进行计算。后进行计算。转换方法:自动转换(隐式转换)、强制转换转换方法:自动转换(隐式转换)、强制转换2.2.自动转换(隐式转换)自动转换(隐式转换) 自动转换发生在不同类型数据进行混合运算时,自动转换发生在不同类型数据进行混合运算时,由编译系统自动完成。由编

36、译系统自动完成。*不同类型数据间的混合运算:不同类型数据间的混合运算:(1) +、-、*、/ 运算的两个数中有一个数为运算的两个数中有一个数为float或或double型,结果是型,结果是double型。系统将型。系统将float型数据型数据都先转换为都先转换为double型,然后进行运算型,然后进行运算;(2) 如果如果int型与型与float或或double型数据进行运算,先把型数据进行运算,先把int型和型和float型数据转换为型数据转换为double型,然后进行运型,然后进行运算,结果是算,结果是double型型;(3)字符型数据与整型数据进行运算,就是把字符的字符型数据与整型数据进

37、行运算,就是把字符的ASCII代码与整型数据进行运算。代码与整型数据进行运算。自动转换规则:自动转换规则: 类型不同,先转换为同一类型,然后进行运算类型不同,先转换为同一类型,然后进行运算 图中横向向左的箭头表示必定的转换。图中横向向左的箭头表示必定的转换。 图中纵向的箭头表示当运算对象为不同类图中纵向的箭头表示当运算对象为不同类型时转换的方向。型时转换的方向。箭头只表示箭头只表示转换方向,转换方向,并不是依次并不是依次转换。转换转换。转换过程是过程是自动自动完成的。完成的。shortintchardoubleflooatlongunsigned3. 3. 强制转换:强制转换:通过通过强制强制

38、类型转换运算符来实现类型转换运算符来实现格式:格式:(类型说明符)表达式(类型说明符)表达式功能:功能:把表达式的结果强制转换为类型说明符所表示的把表达式的结果强制转换为类型说明符所表示的 类型。类型。例如:例如: (int)a (int)a 将将a a的结果强制转换为整型量。的结果强制转换为整型量。(int)(x+y) (int)(x+y) 将将x+yx+y的结果强制转换为整型量。的结果强制转换为整型量。(float)a+b (float)a+b 将将a a的内容强制转换为浮点数,再与的内容强制转换为浮点数,再与b b相加。相加。说明:说明:(1 1)类型说明和表达式都需要加括号(单个变量可

39、以不)类型说明和表达式都需要加括号(单个变量可以不 加括号)加括号)(2 2)无论隐式转换,强制转换都是临时转换,不改变数)无论隐式转换,强制转换都是临时转换,不改变数 据本身的类型和值。据本身的类型和值。 *强制类型转换运算符(续)强制类型转换运算符(续) 可以用一个强制类型转换运算符将一个表达式的值转换成所可以用一个强制类型转换运算符将一个表达式的值转换成所需要的类型需要的类型.。如。如 : (double) a 将将a的值转换成的值转换成 double 型型 (int) (x+y) 将将(x+y)的结果转换成的结果转换成 int 型型 (float) (5%3) 将将(5%3)的结果转换

40、成的结果转换成 float 型型 一般形式一般形式 : (类型名类型名) (表达式表达式) 强制类型转换只是将表达式的值转换成所需的类型,强制类型转换只是将表达式的值转换成所需的类型, 而而每一个变量的类型没有变化每一个变量的类型没有变化。 如如 : x =3.6 ; i=(int)x ; 则则 x=? i=? ( x = 3.6 i=3 ) 有两种方法进行类型转换有两种方法进行类型转换: (1)自动转换自动转换 (按级别高低按级别高低)(2)强制转换强制转换 (用强制类型转换运算符用强制类型转换运算符)注意注意 例例3-11 强制类型转换。强制类型转换。main() float f=5.75

41、; printf(“(int)f=%dn”,(int)f);/*将将f的结果强制转换为的结果强制转换为 整型输出整型输出; f的值未改变的值未改变*/ printf(“f=%fn”,f); /*输出输出f的值,的值,f仍仍 为单精度型数为单精度型数*/运行结果:运行结果: (int)f=5f=5.75void main( )float x ;int i; x = 3.6 ;i = (int) x ;printf(x =%f , i=%d, x , i ) ; 强制类型转换。强制类型转换。 例例 3-12运行结果运行结果 : x = 3.600000 , i = 3 3.5.1 C3.5.1 C

42、语言运算符简介语言运算符简介 C C语言的运算符可分为算术运算符、赋值运算符、关系语言的运算符可分为算术运算符、赋值运算符、关系运算符、逻辑运算符、位运算符、条件运算符、逗号运算运算符、逻辑运算符、位运算符、条件运算符、逗号运算符及一些特殊的运算符。符及一些特殊的运算符。 按运算符与运算对象(操作数)的关系可将按运算符与运算对象(操作数)的关系可将C C语言的运语言的运算符分为单目运算符、双目运算符和三目运算符。算符分为单目运算符、双目运算符和三目运算符。 单目运算符是指运算符只需要一个操作数,如!,单目运算符是指运算符只需要一个操作数,如!,+,-等;等; 双目运算符是指运算符需要两个操作数

43、,即运算符的双目运算符是指运算符需要两个操作数,即运算符的左右两侧都需要一个操作数,如左右两侧都需要一个操作数,如+ +,- -,* *,/ /,等;,等; 三目运算符是指运算符需要三个操作数,三目运算符是指运算符需要三个操作数,C C语言的三目语言的三目运算符只有运算符只有1 1个:条件运算符?:。个:条件运算符?:。(C运算符具优先级与结合性)运算符具优先级与结合性) C的运算符范围很宽,除了控制语句和输入输出以外的几乎所的运算符范围很宽,除了控制语句和输入输出以外的几乎所有的基本操作都作为运算符处理。有的基本操作都作为运算符处理。C运算符有以下几类运算符有以下几类 : 1.算术运算符算术

44、运算符 + , - , * , / , % , - , + , - - 2.关系运算符关系运算符 , = = , = , = , != 3.逻辑运算符逻辑运算符 ! , & , | 4.位运算符位运算符 &(位与位与), |(或或), (异或异或), (取反取反), (右移右移) 5.赋值运算符赋值运算符 = 和和赋值组合运算符赋值组合运算符(+= , -= , *= , /= , %=等)等) 6.条件运算符条件运算符 (1) ? (2) : (3) ( 如果如果(1)为真为真,则取则取(2),否则取否则取(3) ) 7.逗号运算符逗号运算符 , 8.指针运算符指针运算符 *

45、 , & 9.求字节运算符求字节运算符 sizeof 10.强制类型转换运算符强制类型转换运算符 (类型类型) 11.分量运算符分量运算符 . , - 12.下标运算符下标运算符 13.其它其它 (如函数调用运算符如函数调用运算符( )等等)C中各类运算符的优先级中各类运算符的优先级:初等运算符初等运算符( )、 、 单目运算符单目运算符!、!、+ +、 、+ 、 、(类型类型)算术运算符算术运算符 、/ 、% ,+、 关系运算符关系运算符、= ,= =、! =逻辑运算符逻辑运算符&、条件运算符条件运算符? :赋值运算符赋值运算符=、+=、 =、 =、/=、%=逗号运算符逗号运

46、算符,参见书参见书 P378379附录附录D3.5.2 算术运算符和算术表达式算术运算符和算术表达式 (1)算术运算符分二类:一元和二元运算符算术运算符分二类:一元和二元运算符 一元运算符:一元运算符: (取负取负)、+(自增自增)、- - (自减自减) 二元运算符:二元运算符: + - * / %注意:注意:+(自增自增)、- - (自减自减)一元运算符只针对变量一元运算符只针对变量 - + - * , / ,% + , -优先级优先级 :高高低低基本的算术运算符(基本的算术运算符(二元二元算术运算符)算术运算符): : (加法运算符,或正值运算符,如(加法运算符,或正值运算符,如: :、)

47、、) (减法运算符,或负值运算符,如(减法运算符,或负值运算符,如: :、)、)* * (乘法运算符,如(乘法运算符,如: :* *) (除法运算符,如(除法运算符,如: :) (模运算符,或称求余运算符,两侧均应为整型数据,(模运算符,或称求余运算符,两侧均应为整型数据,且符号与且符号与% %前的操作数同。前的操作数同。 如如: :的值为、的值为、- -的值为的值为- -、 - -的值为)。的值为)。算术表达式算术表达式 所谓所谓算术算术表达式表达式 : 用用算术算术运算符和括号将运算对运算符和括号将运算对象连接起来的、符合象连接起来的、符合C语法规则的式子,称为语法规则的式子,称为 C语言

48、语言算术算术表达式表达式 。这里运算对象包括这里运算对象包括 : 常量、变量、函数等,常量、变量、函数等,例如例如 :下面都是合法的:下面都是合法的C算术表达式。算术表达式。 a*b/c-1.5+a。 x+3 , x+y , x*y+3 , x/y+10%5 , x+sin(x) , sqrt(x).*表达式表达式 表达式表达式 : 用运算符和括号将运算对象连接起来用运算符和括号将运算对象连接起来 的、符合的、符合C语法规则的式子,称为语法规则的式子,称为 C语言表达语言表达 A式式 。 问题:问题: 在在C语言中如何将下列数学表达式语言中如何将下列数学表达式: 2sinxcosy a2+b2

49、+c2 +2bc 写成符合写成符合C语言规则的表达式?语言规则的表达式? 正确的正确的C语言表达式为:语言表达式为: 2*sin(x)*cos(y)/(sqrt(a*a+b*b+c*c)+2*b*c) 运算符的优先级和结合性运算符的优先级和结合性优先级:优先级:指同一个表达式中不同运算符进行计算指同一个表达式中不同运算符进行计算时的先后次序。时的先后次序。结合性:结合性:结合性是针对同一优先级的多个运算符结合性是针对同一优先级的多个运算符而言的,它是指同一个表达式中相同优先级的多而言的,它是指同一个表达式中相同优先级的多个运算应遵循的运算顺序。分为:个运算应遵循的运算顺序。分为: 左结合性左结

50、合性(自左向右结合方向):运算对象(自左向右结合方向):运算对象先与左面的运算符结合先与左面的运算符结合(大多数大多数)。 右结合性右结合性(自右向左结合方向):运算对象(自右向左结合方向):运算对象 先与右面的运算符结合先与右面的运算符结合(只有三个运算符:单目、只有三个运算符:单目、条件、赋值运算符条件、赋值运算符)。 参见书参见书P378 附录附录D运算符的优先级与结合性运算符的优先级与结合性 *使用时注意使用时注意 二二 点点 : (1) 两个整数相除,结果为整型两个整数相除,结果为整型,如果其中一个为实型,如果其中一个为实型, 则结果为则结果为 double型。例型。例 : 5/3

51、=1 , 3/5 = 0 , 3. 0/5 = 0.6 -5/3= -1 (向零取整向零取整 参见书参见书P56 24行行)(2) %运算符只适用于整数运算符只适用于整数(表示两个整数求余数)。(表示两个整数求余数)。 5%3=2 , 3%5=3 , 8%4=0 -7%4 = -3 , 7%-4=3 -7 %-4= -3(C语言规定:符号由被除数符号决定语言规定:符号由被除数符号决定) 而而 5. 2%3 不合法不合法 为了使算术表达式能按正确的法则运算,为了使算术表达式能按正确的法则运算,C规定了运算符的规定了运算符的优先级和结合性,在表达式求值时,对一个运算对象而言优先级和结合性,在表达式

52、求值时,对一个运算对象而言先按先按运算符的优先级别高低次序执行,如果优先级相同,再按结合运算符的优先级别高低次序执行,如果优先级相同,再按结合方向处理方向处理(其它高级语言无(其它高级语言无“结合性结合性”,此亦,此亦C语言特点之一)语言特点之一)。 自增、自减运算符自增、自减运算符 自增运算符自增运算符 + 自减运算符自减运算符 - - 自增、自减的作用是使变量的值增自增、自减的作用是使变量的值增1、减、减1。在程序中经常。在程序中经常 用作变量计数。用作变量计数。 例如:例如: + n 等价于等价于 n = n+1 - - n 等价于等价于 n = n - 1 还有另一种用法还有另一种用法

53、 : 例如:例如: n + 等价于等价于 n = n+1 n - - 等价于等价于 n = n - 1 +/- 在变量前或后区别在于在变量前或后区别在于 : +n / - - n 在使用在使用 n 之前,使之前,使 n 的值先加(或减)的值先加(或减)1 。 即先变化即先变化 n 后得到新的后得到新的 n 值,再作其它运算。值,再作其它运算。 n+/ n - - 在使用在使用 n之后,再使之后,再使 n 的值加(或减)的值加(或减)1。 即先使用原来的即先使用原来的 n 进行运算,再进行加(或减)进行运算,再进行加(或减)1 例如例如 : n = 3 ; m = n+ ; 结果是结果是 m 为

54、为 3 , n 为为 4 即即 n 值先赋给变量值先赋给变量m, 然后然后n自增自增1 n = 3 ; m = +n ; 结果是结果是 m 为为 4 , n 为为 4 即即 n 值先自增值先自增1, 然后赋给变量然后赋给变量m(3) 有关表达式使用中的问题有关表达式使用中的问题 1)注意自增、自减运算注意自增、自减运算,防止副作用防止副作用 2)表达式尽量规范表达式尽量规范注意注意 : (1)自增、自减运算符只能用于自增、自减运算符只能用于变量变量,不能用于常量或表达式。,不能用于常量或表达式。例如例如 : 5+ , (x + y) + 不允许不允许 (2)自增自增+、自减、自减 - -运算符

55、是运算符是自右至左自右至左结合的。结合的。例如例如 : -n+ 表示表示 -(n+) , 不允许不允许 (-n )+表达式表达式如果有语句如果有语句 : printf(%d, -n+) ;若若 n值为值为 3,则先输出,则先输出 -3;然后;然后 n加加 1,n变为变为4 .注意;并非注意;并非n加加1后取负!后取负! ANSI C ANSI C并没有具体规定表达式中的子表达式并没有具体规定表达式中的子表达式的求值顺序,允许各编译系统自己安排。的求值顺序,允许各编译系统自己安排。 例如:对表达式例如:对表达式 a = f1( )+f2( )a = f1( )+f2( ) 并不是所有的编译系统都

56、先调用并不是所有的编译系统都先调用f1( )f1( ), 然然后调用后调用f2( )f2( )。在有的情况下结果可能不同。有时。在有的情况下结果可能不同。有时会出现一些令人容易搞混的问题,因此务必要小会出现一些令人容易搞混的问题,因此务必要小心谨慎。调用先后顺序不同,结果可能不同。心谨慎。调用先后顺序不同,结果可能不同。 语言中有的运算符为一个字符,有的运算语言中有的运算符为一个字符,有的运算符由两个字符组成符由两个字符组成, ,为避免误解,最好采取大家都为避免误解,最好采取大家都能理解的写法。能理解的写法。 例如:不要写成例如:不要写成a+ba+b的形式,而应依原意写的形式,而应依原意写成成

57、(a+)+b(a+)+b或或a+(+b)a+(+b)的形式。的形式。#include#includevoid main()void main() int i=8; int i=8; printf(%dn,+i); printf(%dn,+i); printf(%dn,-i); printf(%dn,-i); printf(%dn,i+); printf(%dn,i+); printf(%dn,i-); printf(%dn,i-); printf(%dn,-i+); printf(%dn,-i+); printf(%dn,-i-); printf(%dn,-i-); 程序分析: i的初值为8

58、8,输出语句第1行i加1后输出故为9 9; 输出语句第2行减1后输出故为8 8; 第3行输出i为8 8之后再加1(为9); 第4行输出i为9 9之后再减1(为8) ; 第5行输出-8 8之后再加1(为9), 第6行输出-9 9之后再减1(为8)。 注意:i+和i之前的“”为负值运算符,因此按照结合性这两个表达式相当于(i+)和(i)。#includemain()int i=8;printf(%d,+i); printf(%dn,i); printf(%d,-i); printf(%dn,i); printf(%d,i+); printf(%dn,i); printf(%d,i-); print

59、f(%dn,i); printf(%d,-i+); printf(%dn,i); printf(%d,-i-); printf(%dn,i); 9,9 8,8 8,9 9,8 -8,9 -9,8 /* i加加1后输出后输出9 , i=9*/ /* i减减1后输出后输出8 ,i=8 */ /* i输出输出8之后再加之后再加1(i为为9) */ /* i输出为输出为9之后再减之后再减1(i为为8) */ /* 输出输出-8之后之后i再加再加1(i为为9) */ /* 输出输出-9之后再减之后再减1(i为为8)*/*自增,自减运算符的使用补充自增,自减运算符的使用补充1.1.赋值运算符赋值运算符 赋

60、值就是将一个数据值存储到一个变量中。注意,赋值就是将一个数据值存储到一个变量中。注意,赋值的对象只能是变量,而这个数据值既可以是常量,赋值的对象只能是变量,而这个数据值既可以是常量,也可以是变量,还可以是有确定值的表达式。赋值运也可以是变量,还可以是有确定值的表达式。赋值运算符记为算符记为“=”=”,其作用是将一个数据赋给一个变量。,其作用是将一个数据赋给一个变量。例如,例如,“a a3;”3;”其作用是执行一次赋值操作,表示将其作用是执行一次赋值操作,表示将常量常量3 3赋给变量赋给变量a a。2.2.赋值表达式赋值表达式 由赋值运算符由赋值运算符“= ”= ”将一个变量和表达式连接的将一个变量和表达式连接的式子称为赋值表达式。其一般形式为:式子称为赋值表达式。其一般形式为: 变量变量= =表达式表达式 例如:例如: x=sin(a)+(i+);x=sin(a)+(i+);对赋值表达式求解的过程是:对赋值表达式求解的过程是: 求赋值运算符右侧的求赋值运算符右侧的“表达式表达式”的值的值; ; 赋给赋值运算符左侧的变量。赋给赋值运算符左侧的变量。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论