语言第2章基础_第1页
语言第2章基础_第2页
语言第2章基础_第3页
语言第2章基础_第4页
语言第2章基础_第5页
已阅读5页,还剩76页未读 继续免费阅读

下载本文档

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

文档简介

1、第第2 2章章 C C语言基础语言基础C语言的字符集语言的字符集标识符标识符数据与数据与C语言的数据类型语言的数据类型常量常量变量变量运算符运算符数据的输入输出数据的输入输出l2.0 预备知识预备知识l计算机中数的表示及进制转换计算机中数的表示及进制转换l数码、基与权数码、基与权l数码:表示数的符号数码:表示数的符号l基:数码的个数基:数码的个数l权:每一位所具有的值权:每一位所具有的值l数制数制数制基权表示数码特点10,10,10,十进制数0910逢十进一二进制数0122,2,2,逢二进一八进制数0788,8,8,逢八进一十六进制数09,AF,af1616,16,16,逢十六进一十进制:49

2、56= 410+910 +510+610二进制:1011=12+02 +12+12十六进制:81AE=816+116 +1016+1416八进制:4275=48+28 +78+58l各种进制之间的转换各种进制之间的转换l二进制、八进制、十六进制转换成十进制二进制、八进制、十六进制转换成十进制l方法:按权相加方法:按权相加10012345259212120212121111011)()(例10012894868381136)()(例1001231679781610162161516121)()(例AFl各种进制之间的转换各种进制之间的转换(整数整数)l二进制、八进制、十六进制转换成十进制二进制、

3、八进制、十六进制转换成十进制l方法:按权相加方法:按权相加十进制转换成二进制、八进制、十六进制十进制转换成二进制、八进制、十六进制方法:连续除以基,从低到高记录余数,直至商为方法:连续除以基,从低到高记录余数,直至商为0例例 把十进制数把十进制数59转换成二进制数转换成二进制数5922921427232120(59)10=(111011)21101111 1 1 0 1 1余余余余余余例例 把十进制数把十进制数159转换成八进制数转换成八进制数1598198280(159)10=(237)82 3 7 余 7余 3余 2例例 把十进制数把十进制数459转换成十六进制数转换成十六进制数45916

4、28161160(459)10=(1CB)161 C B 余11余12余 1二进制与八进制之间的转换二进制与八进制之间的转换二进制转换成八进制:从右向左,每二进制转换成八进制:从右向左,每3位一组(不足位一组(不足3位左补位左补0),),转换成八进制转换成八进制八进制转换成二进制:用八进制转换成二进制:用3位二进制数代替每一位八进制数位二进制数代替每一位八进制数例 (1101001)2=(001,101,001)2=(151)8例 (246)8=(010,100,110)2=(10100110)2000 0001 1010 2011 3100 4101 5110 6111 7二进制与十六进制之

5、间的转换二进制与十六进制之间的转换二进制转换成十六进制:从右向左,每二进制转换成十六进制:从右向左,每4位一组(不足位一组(不足4位位左补左补0),转换成十六进制),转换成十六进制十六进制转换成二进制:用十六进制转换成二进制:用4位二进制数代替每一位十六位二进制数代替每一位十六进制数进制数例 (11010101111101)2=(0011,0101,0111,1101)2=(357D)16例 (4B9E)16=(0100,1011,1001,1110)2=(100101110011110)20000 00001 10010 20011 30100 40101 50110 60111 71000

6、 81001 91010 A1011 B1100 C1101 D1110 E1111 Fl字节和位字节和位l内存以字节为单元组成内存以字节为单元组成l每个字节有一个地址每个字节有一个地址l一个字节一般由一个字节一般由8个二进制位组成个二进制位组成l每个二进位的值是每个二进位的值是0或或1012345678910.01234567013452l数值的表示方法数值的表示方法原码、反码和补码原码、反码和补码l原码:最高位为符号位,其余各位为数值本身的绝对原码:最高位为符号位,其余各位为数值本身的绝对值值l反码:反码:l正数:反码与原码相同正数:反码与原码相同l负数:符号位为负数:符号位为1,其余位对

7、原码取反,其余位对原码取反l补码:补码:l正数:原码、反码、补码相同正数:原码、反码、补码相同l负数:最高位为负数:最高位为1,其余位为原码取反,再对整个数加,其余位为原码取反,再对整个数加1原码原码反码反码补码补码+7000001110000011100000111-7100001111111100011111001+0000000000000000000000000-0100000001111111100000000(用一字节表示数)(用一字节表示数) 2.1数据与数据与C语言的数据类型语言的数据类型l数据是对客观事物的符号表示。数据是对客观事物的符号表示。l 是所有能被输入到计算机中,且

8、能被计算机处理的是所有能被输入到计算机中,且能被计算机处理的符号符号(数字、字符等数字、字符等)的集合,它是计算机操作对象的总称。的集合,它是计算机操作对象的总称。l在程序中对各种数据进行处理之前都要对其类型预先进行在程序中对各种数据进行处理之前都要对其类型预先进行说明。说明。l 一是便于为数据分配相应的存储空间;一是便于为数据分配相应的存储空间;l 二是说明了程序处理数据时应采用何种运算方法(操二是说明了程序处理数据时应采用何种运算方法(操作)。作)。l 数组类型(数组类型( )结构体类型(结构体类型(struct)共用体类型(共用体类型(union)实型实型单精度型(单精度型(float)

9、 双精度型(双精度型(double)l2.1 数据与数据与C语言的数据类型语言的数据类型l数据类型总表数据类型总表数据类型决定:1. 数据占内存字节数2. 数据取值范围3. 其上可进行的操作字符型(字符型(charchar)整型(整型(short,int,long,unsignedshort,int,long,unsigned)基本类型基本类型数据类型数据类型构造类型构造类型指针类型(指针类型(*)空类型(空类型(void)枚举类型(枚举类型(enum)l基本数据类型基本数据类型类型符号关键字数的表示范围所占字节整型字符型实型有无signed short int 2-3276832767sig

10、ned int 4-21474836482147483647signed long int 4-214748364821474836474unsigned int0 40 unsigned longunsigned short2065535有float4-3.4e383.4e38有double8-1.798e3081.798e308有char1-128127无unsigned char10255说明: 数据类型所占字节数随编译系统不同而不完全相同。 如:Turbo C中int 占2字节,CodeBlocks和VC中int占4字节。 01 11 11 11 11 11 11 11short:最大

11、最大:3276710 00 00 00 00 00 00 00最小最小:-3276811 11 11 11 11 11 11 11unsigned short:最大最大:6553500 00 00 00 00 00 00 00最小最小:0void main()int num,total; num=15; total=num*8; printf(%d,total);#define PRICE 8void main()int num,total; num=15; total=num*PRICE; printf(%d,total);用一个用一个c程序:程序:说明:说明:l一般用大写字母l是宏定义预处

12、理命令,不是C语句如如 #define PRICE 30l常量常量l定义:程序运行时其值不能改变的量(即常数)定义:程序运行时其值不能改变的量(即常数)l分类分类: :l符号常量符号常量: :用标识符代表常量用标识符代表常量l定义格式:定义格式: #define #define 符号常量符号常量 常量常量#define PRICE 30#include void main() int num,total; num=10; total=num*PRICE; printf(total=%dn,total);运行结果:total=300l2.2 常量及其类型常量及其类型l常量常量l定义:程序运行时其

13、值不能改变的量(即常数)定义:程序运行时其值不能改变的量(即常数)l分类分类: :l符号常量符号常量: :用标识符代表常量用标识符代表常量l定义格式:定义格式: #define #define 符号常量符号常量 常量常量l定义格式:定义格式: const const 类型类型 符号常量符号常量 = = 常量常量例如:例如:const float pi = 3.1425926;l定义格式: const 类型 符号常量 = 常量l直接常量:l整型常量 l实型常量 l字符常量 l字符串常量l常量常量l定义:程序运行时其值不能改变的量(即常数)定义:程序运行时其值不能改变的量(即常数)l分类分类: :

14、l符号常量符号常量: :用标识符代表常量用标识符代表常量l定义格式:定义格式: #define #define 符号常量符号常量 常量常量&整型常量(整常数)整型常量(整常数)&三种形式:三种形式:&十进制整数:由数字十进制整数:由数字0909和正负号表示。如和正负号表示。如 123,- 123,-456,0456,0&八进制整数:由数字八进制整数:由数字0 0开头开头, ,后跟数字后跟数字0707表示。如表示。如0123,0110123,011&十六进制整数:由十六进制整数:由0 x0 x开头开头, ,后跟后跟09,af,AF09,af,AF表示。表示

15、。 如如0 x123,0Xff0 x123,0Xff例例 12 与与 12L例例 30000 为为 int 型型 65536 为为 int 型型l整型常量的类型整型常量的类型l默认为默认为intint类型类型l在整常量后加字母在整常量后加字母l l或或L L,认为它是,认为它是long int long int 型常量型常量问题:0123 = ( )100 x123 = ( )100Xff = ( )1083291255问题:0123 = ( )100 x123 = ( )100Xff = ( )10&实型常量(实数或浮点数)实型常量(实数或浮点数)&表示形式:表示形式:&am

16、p;十进制数形式:(必须有小数点)十进制数形式:(必须有小数点) 如如0.123, .123, 123.0, 0.0, 123.0.123, .123, 123.0, 0.0, 123.&指数形式:(指数形式:(e e或或E E之前必须有数字;指数必须之前必须有数字;指数必须为整数)如为整数)如12.3e3 ,123E2, 1.23e4 , e-5 , 12.3e3 ,123E2, 1.23e4 , e-5 , 1.2E-3.5 1.2E-3.5 l实型常量的类型实型常量的类型l默认默认doubledouble型型l在实型常量后加字母在实型常量后加字母f f或或F F,认为它是,认为它

17、是float float 型型aaa21&字符常量字符常量&定义定义: :用单引号括起来的单个普通字符或转义字符用单引号括起来的单个普通字符或转义字符. . l字符常量的值:该字符的字符常量的值:该字符的ASCIIASCII码值码值如如 101 -A 012 -n 376 - x61 -a 60 -0 483 -()例:A-101-x41-65如如 A65 A65, a97 a97, 048 048, n10 n10如 a A ? n 101l转义字符转义字符: :反斜线后面跟一个字符或一个代码值表示反斜线后面跟一个字符或一个代码值表示例例 转义字符举例转义字符举例main()

18、 printf(101 x42 Cn); printf(I say:How are you?n); printf(C Programn); printf(Turbo C);运行结果:运行结果:(屏幕显示屏幕显示)A B CI say:How are you? C ProgramTurbo C例例 main() printf(Yb=n); 运行结果:运行结果:屏幕显示:屏幕显示:=打印机输出:打印机输出:转义字符转义字符含义含义转义字符转义字符含义含义n换行换行t水平制表水平制表r回车回车b退格退格a响铃响铃反斜线反斜线单引号单引号“双引号双引号ddd1-3位位8进制数进制数代表的字符代表的字符

19、xhh1-2位位16进制进制数代表的字符数代表的字符转义字符及其含义:转义字符及其含义:b _above $123M.D.John3days#33char$123abl变量变量l概念:其值可以改变的量概念:其值可以改变的量l变量名与变量值变量名与变量值l变量定义的一般格式:变量定义的一般格式:l 数据类型数据类型 变量变量1,变量,变量2,变量,变量n;l变量初始化变量初始化:定义时赋初值定义时赋初值 例: int a,b,c; float data;决定分配字节数和数的表示范围合法标识符例: int a=2,b,c=4; float data=3.67; char ch=A; int x=1

20、,y=1,z=1; int x=y=z=1;l变量的使用:先定义,后使用变量的使用:先定义,后使用例1 int student; stadent=19; /Undefined symbol statent in function main 例2 float a,b,c; c=a%b; /Illegal use of floating point in function main l变量定义位置:一般放在函数开头变量定义位置:一般放在函数开头main() int a,b=2; float data; a=1; data=(a+b)*1.2; printf(data=%fn,data);变量定义可

21、执行语句main() int a,b=2; a=1; float data; data=(a+b)*1.2; printf(data=%fn,data);编译程序根据变量定义为其分配指定字节的内存单元.地址int a=1, b=-3,c;abc4字节4字节4字节地址地址.内存1-3随机数&整型变量整型变量&占字节数随系统不同而不同占字节数随系统不同而不同&shortintlongshortintlong&可用可用sizeof(sizeof(类型标识符)测量类型标识符)测量&实型变量实型变量&floatfloat:占:占4 4字节,提供字节,提供7

22、 7位有效数字位有效数字&doubledouble:占:占8 8字节,提供字节,提供15161516位有效数字位有效数字&字符型变量字符型变量&字符变量存放字符字符变量存放字符ASCIIASCII码码&charchar与与intint数据间可进行算术运算数据间可进行算术运算例例 float a;a=111111.111; /* a=111111.1*/double b;b=111111.111; /* b=111111.111*/例 a=D; /* a=68; */ x=A+5; /* x=65+5; */ s=!+G /* s=33+71; */没有字符串变量

23、,用字符数组存放例例 #define PRICE 12.5 main() int num=3; float total; char ch1,ch2=D; total=num*PRICE; ch1=ch2-A+a; printf(total=%f,ch1=%cn,total,ch1); 宏定义变量定义输出结果运行结果:total=37.500000, ch1=d2.4 2.4 运算符运算符C运运算算符符算术运算符:(算术运算符:(+ - + - * * / % + - / % + -)关系运算符:(关系运算符:( = != = !=)逻辑运算符:(!逻辑运算符:(! & | &

24、|)位运算符位运算符 :(:( | & | &)赋值运算符:(赋值运算符:(= = 及其扩展)及其扩展)条件运算符:(条件运算符:(?:?:)逗号运算符:(逗号运算符:(, ,)指针运算符:(指针运算符:(* * & &)求字节数求字节数 :(:(sizeofsizeof)强制类型转换:(类型)强制类型转换:(类型)分量运算符:(分量运算符:(. -. -)下标运算符:(下标运算符:()其它其它 :(:(( ) -( ) -)l学习运算符应注意:学习运算符应注意:l运算符功能运算符功能l与运算量关系与运算量关系l要求运算量个数要求运算量个数l要求运算量类型要求运

25、算量类型l运算符优先级别运算符优先级别l结合方向结合方向l结果的类型结果的类型2.4.1 算术运算符和表达式算术运算符和表达式基本算术运算符:基本算术运算符: + - * / %结合方向:从左向右结合方向:从左向右优先级:优先级: - -* / % - + - (2) (3) (4) 说明:说明:“-”为单目运算符时为单目运算符时,右结合性右结合性两整数相除,结果为整数两整数相除,结果为整数%要求两侧均为整型数据要求两侧均为整型数据例 5/2 = -5/2.0 =例 5%2 = -5%2 = 1%10 = 5%1 = 5.5%2例 5/2 = 2 -5/2.0 = -2.5例 5%2 = 1

26、-5%2 = -1(取被除数符号) 1%10 = 1 5%1 = 0 5.5%2 ()l自增、自减运算符自增、自减运算符 + - + -l作用:使变量值加作用:使变量值加1 1或减或减1 1l种类:种类:l前置前置 +i, -i ( +i, -i (先执行先执行i+1i+1或或i-1i-1,再使用,再使用i i值)值)l后置后置 i+,i- ( i+,i- (先使用先使用i i值值, ,再执行再执行i+1i+1或或i-1i-1)例 j=3; k=+j; j=3; k=j+; j=3; printf(%d,+j); j=3; printf(%d,j+); a=3;b=5;c=(+a)*b; a=

27、3;b=5;c=(a+)*b; /k=4,j=4/k=3,j=4/4/3/c=20,a=4/c=15,a=4l自增、自减运算符自增、自减运算符 + - + -l作用:使变量值加作用:使变量值加1 1或减或减1 1l种类:种类:l前置前置 +i, -i ( +i, -i (先执行先执行i+1i+1或或i-1i-1,再使用,再使用i i值)值)l后置后置 i+,i- ( i+,i- (先使用先使用i i值值, ,再执行再执行i+1i+1或或i-1i-1)说明:说明:+ - + - 不能用于常量和表达式不能用于常量和表达式, ,如如5+5+,(a+b)+(a+b)+ -+ -结合方向:结合方向: 自

28、右向左自右向左优先级:优先级:- + - - + - -* * / % -+ - / % -+ - (2) (3) (4) (2) (3) (4)例例 -i+ -i+ -(i+) -(i+) i=3; printf(%d,-i+); /-3 i=3; printf(%d,-i+); /-3 例例 -i+ -i+ i=3; printf(%d,-i+); i=3; printf(%d,-i+); #include void main() int a=3,b=5,c=15,d=2; printf(%dn,6-a*b/c%d); printf(%dn,+a-a+); printf(%dn,a); l

29、不同类型数据间的转换不同类型数据间的转换l隐式转换(自动类型转换)隐式转换(自动类型转换)l什么情况下发生什么情况下发生l运算转换运算转换-不同类型数据混合运算时不同类型数据混合运算时l赋值转换赋值转换-把一个值赋给与其类型不同把一个值赋给与其类型不同的变量时的变量时l输出转换输出转换-输出时转换成指定的输出格输出时转换成指定的输出格式式l函数调用转换函数调用转换-实参与形参类型不一致实参与形参类型不一致时转换时转换l运算转换规则运算转换规则: :不同类型数据运算时先自动转不同类型数据运算时先自动转换成同一类型换成同一类型说明说明:必定的转换必定的转换运算对象类型不同时转换运算对象类型不同时转

30、换例例 char ch; int i; float f; double d;ch/i + f*d - (f+i) floatfloatintintdoubledoubledoubledoubledoublefloatlongunsignedintchar,short低低高高【例】【例】 算术表达式计算自动类型转换规则算术表达式计算自动类型转换规则 #include void main() char ch=a; int i=5; unsigned int j=6; long k=12; float f=3.0; double d=6.0; printf(%lfn,ch/i+i*k-(j+k)*(

31、f*d)/(f+i); 38.500000l显式转换(强制转换)显式转换(强制转换)l一般形式:(类型名)(表达式)一般形式:(类型名)(表达式)l例例 (int)(x+y) (int)(x+y)l (int)x+y (int)x+yl (double)(3/2) (double)(3/2)l (int)3.6 (int)3.6 l说明:强制转换得到所需类型的中间变量,原说明:强制转换得到所需类型的中间变量,原变量类型不变变量类型不变 例例 main() float x; int i; x=3.6; i=(int)x; printf(x=%f,i=%d,x,i); 结果:结果:x=3.6000

32、00,i=32.4.2 赋值运算符和表达式赋值运算符和表达式简单赋值运算符简单赋值运算符符号:符号: =格式:格式: 变量标识符变量标识符=表达式表达式作用:将一个数据(常量或表达式)赋给一个变作用:将一个数据(常量或表达式)赋给一个变量量l复合赋值运算符复合赋值运算符l种类:种类:+= -= += -= * *= /= %= = /= %= = = = &= = &= = |= |=l含义:含义: exp1 op= exp2 exp1 op= exp2 exp1 = exp1 op exp1 = exp1 op exp2exp2a+=3a=a+3x*=y+8x=x*(y+8)

33、x%=3x=x%3例 a=3; d=func(); c=d+2;l说明说明: :l结合方向:自右向左结合方向:自右向左l优先级优先级: 14: 14l左侧必须是变量,不能是常量或表达式左侧必须是变量,不能是常量或表达式赋值转换规则赋值转换规则: :使赋值号右边表达式值自动转换使赋值号右边表达式值自动转换成其左边变量的类型成其左边变量的类型例 3=x-2*y; a+b=3;例例 float f; float f; int i; int i; i=10; i=10; f=i; f=i;则则 f=10.0 f=10.0例例 int i; i=2.56; /结果结果i=2;例: a=b=c=5 a=(

34、b=5) a=5+(c=6) a=(b=4)+(c=6) a=(b=10)/(c=2)/表达式值为5,a,b,c值为5/ b=5;a=5/表达式值11,c=6,a=11/表达式值10,a=10,b=4,c=6/表达式值5,a=5,b=10,c=2赋值表达式的值与变量值相等赋值表达式的值与变量值相等,且可嵌套且可嵌套说明说明: :结合方向:自右向左结合方向:自右向左优先级优先级: 14: 14左侧必须是变量,不能是常量或表达式左侧必须是变量,不能是常量或表达式说明说明: :结合方向:自右向左结合方向:自右向左优先级优先级: 14: 14左侧必须是变量,不能是常量或表达式左侧必须是变量,不能是常量

35、或表达式赋值表达式的值与变量值相等赋值表达式的值与变量值相等,且可嵌套且可嵌套例例: a=12; : a=12; a+=a-=a a+=a-=a* *a a例例: int a=2; : int a=2; a%=4-1; a%=4-1; a+=a a+=a* *=a-=a=a-=a* *=3; =3; /a=-264 /a=-264 等价于等价于a=a+(a=a-(aa=a+(a=a-(a* *a)a)/a=0 /a=0 等价于等价于a=a+(a=aa=a+(a=a* *(a=a-(a=a(a=a-(a=a* *3)3)2.4.3 逗号运算符和表达式逗号运算符和表达式形式:表达式形式:表达式1,

36、表达式表达式2,表达式表达式n结合性结合性:从左向右从左向右优先级优先级: 15逗号表达式的值:等于表达式逗号表达式的值:等于表达式n的值的值用途:常用于循环用途:常用于循环for语句中语句中例例 a=3*5,a*4 a=3*5,a*4,a+5例例 x=(a=3,6*3) x=a=3,6*a例例 a=1;b=2;c=3; printf(%d,%d,%d,a,b,c); printf(%d,%d,%d,(a,b,c),b,c); /a=15,表达式值表达式值60/a=15,表达式值表达式值20/赋值表达式,表达式值赋值表达式,表达式值18,x=18/逗号表达式逗号表达式,表达式值表达式值18,x

37、=3/1,2,3/3,2,32.4.3 逗号运算符和表达式逗号运算符和表达式形式:表达式形式:表达式1,表达式表达式2,表达式表达式n结合性结合性:从左向右从左向右优先级优先级: 15逗号表达式的值:等于表达式逗号表达式的值:等于表达式n的值的值用途:常用于循环用途:常用于循环for语句中语句中例例:/*ch2_6.c*/#include main() int x,y=7; float z=4; x=(y=y+6,y/z); printf(x=%dn,x);运行结果:运行结果:x=32.4.4 关系运算符和表达式关系运算符和表达式关系运算符关系运算符种类:种类: = !=结合方向:自左向右结合

38、方向:自左向右优先级别:优先级别:=!=优先级优先级6(高)(高)优先级优先级7(低)(低)例例 ca+b /c(a+b) ca+b /c(a+b) ab!=c /(ab)!=c ab!=c /(ab)!=c a=bc /a=(bc) a=bc /a=(bc /a=(bc) a=bc /a=(bc)关系表达式的值:是逻辑值关系表达式的值:是逻辑值“真真”或或“假假”,用,用1和和0表示表示例例 int a=3,b=2,c=1,d,f; ab (ab)=c b+cb f=abc/表达式值表达式值1/表达式值表达式值1/表达式值表达式值0/d=1/f=0关系运算注意:关系运算注意:例例 若若a=0

39、; b=0.5; x=0.3; 则则 a=x278在在C中是允许的,中是允许的, 值为值为0例例 int i=1, j=7,a; a=i+(j%4!=0); 则则a=2例例 a0 结果为结果为 A100 结果为结果为10关系运算注意:关系运算注意:例例 注意区分注意区分“=”与与“=” int a=0,b=1; if(a=b) printf(a equal to b); else printf(a not equal to b);例例 应避免对实数作相等或不等的判断应避免对实数作相等或不等的判断如如 1.0/3.0*3.0=1.0可改写为:可改写为:fabs(1.0/3.0*3.0-1.0)1

40、e-6ab!a!ba&ba|b真假真假假假真真2.4.5 逻辑运算符和表达式逻辑运算符和表达式 逻辑运算符逻辑运算符种类:种类: ! & |逻辑运算真值表逻辑运算真值表C C语言中语言中, , 运算量运算量: 0: 0表示表示“假假” 非非0 0表示表示“真真” 运算结果运算结果: 0: 0表示表示“假假” 1 1表示表示“真真”真假假假假假真真假假真真真假真真! (2)& (11)| (12)高高低低例例 a=x & x=b a=x & xb&xy ab&xy a=b|x=y a=b|x=y !a|ab !a|abl优先级:l结合方向:

41、! :从右向左& :从左向右| :从左向右 / (a=x) & (xb)&(xy)/(a=b)|(x=y)/(!a)|(ab)! (2)& (11)| (12)高高低低l优先级:l结合方向:! :从右向左& :从左向右| :从左向右例例 a=4;b=5; !a a&b a|b !a|b 4&0|2 53&2|84-!0 c&d值为值为1值为值为0值为值为1值为值为1值为值为1值为值为1/(53)&2|(8(4-(!0) 值为值为1! (2)& (11)| (12)高高低低l优先级:l结合方向:! :从右向左

42、& :从左向右| :从左向右短路特性:逻辑表达式求解时,并非所有的逻辑运算符短路特性:逻辑表达式求解时,并非所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符表达式的解时,才执行该运算符例例 a&b&c /只在只在a为真时,才判别为真时,才判别b的值;的值; 只在只在a、b都为真时,才判别都为真时,才判别 c的值的值例例 a|b|c /只在只在a为假时,才判别为假时,才判别b的值;的值; 只在只在a、b都为假时,才判别都为假时,才判别 c的值的值例例 a=1;b=2;c=3;d=4

43、;m=1;n=1; (m=ab)&(n=cd)/结果m=0,n=11【例】逻辑表达式的计算和逻辑表达式的值。【例】逻辑表达式的计算和逻辑表达式的值。 #include #define EOF 1 void main() int a=3,b=4,c=5; printf(%dn,3*(a+b)c&a+|c!=0&!EOF); ?会写逻辑式会写逻辑式1.1.判断两个变量能不能整除,能不能被判断两个变量能不能整除,能不能被2 2整除等。整除等。2.2.判断输入的三条边能不能构成三角形。判断输入的三条边能不能构成三角形。3.3.判断一个数判断一个数x x是否属于某区间是否属于某区

44、间a,ba,b。4.4.闰年的判断方法:能被闰年的判断方法:能被4 4整除但不能被整除但不能被100100整除,整除,或者能被或者能被100100整除也能被整除也能被400400整除。整除。2.4.6 条件运算符与表达式条件运算符与表达式 一般形式:一般形式: 表达式表达式1 ? 表达式表达式2 : 表达式表达式3执行过程执行过程求两个数据的最大值?求两个数据的最大值?表达式表达式1取表达式取表达式2值值取表达式取表达式3值值非非0=0例例 (a=b)? Y:N (x%2=1)?1:0 (x=0)?x:-x (c=a & cb?a:b;2.4.6 条件运算符与表达式条件运算符与表达式

45、53条件运算符可嵌套条件运算符可嵌套 如如 x0?1:(xb?a:cd?c:d ab?a:(cd?c:d)表达式表达式1、表达式、表达式2、表达式、表达式3类型可不同,表达式值取类型可不同,表达式值取较高的类型较高的类型例例 x? a:b /x=0,表达式值为表达式值为b; x0,表达式值为表达式值为a xy?1:1.5 /xy ,值为值为1.0; x=y ,值为值为1.554条件表达式的使用条件表达式的使用 条件表达式常用在赋值语句中代替条件表达式常用在赋值语句中代替if-else语句。语句。2.4.7 测试数据长度运算符测试数据长度运算符 为了能够确定某一种类型数据的长度,为了能够确定某一

46、种类型数据的长度,C语言提供了测试数语言提供了测试数据长度运算符据长度运算符sizeof,它的一般格式为:,它的一般格式为: sizeof (exp)其中,其中,exp可以是类型关键字、变量或表达式。其功能是给出可以是类型关键字、变量或表达式。其功能是给出exp所代表的数据类型、变量或表达式占用的内存字节数。所代表的数据类型、变量或表达式占用的内存字节数。 sizeof(double), sizeof(x), sizeof(a+b), sizeof(3*1.46/7.28) sizeof是一元运算符,它的优先级与是一元运算符,它的优先级与+、-、&、等相同,等相同,结合性为从右至左。结

47、合性为从右至左。【例】用【例】用sizeof测试测试CodeBlocks中各种数据类型的长度。中各种数据类型的长度。 #include void main() char ch=a; int x=5,y=6; float a=1.28f,b=3000.0f; printf(char:%dn,sizeof(ch); printf(short int:%d int:%d long int:%dn, sizeof(short int),sizeof(int),sizeof (long int); printf(float:%dn,sizeof(a); printf(double:%d long dou

48、ble:%dn, sizeof(double),sizeof(long double); printf(int express:%dn,sizeof(x+y); printf(float express:%dn,sizeof(a+b); printf(character express:%dn,sizeof(a-0); 2.4.8 常用数学函数常用数学函数sin(x)x的正弦,值域为的正弦,值域为-1,1cos(x)x的余弦,值域为的余弦,值域为-1,1tan(x)x的正切的正切asin(x)x的反正弦,定义域为的反正弦,定义域为-1,1,值域为,值域为-/2,/2acos(x)x的反余弦,定

49、义域为的反余弦,定义域为-1,1,值域为,值域为0,atan(x)x的反正切,定义域为的反正切,定义域为-1,1atan2(y,x)y/x的反正切,的反正切,y/x的取值范围为的取值范围为-1,1sinh(x)x的双曲正弦,即的双曲正弦,即(ex-e-x)/2cosh(x)x的双曲余弦,即的双曲余弦,即(ex+e-x)/2tanh(x)x的双曲正切,即的双曲正切,即(ex-e-x)/(ex+e-x)exp(x)指数函数,指数函数,exlog(x)自然对数,即自然对数,即lnx,x0log10(x)常用对数,即常用对数,即lgx,x0pow(x,y)xy,若,若x=0且且y0,或,或x0但但y不

50、是整数时出错不是整数时出错pow10(n)幂函数,幂函数,10nsqrt(x)x的平方根,的平方根,x0ceil(x)不小于不小于x的最小整数,的最小整数,double型函数,如:型函数,如:ceil(1.02)=2.0,ceil(-1.02)=-1.0floor(x)不大于不大于x的最大整数,的最大整数,double型函数,如:型函数,如:floor(1.02)=1.0, floor(-1.02)=-2.0fabs(x)x的绝对值的绝对值fmod(x,y)x/y的浮点余数,其符号与的浮点余数,其符号与x相同。例如:相同。例如:fmod(10.0,3.0)=1.0作业作业(下次课可能的测试题目

51、下次课可能的测试题目)1.从键盘输入一个从键盘输入一个4位整数,编程将此位整数,编程将此4位数逆置后输位数逆置后输出。如输入出。如输入1234,输出,输出4321。2.求下面表达式的值后编程验证:求下面表达式的值后编程验证: (1) x+a%3*(int)(x+y)%2/4 设设x=2.5,a=7,y=4.7 (2) (float)(a+b)/2+(int)x%(int)y 设设a=2,b=3,x=3.5,y=2.53.设圆半径为设圆半径为7,编写程序,求圆的周长和面积。,编写程序,求圆的周长和面积。格式格式: putchar( c ): putchar( c )参数参数: c: c为字符常量

52、、变量或表达式为字符常量、变量或表达式功能:把字符功能:把字符c c输出到显示器上输出到显示器上返回值:为显示字符的代码值。返回值:为显示字符的代码值。 2.5 不同类型数据的输入与输出不同类型数据的输入与输出5C语言无语言无I/O语句,语句,I/O操作由函数实现操作由函数实现5 #include 5数据输出数据输出5单个字符输出函数单个字符输出函数putchar()#include main() int c; char a; c=65; a=B; putchar(c); putchar(n); putchar(a);运行结果:运行结果:A B举例:举例:格式:格式:printf(printf

53、(格式控制串格式控制串 ,输出表,输出表) )功能:按指定格式向显示器输出数据功能:按指定格式向显示器输出数据返回值:返回输出数据字节数返回值:返回输出数据字节数l格式输出函数格式输出函数printf()l输出表:要输出的数据输出表:要输出的数据l (可以没有,多个时以(可以没有,多个时以“,”分隔)分隔)l格式控制串:包含两种信息格式控制串:包含两种信息l格式说明:格式说明: %修饰符修饰符格式字符格式字符 ,l 用于指定输出格式用于指定输出格式l普通字符或转义序列:原样输出普通字符或转义序列:原样输出l格式字符格式字符d,ix,Xoucse,Efg,G%格式字符:格式字符:十六进制无符号整

54、数十六进制无符号整数不带符号十进制整数不带符号十进制整数十进制整数十进制整数指数形式浮点小数指数形式浮点小数单一字符单一字符字符串字符串八进制无符号整数八进制无符号整数小数形式浮点小数小数形式浮点小数e和和f中较短一种中较短一种百分号本身百分号本身int a=567; printf (%d,a);int a=255; printf(%x,a);int a=65; printf(%o,a);int a=567; printf(%u,a);char a=65; printf(%c,a);printf(%s, ABC);float a=567.789; printf(%e,a);float a=56

55、7.789; printf(%f,a);float a=567.789; printf(%g,a);printf(%);567ff101567AABC5.677890e+002567.789001567.789%说明说明格式字符除格式字符除X、E、G外要用小写外要用小写格式字符与输出项个数应相同,按先后顺序一一对应格式字符与输出项个数应相同,按先后顺序一一对应输出转换输出转换:格式字符与输出项类型不一致格式字符与输出项类型不一致,自动按指定格自动按指定格式输出式输出例例 int a=3,b=4; printf(%d %dn,a,b); printf(a=%d , b=%dn,a,b);输出结果

56、输出结果: 3 4 a=3, b=4例例 main() main() unsigned int u= unsigned int u= ; ; printf( printf( u=%dn,u);u=%dn,u); 输出结果:输出结果:u=-1u=-111 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11附加格式说明符(修饰符)附加格式说明符(修饰符).n对实数,指定小数点后位数(四舍五入)对字符串,指定实际输出位数修饰符功 能m输出数据域宽,数据长度m,左补空格;否则按实际输出输出数据在域内左对齐(缺省右对齐)-指定在有符号数的正数前显示正号(+)+输出数

57、值时指定左面不使用的空位置自动填00在八进制和十六进制数前显示前导0,0 x#在d,o,x,u前,指定输出精度为long型在e,f,g前,指定输出精度为double型l例例 int a=1234; float f=123.456; char ch=a; printf(%8d,%2dn,a,a); printf(%f,%8f,%8.1f,%.2f,%.2e,%gn,f,f,f,f,f,f); printf(%3cn,ch);例例(ch3-2.c) m.n例ch3-3.c char a=Hello,world! ; printf(%sn%15sn%10.5sn%2.5sn%.3sn,a,a,a,a

58、,a);运行结果:例 int a=1234; float f=123.456; char c=Hello,world! ; printf(%8d,%-8d#n,a,a); printf(%10.2f,%-10.1f#n,f,f); printf(%10.5s,%-10.3s#n,c,c);运行结果运行结果例例ch3-4.c -例例 int a=1234; float f=123.456; printf(%08dn,a); printf(%010.2fn,f); printf(%0+8dn,a); printf(%0+10.2fn,f); 例例 ch3-5.c 0 、+例例 int a=123;

59、 printf(%o,%#o,%X,%#Xn,a,a,a,a); 例例 ch3-6.c #例例 l00001234 0000123.46 .46173,0173,7B,0X7B例例 long a=655366789; printf(%d,%8ldn,a, a); 655366789 ,655366789格式说明类型表(总结)格式说明类型表(总结)格式说明符格式说明符说明量的类型说明量的类型d、i、o、 x 、 u整型整型c字符型字符型s字符串字符串f、e、g浮点型浮点型 格式说明符应和输出的列表项对应,产生相应的输出。其格式说明符应和输出的列表项对应,产生相应的输出。其中输出的表项应与格式说明

60、符类型一致。中输出的表项应与格式说明符类型一致。printf(a=%5dnb=%f , 2+3, 5.34);格式说明串的一般形式和意义格式说明串的一般形式和意义% - m.n l 格式类型字符(一个字母)格式类型字符(一个字母)格式说明标志格式说明标志对齐方式:缺省为右对齐,对齐方式:缺省为右对齐,-为左对齐。为左对齐。 宽度宽度.精度精度(位数位数),宽度:输出总列数,宽度:输出总列数,精度:小数位数(或字符个数)。精度:小数位数(或字符个数)。类型长度,缺省整型,类型长度,缺省整型,l表示表示long或或double。格式格式: getchar( ): getchar( )功能:从键盘读

61、一字符功能:从键盘读一字符返回值:读取字符的代码值。返回值:读取字符的代码值。 数据输入单字符输入函数getchar()例例 #include main() int c; printf(Enter a character:); c=getchar(); printf(%c-hex%xn,c,c);运行结果:运行结果:Enter a character:AA-hex41l格式输入函数格式输入函数scanf()格式格式: scanf(: scanf(格式控制串格式控制串 ,地址表),地址表)功能:按指定格式从键盘读入数据,存入地址表功能:按指定格式从键盘读入数据,存入地址表 指定的存储单元中指定的存储单元中, ,并按回车键结束并按回车键结束返回值:正常,返回输入数据

温馨提示

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

评论

0/150

提交评论