【文档说明】C语言基础课件.ppt,共(49)页,765.000 KB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-7151.html
以下为本文档部分文字说明:
第二章C语言基础2.1C语言的数据类型2.2标识符、常量和变量2.3基本数据类型(整型、实型、字符型、字符串)2.4运算符及表达式第1页,共49页。引入:程序=数据结构+算法在高级程序设计语言中,对数据结构的描述是通过数据类型的形式实现的,而
对算法的描述则是通过各种语句功能实现的。第2页,共49页。2.1数据类型单精度型双精度型数据类型基本类型构造类型指针类型空类型整型实型(浮点型)字符型枚举型数组类型结构体类型共用体类型第3页,共49页。2.2标识符、常量和变量2.2.1字符集字符(character)是组成语言最基本的元素。C
语言字符集由字母,数字,空格,标点和特殊字符组成。①字母:大、小写英文字母共52个。②数字:0~9共10个。③空白符:空格符、制表符、换行符等统称为空白符共3个。④标点和特殊字符:+-*/%_.=<>&|()[]{};?:’”!#共25个。§2.2标识符、常量和变量@、$第4页,共
49页。2.2.2标识符•概念:用于标识变量名、符号常量名、函数名、数组名、类型名、文件名的有效字符序列称为标识符。•组成:•允许用作标识符的字符有:26个英文字母(包括大小写)、数字(0…9)、下划线;•
构成规则:•第一个字符必须是字母或下划线,后面跟任意的字母、数字和下划线;•长度:最长31个字符(最好限制在8个以内)•注意事项:•大小写敏感•不能使用关键字•命名原则:见名知意例:判断下列标识符号合法性sumSumM.D.JohndayDate3daysstu
dent_name#33lotus_1_2_3chara>b_above$123M.D.John3days#33char$123a>b§2.2标识符、常量和变量第5页,共49页。C语言中有32个关键字,不允许用户再用来定义标识符。autodefaul
tfloatregisterstructvolatilebreakdoforreturnswitchwhilecasedoublegotoshorttypedefcharelseifsignedunionconstenumintsizeofu
nsignedcontinueexternlongstaticvoid12个预处理命令:defineendifeliferrorlineincludeifdefifndefpragmaundefifelse§2.2标识符、常量和变量第6页,共49页。2.2.
3常量概念:常量是指在程序中其值不能被改变的量。•类型:直接常量:如18、0、-3、4.6、-1.23、0.0、‘a’、‘x’、“abcd”符号常量:用标识符表示的常量。通常习惯用大写字母表示符号常量。§2
.2标识符、常量和变量第7页,共49页。符号常量的定义形式:#define符号常量名常量表达式或字符串如:#definePI3.141592654#definePRICE30注意:符号常量在程序中不
能被赋值习惯上,符号常量名用大写字母表示,变量名用小写字母表示,以示区别。PRICE=100;第8页,共49页。【例】已知某产品的单价和数量,求总价格。#definePRICE30main(){intnum,total;num=10;total=nu
m*PRICE;printf(“total=%d”,total);}total=300第9页,共49页。2.2.4变量概念:变量指在程序执行过程中其值可以改变的量。它用标识符(变量名)来表示,在内存中占据一定的存储单元。•变量三要素:变量名、变量类型、变量值§2
.2标识符、常量和变量a10变量名变量的值存储单元决定分配字节数和数的表示范围合法标识符变量的定义形式:类型标识符变量名1,变量名2,...;•变量的使用:先定义,后使用例:inta,b,c;floatdata;例:intstudent;stadent=19;//Undefi
nedsymbol‘statent’infunctionmain第10页,共49页。变量的赋值:定义时赋值;程序执行过程中赋值变量的定义位置:一般放在函数开头§2.2标识符、常量和变量inta,b=2;a=1;main(){inta,b=2;floatdata;a=1;data=(a+b)*1
.2;printf(“data=%f\n”,data);}变量定义可执行语句main(){inta,b=2;a=1;floatdata;data=(a+b)*1.2;printf(“data=%f\n”,da
ta)}Error:Expressionsyntaxinfunctionmain第11页,共49页。2.3基本类型数据2.3.1整型数据一、整型常量:即整常数。C整常数可以用以下几种形式表示:§2.3基本数据类型1、十进制整数:如123、0、-456等。2、
八进制整数:以0开头。如0123=(123)8=(83)10。3、十六进制整数:以0x(0X)开头。如0x123=(123)16=(291)10、0x54=(84)10。第12页,共49页。1、整型变量的分类根据数值的范围分为以下几种类型:1)基本型,以int表示;2
)短整型,以shortint表示,或以short表示;3)长整型,以longint表示,或以long表示;为了充分利用变量的表数范围,又可以将变量定义为“无符号”类型和“有符号”类型。加上修饰符unsigned以指定为“无符号数”,加上修饰符signed以指定为“有符
号数”;如果不指定,则隐含为有符号(signed)。实际上signed完全可以不写。§2.3基本数据类型2.3基本类型数据第13页,共49页。类型类型标识符所占字节数取值范围有符号基本类型int42147483
648~2147483647即-231~(231-1)无符号基本类型unsignedint40~4294967295,即0~(232-1)有符号短整型short2-32768~32767,即-215~(215-1)无符号短整型uns
ignedshort20~65535,即0~(216-1)有符号长整型long4-2147483648~2147483647即-231~(231-1)无符号长整型unsignedlong40~429496
7295,即0~(232-1)归纳起来,有以下六种整型变量:§2.3基本数据类型第14页,共49页。二、整型变量§2.3基本数据类型1、整型数据在内存中的存放形式整型数据在内存中是以二进制补码形式存放的。inti;i=10;000000000000101010(a)数据存
放示意图(b)数据在内存中的实际存放情况-10100000000000101011111111111101011111111111110110-10的原码按位取反加1第15页,共49页。2、整型变量的定义形式:类型标识
符变量列表;注意:对变量的定义,一般放在函数开头的声明部分。§2.3基本数据类型inta,b;unsignedinti,j;longe,f;3、整型数据的溢出main(){shorta,b;a=32767;b=a+1;printf("%d,%d,%u,
%u",a,b,a,b);}0111111111111111a:b:100000000000000032767,-32768,32767,32768第16页,共49页。三、整型常量即整常数。§2.3基本数据类型1、整数值在-32768~+32767范围内
,认为是short型。2、若超过了上述范围,而在-2147483648~+2147483647范围内,则认为是longh或int型。3、在一个整常量后面加一个字母l或L,则认为是longint型常量。4、在一个整常量后面加一个字母u或U,则认为是unsig
ned类型。1)十进制整数:如123、0、-456等。2)八进制整数:以0开头。如0123=(123)8=(83)10。3)十六进制整数:以0x(0X)开头。如0x123=(123)16=(291)10、0x54=(84)10。第17页,共49页
。1、实型数据标识符及其变量定义实型变量分为单精度型(float)和双精度型(double)。类型长度有效数字正数数值范围float326~73.4e-38~3.4e38double6415~161.7e-308~1.7e308对每一个实型变量都应该
在使用前加以定义。如:floatx,y;doublez;§2.3基本数据类型2.3.2实型数据第18页,共49页。2.3.2实型数据2、实型常量:即实数,又称浮点数。有两种表示形式:§2.3基本数据类型1)十进制小数形式。一般由数字和小数点
组成(必须有小数点,但小数点前后的0可以省略)。例如:0.246.246246.0246.0.0等都是正确的小数表示形式。2)十进制指数形式。由尾数、字母E或e及指数部分组成。具体格式如下所示:尾数e(E)指数部分例:135e3124e-2-12
.12e-5.135E40e0注意:字母e(E)之前必须有数字,且e(或E)后面的指数必须为整数。如e3、.e3、2.1e3.5、e等都不是合法的指数形式。第19页,共49页。一、字符变量字符变量用来存放字符,且只能存放一个字符,占用一个字节(-128~+1
27)的内存空间。类型标识符为char。定义方法:charc1,c2;/*定义了两个字符型变量c1、c2*/字符变量的赋值方法:c1='a';§2.3基本数据类型2.3.3字符型数据第20页,共49页。2.3.3字符型数据二、字符型常量:C语言的字符型常量有两种形式:1、普通字符:用一对单引号(
即撇号)括起来的单个字符。例如:'b'、'Y'、'9'、'('、'y'。2、用一对单引号(即撇号)括起来的以一个“\”开头的转义字符,形如’\n’,’\t’等,意思是将反斜杠(\)后面的字符转变成另外的意义。如‘\n
’不代表字母n而作为“换行”符。像“换行”这种非显示字符难以用一般形式的字符表示,所以C语言规定用“转义字符”这种特殊形式表示。常见转义字符如下表所示。§2.3基本数据类型第21页,共49页。转义字符含义ASCII值\0表示字符串结束0\n换行,将当前位置移到下一行开头10\t水平
制表(跳到下一个Tab的位置)9\v竖向跳格11\b左退一格,将当前位置移到前一列8\r回车,将当前位置移到本行开头13\f换页,将当前位置移到下页开头12\a响铃7\'单引号39\"双引号34\\反斜杠“\
”92\ddd1到3位八进制数代表的字符(ASCII码)\xhh1到2位十六进制所代表的字符(ASCII码)§2.3基本数据类型第22页,共49页。例.字符型常量的输出main(){printf("Hello!\thowareyo
u?\nI\'mfine!\n");printf("Thisisacup\b\b\bpen.\n");printf("A,\101");}§2.3基本数据类型Hello!howareyou?I’mfine!Thisisapen.A,A第23页,共49页。三、
字符在内存中的存储形式及使用方法1、将一个字符常量存放到一个字符变量中,实际是将该字符对应的ASCII码存放到存储单元中。charc1,c2;c1=’A’;c2=’\n’;2、字符和整型数据可以相互赋值。3、字符数据可以字符形式输出,也可以整数形式输出。
§2.3基本数据类型c2c10100000100001010main(){charc1;c1=65;printf("%c,%d\n",c1,c1);}A,65第24页,共49页。main(){charc1,c2;c1='a';c2='b';c1=c1-32
;c2=c2-32;printf("%c,%c\n",c1,c2);}4、C语言允许字符数据与整数直接进行算术运算。§2.3基本数据类型【例】编写程序实现英文字符的大小写转换。A,B思考:将一个超过一个字节表示范围的数
赋给char型,会出现什么情况?第25页,共49页。2.3.4字符串常量§2.3基本数据类型字符串常量是由一对双引号(“”)括起来的字符序列。如“Howareyou!”、“China”、“a”、“$123.45”等。双引号是字符串常量的定界符。如果字
符串中有双引号应使用转义字符“\””来表示。如要输出字符串Itis“good”,语句应为printf(“Itis\“good\””);字符串的长度为字符序列中字符的个数,不包括两边的双引号。如字符串“Howareyou!”的长度是12。不要将字符常量和字符串常量混淆。如"a"是字符串常量,
'a'是字符常量。说明:若:charc;c='a';c="a";第26页,共49页。C规定:在每个字符串的结尾加一个“字符串结束标志”,以便系统据此判断字符串是否结束。C规定以字符'\0'作为字符串结束标志。'\0'的ASCII值
为0,是不可显字符,也不作任何操作,即“空操作字符”。aa\0'a'"a"注意:写字符串时不必加'\0',它是系统自动加上的。China\0"China"§2.3基本数据类型第27页,共49页。2.4运算符及表达式§2.4运算符及表达式•运算符:规定了对数据的基本操作。•表达式
:将运算对象(常量、变量、函数等)用运算符连接起来的符合C语言语法规则的式子如:(a-b)/c*2+'a'+-15%4第28页,共49页。学习运算符应注意:•运算符功能•与运算量关系•要求运算量个数•要求运算量类型•运
算符优先级别•在一个表达式中如果有多个运算符时,则计算是有先后次序的,这种计算的先后次序称为相应运算符的优先级。•结合方向•当一个运算对象两侧运算符的优先级别相同时进行运算(处理)的结合方向称为运算符的结合性。按“从右向左”的顺序运算,称为右结合性;按“从
左向右”的顺序运算,称为左结合性。•结果的类型第29页,共49页。C语言的运算符§2.4运算符及表达式(1)算术运算符+-*/%(2)赋值运算符=及其扩展赋值运算符(3)自增、自减运算符++--(4)关系运算符><==>=<=!=(5)逻辑运算符!&&||(6)逗号运算
符,(7)位运算符<<>>|^&(8)条件运算符?:(9)指针运算符*&(10)求字节数运算符sizeof(11)强制类型转换运算符(类型标识符)(12)成员运算符.→(13)下标运算符[](14)其它如函数调用运算符()第30页,共49页。C语言的运算符§2.4运
算符及表达式(1)算术运算符+-*/%(2)赋值运算符=及其扩展赋值运算符(3)自增、自减运算符++--(4)关系运算符><==>=<=!=(5)逻辑运算符!&&||(6)逗号运算符,(7)位运算符<<>>|^&(8)条件
运算符?:(9)指针运算符*&(10)求字节数运算符sizeof(11)强制类型转换运算符(类型标识符)(12)成员运算符.→(13)下标运算符[](14)其它如函数调用运算符()第31页,共49页。2.4.1算术运算符—1、基
本算术运算符§2.4运算符及表达式运算符名称示例运算功能-取负-a使a的值为负值+加a+b求a与b的和-减a-b求a与b的差*乘a*b求a与b的积/除a/b求a与b的商%取余a%b求a整除以b的余数第32页,共49页。说明§2.4运算符及表达式①乘法运算符是“*”,不能用×
或·号,也不能省略。在数学中5a、5×a、5·a都是合法的,但在C语言中只能写成5*a。②除法运算符是“/”,不能用÷号表示。两个整数相除结果为整数,如7/2的结果值为3,舍去小数部分。如果参加运算的两个数中有一个数为实数,则结果是double型,因为所有实数都按d
ouble型进行运算。③取余运算符“%”两侧的数据必须为整型数据。结果按下式计算:余数=被除数-除数*商。如7%3的结果为1。7%1.2则是错误的。第33页,共49页。2、算术表达式用算术运算符、圆括号将运算对象连接起来的符合C语法规则的
式子就称为算术表达式。如:(a-b)/c*2+'a'+-15%4§2.4运算符及表达式①表达式中的乘号不能省略。②表达式中只能使用合法用户标识符。例如:数学式相应的C语言表达式应写成:3.1415926*r*r。③表达式不允许有分子分母、上下标等形式,必要时要利用圆括号保证运算的顺序
。例如:应写成:(a+b*b)/(c+d)。④表达式不允许使用方括号和花括号,只能使用圆括号帮助限定运算顺序。可以使用多层圆括号,但左右括号必须配对,运算时从内层圆括号开始,由内向外依次计算表达式的值。dcba22r第34页,共49页。3、算术运算符的优先级与结
合性§2.4运算符及表达式运算种类结合性优先级()高↓低-(负号)左结合性*,/,%+,-右结合性第35页,共49页。4、基本类型数据间的混合运算§2.4运算符及表达式(1)在运算过程中,C语言遇到两种不同数据类型的数值运算时,会将某个数做适当的类型转换,然后再进行运算。类型转换总
是按照数据长度增加的方向逐个运算符进行,以保证精度不降低。——自动类型转换例如:表达式5+'b'-x/2+y*m(假设m为int型,x为float型,y为double型)doublefloatlongunsignedintchar,s
hort高低注意:①横向箭头表示必定的转换,纵向箭头表示当运算符两侧的数据类型不一致时将它们中低级别的类型转换成高级别的类型.②箭头方向只是级别的高低,并不是转换的过程.第36页,共49页。§2.4运算符及表达式m为int型,x为float型
,y为double型intdoubleresult=5+'b'-x/2+y*mdoubledoubledoubledouble第37页,共49页。§2.4运算符及表达式(2)当需要将某数据转换成指定类型时使用强制类型转换,通过类型转换运算符实现。一般形式为:(类型标识符
)(表达式)例如:(double)a/*将a转换成double型*/(int)(x+y)/*将x+y的和转换成整型*/(float)(10*5)/*将10*5的积转换成float型*/注意:①类型标识符和表达式都必须加括号(单个变量可以不加括号).(int)(x+y)与(int)
x+y②无论是强制转换或是自动转换,只是为了本次运算对数据长度进行的临时性转换,不改变数据定义时的类型。③强制类型转换的优先级高于自动类型转换。第38页,共49页。main(){inti=1,j=5,k1
,k2,k3;floatx=5.7,y=2.8,z1,z2,z3;k1=(int)x;k2=(int)(x)/y;k3=(int)(x/y);z1=(float)i;z2=(float)i/j;z3=(float)(i/j);printf("k1=%d\n",k1);prin
tf("k2=%d\n",k2);printf("k3=%d\n",k3);printf("z1=%f\n",z1);printf("z2=%f\n",z2);printf("z3=%f\n",z3);}【
例】强制类型转换示例。k1=5k2=1k3=2z1=1.000000z2=0.200000z3=0.000000§2.4运算符及表达式第39页,共49页。#include<math.h>main(){inta,b,c;float
s,area,temp;printf("pleaseinput3sizes\n");scanf("%d%d%d",&a,&b,&c);s=(a+b+c)/2;temp=s*(s-a)*(s-b)*(s-c);if(temp<=0)printf("your
inputiswrong");else{area=sqrt(temp);printf("Theareais%f",area);}}【例】分析程序。§2.4运算符及表达式第40页,共49页。#include<math.h>main(){floata,b,c;floats,area,temp;p
rintf("pleaseinput3sizes\n");scanf("%d%d%d",&a,&b,&c);s=(a+b+c)/2;temp=s*(s-a)*(s-b)*(s-c);if(temp<=0)printf("yourinputiswrong");else{ar
ea=sqrt(temp);printf("Theareais%f",area);}}正确程序应为:§2.4运算符及表达式第41页,共49页。2.4.2赋值运算符—1、赋值运算符和赋值表达式§2.4运算符及表达式赋值运
算符:=赋值表达式:用赋值运算符将一个变量和一个表达式连接起来的式子,其功能是将=右边的表达式的值存放到左边的变量中。形式为:变量标识符=表达式注意:赋值表达式赋值语句赋值表达式的值:即被赋值后=左边变量的值。例b=5d=5+'b'-x/2+y*mb=5有两层含义:一是使变量b的值为5,二
是求得赋值表达式“b=5”的值为5。a=(b=5);语句执行后a的值为?第42页,共49页。说明:§2.4运算符及表达式①赋值运算符“=”的左边必须是变量,不能是常量或者表达式。右边的表达式可以是常量、变量、表达式和函数调用。如y=sqrt(2)。②赋值运算符“=
”不同于数学中的等号,它没有相等的含义。例如:x=x+1,其含义是取出变量x中的值加1后,再存入变量x。③赋值运算符的结合性为“右结合性”,低优先级。如:x=y=z=8等价于x=(y=(z=8))y=a+3先+后
=例3=x-2*y;a+b=3;(错)第43页,共49页。2、赋值运算中的类型转换§2.4运算符及表达式规则:当“=”左边变量的类型和右边表达式值的类型不一致时,要将右边表达式值类型强制转换为左边变量的类型。左边变量类型右边表达式值的类型转换说明intdouble将实型数据的小数部分截去后再赋
值doubleint将整型数据转换成实型数据后再赋值intchar值不变,高24位补0,或进行符号扩展Long,intshort值不变,高16位进行符号扩展shortLong,int截取低16位数值unsignedsig
ned原样赋值,如果超出表示范围则会有意外结果signedunsigned第44页,共49页。3、复合赋值运算符§2.4运算符及表达式a+=3a=a+3x*=y+8x=x*(y+8)x%=3x=x%3种类:+=-=*=
/=%=《=》=&=^=|=含义:变量op=表达式变量=变量op表达式(op:+、-、*、/、%、《、》、&、^、|)优点:简化程序,使生成的机器代码简短。说明:与“=”优先级相同,也是“右结合性”。x*=y+8;k+=j+=i+8第45页,共4
9页。2.4.3自增(++)、自减(--)运算符§2.4运算符及表达式作用:使变量值加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;prin
tf(“%d”,++j);j=3;printf(“%d”,j++);a=3;b=5;c=(++a)*b;a=3;b=5;c=(a++)*b;//j=j+1=4,k=j=4//k=j=3,j=j+1=4//4//3//c=
20,a=4//c=15,a=4第46页,共49页。说明:§2.4运算符及表达式①自增、自减运算符(++、--),只能用于变量,不能用于常量和表达式,如2++或(x+y)++都是不合法的。②++和--的结合方向是“右结合性
”,优先级高于基本算术运算符,与负号运算符为同一优先级。例如,-i++,相当于-(i++)。j+++k相当于(j++)+k。main()P34{inti=5,j,k;j=++i;i=5;k=i++;printf("i=%d,j=%d,k=%d\n",i,j,k);printf("j=%d,k=%d
\n",++j,k++);}第47页,共49页。2.4.4逗号运算符§2.4运算符及表达式形式:表达式1,表达式2,……表达式n结合性:从左向右逗号表达式的值:等于表达式n的值优先级别:最低如:x=(a=3,
b=5,c=b*4)t=3,t+2(a=2*3,a*5),a+6比较下面两式:①a=(2+b,a*2,a*=5)②a=2+b,a*2,a*=5第48页,共49页。2.4.5sizeof运算符§2.4运算符及表达式作用:返回变量或数据类型的字节长度形式:sizeof(类型标
识符)或sizeof(变量名)sizeof(double)表达式的值为8sizeof(int)表达式的值为2设有下列程序段:floatf;inti;i=sizeof(f);变量i的值为?第49页,共49页。