全国计算机二级考试c语言).ppt

上传人:小飞机 文档编号:6550546 上传时间:2023-11-11 格式:PPT 页数:61 大小:294.16KB
返回 下载 相关 举报
全国计算机二级考试c语言).ppt_第1页
第1页 / 共61页
全国计算机二级考试c语言).ppt_第2页
第2页 / 共61页
全国计算机二级考试c语言).ppt_第3页
第3页 / 共61页
全国计算机二级考试c语言).ppt_第4页
第4页 / 共61页
全国计算机二级考试c语言).ppt_第5页
第5页 / 共61页
点击查看更多>>
资源描述

《全国计算机二级考试c语言).ppt》由会员分享,可在线阅读,更多相关《全国计算机二级考试c语言).ppt(61页珍藏版)》请在三一办公上搜索。

1、第2章 C语言基础,北京科技大学 计算机系,C 语言程序设计,2,本章主要内容,本章介绍C语言的基础,包括:数据类型运算符和表达式均是程序设计的基本知识为什么讨论这些知识?,通常程序要对数据进行操作处理:处理的对象是数据通过运算符和表达式进行操作,3,例如:,【例2.1】计算圆的面积,半径为 5 cm。程序如下:,main()float r,area;r=5;area=3.14*r*r;printf(%fn,area);,运算结果是输出圆的面积:78.500000,程序中用到的数据:r、area、5、3.14对数据进行的运算:*、=,例jc2_1,4,分析:,计算机操作处理时,要完成以下工作:

2、在内存中给半径 r 和运算结果 area 开辟存储空间,存放它们的值。应该留多大的地方来存放它们的值?数据 5 和 3.14 与 r、area 不同,它们是在编写程序时就给出确定的值,在运算过程中不会改变。这样的数计算机怎么处理?对整数 5 和小数3.14,计算机存放时是否有区别?,涉及数据类型的基本知识,5,C语言的数据类型,C数据类型,本章讨论基本类型数据,6,2.1.1 整型数据,1整型数据的类型基本整型数据 int,分配 2 Byte短整型数据 short int,分配 2 Byte长整型数据 long int,分配 4 Byte整型数据均以二进制补码形式存储,问题:为什么要采用补码?

3、如何表示?,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,2.有符号和无符号整型数据,有符号的整型数据 signed int无符号的整型数据 unsigned int区别是将最高位看作符号位还是数据位,例如:1111 1111 1010 100

5、0作为有符号数使用时,最高为符号位为负数,值是:-88(再求一次补)作为无符号数使用时,最高为数据位为无符号的数,值是:65448,11,例如:,main()unsigned int m;m=65448;printf(nm=%dn,m);printf(m=%un,m);,例jc2_a,输出结果:m=-88m=65448,按有符号数输出,按无符号数输出,12,整型数据的类型及规定,方括号表示可选项int 分配2 Byte,long分配4 Byte,13,2.1.2 实型数据,1实型数据的类型 单精度实型数据 float,分配4 Byte双精度实型数据double,分配 8 Byte2实型数据的存

6、储,单精度实型,指数部分,小数部分,小数的符号位,指数的符号位,14,实型数据的类型及规定,C标准并未具体规定各种实型数据所占字节数,也不规定具体小数和指数部分的位数。一般而言,小数部分位数多,数据表示的有效数字多,精度就高;而指数部分位数多,则表示的数据范围更大。,有效数字的意义?,例jC2_a,15,2.1.3 字符型数据,字符型数据char,分配 1 Byte 字符型数据是指字母、数字、各种符号等用ASCII值表示的字符例如 a 是一个char类型数据,称作字符常量,存储:,0 1 1 0 0 0 0 1,2.1.4 空类型,空类型void通常与指针或函数结合使用,16,2.2 常量、变

7、量与标准函数,主要内容:常量变量标准库函数,17,2.2.1 常量,在运行程序的过程中值保持不变的量1整型常量 十进制:09八进制:07,以 0开头十六进制:09,AF/af,以 0 x或 0X 开头,例如:100-8 0+123010 024 0100 0730 x38 0 x10 0X10 0XFF 0 x0a,18,1.整型常量,整型常量的类型:根据值大小默认类型。整型常量后面加l或L,则认为是long int型 例如:123L、0L、432l、0 x100l,注意:十六进制常量中可以使用大写字母AF,也可以使用小写字母af。八进制常量中不能出现数字 8 或 9例如:018、0921非法

8、,19,2.实型常量,十进制形式 1.0 1.+12.0-12.0 0.0指数形式 1e3 1.8e-3-123E-6-.1E-3,指数只能是整数,而尾数则可以是整数也可以是小数,无论指数或尾数均不能省略例如:1e、E.5、E-3 非法实型常量的类型:默认为double型,后面加F(或f),则强调表示该数是float类型例如:3.5f、1e2F,20,3.字符型常量,可视字符常量 单引号括起来的单个可视字符例如:a、A、+、3、等 转义字符常量单引号括起来的 与可视字符组合,例如:,21,4.字符串常量,用双引号括起的一个字符序列例如:ABC、123、a、nt nGood morning字符串

9、常量的长度:所包含的字符个数 字符串常量的存储方式:,所占存储单元数:串长度1例如:,字符串结束标记,22,5.符号常量,以标识符来代表的常量事先编译预处理命令define定义编译时先由系统替换为它所代表的常量,再进行编译例如:,#define LEN 2.5main()float a,b;a=2*3.14*LEN;b=3.14*LEN*LEN;printf(a=%f,b=%fn,a,b);,编译前系统进行替换,23,5.符号常量,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是编译预处理命令

10、,必须以“#”开头编译预处理命令在第7章讨论。,替换为,24,2.2.2 变量,1.变量的有关概念在程序运行过程中,其值改变的数据,称为变量,变量用标识符表示,称为变量名。变量必须“先定义后使用”系统为变量分配存储单元,存储变量的值。编写程序时通过变量名来存、取变量值。,例如:有变量a它的值是510,25,2.变量定义,变量定义的一般格式:数据类型说明符 变量列表;例如:int i,j;long k,m;float x,y;char ch1,ch2;,必须使用合法的标识符作变量名不能使用关键字为变量命名,26,3.变量的初始化:,允许在说明变量的时候对变量赋初值。例如:int a=5,b=10

11、+2;double x=23.568,y;char ch1=a,ch2=66,ch3=142;表示定义变量并对变量存储单元赋值。错误的初始化:int a=3+b,b=5;float m=n=23.16;,27,2.2.3 标准库函数,由C编译系统定义的一种函数,存放在系统函数库中,用户可以根据需要随时调用常用函数如:printf、scanf、fabs、sqrt、sin、(常用数学函数参见教材 P30 表2.5)函数调用形式:函数名(参数表)例如:putchar(a)sqrt(x),例jc2_3,28,2.3 运算符和表达式,主要内容:算术运算符和算术表达式赋值运算符和赋值表达式关系运算符和关系

12、表达式逻辑运算符和逻辑表达式位运算符和位运算表达式条件运算符和条件表达式逗号运算符和逗号表达式其他运算符及其运算,29,运算符的有关概念,作用:对运算对象完成规定的操作运算类型:按运算对象分:单目、双目、三目按功能分:算术、赋值、关系、逻辑条件、逗号、位、其他,30,运算符的优先级和结合性,优先级指各种运算符号的运算优先顺序例如:算术运算优先于关系运算 算术运算中先*/后+-,结合性指运算符号和运算对象的结合方向分为:从左向右(左结合)和从右向左(右结合)例如:算术运算符为左结合 a-b+4 赋值运算符为右结合 a=b=5(C语言规定见教材 P297 附录B),31,本章涉及的运算符,+-*/

13、%+-+-=+=-=*=/=%=&=|=?:,&sizeof(数据类型标识符),32,表达式的有关概念,什么是表达式由运算符将运算对象连接成的式子,它描述了一个具体的求值运算过程。计算表达式的值按照运算符的运算规则求值求值时注意运算符的优先级和结合性表达式值的类型自动转换强制转换,33,例如:,表达式:150+b*212.456 b=(+a)-2a/=a*=(a=2)f=abc-a|+b&c+max=ab?a:b a=3,a+=3,a*a 1/(float)a+6,34,算术运算,算术运算符的优先级,没有乘方运算符,要计算a3要写作 a*a*a 的连乘,或用标准库函数 pow(a,3)“/”的

14、运算对象可为各种类型数据,但是当进行两个整型数据相除时,运算结果也是整型数据“%”要求运算对象必须是整型数据,功能是求两数相除的余数,余数的符号与被除数的符号相同。,35,自增自减运算,+-是单目运算符有前缀和后缀两种形式 前缀形式:先自增(自减)再引用;后缀形式:先引用再自增(自减);功能:前缀形式+a 等价于 a=a+1-a 等价于 a=a 1 后缀形式 a+等价于 a=a+1 a-等价于 a=a 1,表达式的值会不同,36,例如:,当 a5 时+a 表达式的值为 6,且 a6 a+表达式的值为5,且 a6 b=+a 等价于 a=a+1;b=a 表达式的值为6,且 a=6,b=6 b=a+

15、等价于 b=a;a=a+1 表达式的值为5,且 a=6,b=5,37,说明:,+和-的运算对象只能是变量(或运算结果是变量的表达式),不能是常量(或运算结果是数值的表达式)。例如:5+、(a+2)+不合法。具有右结合性,结合方向为从右到左。例如:a+等价于-(a+)如果有多个运算符连续出现时,C系统尽可能多的从左到右将字符组合成一个运算符例如:i+j 等价于(i+)+j-i+-j 等价于-(i+)+(-j),38,main()int a=5;printf(%d%dn,a,a+);,说明(续):,对函数参数的求值顺序:Turbo C系统先计算最右边的参数值,再依次计算左面的参数值。,【例2.5】

16、有多个函数参数且为同一变量自增的运算处理。,输出结果:6 5,运行例2.5,39,说明(续):,【例2.6】有多个函数参数且为同一变量多次自增的运算处理。,main()int a=5;printf(%d%dn,a,(a+)+(a+);,输出结果:7 11,运行例2.6,40,赋值运算,赋值运算符(右结合)=+=-=*=/=%=&=|=赋值表达式将表达式的值存入变量对应的内存单元中m=12b=(+a)-2 m%=3+n 等价于 m=m%(3+n)x*=(x=5),41,说明:,赋值号左边必须是变量,右边可以是C语言任意合法的表达式例如:n=t+210 等价于:a=(b=(b*c)10)赋值号与数

17、学中的等号含义不同例如:数学中 a=b 等价于 b=a C语言中 a=b 不等价于 b=a,42,关系运算,关系运算符(左结合)=c 等价于 a=(b=c)与(a=b)=c 不等价关系运算符优先于赋值,低于算术,43,说明:,关系运算的结果应该是逻辑值。C语言用数值用 1 表示逻辑真,0 表示逻辑假例如:75 的值是 1,57 的值是 0 ab的值是 0,ab 的值是1即关系表达式的值:0 或1 实型数可进行大于或小于比较,但通常不进行=或!=的关系运算,44,逻辑运算符,逻辑运算符&|!逻辑运算符的运算规则,45,逻辑表达式,逻辑表达式用逻辑运算符将运算对象连接成的式子 例如:0&b a&b

18、|c&d a|b-5|c/4!x+y=z 逻辑运算符的优先级 和结合性:!是单目运算符,右结合,高于算术&和|是双目运算符,左结合,高于赋值运算符,低于关系运算符,46,逻辑运算规则,从左到右依次进行逻辑计算运算对象为非0表示逻辑真运算对象为 0 表示逻辑假逻辑运算的结果为 0 或 1例如设:a=15,b=0,c=-2 a&b&c 结果为0 a|b|c 结果为1(a+c)|b&c 结果为1,47,逻辑运算规则(续),运算按照从左至右的顺序进行,一旦能够确定逻辑表达式的值,就立即结束运算逻辑运算的短路性质例如设:a=1,b=0,c=-2a&b&c,(a+)|+b&-c,为 0,运算终止,表达式值

19、为 0,为非0,运算终止,表达式值为 1且a为2,b为0,c为-2(b,c保持原值),48,关系与逻辑运算符的应用,表示数学公式abc 判断a,b,c三条线段能否组成一个三角形 a,b不同时为负,a+bc&a+cb&b+ca,a=0|b=0!(a=0)|(a=0&b=0&b=0),ab&bc,49,位运算符,&|,位运算符的运算对象只能是整型数据或字符型数据,不能是实型数据运算对象一律按二进制补码参加运算,并按位进行运算位运算的结果是一个整型数据,低于单目、算术运算符,高于其他运算符,低于单目、算术和关系运算符,高于其他运算符,50,位逻辑运算符的运算规则,假设ai和bi均是一个二进制位(bi

20、t),例如:假设a=10,b=010 求a&b、a|b、ab、a,51,程序如下:,main()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,运行jc2_b,52,移位运算,例如:ab-1 等价于(a+8)(b-1),例如:假设a=10,b=2,求ab-1,main()int a=10,b=2;printf(%d%dn,ab-1);,输出结果:40 9,运行jc2_c,请自行分析运行结果,53,条件表达式运算,条件运

21、算符:?:条件表达式的一般形式 表达式1?表达式2:表达式3例如:m=10&b-20?a:b x=3+a5?100:200,C语言中唯一的三目运算符,要正确区分用?和:分隔的表达式涉及条件运算符的优先级与结合性,54,条件运算符优先级,条件运算符优先级高于赋值、逗号运算符,低于其他运算符 例如: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),55,条件运算符的结合性,条件运算符具有右结合性当一个表达式中出现多个条件运算符时,应该将位于最右边的问号与离它最近的冒号

22、配对,并按这一原则正确区分各条件运算符的运算对象。,例如:wx?x+w:xy?x:y 与 wx?x+w:(xy?x:y)等价 与(wx?x+w:xy)?x:y 不等价,56,逗号表达式运算,逗号表达式的一般形式 表达式1,表达式2,表达式n 逗号表达式的值从左向右,依次对表达式求值,最后得到表达式n 的值就是逗号表达式的值,例如: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,57,取地址运算符&,为单目运算符运算对象只能是变量 运算结果是变量的存储地址 例如有定义:int a

23、,student;char ch;可以对变量a、ch、student 进行&运算:&a&ch&student,58,长度运算符 sizeof,为单目运算符运算对象只能是变量名或数据类型标识符 运算结果为该变量或该数据类型的长度,main()int a=5;double x;printf(%d%d,sizeof(int),sizeof(a);printf(%d%d,sizeof(double),sizeof(x);printf(%d%dn,sizeof(float),sizeof(char);,输出结果:2 2 8 8 4 1,运行jc2_d,59,2.4 运算中数据类型的转换,2.4.1 数据

24、类型的自动转换转换原则:,自动将精度低、表示范围小的运算对象类型向精度高、表示范围大的运算对象类型转换,例如有定义:int a;char ch;表达式:a-ch*2+35La-ch*2+35.,60,2.赋值运算中的类型转换,=小数部分自动补0,=自动舍去实型表达式的小数部分(注意不进行四舍五入)=自动截取表达式值的低字节赋值,舍去高字节=自动给高字节补0 或补1,61,2.4.2 数据类型的强制转换,强制转换的一般形式(类型名)表达式例如:(int)(b+3*x)%3 1/(float)a+6,注意:(float)22/5 与(float)(22/5)不同错误的类型转换:(int)b=a+5 b=int(3*a),

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号