《C语言的初步知识改.ppt》由会员分享,可在线阅读,更多相关《C语言的初步知识改.ppt(46页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第二章C程序设计的初步知识2.1 简单C语言程序的构成和格式例2.1 由矩形的两条边长求矩形的面积。#include“stdio.h”main()double a,b,area;a=1.2;b=3.6;area=a*b;/*求面积*/printf(“area=%fn”,area);函数体注:1、C程序由函数组成,但每个程序里必须有且只能有一个主函数main;2、函数由语句组成,每条语句以“;”结束。3、注释/*/定义说明部分执行语句部分主函数主函数名2.2常量、变量和标识符1、标识符n用作变量名、符号名、函数名、数组名、文件名。n标识符的构成规则:1.以字母(大小写皆可)或下划线开头2.随后可
2、跟若干个(包括个)字母、数字、下划线3.标识符的长度各个系统不同,最好不要超过个字符(注意注意:区分大小写。如:和是两个不同的标识符;sum、Sum是二个标识符)例:判断下列用户标识符号合法性sum Sum M.D.John day Date 3days student_name#33 lotus_1_2_3 char ab _above$1233days#33char$123ab标识符的分类1、关键字:C语言规定的,具有固定的含义,不能另作它用。如:int,float2、预定义标识符:C语言中预先定义并具有特定含义的标识符。C语言规定,语法上允许作为他用,但不提倡。如:printf,defi
3、ne3、用户标识符:用户根据需要自定义。一般给变量、函数、文件等命名。32个关键字由系统实现定义的,有特殊意义的标志符,有时也称为保留字(由系统定义,不能重作其它定义由系统定义,不能重作其它定义)auto break case char constcontinue default do double elseenum extern float for gotoif int long register returnshort signed sizeof static structswitch typedef unsigned union voidvolatile while2、常量n在程序运行过
4、程中不可改变的量。n常量分为不同类型(表示形式)整型常数,实型常数和字符串常量等如:12、3.2、an符号常量:用一个标识符代表的一个常量定义方法:#define 标识符 常量例:#define PI 3.141593、变量变量:其值是可以改变的量,它用用户标识符(变量名)来表示,在内存中占据一定的存储单元。注意事项:见名知义先定义后使用,通常在函数体前部,也可放函数外部或复合语句的开头习惯上,符号常量名用大写大写,变量名用小写小写,以示区别。编译程序根据变量定义为其分配指定字节的内存单元.地址int a=1,b=-3,c;abc4字节4字节4字节地址地址.内存1-3随机数变量n概念:其值可以
5、改变的量n变量名与变量值n变量定义的一般格式:数据类型 变量1,变量2,变量n;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;n变量的使用:先定义,后使用n变量定义位置:一般放在函数开头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
6、 data;data=(a+b)*1.2;printf(“data=%fn”,data);数据类型数据类型总表C数据类型基本类型构造类型指针类型空类型void定义类型typedef字符类型char枚举类型enum整 型实型单精度型float双精度型double数组结构体struct共用体union短整型short长整型long整型int数据类型决定:1.数据占内存字节数2.数据取值范围3.其上可进行的操作基本数据类型类型符号关键字数的表示范围所占位数整型字符型实型有无(signed)int32-21474836482147483647(signed)short16-3276832767(sig
7、ned)long32-2147483648214748364732unsigned int042949672953204294967295unsigned longunsigned short16065535有float323.4e-383.4e38有double641.7e-3081.7e308有char8-128127无unsigned char80255说明:数据类型所占字节数随机器硬件不同而不同,上表以IBM PC机为例:2.3 整型数据一、整型常量1、十进制常数 如:123、34、02、八进制常数由07数字组成;最高位必须用0作引导符 如:0123(123)83、十六进制常数由09、
8、af(A F)组成;最高位必须用0 x(0X)作引导符 如:0 x123(123)16注意注意:只有十进制数可以是负数,而八进制和十六进制数只能是整数数制基权表示数码特点10,10,10,十进制数0910逢十进一二进制数0122,2,2,逢二进一八进制数0788,8,8,逢八进一十六进制数09,AF,af1616,16,16,逢十六进一十进制:4956=410+910+510+610二进制:1011=12+02+12+12十六进制:81AE=816+116+1016+1416八进制:4275=48+28+78+58n各种进制之间的转换二进制、八进制、十六进制转换成十进制n各种进制之间的转换(整
9、数)二进制、八进制、十六进制转换成十进制方法:按权相加十进制转换成二进制、八进制、十六进制原理:方法:连续除以基,从低到高记录余数,直至商为0例 把十进制数159转换成八进制数1598198280(159)10=(237)82 3 7 余 7余 3余 2例 把十进制数59转换成二进制数5922921427232120(59)10=(111011)21101111 1 1 0 1 1余余余余余余例 把十进制数459转换成十六进制数4591628161160(459)10=(1CB)161 C B 余11余12余 1二进制与八进制之间的转换二进制转换成八进制:从右向左,每3位一组(不足3位左补0)
10、,转换成八进制八进制转换成二进制:用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位二进制数代替每一位十六进制数例 2=(0011,0101,0111,1101)2=(357D)16例(4B9E)16=(0100,1011,1001,1110)220000 00001 1
11、0010 20011 30100 40101 50110 60111 71000 81001 91010 A1011 B1100 C1101 D1110 E1111 F字节和位n内存以字节为单元组成n每个字节有一个地址n一个字节一般由8个二进制位组成n每个二进位的值是0或101234567012345678910.二、整型变量定义形式:int k;/*定义语句必须以一个“;”结束*/int a,b;/*整型的变量只能存放整型数值*/int a=1,b=2;(1)没有在存储单元中存放任何初值,称变量值“无定义”。(2)C语言规定,可以在定义变量的同时给变量赋初值,称变量初始化。三、整型变量的分类
12、1)整型变量根据其数值的范围,可以将变量分为:基本整型(int)、短整型(short int)、长整型(long int)2)为了充分利用变量的表示数据的范围,又可以将变量定义为:有符号数(signed)无符号数(unsigned)基本整型变量在内存中占4个字节(V C 6.0)带符号的数据类型与无符号的数据类型 带符号的数据类型 (1)在内存中存储整数时,一般以最高位(即最左边一位)表示数的符号,以0表示正数,以1表示负数 (2)数值是以补码形式存放的,一个正数的补码就是该数 的二进制数,一个负数的补码求解过程如下:先取该数的绝对值 然后以二进制形式表示 在对其取反 然后加1无符号的数据类型
13、 二进制的最左位不作为符号位,而与右面各位一起表示数值 四、整数在内存中的存储形式内存储器的最小存储单位称为“位”(bit),存放0或1的二进制数,称为二进制位。大多数计算机把8个二进制位组成一个“字节”(byte),给每一个字节分配一个地址。左侧为高位,右侧为低位;最左侧为符号位;1、正整数(二进制原码)2、负整数(二进制补码:原码的反码,反码加)3、无符号整数(不可能是负数,最高位不用来放符号)2.4 实型数据一、实型常量 实型常量又称实数或浮点数。有两种表示形式1、十进制数形式(必须有小数点)如:0.345、.345、345.0、345.、0.0、0.、.02、指数形式 如:3.45e3
14、、3.45E3 表示3.45103 注意:e前后必须有数字,e后必须是整型数;字母e(E)前后以及数字之间不得插入空格;例:.3e3 3e3 3.e3正确 错误写法:3e e3 e0.3 二、实型变量单精度(float型):占4个字节,7位有效数字(1e-381e38)双精度(double型):占8个字节,1516位有效数字(1e-308 1e308)如:float x,y;double a,b,c;注意:(1)VC6.0中,所有float类型运算中自动转换成double型;(2)内存中一律以指数形式存在;(3)存整数不会出现误差,实数型往往存在误差。2.5 算术表达式基本的算术运算符+(加法
15、运算符,或正值运算符)如:2+3、+6-(减法运算符,或负值运算符)如:3-4、-6*(乘法运算符)如:3*4、2*x/(除法运算符)如:5/3、(x+y)/(a+b)%(模运算符,或称求余运算符):%两侧均为整型数据1%4的值为1 2%4的值为2 两个整数相除,其值为整数。如:5/3值为1双目运算符两边类型不一致,类型将按规律自动转换除数、被除数有一个为实数时,结果为double型2、算术表示式和运算符的优先级与结合型用算术运算符和括号将运算对象(也叫操作数)连接起来的、符合语言语法规则的式子,称为算术表达式。运算对象包括常量、变量、函数等如:3.14*r*r x+sqrt(0.25*y)/
16、(abs(a+b)-3.6)运算符的优先级和结合性优先级:先*、/、%,后+、-结合性:左结合性。即表达式从左向右进行计算n基本算术运算符:+-*/%结合方向:从左向右优先级:-*/%-+-(2)(3)(4)说明:“-”可为单目运算符时,右结合性两整数相除,结果为整数%要求两侧均为整型数据例 5/2 =2 -5/2.0=-2.5例 5%2 =1 -5%2 =-1 1%10 =1 5%1 =0 5.5%2 ()算术运算符的优先级实力训练(5+1)/2 运算结果:5+1/2 运算结果:5*-2 运算结果:35-103、强制类型转换(显式转换)n可以利用强制类型转换运算符将一个表达式转换成所需类型n
17、形式:(类型名)(表达式)如:(double)a、(int)(x+y)注意区别于(int)x+y (float)(8%5)显式转换(强制转换)例 (int)(x+y)(int)x+y (double)(3/2)(int)3.6 n说明:强制转换得到所需类型的中间变量,原变量类型不变 例 main()float x;int i;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)/
18、10;注意:与数学中的等式不同!注意:与数学中的等式不同!x=y和y=x在数学中是等价的,而在C语言中是不同的例 a=3;d=func();c=d+2;说明:1、赋值运算符的右边可以是常量、变量、表达式,赋值运算符的左边只能是一个变量;例如,a+b=c就是非法的赋值表达式2、每赋一次值,存储单元中的数据被更新一次;3、赋值运算符的优先级只是比逗号运算符高,结合性自右向左;4、赋值表达式的值等于赋值运算符左边变量的值。n说明:结合方向:自右向左优先级:14左侧必须是变量,不能是常量或表达式赋值表达式的值与变量值相等,且可嵌套赋值转换规则:使赋值号右边表达式值自动转换成其左边变量的类型例 3=x-
19、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=22.6.2 复合的赋值表达式在赋值符“=”之前加上其它运算符,构成复合赋值运算符+=,-=,*=,/=,%=,=,&=,=,I=如:a+=3 等价于 a=a+3 x*=y+8 等价于 x=x*(y+8)(注
20、意有括号,区别于x=x*y+8)x%=3 等价于 x=x%3n说明:结合方向:自右向左优先级: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)2.6.3 赋值运算中的类型转换1、实型数据(包括单、双精度)赋给整型变量时,舍弃实数的小数部分2、整型数据赋给单、双精度变量时,数值不变,但以浮点数形式存储到变量中#i
21、nclude“stdio.h”void main()int i;float f;i=5.34;f=23;printf(“%d%fn”,i,f);注意:赋值表达式中,赋值号右边的值先转换成与赋值号左边的变量相同的类型,然后再进行赋值。显式转换(强制转换)n一般形式:(类型名)(表达式)例 (int)(x+y)(int)x+y (double)(3/2)(int)3.6 n说明:强制转换得到所需类型的中间变量,原变量类型不变 例 main()float x;int i;x=3.6;i=(int)x;printf(“x=%f,i=%d”,x,i);结果:x=3.600000,i=3隐式转换n运算转换
22、规则:不同类型数据运算时先自动转换成同一类型n什么情况下发生运算转换-不同类型数据混合运算时赋值转换-把一个值赋给与其类型不同的变量时输出转换-输出时转换成指定的输出格式函数调用转换-实参与形参类型不一致时转换n运算转换规则:不同类型数据运算时先自动转换成同一类型doublefloatlongunsignedintchar,short低高例 char ch;int i;float f;double d;ch/i +f*d -(f+i)intintdoubledoubledoubledoubledoubledoubleintintdoubledoubledoubledoubledoubledou
23、ble10+a +i*f -d/l例 int i;float f;double d;long l;2.7 自加、自减运算符和逗号运算符1、自加运算符(+)、自减运算符(-)n+i,-i :在使用i之前,先使i的值加1或减1ni+,i-:在使用i之后,使i的值加1或减1注意:注意:1)自增、自减运算符只能用于变量,而不能用于常量或表达式。如:5+、-(a+b)不合法2)+和-优先级别高于双目算术运算符,与单目运算符优先级相同,结合方向是“自右向左”如:-i+相当于-(i+)n自增、自减运算符+-作用:使变量值加1或减1种类:前置 +i,-i (先执行i+1或i-1,再使用i值)后置 i+,i-(
24、先使用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+5+,(a+b)+a+b)+-+-结合方向:结合方向:自右向左自右向左优先级:优先级:-+-*/%-+-+-*/%-+-例例-i+i+-(i+)-(i+)i=3;printf(i=3;printf(“%d%d”,-i+);,-i+)
25、;/-/-3 3 2、逗号运算符和逗号表达式形式:表达式1,表达式2,表达式i作用:用于连接表达式如:3+5,6+8计算过程:1)求解表达式1;2)再求解表达式2,表达式i 3)整个逗号表达式的值是表达式i的值结合性:从左到右;所有运算符中,逗号运算符优先级最低。一个逗号表达式又可与另一个表达式组成一个新的逗号表达式。如:(a=3*5,a*4),a+5 逗号运算符是所有运算符中级别最低的。设a=5,则上式的结果就是20。如:x=(a=3,6*3)结果:x=18 x=a=3,6*a 结果:x=3,a=3,整个逗号表达式等于18注意:并不是任何地方出现的逗号都是逗号运算符。如:printf(“%d
26、,%d,%d”,a,b,c);逗号运算符和表达式n形式:表达式1,表达式2,表达式nn结合性:从左向右n优先级:最低n逗号表达式的值:等于表达式n的值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例:#include main()int x,y=7;float z=4;x=(y=y+6,y/z);printf(x=%dn,x);运行结果:x=3