您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > C语言程序设计教程第2章C语言基础
第2章C语言基础北京科技大学计算机系C语言程序设计2020/1/112本章主要内容本章介绍C语言的基础,包括:–数据类型–运算符和表达式均是程序设计的基本知识为什么讨论这些知识?通常程序要对数据进行操作处理:–处理的对象是数据–通过运算符和表达式进行操作2020/1/113例如:【例2.1】计算圆的面积,半径为5cm。程序如下:main(){floatr,area;r=5;area=3.14*r*r;printf(%f\n,area);}运算结果是输出圆的面积:78.500000程序中用到的数据:r、area、5、3.14对数据进行的运算:*、=例jc2_12020/1/114分析:计算机操作处理时,要完成以下工作:在内存中给半径r和运算结果area开辟存储空间,存放它们的值。应该留多大的地方来存放它们的值?数据5和3.14与r、area不同,它们是在编写程序时就给出确定的值,在运算过程中不会改变。这样的数计算机怎么处理?对整数5和小数3.14,计算机存放时是否有区别?涉及数据类型的基本知识2020/1/115C语言的数据类型C数据类型数组类型结构体类型共用体类型枚举类型整型字符型实型(浮点型)空类型单精度型双精度型基本类型指针类型构造类型本章讨论基本类型数据2020/1/1162.1.1整型数据1.整型数据的类型–基本整型数据int,分配2Byte–短整型数据shortint,分配2Byte–长整型数据longint,分配4Byte整型数据均以二进制补码形式存储问题:为什么要采用补码?如何表示?2020/1/117计算机中正、负数的表示例如:109=(1101101)2要区别:+109和-109方法是:将符号也数码化即:正的符号+用0表示负的符号-用1表示∴计算机中的数表示方法是:符号位+二进制数值(以8bit为例)+109→+1101101→01101101-109→-1101101→111011012020/1/118问题:计算机计算复杂化例如计算:(-19)+(+22)10010011+00010110解决的方法是:使用反码或补码的表示方法(按前述表示的编码称为原码),即能将减法一律转换为加法。需要判断符号是否相同:如果相同,结果符号不变,并进行绝对值相加如果不同,结果取绝对值大的数的符号,并进行绝对值相减2020/1/119原码、反码和补码正数:原码、反码、补码相同–符号位为0,数值为对应的二进制数。+109[01101101]原=[01101101]反=[01101101]补负数:–原码符号位为1,数值为绝对值的二进制数。-109[11101101]原–反码符号位为1,数值为绝对值的二进制数各位变反。-109[10010010]反–补码符号位为1,数值为绝对值的二进制数各位变反加1。-109[10010011]补2020/1/11102.有符号和无符号整型数据–有符号的整型数据signedint–无符号的整型数据unsignedint区别是将最高位看作符号位还是数据位例如:1111111110101000•作为有符号数使用时,最高为符号位为负数,值是:-88(再求一次补)•作为无符号数使用时,最高为数据位为无符号的数,值是:654482020/1/1111例如:main(){unsignedintm;m=65448;printf(\nm=%d\n,m);printf(m=%u\n,m);}例jc2_a输出结果:m=-88m=65448按有符号数输出按无符号数输出2020/1/1112整型数据的类型及规定方括号表示可选项int分配2Byte,long分配4Byte类型名称类型符bit取值范围整型(短整型)[signed]int[signed]short[int]16-215~215-1(-32768~32767)无符号整型unsigned[int]160~216-1(0~65535)长整型[signed]long[int]32-231~231-1无符号长整型unsignedlong[int]320~232-12020/1/11132.1.2实型数据1.实型数据的类型–单精度实型数据float,分配4Byte–双精度实型数据double,分配8Byte2.实型数据的存储单精度实型指数部分小数部分小数的符号位指数的符号位2020/1/1114实型数据的类型及规定C标准并未具体规定各种实型数据所占字节数,也不规定具体小数和指数部分的位数。一般而言,小数部分位数多,数据表示的有效数字多,精度就高;而指数部分位数多,则表示的数据范围更大。有效数字的意义?类型类型符Byte绝对值的范围有效数字单精度型float410-37~10387~8位双精度型double810-307~1030815~16位例jC2_a2020/1/11152.1.3字符型数据字符型数据char,分配1Byte字符型数据是指字母、数字、各种符号等用ASCII值表示的字符例如'a'是一个char类型数据,称作字符常量,存储:011000012.1.4空类型空类型void通常与指针或函数结合使用2020/1/11162.2常量、变量与标准函数主要内容:–常量–变量–标准库函数2020/1/11172.2.1常量在运行程序的过程中值保持不变的量1.整型常量–十进制:0~9–八进制:0~7,以0开头–十六进制:0~9,A~F/a~f,以0x或0X开头例如:100-80+12301002401000730x380x100X100XFF0x0a2020/1/11181.整型常量整型常量的类型:–根据值大小默认类型。–整型常量后面加l或L,则认为是longint型例如:123L、0L、432l、0x100l注意:十六进制常量中可以使用大写字母A~F,也可以使用小写字母a~f。八进制常量中不能出现数字8或9例如:018、0921非法2020/1/11192.实型常量–十进制形式1.01.+12.0-12.00.0–指数形式1e31.8e-3-123E-6-.1E-3等价于:1×1031.8×10-3-123×10-6-0.1×10-3•指数只能是整数,而尾数则可以是整数也可以是小数,无论指数或尾数均不能省略例如:1e、E.5、E-3非法•实型常量的类型:默认为double型,后面加F(或f),则强调表示该数是float类型例如:3.5f、1e2F2020/1/11203.字符型常量可视字符常量–单引号括起来的单个可视字符例如:'a'、'A'、'+'、'3'、''等转义字符常量–单引号括起来的\与可视字符组合,例如:\0字符串结束标志\n回车换行\t跳到下一个输出位置\双引号字符\dddddd为1到3位八进制数所代表的字符\xhhhh为1到2位十六进制数所代表的字符2020/1/11214.字符串常量用双引号括起的一个字符序列–例如:ABC、123、a、\n\t\nGoodmorning字符串常量的长度:–所包含的字符个数字符串常量的存储方式:\nGoodmorning\0a\0所占存储单元数:串长度+1例如:字符串结束标记2020/1/11225.符号常量以标识符来代表的常量事先编译预处理命令define定义编译时先由系统替换为它所代表的常量,再进行编译例如:#defineLEN2.5main(){floata,b;a=2*3.14*LEN;b=3.14*LEN*LEN;printf(a=%f,b=%f\n,a,b);}定义符号常量使用符号常量编译前系统进行替换2020/1/11235.符号常量main(){floata,b;a=2*3.14*2.5;b=3.14*2.5*2.5;printf(a=%f,b=%f\n,a,b);}•define是编译预处理命令,必须以“#”开头•编译预处理命令在第7章讨论。替换为2020/1/11242.2.2变量1.变量的有关概念在程序运行过程中,其值改变的数据,称为变量,变量用标识符表示,称为变量名。变量必须“先定义后使用”系统为变量分配存储单元,存储变量的值。编写程序时通过变量名来存、取变量值。a510变量值为变量分配的存储单元变量名例如:有变量a它的值是5102020/1/11252.变量定义变量定义的一般格式:数据类型说明符变量列表;例如:inti,j;longk,m;floatx,y;charch1,ch2;•必须使用合法的标识符作变量名•不能使用关键字为变量命名2020/1/11263.变量的初始化:允许在说明变量的时候对变量赋初值。例如:inta=5,b=10+2;doublex=23.568,y;charch1='a',ch2=66,ch3='\142';表示定义变量并对变量存储单元赋值。错误的初始化:inta=3+b,b=5;floatm=n=23.16;2020/1/11272.2.3标准库函数由C编译系统定义的一种函数,存放在系统函数库中,用户可以根据需要随时调用常用函数如:printf、scanf、fabs、sqrt、sin、(常用数学函数参见教材P30表2.5)函数调用形式:函数名([参数表])例如:putchar('a')sqrt(x)例jc2_32020/1/11282.3运算符和表达式主要内容:–算术运算符和算术表达式–赋值运算符和赋值表达式–关系运算符和关系表达式–逻辑运算符和逻辑表达式–位运算符和位运算表达式–条件运算符和条件表达式–逗号运算符和逗号表达式–其他运算符及其运算2020/1/1129运算符的有关概念作用:–对运算对象完成规定的操作运算类型:–按运算对象分:单目、双目、三目–按功能分:算术、赋值、关系、逻辑条件、逗号、位、其他2020/1/1130运算符的优先级和结合性优先级–指各种运算符号的运算优先顺序例如:算术运算优先于关系运算算术运算中先*/后+-结合性–指运算符号和运算对象的结合方向–分为:从左向右(左结合)和从右向左(右结合)例如:算术运算符为左结合a-b+4赋值运算符为右结合a=b=5(C语言规定见教材P297附录B)2020/1/1131本章涉及的运算符+-*/%++--+-=+=-=*=/=%=&=|=^=======!=&&||!&|^~?:,&sizeof(数据类型标识符)类型种类算术运算符赋值运算符关系运算符逻辑运算符位运算符条件运算符逗号运算符其他运算符2020/1/1132表达式的有关概念什么是表达式–由运算符将运算对象连接成的式子,它描述了一个具体的求值运算过程。计算表达式的值–按照运算符的运算规则求值–求值时注意运算符的优先级和结合性表达式值的类型–自动转换–强制转换2020/1/1133例如:表达式:150+'b'*2-12.456b=(++a)-2a/=a*=(a=2)f=abc--a||++b&&c++max=ab?a:ba=3,a+=3,a*a1/(float)a+62020/1/1134算术运算算术运算符的优先级()+-++--*/%+-同级同级同级单目双目高低没有乘方运算符,要计算a3要写作a*a*a的连乘,或用标准库函数pow(a,3)“/”的运算对象可为各种类型数据,但是当进行两个整型数据相除时,运算结果也是整型数据“%”要求运算对象必须是整型数据,功能是求两数相除的余数,余数的符号与被除数的符号相同。2020/1/1135自增自减运算++--是单目运算符有前缀和后缀两种形式–前缀形式:先自增(自减)再引用;–后缀形式:先引用再自增(自减);功能:前缀形式++a等价于a=a+1--a等价于a=a–1后缀形式a++等价于a=a+1a--等价于a=a–1表达式的值会不同2020/1/1136例如:当a=5时⑴++a表达式的值为6,且a=6⑵a++表达式的值为5,且a=6⑶b=++a等价于a=a+1;b=a表达式的值为6,且a=6,b=6⑷b=a++等价于b=a;a=a+1表达式的值为5,
本文标题:C语言程序设计教程第2章C语言基础
链接地址:https://www.777doc.com/doc-2908219 .html