资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,第二章 程序设计初步,程序基本构成,数据类型,常量与变量,不同类型数据间的转换,运算符和表达式,2.0,程序基本构成,举例:求两数之和。,#include ,main ( ) / *,主程序 *,/,int a , b , sum ; / *,定义变量 *,/,a=2,;,b=3,;,sum=a+b,;,printf,(”,sum is %d n”,,,sum,);,说明:,main,()表示主函数,函数体由一对大括号, ,扩起来;,/*/,表示注释部分,不运行;第,2,行是变量定义部分,定义了,3,个整型变量;,3,,,4,行是算法实现部分;第,5,行,printf,是,C,语言的标准输出函数,,%d,表示在此位置以“十进制整数类型”输出变量,sum,的值,,n,为回车换行,引号中其它内容作为字符串原样输出。因此该程序运行结果为:,sum is 5,语言程序设计,第二章数据描述,C,2.0,程序基本构成,总结,C,程序的基本结构:,(,1,),C,程序是由一个或多个函数组成。一个程序至少要包含一个,main,函数,,main,后()可以为空,但不能省略,不论,main,函数放到何处,,C,程序总是从,main,函数开始执行,(,2,)函数的开头和结尾用一对, ,括起来,函数体由两部分组成:定义部分和 执行部分,(,3,),/*/,表示注释,程序运行中不起任何作用。,(,4,)每个语句必须用“,;”,作为结束标志。,(,5,),C,语言区分大小写,(,6,),#include,表示命令行,必须以“,#”,开头,结尾不能加分号。(见附录,8 P274,),语言程序设计,第二章数据描述,C,2.1,数据类型,数据类型总表,C,数,据,类,型,基本类型,构造类型,指针类型,空类型,void,字符类型,char,枚举类型,enum,整 型,实型,单精度型,float,双精度型,double,数组,结构体,struct,共用体,union,短整型,short,长整型,long,整型,int,数据类型决定:,1.,数据占内存字节数,2.,数据取值范围,3.,其上可进行的操作,语言程序设计,第二章数据描述,C,基本数据类型,类型,符号,关键字,数的表示范围,所占字节数,整型,字符型,实型,有,无,(signed),int,2/4,-3276832767,即,-2,15,2,15-1,(signed),short,2,-3276832767,(signed),long,4,-21474836482147483647,2,unsigned,int,065535,即,02,16,-1,4,04294967295,unsigned,long,unsigned,short,2,065535,有,float,4,3.4e-383.4e38,有,double,8,1.7e-3081.7e308,有,char,1,-128127,无,unsigned char,1,0255,说明,:,数据类型所占字节数随编译器不同而不同,上表以,16,位编译器为例,:,语言程序设计,第二章数据描述,C,2.2,常量与变量,标识符,定义:用来标识变量、常量、函数等的字符序列,组成:,只能由,字母,、,数字,、,下划线,组成,且第一个字母必须是字母或下划线,大小写敏感,不能使用关键字,长度:最长3,2,个字符,命名原则:,见名知意,不宜混淆 如,l,与,I, o,与0,例:判断下列标识符号合法性,sum Sum M.D.John day Date 3days,student_name #33 lotus_1_2_3,char ab _above $123,M.D.John,3days,#33,char,$123,ab,语言程序设计,第二章数据描述,C,一般用大写字母,是宏定义预处理命令,不是,C,语句,直接常量,:,整型常量,实型常量,字符常量,字符串常量,如,#define PRICE 30,常量,定义:程序运行时其值不能改变的量(即常数),分类,:,符号常量,:,用标识符代表常量,定义格式:,#define,符号常量 常量,例 符号常量举例,(ch2_1.c),#define PRICE 30,main(),int num,total;,num=10;,total=num*PRICE;,printf(total=%d,total);,运行结果:,total=300,语言程序设计,第二章数据描述,C,整型常量(整常数),三种形式:,十进制整数:由数字,0,9,和正负号表示,.,如,123,-456,0,八进制整数:由数字,0,开头,后跟数字,0,7,表示,.,如,0123,011,十六进制整数:由,0x,开头,后跟,0,9,a,f,A,F,表示,.,如,0x123,0Xff,例,12,与,12L,例,30000,为,int,型,65536 为,long int,型,整型常量的类型,根据其值所在范围确定其数据类型,在,整常量后加字母,l,或,L,,,认为它是,long int,型常量,问题:,0123 = ( ),10,0x123 = ( ),10,0Xff = ( ),10,83,291,255,问题:,0123 = ( ),10,0x123 = ( ),10,0Xff = ( ),10,语言程序设计,第二章数据描述,C,实型常量(实数或浮点数),表示形式:,十进制数形式:(必须有小数点) 如,0.123, .123, 123.0, 0.0, 123.,指数形式:(,e,或,E,之前必须有数字;指数必须为整数)如12.3,e3 ,123E2, 1.23e4 ,e-5,1.2E-3.5,实型常量的类型,默认,double,型,在,实型常量后加字母,f,或,F,,,认为它是,float,型,语言程序设计,第二章数据描述,C,字符常量,定义,:,用,单引号,括起来的单个,普通字符,或,转义字符,.,字符常量的,值,:该字符的,ASCII,码,值,转义字符及其含义:,转义字符,含义,n,v,r,a,ddd,t,b,f,“,xhh,转义字符,含义,换行,垂直制表,回车,响铃,单引号,3,位,8,进制数代表的字符,水平制表,退格,换页,反斜线,双引号,2,位,16,进制数代表的字符,如 ,101 -A 012 -n,376 -, x61 -a,60 -0 483 -(,),例,:,A-101-x41-65,如,A,65,,,a,97,,,0,48 ,n,10,如 ,a A ? n 101,转义字符,:,反斜线后面跟一个字符或一个代码值表示,例 转义字符举例,(ch2_001.c,ch2_004.c),main(),printf(101 x42 Cn);,printf(I say:How are you?n);,printf(C Programn);,printf(Turbo C);,运行结果:,(,屏幕显示,),A B C,Isay:”How are you?”,C Program,Turbo C,例,main(), printf(“Yb=n”);,运行结果:,屏幕显示:,=,字符常量与字符串常量不同,字符串常量,定义:用双引号,(,“”,),括起来的字符序列,存储:,每个字符串尾,自动,加一个,0,作为字符串结束标志,h e l l o,0,例 字符串,“,hello,”,在内存中,a,a 0,例,a,“a”,例,空串 “”,0,例,: char ch;,ch=“A”;,例,: char ch;,ch=A;,语言程序设计,第二章数据描述,C,编译程序根据变量定义为其,分配指定字节的内存单元,.,地址,int a=1, b=-3,c;,a,b,c,2,字节,2,字节,2,字节,地址,地址,.,内存,1,-3,随机数,变量,概念:其值可以改变的量,变量名,与,变量值,变量定义的一般格式:,数据类型,变量,1,,变量,2,,,,变量,n;,变量初始化,:,定义时赋初值,例,:,int a,b,c;,float data;,决定分配字节数,和数的表示范围,合法标识符,例,:,int a=2,b,c=4;,float data=3.67;,char ch=A;,int x=1,y=1,z=1;,int x=y=z=1;,变量的使用:,先定义,后使用,例,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,变量定义位置:,一般,放在函数开头,main(), int a,b=2;,float data;,a=1;,data=(a+b)*1.2;,printf(“data=%fn”,data);,变量定义,可执行语句,main(), int a,b=2;,a=1;,float data;,data=(a+b)*1.2;,printf(“data=%fn”,data);,Ch2_005.c,语言程序设计,第二章数据描述,C,整型变量,占字节数随编译器不同而不同,一般占一个机器字节,shortintlong,可用,sizeof,(,类型标识符)测量,实型变量,float,:,占4字节,提供7位有效数字,double,:,占8字节,提供15,16位有效数字,字符型变量,字符变量存放字符,ASCII,码,char,与,int,数据间可进行算术运算,例,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; */,没有,字符串变量,,用字符数组存放,Ch2_006.c,语言程序设计,第二章数据描述,C,例,/*ch2_003.c*/,#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=d,语言程序设计,第二章数据描述,C,2.3,不同类型数据间的转换,隐式转换,什么情况下发生,运算转换,-,不同类型数据混合运算时,赋值转换,-,把一个值赋给与其类型不同的变量时,输出转换,-,输出时转换成指定的输出格式,函数调用转换,-,实参与形参类型不一致时转换,运算转换规则,:,不同类型数据运算时先,自动,转换成同一类型,语言程序设计,第二章数据描述,C,double,float,long,unsigned,int,char,short,低,高,说明,:,必定的转换,运算对象类型不同时转换,例,char ch;,int i;,float f;,double d;,ch/i + f*d - (f+i),int,int,double,double,double,double,double,double,int,int,double,double,double,double,double,double,10+a +i*f - d/l,例,int i;,float f;,double d;,long l;,显式转换(强制转换),一般形式:,(,类型名,),(,表达式),例,(int)(x+y),(int)x+y,(double)(3/2),(int)3.6,说明:强制转换得到所需类型的中间变量,原变量类型不变,例,main(), float x;,int i;,x=3.6;,i=(int)x;,printf(“x=%f,i=%d”,x,i);,结果:,x=3.600000,i=3,Ch2_007.c,Ch2_008.c,语言程序设计,第二章数据描述,C,2.4,运算符和表达式,C,运,算,符,算术运算符:(,+ - * / % + -,),关系运算符:(, = !=,),逻辑运算符:(!,& |,),位运算符 :(, | &,),赋值运算符:(,=,及其扩展),条件运算符:(,?:,),逗号运算符:(,),指针运算符:(*,&,),求字节数 :(,sizeof,),强制类型转换:(类型),分量运算符:(,. -,),下标运算符:(,),其它 :(,( ) -,),语言程序设计,第二章数据描述,C,学习运算符应注意:,运算符功能,与运算量关系,要求运算量个数,要求运算量类型,运算符优先级别,结合方向,结果的类型,语言程序设计,第二章数据描述,C,算术运算符和表达式,基本算术运算符:,+,-,* / %,结合方向:从左向右,优先级:,-,-,* / %,-,+ -,(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,-5%2 =,-1,1%10 =,1,5%1 =,0,5.5%2,(,),语言程序设计,第二章数据描述,C,自增、自减运算符,+ -,作用:使变量值加,1,或减,1,种类:,前置,+i, -i (,先执行,i,+1,或,i-1,,,再使用,i,值),后置,i+,i- (,先使用,i,值,再执行,i,+1,或,i-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=3;b=5;c=(a+)*b;,/k=4,j=4,/k=3,j=4,/4,/3,/c=20,a=4,/c=15,a=4,语言程序设计,第二章数据描述,C,自增、自减运算符,+ -,作用:使变量值加,1,或减,1,种类:,前置,+i, -i (,先执行,i,+1,或,i-1,,,再使用,i,值),后置,i+,i- (,先使用,i,值,再执行,i,+1,或,i-1,),说明:,+ - 不能用于常量和表达式,如,5+,(,a+b)+,+ -,结合方向:,自右向左,优先级:- + - -* / % -+ -,(2) (3) (4),例 -,i+, -(i+),i=3; printf(,“,%d,”,-i+);,/-3,例,j+k; (j+)+k;,例 -,i+,i=3; printf(,“,%d,”,-i+);,Ch2_009.c,语言程序设计,第二章数据描述,C,赋值运算符和表达式,简单赋值运算符,符号:,=,格式:,变量标识符,=,表达式,作用:将一个数据(常量或表达式)赋给一个变量,复合赋值运算符,种类,:,+= -= *= /= %=,= = &= = |=,含义:,exp1 op= exp2,exp1 = exp1 op exp2,a+=3,a=a+3,x*=y+8,x=x*(y+8),x%=3,x=x%3,例,a=3;,d=func();,c=d+2;,语言程序设计,第二章数据描述,C,说明,:,结合方向:,自右向左,优先级,:,14,左侧必须是变量,不能是常量或表达式,赋值表达式的值与变量值相等,且可嵌套,赋值转换,规则,:,使赋值号右边表达式值,自动,转换成其左边变量的类型,例,3=x-2*y;,a+b=3;,例,float f;,int i;,i=10;,f=i;,则,f=10.0,例,int i;,i=2.56; /,结果,i=2,;,例,: a=b=c=5,a=(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,语言程序设计,第二章数据描述,C,说明,:,结合方向:,自右向左,优先级,:,12,左侧必须是变量,不能是常量或表达式,赋值表达式的值与变量值相等,且可嵌套,赋值转换,规则,:,使赋值号右边表达式值,自动,转换成其左边变量的类型,例:,a=12;,a+=a-=a*a,例,: int a=2;,a%=4-1;,a+=a*=a-=a*=3;,/a=-264,等价于,a=a+(a=a-(a*a),/a=0,等价于,a=a+(a=a*(a=a-(a=a*3),语言程序设计,第二章数据描述,C,逗号运算符和表达式,形式:,表达式,1,表达式,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=3,/1,2,3,/3,2,3,语言程序设计,第二章数据描述,C,逗号运算符和表达式,形式:,表达式,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=3,语言程序设计,第二章数据描述,C,关系运算符和表达式,关系运算符,种类,:,= !=,结合方向:自左向右,优先级别:,=,=,!=,优先级,6,(高),优先级,7,(低),例,ca+b /c(a+b),ab!=c /(ab)!=c,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,语言程序设计,第二章数据描述,C,关系运算注意:,例 若,a=0; 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,结果为,1,0,语言程序设计,第二章数据描述,C,关系运算注意:,例,注意区分“,=,”,与“,=,”,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)1e-6,0,语言程序设计,第二章数据描述,C,a,b,!a,!b,a&b,a|b,真,假,真,假,假,假,真,真,逻辑运算符和表达式,逻辑运算符,种类:,! & |,逻辑运算真值表,C,语言中,运算量:,0表示,“,假,”,,,非0表示,“,真,”,运算结果:,0表示,“,假,”,,,1表示,“,真,”,真,假,假,假,假,假,真,真,假,假,真,真,真,假,真,真,语言程序设计,第二章数据描述,C,!,(2),&,(11),|,(12),高,低,例,a=x & xb&xy,a=b|x=y,!a|ab,优先级:,结合方向:,!,:,从右向左,& :,从左向右,| :,从左向右,/ (a=x) & (xb)&(xy),/(a=b)|(x=y),/(!a)|(ab),语言程序设计,第二章数据描述,C,!,(2),&,(11),|,(12),高,低,优先级:,结合方向:,!,:,从右向左,& :,从左向右,| :,从左向右,例,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,语言程序设计,第二章数据描述,C,!,(2),&,(11),|,(12),高,低,优先级:,结合方向:,!,:,从右向左,& :,从左向右,| :,从左向右,短路特性,:逻辑表达式求解时,并非所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符,例,a&b&c,/,只在,a,为真时,才判别,b,的值;,只在,a,、,b,都为真时,才判别,c,的值,例,a|b|c,/,只在,a,为假时,才判别,b,的值;,只在,a,、,b,都为假时,才判别,c,的值,例,a=1;b=2;c=3;d=4;m=1;n=1;,(m=ab)&(n=cd),/,结果,m=0,n=1,语言程序设计,第二章数据描述,C,条件运算符与表达式,一般形式:,expr1,?,expr2,:,expr3,执行过程,功能:相当于条件语句,但不能取代一般,if,语句,例,if (ab),printf(“%d”,a);,else,printf(“%d”,b);,printf(“%d”,ab?a:b);,例 求,a+|b|,printf(“a+|b|=%dn”,b0?a+b:a-b);,expr1,取,expr2,值,取,expr3,值,非,0,=0,例,(a=b)?Y:N,(x%2=1)?1:0,(x=0)?x:-x,(c=a & c0?1:(xb?a:cd?c:d, ab?a:(cd?c:d),expr1,、,expr2,、,expr3,类型可不同,表达式值取较高的类型,例,x?a:b /x=0,表达式值为,b; x0,表达式值为,a,xy?1:1.5 /xy ,值为1.0;,xy ,值为1.5,语言程序设计,第二章数据描述,C,补充:数值的表示方法,原码、反码和补码,原码:最高位为符号位,其余各位为数值本身的绝对值,反码:,正数:反码与原码相同,负数:符号位为,1,,其余位对原码取反,补码:,正数:原码、反码、补码相同,负数:最高位为,1,,其余位为原码取反,再对整个数加,1,正整数在内存中用原码存放,负整数在内存中用补码来存放,语言程序设计,第二章数据描述,C,原码,反码,补码,+7,00000111,00000111,00000111,-7,1,0000111,1,1111000,1,1111001,+0,00000000,00000000,00000000,-0,10000000,11111111,00000000,数的范围,01111111,11111111,(-127+127),01111111,10000000,(-127+127),01111111,10000000,(-128+127),(用一字节表示数),负数补码转换成十进制数:最高位不动,其余位取反加,1,例 补码:,11111001,取反:,10000110,加,1,:,10000111=-7,语言程序设计,第二章数据描述,C,数制,基,权,表示,数码,特点,10,,,10,,,10,,,十进制数,09,10,逢十进一,二进制数,01,2,2,,,2,,,2,,,逢二进一,八进制数,07,8,8,,,8,,,8,,,逢八进一,十六进制数,09,AF,af,16,16,,,16,,,16,,,逢十六进一,十进制:,4956=,410+910 +510+6,10,二进制:,1011=12+02 +12+12,十六进制:,81AE=816+116 +1016+1416,八进制:,4275=48+28 +78+58,语言程序设计,第二章数据描述,C,0,1 11 11 11 11 11 11 11,int,型:,最大,:,32767,1,0 00 00 00 00 00 00 00,最小,:-,32768,11 11 11 11 11 11 11 11,unsigned int,型:,最大,:,65535,00 00 00 00 00 00 00 00,最小,:0,语言程序设计,第二章数据描述,C,
展开阅读全文