资源描述:
《C语言的初步知识改.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
第二章C程序设计的初步知识 2.1简单C语言程序的构成和格式例2.1由矩形的两条边长求矩形的面积。#include“stdio.h”main(){doublea,b,area;a=1.2;b=3.6;area=a*b;/*求面积*/printf(“area=%f ”,area);}函数体注:1、C程序由函数组成,但每个程序里必须有且只能有一个主函数main;2、函数由语句组成,每条语句以“;”结束。3、注释/*…*/定义说明部分执行语句部分主函数主函数名 2.2常量、变量和标识符1、标识符用作变量名、符号名、函数名、数组名、文件名。标识符的构成规则:以字母(大小写皆可)或下划线开头随后可跟若干个(包括0个)字母、数字、下划线标识符的长度各个系统不同,最好不要超过8个字符(注意:区分大小写。如:x和X是两个不同的标识符;sum、Sum是二个标识符)例:判断下列用户标识符号合法性sumSumM.D.JohndayDate3daysstudent_name#33lotus_1_2_3chara>b_above$123M.D.John3days#33char$123a>b 标识符的分类1、关键字:C语言规定的,具有固定的含义,不能另作它用。如:int,float2、预定义标识符:C语言中预先定义并具有特定含义的标识符。C语言规定,语法上允许作为他用,但不提倡。如:printf,define3、用户标识符:用户根据需要自定义。一般给变量、函数、文件等命名。 32个关键字由系统实现定义的,有特殊意义的标志符,有时也称为保留字(由系统定义,不能重作其它定义)autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunsignedunionvoidvolatilewhile 2、常量在程序运行过程中不可改变的量。常量分为不同类型(表示形式)整型常数,实型常数和字符串常量等…如:12、3.2、’a’符号常量:用一个标识符代表的一个常量定义方法:#define标识符常量例:#definePI3.14159 3、变量变量:其值是可以改变的量,它用用户标识符(变量名)来表示,在内存中占据一定的存储单元。注意事项:见名知义先定义后使用,通常在函数体前部,也可放函数外部或复合语句的开头习惯上,符号常量名用大写,变量名用小写,以示区别。 编译程序根据变量定义为其分配指定字节的内存单元…...地址inta=1,b=-3,c;abc4字节4字节4字节地址地址…...内存1-3随机数变量概念:其值可以改变的量变量名与变量值变量定义的一般格式:数据类型变量1[,变量2,…,变量n];变量初始化:定义时赋初值例:inta,b,c;floatdata;决定分配字节数和数的表示范围合法标识符例:inta=2,b,c=4;floatdata=3.67;charch=‘A’;intx=1,y=1,z=1;intx=y=z=1;变量的使用:先定义,后使用变量定义位置:一般放在函数开头main(){inta,b=2;floatdata;a=1;data=(a+b)*1.2;printf(“data=%f ”,data);}变量定义可执行语句main(){inta,b=2;a=1;floatdata;data=(a+b)*1.2;printf(“data=%f ”,data);} 数据类型数据类型总表C数据类型基本类型构造类型指针类型空类型void定义类型typedef字符类型char枚举类型enum整型实型单精度型float双精度型double数组结构体struct共用体union短整型short长整型long整型int数据类型决定:1.数据占内存字节数2.数据取值范围3.其上可进行的操作 基本数据类型类型符号关键字数的表示范围所占位数整型字符型实型有无(signed)int32-2147483648~2147483647(signed)short16-32768~32767(signed)long32-2147483648~214748364732unsignedint0~4294967295320~4294967295unsignedlongunsignedshort160~65535有float323.4e-38~3.4e38有double641.7e-308~1.7e308有char8-128~127无unsignedchar80~255说明:数据类型所占字节数随机器硬件不同而不同,上表以IBMPC机为例: 2.3整型数据一、整型常量1、十进制常数如:123、34、02、八进制常数由0~7数字组成;最高位必须用0作引导符如:0123——(123)83、十六进制常数由0~9、a~f(A~F)组成;最高位必须用0x(0X)作引导符如:0x123——(123)16注意:只有十进制数可以是负数,而八进制和十六进制数只能是整数 数制基权表示数码特点10º,10¹,10²,…十进制数0~910逢十进一二进制数0~122º,2¹,2²,…逢二进一八进制数0~788º,8¹,8²,…逢八进一十六进制数0~9,A~F,a~f1616º,16¹,16²,…逢十六进一十进制:4956=410³+910²+510¹+610º二进制:1011=12³+02²+12¹+12º十六进制:81AE=816³+116²+1016¹+1416º八进制:4275=48³+28²+78¹+58º 各种进制之间的转换二进制、八进制、十六进制转换成十进制 各种进制之间的转换(整数)二进制、八进制、十六进制转换成十进制方法:按权相加十进制转换成二进制、八进制、十六进制原理:方法:连续除以基,从低到高记录余数,直至商为0例把十进制数159转换成八进制数1598198280(159)10=(237)8237余7余3余2 例把十进制数59转换成二进制数5922921427232120(59)10=(111011)2110111111011余余余余余余 例把十进制数459转换成十六进制数4591628161160(459)10=(1CB)161CB余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 二进制与十六进制之间的转换二进制转换成十六进制:从右向左,每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~81001~91010~A1011~B1100~C1101~D1110~E1111~F 字节和位内存以字节为单元组成每个字节有一个地址一个字节一般由8个二进制位组成每个二进位的值是0或101234567012345678910……... 二、整型变量定义形式:intk;/*定义语句必须以一个“;”结束*/inta,b;/*整型的变量只能存放整型数值*/inta=1,b=2;(1)没有在存储单元中存放任何初值,称变量值“无定义”。(2)C语言规定,可以在定义变量的同时给变量赋初值,称变量初始化。 三、整型变量的分类1)整型变量根据其数值的范围,可以将变量分为:基本整型(int)、短整型(shortint)、长整型(longint)2)为了充分利用变量的表示数据的范围,又可以将变量定义为:有符号数(signed)无符号数(unsigned)基本整型变量在内存中占4个字节(VC6.0) 带符号的数据类型与无符号的数据类型带符号的数据类型(1)在内存中存储整数时,一般以最高位(即最左边一位)表示数的符号,以0表示正数,以1表示负数(2)数值是以补码形式存放的,一个正数的补码就是该数的二进制数,一个负数的补码求解过程如下:先取该数的绝对值然后以二进制形式表示在对其取反然后加1无符号的数据类型二进制的最左位不作为符号位,而与右面各位一起表示数值 四、整数在内存中的存储形式内存储器的最小存储单位称为“位”(bit),存放0或1的二进制数,称为二进制位。大多数计算机把8个二进制位组成一个“字节”(byte),给每一个字节分配一个地址。左侧为高位,右侧为低位;最左侧为符号位;1、正整数(二进制原码)2、负整数(二进制补码:原码的反码,反码加1)3、无符号整数(不可能是负数,最高位不用来放符号) 2.4实型数据一、实型常量实型常量又称实数或浮点数。有两种表示形式1、十进制数形式(必须有小数点)如:0.345、.345、345.0、345.、0.0、0.、.02、指数形式如:3.45e3、3.45E3表示3.45×103注意:e前后必须有数字,e后必须是整型数;字母e(E)前后以及数字之间不得插入空格;例:.3e33e33.e3正确错误写法:3ee3e0.3 二、实型变量单精度(float型):占4个字节,7位有效数字(1e-38~1e38)双精度(double型):占8个字节,15~16位有效数字(1e-308~1e308)如:floatx,y;doublea,b,c;注意:(1)VC6.0中,所有float类型运算中自动转换成double型;(2)内存中一律以指数形式存在;(3)存整数不会出现误差,实数型往往存在误差。 2.5算术表达式基本的算术运算符+(加法运算符,或正值运算符)如:2+3、+6-(减法运算符,或负值运算符)如:3-4、-6*(乘法运算符)如:3*4、2*x/(除法运算符)如:5/3、(x+y)/(a+b)%(模运算符,或称求余运算符):%两侧均为整型数据1%4的值为12%4的值为2两个整数相除,其值为整数。如:5/3值为1双目运算符两边类型不一致,类型将按规律自动转换除数、被除数有一个为实数时,结果为double型 2、算术表示式和运算符的优先级与结合型用算术运算符和括号将运算对象(也叫操作数)连接起来的、符合C语言语法规则的式子,称为算术表达式。运算对象包括常量、变量、函数等如:3.14*r*rx+sqrt(0.25*y)/(abs(a+b)-3.6)运算符的优先级和结合性优先级:先*、/、%,后+、-结合性:左结合性。即表达式从左向右进行计算 基本算术运算符:+-*/%结合方向:从左向右优先级:----->*/%----->+-(2)(3)(4)说明:“-”可为单目运算符时,右结合性两整数相除,结果为整数%要求两侧均为整型数据例5/2=2-5/2.0=-2.5例5%2=1-5%2=-11%10=15%1=05.5%2() 算术运算符的优先级实力训练(5+1)/2运算结果:5+1/2运算结果:5*-2运算结果:35-10 3、强制类型转换(显式转换)可以利用强制类型转换运算符将一个表达式转换成所需类型形式:(类型名)(表达式)如:(double)a、(int)(x+y)注意区别于(int)x+y(float)(8%5) 显式转换(强制转换)例(int)(x+y)(int)x+y(double)(3/2)(int)3.6说明:强制转换得到所需类型的中间变量,原变量类型不变例main(){floatx;inti;x=3.6;i=(int)x;printf(“x=%f,i=%d”,x,i);}结果:x=3.600000,i=3精度损失问题较高类型向较低类型转换时可能发生<> 2.6赋值表达式一、赋值运算符“=”用法:变量=表达式作用:将表达式的值赋给变量如:a=5;ave=(a+b)/10;注意:与数学中的等式不同!!!x=y和y=x在数学中是等价的,而在C语言中是不同的例a=3;d=func();c=d+2; 说明:1、赋值运算符的右边可以是常量、变量、表达式,赋值运算符的左边只能是一个变量;例如,a+b=c就是非法的赋值表达式2、每赋一次值,存储单元中的数据被更新一次;3、赋值运算符的优先级只是比逗号运算符高,结合性自右向左;4、赋值表达式的值等于赋值运算符左边变量的值。 说明:结合方向:自右向左优先级:14左侧必须是变量,不能是常量或表达式赋值表达式的值与变量值相等,且可嵌套赋值转换规则:使赋值号右边表达式值自动转换成其左边变量的类型例3=x-2*y;a+b=3;例floatf;inti;i=10;f=i;则f=10.0例inti;i=2.56;//结果i=2;例:a=b=c=5a=(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 2.6.2复合的赋值表达式在赋值符“=”之前加上其它运算符,构成复合赋值运算符+=,-=,*=,/=,%=,<<=,>>=,&=,^=,I=如:a+=3等价于a=a+3x*=y+8等价于x=x*(y+8)(注意有括号,区别于x=x*y+8)x%=3等价于x=x%3 说明:结合方向:自右向左优先级:12左侧必须是变量,不能是常量或表达式赋值表达式的值与变量值相等,且可嵌套赋值转换规则:使赋值号右边表达式值自动转换成其左边变量的类型例:a=12;a+=a-=a*a例:inta=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))) 2.6.3赋值运算中的类型转换1、实型数据(包括单、双精度)赋给整型变量时,舍弃实数的小数部分2、整型数据赋给单、双精度变量时,数值不变,但以浮点数形式存储到变量中#include“stdio.h”voidmain(){inti;floatf;i=5.34;f=23;printf(“%d%f ”,i,f);}注意:赋值表达式中,赋值号右边的值先转换成与赋值号左边的变量相同的类型,然后再进行赋值。 显式转换(强制转换)一般形式:(类型名)(表达式)例(int)(x+y)(int)x+y(double)(3/2)(int)3.6说明:强制转换得到所需类型的中间变量,原变量类型不变例main(){floatx;inti;x=3.6;i=(int)x;printf(“x=%f,i=%d”,x,i);}结果:x=3.600000,i=3 隐式转换运算转换规则:不同类型数据运算时先自动转换成同一类型什么情况下发生运算转换------不同类型数据混合运算时赋值转换------把一个值赋给与其类型不同的变量时输出转换------输出时转换成指定的输出格式函数调用转换------实参与形参类型不一致时转换运算转换规则:不同类型数据运算时先自动转换成同一类型 doublefloatlongunsignedintchar,short低高例charch;inti;floatf;doubled;ch/i+f*d-(f+i)intintdoubledoubledoubledoubledoubledoubleintintdoubledoubledoubledoubledoubledouble10+‘a’+i*f-d/l例inti;floatf;doubled;longl; 2.7自加、自减运算符和逗号运算符1、自加运算符(++)、自减运算符(--)++i,--i:在使用i之前,先使i的值加1或减1i++,i--:在使用i之后,使i的值加1或减1注意:1)自增、自减运算符只能用于变量,而不能用于常量或表达式。如:5++、--(a+b)不合法2)++和--优先级别高于双目算术运算符,与单目运算符优先级相同,结合方向是“自右向左”如:-i++相当于-(i++) 自增、自减运算符++--作用:使变量值加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 说明:++--不能用于常量和表达式,如5++,(a+b)++++--结合方向:自右向左优先级:--++-------->*/%----->+-例-i++-(i++)i=3;printf(“%d”,-i++);//-3 2、逗号运算符和逗号表达式形式:表达式1,表达式2,…,表达式i作用:用于连接表达式如:3+5,6+8计算过程:1)求解表达式1;2)再求解表达式2,……,表达式i3)整个逗号表达式的值是表达式i的值结合性:从左到右;所有运算符中,逗号运算符优先级最低。 一个逗号表达式又可与另一个表达式组成一个新的逗号表达式。如:(a=3*5,a*4),a+5逗号运算符是所有运算符中级别最低的。设a=5,则上式的结果就是20。如:x=(a=3,6*3)结果:x=18x=a=3,6*a结果:x=3,a=3,整个逗号表达式等于18注意:并不是任何地方出现的逗号都是逗号运算符。如:printf(“%d,%d,%d”,a,b,c); 逗号运算符和表达式形式:表达式1,表达式2,……表达式n结合性:从左向右优先级:最低逗号表达式的值:等于表达式n的值用途:常用于循环for语句中例a=3*5,a*4a=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例:#includemain(){intx,y=7;floatz=4;x=(y=y+6,y/z);printf("x=%d ",x);}运行结果:x=3