第2章C的基础知识vc.ppt

上传人:sccc 文档编号:5635485 上传时间:2023-08-04 格式:PPT 页数:73 大小:695.01KB
返回 下载 相关 举报
第2章C的基础知识vc.ppt_第1页
第1页 / 共73页
第2章C的基础知识vc.ppt_第2页
第2页 / 共73页
第2章C的基础知识vc.ppt_第3页
第3页 / 共73页
第2章C的基础知识vc.ppt_第4页
第4页 / 共73页
第2章C的基础知识vc.ppt_第5页
第5页 / 共73页
点击查看更多>>
资源描述

《第2章C的基础知识vc.ppt》由会员分享,可在线阅读,更多相关《第2章C的基础知识vc.ppt(73页珍藏版)》请在三一办公上搜索。

1、第2章 C语言基础,华北电力大学 控制与计算机,C 语言程序设计,C语言基础,2,本章主要内容,本章介绍C语言的基础,包括:数据类型运算符和表达式均是程序设计的基本知识为什么讨论这些知识?,通常程序要对数据进行操作处理:处理的对象是数据数据通过运算符和表达式进行操作,3,例如:,【例2.1】计算圆的面积,半径为 5 cm。程序如下:,#include void main()float r,area;r=5;area=3.14*r*r;printf(“面积=%f平方厘米n,area);,运算结果是:面积=78.500000平方厘米,程序中用到的数据:r、area、5、3.14对数据进行的运算:*

2、、=,4,分析:,计算机操作处理时,要完成以下工作:数据r和area是变量,在内存中需要给半径 r 和运算结果 area 开辟存储空间,存放它们的值。应该留多大的地方来存放它们的值?数据 5 和 3.14 是常量与 r、area 不同,它们在编写程序时就是确定的值,在运算过程中不会改变。这样的数计算机怎么处理?对整数 5 和小数3.14,计算机存放时是否有区别?,涉及数据类型的基本知识,5,C语言的数据类型,C数据类型,本章讨论基本类型数据,6,2.1.1 整型数据,1整型数据的类型基本整型数据类型 int,分配 4 Byte短整型数据类型short int,分配 2 Byte长整型数据类型l

3、ong int,分配 4 Byte整型数据均以二进制补码形式存储,问题:为什么要采用补码?如何表示?,7,计算机中正、负数的表示,例如:109(1101101)2要区别:109 和 109 方法是:将符号也数码化即:正的符号 用 0 表示 负的符号 用 1 表示,计算机中的整数表示方法是:符号位二进制数值(以 8bit 为例)109 110 1101 0110 1101109 110 1101 1110 1101,8,问题:计算机计算复杂化,例如计算:(-19)+(+22)1001 0011+0001 0110,解决的方法是:使用补码的表示方法(按前述表示的编码称为原码),即能将减法一律转换为

4、加法。,需要判断符号是否相同:如果相同,结果符号不变,并进行绝对值相加如果不同,结果取绝对值大的数的符号,并进行绝对值相减,9,原码、反码和补码,正数:原码、反码、补码相同符号位为0,数值为对应的二进制数。109,01101101原=01101101反=01101101补负数:原码符号位为1,数值为绝对值的二进制数 10911101101原反码符号位为1,数值为绝对值的二进制数各位变反 10910010010反 补码符号位为1,数值为绝对值的二进制数各位变反加1 10910010011补,10,用补码计算,例如计算:(-19)+(+22)1110 1101+0001 0110=0000 001

5、1(0000 0011)2=3,11,2.有符号和无符号整型数据类型,有符号的整型数据类型 int无符号的整型数据类型 unsigned int区别是将最高位看作符号位还是数据位,例如:1111 1111 1010 1000作为有符号数使用时,最高为符号位为负数,值是:-88(再求一次补)作为无符号数使用时,最高为数据位为无符号的数,值是:65448,12,例如:,#include void main()short int m;m=65448;/1111 1111 1010 1000 printf(nm=%hdn,m);printf(m=%hun,m);,输出结果:m=-88m=65448,按

6、有符号数输出,按无符号数输出,13,整型数据的类型及规定,方括号表示可选项int 分配4 Byte,long分配4 Byte,整型数据是精确存储,14,2.1.2 实型数据,1实型数据的类型 单精度实型数据类型 float,分配4 Byte双精度实型数据类型 double,分配 8 Byte2实型数据的存储,实型数据是近似存储,15,实型数据的类型及规定,C标准并未具体规定各种实型数据所占字节数,也不规定具体小数和指数部分的位数。一般而言,小数部分位数多,数据表示的有效数字多,精度就高;而指数部分位数多,则表示的数据范围更大。,有效数字的意义?,float a=123.456789;doubl

7、e b=123.456789123456789;,16,2.1.3 字符型数据,字符型数据类型为char,分配 1 Byte 字符型数据是指字母、数字、各种符号等用ASCII值表示的字符例如 a 是一个char类型数据,称作字符常量,存储:,0 1 1 0 0 0 0 1,2.1.4 空类型,空类型void通常与指针或函数结合使用,17,2.2 常量、变量与标准函数,主要内容:常量变量标准库函数,18,2.2.1 常量,在程序运行的过程中值保持不变的量1整型常量 十进制:09八进制:07,以 0开头十六进制:09,AF/af,以 0 x或 0X 开头,例如:100-8 0+123010 024

8、 0100 0730 x38 0 x10 0X100 0XFF 0 x0a,19,1.整型常量,整型常量的类型:根据值大小默认类型整型常量后面加l或L,则认为是long int型 例如:123 123L、032、432l、0 x100,注意:十六进制常量中可以使用大写字母AF,也可以使用小写字母af。八进制常量中不能出现数字 8 或 9例如:018、0921非法,20,2.实型常量,十进制形式 1.0 1.+12.0-12.0 0.0指数形式 1e3 1.8e-3-123E-6-.1E-3,指数只能是整数,而尾数则可以是整数也可以是小数,无论指数或尾数均不能省略例如:1e、E.5、E-3 非法

9、实型常量的类型:默认为double型,后面加F(或f),则强调表示该数是float类型例如:3.5f、1.4e2F,21,3.字符型常量,字符常量 一对单引号括起来的单个字符例如:a、A、+、3、等 转义字符常量一对单引号括起来的 与规定字符组合,例如:,如102表示B,如x47表示G,22,int x=0 x10;int y=0X10;char a=xa2;char b=Xa2;,23,4.字符串常量,用一对双引号括起来的一个字符序列例如:ABC、12、a、nt nGood morning、字符串常量的长度:所包含的字符个数 字符串常量的存储方式:,所占存储单元数:串长度1例如:,字符串结束

10、标记,24,4.字符串常量(续),如果反斜杠和双引号作为字符串中的有效字符,则必须使用转义字符。例:C:msdosv6.22 C:msdos v6.22 I say:Goodbye!I say:Goodbye!如果要表示单引号字符,必须用转义字符。,25,字符常量 A 与字符串常量 A 的区别:,(1)定界符不同:字符常量使用单引号A,而字符串常量使用双引号 A;(2)长度不同:字符常量的长度固定为1,而字符串常量的长度,可以是0,也可以是某个整数;(3)存储要求不同:字符常量存储的是字符的ASCII码值,字符串常量,除了要存储有效的字符ASCII码值外,还要存储一个结束标志 0。,26,是非

11、法的“”是正确的,27,5.符号常量,以标识符来代表的常量事先由编译预处理命令define定义编译时先由系统替换为它所代表的常量,再进行编译例如:,#define LEN 2.5#include void main()float a,b;a=2*3.14*LEN;b=3.14*LEN*LEN;printf(a=%f,b=%fn,a,b);,编译前系统进行替换,28,5.符号常量,void main()float a,b;a=2*3.14*2.5;b=3.14*2.5*2.5;printf(a=%f,b=%fn,a,b);,define是编译预处理命令,必须以“#”开头 后面不能加分号。编译预处

12、理命令在后面讨论。,替换为,29,2.2.2 变量,1.变量的有关概念在程序运行过程中,其值可以改变的数据,称为变量,变量用标识符表示,称为变量名变量必须“先定义,后使用”系统根据变量的类型分配存储单元,存储变量的值编写程序时通过变量名来存、取变量值,30,2.变量定义,变量定义的一般格式:数据类型说明符 变量列表;例如:int i;long k,m;float x,y;char ch1,ch2;,必须使用合法的标识符作变量名不能使用关键字为变量命名,31,3.变量的初始化:,在说明变量的同时对变量赋初值。例如:int a=5,b=a+2;long c=123L;double x=23.568

13、;float y=1.23f;char ch1=a,ch2=66,ch3=142;错误的初始化:int a=3+b,b=5;float m=n=23.16;,32,系统为变量分配存储空间示意图,内存:内存是由一系列字节组成的,每个字节都有一个唯一的地址编码。例如:short int x;系统为变量x在内存中分配的存储空间是连续的两个字节。,其中:1001和1002是字节的编码,第1个字节的编码1001称为变量x的地址,在程序中表示为&x。即&x的值为1001。,33,系统为变量分配存储空间示意图,例如:float y;系统为变量y在内存中分配的存储空间是连续的4个字节。例如:,其中:2001到

14、2004是字节的编码,第1个字节的编码2001称为变量y的地址,在程序中表示为&y。即&y的值为2001。,34,2.2.3 标准库函数,由C编译系统定义的一种函数,存放在系统函数库中,用户可以根据需要随时调用常用函数如:printf、scanf、fabs、sqrt、sin、(常用数学函数参见教材 附录)函数调用形式:函数名(参数表)例如:putchar(a)sqrt(x)getchar(),35,总结:,如果程序中需要将数据存起来,则必须根据存放数据的类型定义变量(变量要先定义,后使用)。如果程序中使用的数据是常量,则需根据常量的类型,选用正确的格式。如:123 12.3(称字面常量)#de

15、fine PI 3.14159(称为符号常量)如果程序中用到系统提供的函数,必须在程序的开头书写:#include 预编译命令的顺序#define#include,36,2.3 运算符和表达式,主要内容:算术运算符和算术表达式赋值运算符和赋值表达式关系运算符和关系表达式逻辑运算符和逻辑表达式位运算符和位运算表达式条件运算符和条件表达式逗号运算符和逗号表达式其他运算符及其运算,37,要求掌握:,每种表达式的运算符运算符的优先级和结合性每种表达式值的特点和值的数据类型表达式的命名规则,38,学习运算符要注意:1 运算符功能2 与运算量的关系(1)要求运算量的个数(2)要求运算量的类型3 运算符的优

16、先级别4 运算符的结合方向5 运算结果的类型,39,运算符的有关概念,作用:对运算对象完成规定的操作运算类型:按运算对象分:单目(要求1个运算对象,如-2)双目(要求2个运算对象,如3-2)三目(要求3个运算对象,如xy?X:y)按功能分:算术、赋值、关系、逻辑条件、逗号、位、其他,40,运算符的优先级和结合性,优先级指各种运算符的运算优先顺序当一个表达式中出现多个运算符时,表达式的求值运算按运算符的优先级别从高到低的顺序执行例如:算术运算优先于关系运算,如:a+bc 算术运算中先*/后+-,如:a+b*c,优先级的应用当一个运算对象的两侧运算符的优先级不相同时,先处理优先级高的运算符,再处理

17、优先级低的运算符。例如:a*b-4 先计算a*b,再计算减法。a-b*4 先计算b*4,再计算减法。,41,运算符的优先级和结合性,结合性指运算符和运算对象的结合方向分为:从左向右(左结合)和从右向左(右结合)例如:算术运算符为左结合 a-b+4 赋值运算符为右结合 a=b=5结合性的应用当一个运算对象两侧运算符的优先级相同时,根据结合性来决定先处理哪个运算符如:a*b/c 左结合:先计算乘法,再计算除法(C语言规定见教材 附录),42,本章涉及的运算符,+-*/%+-+-=+=-=*=/=%=&=|=?:,&sizeof(数据类型标识符),43,表达式的有关概念,什么是表达式由运算符将运算对

18、象连接成的式子,它描述了一个具体的求值运算过程。计算表达式的值按照运算符的运算规则求值求值时注意运算符的优先级和结合性表达式值的类型自动转换(由系统完成)强制转换(由用户编程实现),44,例如:,表达式:150+b*2-12.456(算术表达式)b=(+a)-2(赋值表达式)a/=a*=(a=2)(赋值表达式)f=abc(赋值表达式)-a|+b&c+(逻辑表达式)ab?a:b(条件表达式)a=3,a+=3,a*a(逗号表达式)a+b4(关系表达式),表达式的命名:按运算符级别最低的来命名,45,算术运算,算术运算符的优先级,没有乘方运算符,要计算a3要写作 a*a*a 的连乘,或用标准库函数

19、pow(a,3)“/”的运算对象可为各种类型数据,但是当进行两个整型数据相除时,运算结果也是整型数据“%”要求运算对象必须是整型数据,功能是求两数相除的余数,余数的符号与被除数的符号相同,46,算术表达式中的乘号不能省略,适当添加圆括号。如:数学表达式:1/2(a+b)对应的C表达式为:1.0/2*(a+b)如:数学表达式:对应的C表达式为:(a+b)/(c-d),47,自增自减运算,+-是单目运算符有前缀和后缀两种形式 前缀形式:先自增(自减)再引用;后缀形式:先引用再自增(自减);功能:前缀形式+a 等价于 a=a+1-a 等价于 a=a 1 后缀形式 a+等价于 a=a+1 a-等价于

20、a=a 1,表达式的值会不同,48,例如:,当 a5 时+a 表达式的值为 6,且 a6 a+表达式的值为5,且 a6 b=+a 等价于 a=a+1;b=a 表达式的值为6,且 a=6,b=6 b=a+等价于 b=a;a=a+1 表达式的值为5,且 a=6,b=5,49,说明:,+和-的运算对象只能是变量(或运算结果是变量的表达式),不能是常量(或运算结果是数值的表达式)。例如:5+、(a+2)+不合法。具有右结合性,结合方向为从右到左。例如:a+等价于-(a+)如果有多个运算符连续出现时,C系统尽可能多的从左到右将字符组合成一个运算符例如:i+j 等价于(i+)+j-i+-j 等价于-(i+

21、)+(-j),50,赋值运算,赋值运算符(右结合)=+=-=*=/=%=&=|=赋值表达式将表达式的值存入变量对应的内存单元中m=12b=(+a)-2 m%=3+n 等价于 m=m%(3+n)x*=(x=5)等价于 x=x*(x=5),51,说明:,赋值号左边必须是变量,右边可以是C语言任意合法的表达式例如:n=t+210 等价于:a=(b=(b*c)10)赋值号与数学中的等号含义不同例如:数学中 a=b 等价于 b=a C语言中 a=b 不等价于 b=a,52,关系运算,关系运算符(左结合)=c 等价于 a=(b=c)与(a=b)=c 不等价关系运算符优先于赋值,低于算术,53,说明:,关系

22、运算的结果是1或者0。C语言用数值 1 表示逻辑真,0 表示逻辑假例如:75 的值是 1,57 的值是 0 ab的值是 0,ab 的值是1即关系表达式的值:0 或1 实型数可进行大于或小于比较,但通常不进行=或!=的关系运算(为什么),如何表示实型值为0:,abs(x)=1.0e-10,54,逻辑运算符,逻辑运算符!&|优先级 高 低逻辑运算符的运算规则,55,逻辑表达式,逻辑表达式用逻辑运算符将运算对象连接成的式子 例如:0&b a&b|c&d a|b-5|c/4!x+y=z 逻辑运算符的优先级 和结合性:!是单目运算符,右结合,高于算术&和|是双目运算符,左结合,高于赋值运算符,低于关系运

23、算符,56,逻辑运算规则,从左到右依次进行逻辑计算运算对象为非0表示逻辑真运算对象为 0 表示逻辑假逻辑运算的结果为 0 或 1例如设:a=15,b=0,c=-2 a&b&c 结果为0 a|b|c 结果为1(a+c)|b&c 结果为1,57,逻辑运算规则(续),运算按照从左至右的顺序进行,一旦能够确定逻辑表达式的值,就立即结束运算逻辑运算的短路性质例如设:a=1,b=0,c=-2a&b&c,(a+)|+b&-c,为 0,运算终止,表达式值为 0,为非0,运算终止,表达式值为 1且a为2,b为0,c为-2(b,c保持原值),58,关系与逻辑运算符的应用,表示数学公式abc 判断a,b,c三条线段

24、能否组成一个三角形 a,b不同时为负,a+bc&a+cb&b+ca或!(a+b=c|a+c=b|b+c=a),a=0|b=0!(a=0)|(a=0&b=0&b=0),ab&bc,59,位运算符,&|,位运算符的运算对象只能是整型数据或字符型数据,不能是实型数据运算对象一律按二进制补码参加运算,并按位进行运算位运算的结果是一个整型数据,低于单目、算术运算符,高于其他运算符,低于单目、算术和关系运算符,高于其他运算符,60,位逻辑运算符的运算规则,假设ai和bi均是一个二进制位(bit),例如:假设a=10,b=010 求a&b、a|b、ab、a,61,程序如下:,void main()short

25、 int a=10,b=010;printf(%d%dn,a,输出结果:8 102-11,0000 0000 0000 1010&0000 0000 0000 1000 0000 0000 0000 1000即:a&b的值是8,62,移位运算,例如:ab-1 等价于(a+8)(b-1),例如:假设a=10,b=2,求ab-1,void main()short int a=10,b=2;printf(%d%dn,ab-1);,输出结果:40 9,请自行分析运行结果,63,条件表达式运算,条件运算符:?:条件表达式的一般形式 表达式1?表达式2:表达式3例如:m=10&b-20?a:b x=3+a

26、5?100:200,C语言中唯一的三目运算符,要正确区分用?和:分隔的3个表达式涉及条件运算符的优先级与结合性,64,条件运算符优先级,条件运算符优先级高于赋值和逗号运算符,低于其他运算符 例如:m=10&b-20?a:b x=3+a5?100:200,等价于:(mn)?(x):(a+3),等价于:(a+=10&b-20)?a:b,等价于:x=(3+a5)?100:200),65,条件运算符的结合性,条件运算符具有右结合性当一个表达式中出现多个条件运算符时,应该将位于最右边的问号与离它最近的冒号配对,并按这一原则正确区分各条件运算符的运算对象。,例如:wx?x+w:xy?x:y 与 wx?x+

27、w:(xy?x:y)等价 与(wx?x+w:xy)?x:y 不等价,66,逗号表达式运算,逗号表达式的一般形式 表达式1,表达式2,表达式n 逗号表达式的值从左向右,依次对表达式求值,最后得到表达式n 的值就是逗号表达式的值,67,逗号表达式运算,例如:a=5,a+,a*3 表达式值为 18,且a=6 t=1,t+5,t+表达式值为 1,且t=2 x=(a=3*5,a*4)赋值表达式的值为60,且x=60,a=15,68,取地址运算符&,为单目运算符运算对象只能是变量 运算结果是变量的存储地址 例如有定义:int a,student;char ch;可以对变量a、ch、student 进行&运

28、算:&a&ch&student,69,取地址指向的目标运算符*,为单目运算符运算对象只能是变量的地址 运算结果是地址指向的目标 例如有定义:int a,student;char ch;可以对变量a、ch、student 进行&运算:&a&ch&student得到的是变量的地址。对它们进行*运算,*(&a)*(&ch)*(&student)得到的是变量a、ch、student,70,长度运算符 sizeof,为单目运算符运算对象只能是变量名或数据类型标识符 运算结果为该变量或该数据类型的长度,#include void main()int a=5;double x;printf(%d%d,siz

29、eof(int),sizeof(a);printf(%d%d,sizeof(double),sizeof(x);printf(%d%dn,sizeof(float),sizeof(char);,输出结果:4 4 8 8 4 1,71,2.4 运算中数据类型的转换,2.4.1 数据类型的自动转换转换原则:,自动将精度低、表示范围小的运算对象类型向精度高、表示范围大的运算对象类型转换,例如有定义:int a;char ch;表达式:a-ch*2+35La-ch*2+3.5f,72,2.赋值运算中的类型转换,=小数部分自动补0 如:float x=5;,=自动舍去实型表达式的小数部分(注意不进行四舍五入)如:int x=5.7;=char c=65;=int x=23L;自动截取表达式值的低字节赋值,舍去高字节=int x=a;=long x=25;自动给高字节补0 或补1,73,2.4.2 数据类型的强制转换,强制转换的一般形式(类型名)表达式例如:(int)(b+3*x)%3/x为实型 1/(float)a+6/a为整型,注意:(float)22/5 与(float)(22/5)不同错误的类型转换:(int)b=a+5 b=int(3*a),

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号