二级C语言 函数 (2)课件_第1页
二级C语言 函数 (2)课件_第2页
二级C语言 函数 (2)课件_第3页
二级C语言 函数 (2)课件_第4页
二级C语言 函数 (2)课件_第5页
已阅读5页,还剩141页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、国家二级培训考点 1 程序设计基础知识 1-2分 考的杂,有些知识点书上没有,需要多看书,多做题,多记忆计算机与计算机语言 计算机是一种具有内部存储能力、由程序自动控制的电子设备。人们将需要计算机做的工作写成一定形式的指令,并把它们存储在计算机内部的存储器中,当人们给出命令之后,它就按指令顺序自动进行操作。 人们把这种可以连续执行的一条条指令的集合,称为程序,是解决问题的步骤。 程序就是人与机器“对话”的语言,通常叫“程序设计语言” 程序设计语言:机器语言,汇编语言和高级语言 程序设计:确定各项内容实施的步骤,对于计算机程序设计来讲,主要分为以下步骤: 1.确定数据结构 2.确定算法 3.编码

2、 4.在计算机上调试程序 5.整理并编写文档资料 算法+ 数据结构=程序 源程序(.c): 目标程序(.obj): 可执行程序(.exe) 编译:检查是否有语言错误,如果有错误,就报错,没有就把源程序“翻译”成目标程序 链接:把目标程序与C语言提供的各种库函数连接起来,生成可执行程序 运行:运行可执行程序,看运行结果是否正确 注意:编译只能检查语法错误,不能检查语义错误(逻辑错误)算法 算法:指为解决某个问题而采取的确定且有限的步骤。具有5个特征: 有穷性: 确定性: 可行性: 有零个或多个输入 有1个或多个输出 结构化程序设计: 顺序结构、选择结构和循环结构 模块化结构的思想: 自顶向下,逐

3、步细化,模块化 C语言的特点 (1)语言简洁、紧凑,并且使用方便、灵活; (2)运算符丰富; (3)数据结构丰富; (4)具有结构化的控制语句; (5)语法限制不太严格,使程序设计比较自由; (6)C语言允许用户直接访问物理地址直接访问物理地址,能进行 位位(bit)操作操作,可以直接对硬件硬件进行操作。 (11)以下叙述中正确的是 A)程序设计的任务就是编写程序代码并上机调试 B)程序设计的任务就是确定所用数据结构 C)程序设计的任务就是确定所用算法 D)以上三种说法都不完整考 题 算法具有五个特性,以下选项中不属于算法特性的是_。A有穷性 B简洁性 C可行性 D确定性 以下叙述中正确的是_

4、。A用C程序实现的算法必须要有输入和输出操作B用C程序实现的算法可以没有输出但必须要输入C用C程序实现的算法可以没有输入但必须要有输出D用C程序实现的算法可以既没有输入也没有输出 下列选项中不属于结构化程序设计方法的是A自顶向下 B逐步求精 C模块化 D可复用 程序设计语言的基本成分 1.需要用函数、语句、表达式等语法结构 2.编译器需要字符集和词法元素,以方便对源代码的识别和翻译 3.为方便数据描述和操纵,需要数据类型、变量、常量考点 2 标识符 1分,简单C语言字符集 C语言的字符集是指语言的字符集是指C程序中允许出现的字符,程序中允许出现的字符,分为以下几类:分为以下几类: (1)英文字

5、母(大、小写);英文字母(大、小写);A、B、C、D、Y、Z ,a、b、c、d、y、z (2)数字:数字:0、1、2、3、4、5、6、7、8、9 (3)特殊符号:特殊符号:+、%、=、_、!、(、)、(、)、#、$、&、 、|、.、?以及空格等。以及空格等。 (4)转义字符:转义字符:n、t、v、b、r、f、0、ddd、xhh等。等。 标识符标识符 C语言中处理对象的名字都要用标识符表示,如符号常量名、变量名、函数名、类型名、文件名等。 C语言中的标识符是由字母、数字、下划线(语言中的标识符是由字母、数字、下划线(_)组成,并且第一个字符必须是字母或下划线。组成,并且第一个字符必须是字母或下划

6、线。 在C语言中,大写字母和小写字母不通用 标识符分类标识符分类 (1)关键字 关键字也称系统保留字,是一类特殊的标识符,在C语言中有特殊的含义,不允许作为用户标识符使用,不能用作常量名、变量名、函数名、类型名、文件名等。C语言中的保留字共32个,保留字用小写字母表示。 2-2 标识符标识符描述数据类型定义描述数据类型定义描述存储类型描述存储类型描述数据类型描述数据类型描述语句描述语句typedefautecharbreakvoidexternintcaseregisterfloatcontinuestaticdoubledefaultvolatilelongifshortelsesigned

7、switchstructforuniondo unsignedwhileconstreturnenumsizeofgoto 标识符分类标识符分类 (2)预定义标识符 预定义标识符也有特定的含义,如C语言提供的库函数的名字(如printf、getchar、fabs等)和编译预处理命令(define、include等)。 (3)用户标识符 用户标识符是用户根据自己的需要而定义的标识符,如对变量、常量、函数等的命名。分隔符 C 语言中采用的分隔符有逗号和空格两种。 逗号用于定义多个变量之间和函数参数之间 空格主要用于语句中各单词之间,在关键字和标识符之间必须有一个或多个空格2009. 9 (12)以

8、下选项中,能用作用户标识符的是 A)void B)8_8 C)_0_ D)unsigned 以下不能定义为用户标识符的是_。AMain B_0 C_int Dsizeof 以下不合法的用户标识符是Aj2_KEY BDouble C4d D_8_考点3 常量 主要掌握常量的书写格式 记忆:C语言有哪些种类的常量?各类常量 的书写格式? 揣摩:计算机是如何识别常量及相应的数据类型的? 分值:2-4分 1整型常量 (1)十进制整数。如123、-234、0。 (2)八进制整数。以数字数字0 0开始开始的数是八进制数,如0123、-0234,后面只能是有效的八进制数字数字0 07 7,若写成09就错了。

9、 (3)十六进制整数。以数字数字0 x0 x开始开始的数是十六进制数,后面只能是有效的十六进制数字09,af(AF)表示十进制值1015,如:0 x123、-0 x234。 整型常量后面紧跟大写字母L(或小写字母l)则表示此常量为长整型常量。2实型常量实型常量 (1)十进制小数形式,由数字、小数点和正负十进制小数形式,由数字、小数点和正负号组成。如号组成。如0.123、-0.123、1.、.5都是合法都是合法的实型数。其中的实型数。其中1.和和.5分别代表分别代表1.0和和0.5。 (2)指数形式,也称科学计数法,用指数形式,也称科学计数法,用e或或E表表示指数,其一般形式为:示指数,其一般形

10、式为:aeb表示表示a10b,其中其中a是十进制数,可以是整数或是小数,是十进制数,可以是整数或是小数,b必须是整数必须是整数 3.字符常量字符常量 C的字符常量是用的字符常量是用单引号单引号(即撇号即撇号)括起来的一个字符。括起来的一个字符。如如a、1、D、?、$等都是字符常量。等都是字符常量。注意,注意,a和和A是不同的字符常量是不同的字符常量 数字字符 英文字母 转义字符 ASCII码表:字符转换成数字存储,记忆ASCII码表规律:4.字符串常量字符串常量 字符串常量是一对双引号括起来的字符序列 字符串常量后面有一个结束标志字符串常量后面有一个结束标志0,其其ASCII是是0 不能把一个

11、字符串赋给一个字符变量。 5.符号常量符号常量 #define 符号常量名 字符串 以下不合法的数值常量是A011 B1e1 C8.0E0.5 D0 xabcd思考 C语言的标识符为什么不能全是数字或者以数字开头?总结 全是数字的,是数值常量 以一对单引号括起来的一个字符,是字符常量 一对双引号括起来的0个或多个字符,是字符串常量考点4(重点) 变量 运算符 表达式 在程序运行过程中其值可以改变的量称为变量。程序中的变量由用户取名。 在程序中一个变量实质上代表某个存储单元。要注意变量的“名”和变量的“值”的区别,变量的“名”是指该变量所代表的存储单元的标志。而变量的“值”是指存储单元中的内容。

12、 分值:2-5分 (1)变量的定义,初始化,赋值,所占存储空间的大小,取值范围; 定义:必须先定义,后使用 初始化:变量定义时的初值。没有初始化时,是随机值。 赋值:给已经定义的变量通过赋值语句赋值,变量的值总是最后一次给它的赋值的值。 取值范围:与存储空间和存储格式有关。 (2)优先级和结合性 优先级:不同的运算符的先后运算次序 结合性:相同优先级的运算次序 (3)表达式的值,变量的值:每个变量都有变量的值,每个合法的表达式都有表达式的值 (4)不同数据类型值的相互转换规则:不同类型的值可以相互转换:自动转换和强制转换 (5)位运算符2-4 变量变量 2-4-1 整型变量整型变量 1整型数据

13、在内存中占整型数据在内存中占2个字节个字节 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 整型数是以补码的形式存放的。正数的补码就整型数是以补码的形式存放的。正数的补码就是它的二进制形式,负数的补码是将该数的绝是它的二进制形式,负数的补码是将该数的绝对值的二进制按位取反再加对值的二进制按位取反再加1 2-4 变量变量 2-4-1 整型变量整型变量 2整型变量的分类 整型变量分为基本型、短整型、长整型、无符号型,这些类型在不同的编译系统所占内存不同。2-4 变量变量类 型类型标识符所占字节数数值范围基本类型int2-3276832767即-215 -(215-1)短整型shor

14、t int2-3276832767即-215 -(215-1)长整型longint4-21474836482147483647即-231 -(231-1)无符号整型unsigned int2 065535即0216-1无符号短整型unsigned short2065535即0216-1无符号长整型unsigned long404294967295即0232-1Turbo C对各类型整数的设定对各类型整数的设定 2-4 变量变量 【例例2-2】 整型数据定义和使用整型数据定义和使用 main() int a,b,c,d; unsigned u; a=100;b=50; u=a+b; c=a-b;

15、 d=32767+1; printf(c=%dn,c); printf(d=%dn,d); printf(u=%un,u); 运行结果:运行结果: c=50 d=-32768 u=1502-4 变量变量 2-4-2 实型变量实型变量 实型变量分为单精度和双精度两类,例如:实型变量分为单精度和双精度两类,例如: float a,b; /*指定指定a、b为单精度实型变量为单精度实型变量*/ double c; /*指定指定c为双精度实型变量为双精度实型变量*/ P21:表表2-4 Turbo C对实型数据的设定对实型数据的设定 类 型类型标识符所占字节数有效数字数值范围单精度实型float467位

16、10-371038双精度实型double 81516位10-307103082-4 变量变量 【例例2-3】 实型数据定义和使用实型数据定义和使用 main() float x; double y; x=123456.1234; y=123456.1234; printf(x=%f,y=%lfn,x,y); 运行结果:运行结果: x=123456.125000,y=123456.1234002-4 变量变量 2-4-3 字符变量字符变量 字符变量用来存放一个字符常量,字符变量用字符变量用来存放一个字符常量,字符变量用char来定义。来定义。 如:如: char a,b; / *指定指定a、b为

17、字符型变量为字符型变量*/ (1)直接赋予字符常量。如:直接赋予字符常量。如:char c=A; (2)赋予赋予“转义字符转义字符”。如:。如:char c=; (3)赋予一个字符的赋予一个字符的ASCII代码。如字符代码。如字符a的的ASCII代码为代码为97(见附录见附录1),则,则char c=97; 字符数据与整型数据二者间是通用的,可以互字符数据与整型数据二者间是通用的,可以互相赋值和运算。相赋值和运算。 2-4 变量变量 【例例2-4】字符变量定义使用字符变量定义使用 main() int a=A,b; char c=97; b=c-32; printf(%d%cn,b,b); p

18、rintf(%d%cn,a,a); 程序运行将输出程序运行将输出:65A65A2-4 变量变量 【例例2-5】 将给定变量的值按大写形式输出。将给定变量的值按大写形式输出。 main() char a=z,b=97; printf(%c%c n,a-32, b-32); 程序运行将输出程序运行将输出: ZA 小 结 存储:把指定的数据类型按照对应的格式转化成二进制存储在计算机中 使用:把二进制数据转化成指定的格式进行使用 类型转换:长 短:截取低位 短长:扩展:正数加0,负数加1 字符型:存储字符的ASCII码值 整型: 无符号数 十进制二进制 有符号数:正数:符号位为0,数值位把十进制转换成

19、二进制;负数:符号位为1,数值位 取反加 1. 实型: 按指定的格式只存储尾数和指数,不能精确存储,注意存储尾数的精度和显示精度2-5 数据间的混合运算数据间的混合运算int unsignedlongdoublefloat低低高高char,short2-6 变量赋初值变量赋初值程序中常需要对一些变量预先设置初值。C语言允许在定义变量的同时使变量初始化。 如:如:int a=1; /*指定指定a为整型变量,初值为为整型变量,初值为1*/float f=1.23; /*指定指定f为实型变量,初值为为实型变量,初值为1.23*/1. char c=a; /*指定指定c为字符变量,初值为为字符变量,初

20、值为a*/随机值 随机数:就是在一定范围内随机产生的数,并且得到这个范围内的每一个数的机会一样。 在得到这个数之前不知道这个数,但是一旦得到这个数,这个数就是固定的 当变量定义没有初始化时,内存里面所存储的值不知道,但是内存里面的值是确定的2-7 运算符和表达式运算符和表达式 3强制类型转换运算符强制类型转换运算符 其一般形式为其一般形式为: (类型名类型名)(表达式表达式) 注意,表达式应该用括号括起来。注意,表达式应该用括号括起来。 例如写成例如写成 (int)a+b 则只将则只将a转换成整型,然后与转换成整型,然后与b相加。相加。2-7 运算符和表达式运算符和表达式 2-7-4 算术运算

21、符和算术表达式算术运算符和算术表达式 【例例2-6】强制类型转换。强制类型转换。 main() float x; int k; x=1.3; k=(int)x; printf(x=%f,k=%d,x,k); 运行结果:运行结果: x=1.300000,k=12-7 运算符和表达式运算符和表达式 2-7-4 算术运算符和算术表达式算术运算符和算术表达式4自增、自减运算符 作用是使变量的值增1或减1 +i,-i(在使用i之前,先使i的值加(减)1) i+,i-(在使用i之后,使i的值加(减)1)2-7 运算符和表达式运算符和表达式 2-7-4 算术运算符和算术表达式算术运算符和算术表达式4自增、自

22、减运算符 粗略地看,+i和i+的作用相当于i=i+1。但+i和i+不同之处在于+i是先执行i=i+l后,再使用i的值;而i+是先使用i的值后,再执行i=i+1。 (1)自增运算符(+)和自减运算符(-),只能用于变量,而不能用于常量或表达式。 (2)+和-的结合方向是“自右至左”2-7 运算符和表达式运算符和表达式 2-7-5 赋值运算与赋值表达式赋值运算与赋值表达式 1赋值运算符 赋值符号“=”就是赋值运算符,它的作用是将一个数据赋给一个变量。 2-7 运算符和表达式运算符和表达式 2-7-5 赋值运算与赋值表达式赋值运算与赋值表达式2类型转换 (1)将实型数据(包括单、双精度)赋给整型变量

23、时,舍弃实数的小数部分。 (2)将整型数据赋给单、双精度变量时,数值不变,但以浮点数形式存储到变量中。2-7 运算符和表达式运算符和表达式 2-7-5 赋值运算与赋值表达式赋值运算与赋值表达式2类型转换 (3)将一个double型数据赋给float变量时,只保留前面7位有效数字,存放到float变量的存储单元(32位)中。但应注意数值范围不能溢出。 (4)字符型数据赋给整型变量时,由于字符只占1个字节,而整型变量为2个字节,因此将字符数据(8位)放到整型变量低8位中。2-7 运算符和表达式运算符和表达式 2-7-5 赋值运算与赋值表达式赋值运算与赋值表达式2类型转换 (5)将一个int、sho

24、rt、long型数据赋给一个char型变量时,只将其低8位原封不动地送到char型变量(即截断)。 2-7 运算符和表达式运算符和表达式 2-7-5 赋值运算与赋值表达式赋值运算与赋值表达式2类型转换 (6)将带符号的整型数据(int型)赋给long型变量时,要进行符号扩展,将整型数的16位送到long型低16位中,如果int型数据为正值(符号位为0),则long型变量的高16位补0;如果int型变量为负值(符号位为1),则long型变量的高16位补1,以保持数值不改变。2-7 运算符和表达式运算符和表达式 2-7-5 赋值运算与赋值表达式赋值运算与赋值表达式 3复合的赋值运算符 在赋值符“=

25、”之前加上其他运算符,可以构成复合的运算符。如果在“=”前加一个“+”运算符就成了复合运算符“+=”。 例如,可以有:例如,可以有: a+=1 等价于等价于 a=a+1 a*=b-k*3 等价于等价于 a=a*(b-k*3) a%=4 等价于等价于 a=a%42-7 运算符和表达式运算符和表达式 2-7-6 逗号运算符和逗号表达式逗号运算符和逗号表达式 逗号表达式的一般形式可以扩展为:逗号表达式的一般形式可以扩展为: 表达式表达式l,表达式表达式2,表达式表达式3表达式表达式n 它的值为表达式它的值为表达式n的值。的值。 逗号运算符是所有运算符中级别最低的。逗号运算符是所有运算符中级别最低的。

26、 请注意并不是任何地方出现的逗号都是作为逗请注意并不是任何地方出现的逗号都是作为逗号运算符。号运算符。 例如函数参数也是用逗号来间隔的。如例如函数参数也是用逗号来间隔的。如 printf(%d,%d,%d,a,b,c);2-7 运算符和表达式运算符和表达式 2-7-7 关系运算符和关系表达式关系运算符和关系表达式 1关系运算符及其优先次序关系运算符及其优先次序 C语言提供语言提供6种关系运算符:种关系运算符: (小于小于) (大于大于) = (大于或等于大于或等于) = (等于等于) != (不等于不等于) 2-7 运算符和表达式运算符和表达式 2-7-7 关系运算符和关系表达式关系运算符和关

27、系表达式 1关系运算符及其优先次序关系运算符及其优先次序 (1)前前4种关系运算符种关系运算符(,=)的优先级别相的优先级别相同,后两种也相同。前同,后两种也相同。前4种高于后种高于后2种。例如,种。例如,“”优先于优先于“=”。而。而“”与与“yz; b=-x-y=z; c=x=y; printf(nx=%d,y=%d,z=%dn,x,y,z); printf(na=%d, b=%d, c=%dn,a,b,c); 程序的输出结果:程序的输出结果: x=16, y=16, z=13 a=0, b=0, c=l2-7 运算符和表达式运算符和表达式 2-7-8 逻辑运算符及逻辑表达式逻辑运算符及逻

28、辑表达式1逻辑运算符及其优先次序逻辑运算符及其优先次序 C语言提供三种逻辑运算符:语言提供三种逻辑运算符: (1) & 逻辑与逻辑与 (2) | 逻辑或逻辑或 (3) ! 逻辑非逻辑非2-7 运算符和表达式运算符和表达式 2-7-8 逻辑运算符及逻辑表达式逻辑运算符及逻辑表达式1逻辑运算符及其优先次序逻辑运算符及其优先次序 在一个逻辑表达式中如果包含多个逻辑运算在一个逻辑表达式中如果包含多个逻辑运算符按以下的优先次序:符按以下的优先次序: (1)!(非非) &(与与) |(或或),即,即“!”为三者中最为三者中最高的。高的。 (2)逻辑运算符中的逻辑运算符中的“&”和和“|”低于关系低于关系运

29、算符,运算符,“!”高于算术运算符。高于算术运算符。2-7 运算符和表达式运算符和表达式 2-7-8 逻辑运算符及逻辑表达式逻辑运算符及逻辑表达式2逻辑表达式逻辑表达式 如前所述,逻辑表达式的值应该是一个逻辑量“真”或“假”。C语言编译系统在给出逻辑运算结果时,以数值数值1代表代表“真真”,以,以0代表代表“假假”,2-7 运算符和表达式运算符和表达式 2-7-8 逻辑运算符及逻辑表达式逻辑运算符及逻辑表达式2逻辑表达式逻辑表达式 但在判断一个量是否为“真”时,0代代表表“假假”,以非,以非0代表代表“真真”。即将一个非零的数值认作为“真”。2-7 运算符和表达式运算符和表达式2-7-8 逻辑

30、运算符及逻辑表达式逻辑运算符及逻辑表达式【例例2-8】main() int x=1,y=2,z=3; int a,b; a=(x=8)&(y=8)&(z=8); printf(nx=%d,y=%d,z=%d,a=%d,x,y,z,a); x=1;y=2;z=3; a=(x=0)&(y=8)&(z=8); printf(nx=%d,y=%d,z=%d,a=%d,x,y,z,a); x=1;y=2;z=3; b=(x=0)|(y=0)|(z=6); printf(nx=%d,y=%d,z=%d,b=%d,x,y,z,b); x=1;y=2;z=3; b=(x=6)|(y=6)|(z=6); pri

31、ntf(nx=%d,y=%d,z=%d,b=%d,x,y,z,b); 运行结果:运行结果: x=8,y=8,z=8,a=1 x=0,y=2,z=3,a=0 x=0,y=0,z=6,b=1 x=6,y=2,z=3,b=1 2-7 运算符和表达式运算符和表达式 2-7-9 条件运算符与条件表达式条件运算符与条件表达式 1条件运算符与条件表达式条件运算符与条件表达式 条件运算符是条件运算符是C语言中唯一的三目运算符,语言中唯一的三目运算符,条件运算符为条件运算符为“? :”,它有三个运算对象。,它有三个运算对象。 由条件运算符连接三个运算对象组成的表达由条件运算符连接三个运算对象组成的表达式称为式称

32、为“条件表达式条件表达式”。 2-7 运算符和表达式运算符和表达式 2-7-9 条件运算符与条件表达式条件运算符与条件表达式 1条件运算符与条件表达式条件运算符与条件表达式 条件表达式的一般形式为:条件表达式的一般形式为: 表达式表达式1 ?表达式表达式2:表达式表达式3 条件表达式的运算规则为:先求解表达式条件表达式的运算规则为:先求解表达式l的的值,若其为真值,若其为真(非非0),则求解表达式,则求解表达式2的值,的值,且整个条件表达式的值等于表达式且整个条件表达式的值等于表达式2的值;的值;若表达式若表达式l为假为假(0),则求解表达式,则求解表达式3的值,且的值,且整个条件表达式的值等

33、于表达式整个条件表达式的值等于表达式3的值。的值。2-7 运算符和表达式运算符和表达式 2-7-9 条件运算符与条件表达式条件运算符与条件表达式 【例例2-9】 main() char c; printf(ninput:); scanf(%c,&c); c=(c=A&c=Z)?(c+32):c; printf(output:%c,c); 运行结果:运行结果: input:A output:a2-7 运算符和表达式运算符和表达式 2-7-9 条件运算符与条件表达式条件运算符与条件表达式 2 条件运算符的优先级与结合性 条件运算符的优先级高于赋值运算符,但低于算术运算符、自增自减运算符、逻辑运算符

34、和关系运算符。 小结 严格按照运算符的优先级和结合性求表达式的值,一步一步的运算,不要跳 注意数据类型和表达式的值 表达式:(int)(double)9/2)-(9)%2的值是 A)0 B)3 C)4 D)5 若有定义语句:int x=10;,则表达式x-=x+x的值为 A)-20 B)-10 C)0 D)10 有以下程序 #include main() int a=1,b=0; printf(“%d,”,b=a+b); printf(“%dn”,a=2*b); 程序运行后的输出结果是 A)0,0 B)1,0 C)3,2 D)1,2 有以下定义语句,编译时会出现编译错误的是 A)char a=

35、a; B)char a=n; C)char a=aa; D)char a=x2d; 以下选项中正确的定义语句是A)double a;b; B)double a=b=7; C)double a=7,b=7; D)double ,a,b; 执行以下程序段后,w的值为 int w=A,x=14,y=15; w=(x|y)&(wa); A)-1 B)NULL C)1 D) 0 若函数中有定义语句:int k;,则 A)系统将自动给k赋初值0 B)这时k中值无定义 C)系统将自动给k赋初值-1 D)这时k中无任何值 设有定义:int x=2; ,以下表达式中,值不为6的是A) x*=x+1 B) x+,

36、2*x C)x*=(1+x) D)2*x,x+=2 若整型变量a、b、c、d中的值依次为:1、4、3、2。则条件表达式aA1 B2 C3 D4 若有定义语句:int a=5;,则表达式:a+的值是 【6】 。 若有语句double x=17;int y;,当执行y=(int)(x/5)%2;之后y的值为 【7】 。位运算 位运算:按二进制的每对应位进行运算,分以下3步: 把原操作数转化成二进制 进行位运算 把结果转换成十进制 所谓位运算是指进行二进制位的运算。在系统软件中,常要处理二进位的问题。 例如,将一个存储单元中的各二进位左移或右移一位,例如,将一个存储单元中的各二进位左移或右移一位,两

37、个数按位相加等。两个数按位相加等。11-1 位运算位运算运算符含 义运算符含 义&按位与取反|按位或右移11-1 位运算位运算 说明:(1)位运算符中除以外,均为二目(元)运算符,即要求两侧各有一个运算量。(2)运算量只能是整型或字符型的数据,不能为实型数据。 11-1 位运算位运算 11-1-1 按位与运算符按位与运算符(&) 参加运算的两个数据,按二进位进行参加运算的两个数据,按二进位进行“与与”运算。如果两个相应的二进位运算。如果两个相应的二进位都为都为1,则结果值为,则结果值为1,否则为,否则为0。 即:即: 0 &0=0 0&1=0 1&0=0 1&1=111-1 位运算位运算 11

38、-1-1 按位与运算符按位与运算符(&) 例如:例如:4&5并不等于并不等于1,应该是按位与。,应该是按位与。 4: 00000100 (&) 5: 00000101 00000100 因此,因此,4&5的值得的值得4。 11-1 位运算位运算 11-1-1 按位与运算符按位与运算符(&) 如果参加如果参加&运算的是负数运算的是负数(如如-4&-5),则以补码,则以补码形式表示为二进制数,然后按位进行形式表示为二进制数,然后按位进行“与与”运运算。算。 -4: 11111111 11111100 & -5: 11111111 11111011 11111111 11111000 结果结果-8。

39、11-1 位运算位运算 11-1-1 按位与运算符按位与运算符(&) 按位与有一些特殊的用途:按位与有一些特殊的用途: (1)清零。如果想将一个位清零,就让这位和清零。如果想将一个位清零,就让这位和0进行进行&运算,即可达到清零目的。运算,即可达到清零目的。 如:原有数为如:原有数为01101111,让它和,让它和0进行进行&运算运算 01101111 (&) 00000000 0000000011-1 位运算位运算 11-1-1 按位与运算符按位与运算符(&) 按位与有一些特殊的用途:按位与有一些特殊的用途: (2) 保留某一位不变。如果想保留某一个位,保留某一位不变。如果想保留某一个位,就

40、让这位和就让这位和1进行进行&运算。运算。 例如:一个整数例如:一个整数 (2个字节个字节),想要保留其中的,想要保留其中的低字节,只需将低字节,只需将a和和0 xff按位与即可。如果想取按位与即可。如果想取两个字节中的高字节,只需进行两个字节中的高字节,只需进行a&0 xff00运算。运算。 11-1 位运算位运算 11-1-2 按位或运算符按位或运算符( | ) 两个相应的二进位中只要有一个为两个相应的二进位中只要有一个为1,该位的结果值为该位的结果值为1。 即:即:0|0 =0 0|1=1 1|0=1 1|1=111-1 位运算位运算 11-1-2 按位或运算符按位或运算符( | ) 例

41、如:例如: 060 | 017 将八进制数将八进制数60与八进制数与八进制数17进行按位或运算。进行按位或运算。 00110000 (|) 00001111 00111111 如果想使一个数如果想使一个数a的低的低4位改为位改为1,只需将,只需将a与与017或或0 xf进行按位或运算即可。进行按位或运算即可。11-1 位运算位运算 11-1-2 按位或运算符按位或运算符( | ) 按位或有一些特殊的用途:按位或有一些特殊的用途: (1) 按位或运算常用来对一个数据的某些位置按位或运算常用来对一个数据的某些位置1。如果。如果想将一个位置想将一个位置1,就让这位和,就让这位和1进行或运算,即可达到

42、进行或运算,即可达到置置1目的。目的。 如:原有数为如:原有数为01101111,让它和,让它和1进行或运算进行或运算 01101111 (|) 11111111 01101111 (2) 保留某一位不变。想要保留某位只需和保留某一位不变。想要保留某位只需和0进行或运进行或运算。算。 11-1 位运算位运算 11-1-3 按位异或运算符按位异或运算符() 异或运算符异或运算符也称也称XOR运算符。它的规则是运算符。它的规则是若参加运算的两个二进位同号,则结果为若参加运算的两个二进位同号,则结果为0(假假);异号则为;异号则为1(真真)。 即即: 00=0,11=0,01=1,10=1 “异或”

43、的意思是判断两个相应的位值是否为“异”,为“异”(值不同)就取真(1),否则为假(0)。 11-1 位运算位运算 11-1-3 按位异或运算符按位异或运算符() (1)使特定位翻转 假设有假设有01111010,想使其低,想使其低4位翻转,位翻转,即即1变为变为0,0变为变为1。可以将它与。可以将它与00001111进行进行运算,即运算,即 01111010 () 00001111 0111010111-1 位运算位运算 11-1-3 按位异或运算符按位异或运算符() 结果值的低4位正好是原数低4位的翻转。要使哪几位翻转就将与其进行运算的该几位置为1即可。这是因为原数中值为1的位与1进行运算得

44、0,原数中的位值0与1进行运算的结果得1。 11-1 位运算位运算 11-1-3 按位异或运算符按位异或运算符() (2)与0异或,保留原值 如:如:01200=012 00001010 () 00000000 00001010 因为原数中的1与0进行运算得l,00得0,故保留原数。 11-1 位运算位运算 11-1-3 按位异或运算符按位异或运算符() (3)交换两个值,不用临时变量 假如假如a=1,b=2。想将。想将a和和b的值互换,可以用的值互换,可以用以下赋值语句实现:以下赋值语句实现: a=ab; b=ba; a=ab; b=b(ab)=bab=abb=a0=a 再执行再执行a=ab

45、=(ab)(bab)=abbab=aabbb=b。11-1 位运算位运算 11-1-4 按位取反运算符按位取反运算符() 是一个单目(元)运算符,用来对一个二进制数按位取反,即将0变l,1变0。 运算符的优先级别比算术运算符、关系运算符、逻辑运算符和其他位运算符都高, 例如:例如:a&b,先进行,先进行a运算,然后进行运算,然后进行&运算。运算。 11-1 位运算位运算 11-1-4 按位取反运算符按位取反运算符() 例如例如025是对八进制数是对八进制数25(即二进制数即二进制数00010101)按位求反。按位求反。 () 000000000010101 111111111101010 即八

46、进制数即八进制数177752。因此,。因此,025的值为八进的值为八进制数制数177752。 11-1 位运算位运算 11-1-5 左移运算符左移运算符() 用来将一个数的各二进位全部左移若干位。 左移1位相当于该数乘以2,左移2位相当于该数乘以22=4。 左移比乘法运算快得多,有些C编译程序自动将乘2的运算用左移一位来实现,将乘2n的幂运算处理为左移n位。 11-1 位运算位运算 11-1-5 左移运算符左移运算符() 例如:例如: a=a) 右移一位相当于除以2,右移n位相当于除以2n。 在右移时,需要注意符号位问题。对无符号数,右移时左边高位移入0,对于有符号数,如果原来符号位为0(该数

47、为正),则左边也是移入0,如果符号位原来为1(即负数),则左边移入0还是1,要取决于所用的计算机系统。11-1 位运算位运算 11-1-6 右移运算符右移运算符() 有的系统移入0,有的移入1。移入0的称为“逻辑右移”,即简单右移。移入l的称为“算术右移”。 Turbo C和其他一些C编译采用的是算术位移,即对有符号数右移时,如果符号位原来为1,左面移入高位的是1。 11-1 位运算位运算 11-1-6 右移运算符右移运算符() 例如,例如,a的值为的值为0113755。 1001011111101101 0100101111110110(逻辑右移时逻辑右移时) 110010111111011

48、0(算术右移时算术右移时) 在有些系统上,在有些系统上,a1得八进制数得八进制数045766,而,而在另一些系统上可能得到的是在另一些系统上可能得到的是145766。 11-1 位运算位运算 11-1-7 位运算赋值运算符位运算赋值运算符 位运算符与赋值运算符可以组成复合赋值运算符 如:如: &=,|=,=,=,= 例如:例如:a&=b相当于相当于a=a&b; a=2相当于相当于a=a2。 有以下程序 #include main() int a=1,b=2,c=3,x; x=(ab)&c; printf(%dn,x); 程序的运行结果是 A)0 B)1 C)2 D)3 #include mai

49、n() char a=4; printf(“%dn”,a=a1);程序的运行结果是A) 40 B) 16 C) 8 D) 4 有以下程序#include main() int a=5,b=1,t; t=(a2|b); printf(“%dn”,t) 程序运行后的输出结果是A)21 B)11 C)6 D)1输入和输出 把数据从计算机内部送到计算机外部设备上 的操作称为为“输出” 把数据从外部设备送到计算机内部的操作称为“输入”CPU内存输入设备输出设备输入输出接口电路函数 返回值类型 函数名(函数形参) 函数体; 函数分为自定义函数和库函数 记忆常用库函数的名称,功能,参数和返回结果,会使用就行

50、。常用的输入输出函数 函数和语句 1. char getchar( ) 2. putchar( char a)考点5 输入输出 1格式输出函数格式输出函数printf() (P45) printf(格式控制字符串,输出表列); 2格式输入函数格式输入函数scanf() (P52) scanf(“格式控制字符串格式控制字符串”,地址表,地址表列列); 格式控制字符串:控制输入输出的格式,包含普通字符和格式控制字符,格式控制字符控制输入输出的格式,普通字符”原样输入输出”,对输入输出不起实际控制作用,只是为了提高程序的可读性和作为数据间的分隔 输出表列:给出输出的数据的值 输入表列:给出输入数据所

51、存储的地址printf()中可用的格式字符及其含义。中可用的格式字符及其含义。格式字符格式字符说说 明明d以有符号十进制的形式输出整数(正数不输出符号)o以八进制无符号形式输出整数(不输出前导符0) x,X以十六进制无符号形式输出整数(不输出前导符0 x),用x则输出十六进制数中的字母时用小写字母af,用X则输出十六进制数中的字母时用大写字母AFu以无符号十进制形式输出整数 c以字符形式输出,只输出一个字符 s输出字符串 f以小数形式输出单、双精度数,隐含输出6位小数e, E以标准指数形式输出单、双精度数,数字部分小数位数为6位。用e时指数用e表示,用E时指数用E表示g ,G选用%f或%e格式

52、中输出宽度较短的一种格式,不输出无意义的0,用G时指数用E表示字符字符说说 明明l表示输出的是长整形整数,可加在d、o、x、u前面m表示输出数据的最小宽度n对实数,表示输出n位小数,对字符串,表示截取n个字符,对整数表示至少占n位,不足用前置0占位0表示左边补0 +数据右对齐-数据左对齐printf的附加格式说明字符的附加格式说明字符 【例例3-6】无符号数据的输出。无符号数据的输出。 main() unsigned int a=65535; int b=-2; printf(a=%d,%o,%x,%un,a,a,a,a); printf(b=%d,%o,%x,%un,b,b,b,b); 运行

53、结果为:运行结果为: a=-1,177777,ffff,65535 b=-2,177776,fffe,65534 【例例3-7】字符数据的输出。字符数据的输出。 main() char ch=a; int k=97; printf(1:%c%dn,ch,ch); printf(2:%c%dn,k,k); 运行结果为:运行结果为:1:a972:a97 【例例3-8】字符串的输出。字符串的输出。 main() printf(%3s,%-7.3s,%.3s,%7.3sn,welcome,welcome,welcome,welcome); 输出如下:输出如下: welcome, wel, wel,we

54、l 【例例3-9】输出单精度数和双精度数时的有输出单精度数和双精度数时的有效位数。效位数。 main() float x; double y; x=11111.111111;y=22222.222222; printf(x=%f,y=%lfn,x,y); 输出结果为输出结果为x=11111.118125,y=22222.222222 最后最后4位是随机数位是随机数 【例例3-10】输出实数时指定小数位数。输出实数时指定小数位数。 main ( ) float x=1234.567; printf(%f%9f%9.2f%.2f%-9.2fn,x,x,x,x,x); 输出结果如下:输出结果如下:存

55、储误差为随机数存储误差为随机数1234.5670011234.5670011234.571234.571234.57 注意:注意:(1)在使用函数输出时,格式控制字符串后的输出项必须与格式说明对应的数据按照从左到右的顺序一一匹配。不对应,也不报错,输出项少,输出随机值,输出项多,不输出.格式不匹配,输出乱码。(2)格式字符必须用小写字母。如%d不能写成%D。 注意:注意:(3)在控制字符串中可以增加提示修饰符和换行、跳格、竖向跳格、退格、回车、换页、反斜杠、单引号、八进制的“转义字符”,十六进制“转义字符”,即n、t、v、b、r、f、ddd、xhh等 注意:注意:(4)如果想输出字符“%”,则

56、应该在格式控制字符串中用连续的两个百分号表示,如:如:printf(%f%,.5); 输出结果是:输出结果是:0.500000%。 注意:注意:(6)用户可以根据需要指定输出项的字段宽度(域宽),对于实型数据还可指定小数位数,当指定的域宽大于输出项的宽度时,输出采取右对齐方式,左边填空格;若字段宽度前加一个“-”号,则输出采取左对齐方式, 右边填空格。 【例例3-12】 main() int a; long b; float f; double d; char c; printf(nint:%d long:%d float:%d double:%d char:%dn,sizeof(a),siz

57、eof(b),sizeof(f), sizeof(d),sizeof(c); 运行结果:运行结果:int:2 long:4 float:4 double:8 char:1 scanf()函数函数 说明:(1)与printf()类似,scanf()的格式控制字符串中也可以有多个格式说明,格式说明符个数必须与输入项的个数相等,数据类型必须从左至右一一对应,scanf()函数常用格式符如表3.3所列出的那样。P52格式字符格式字符说说 明明d以带符号的十进制形式输入整数 o以八进制无符号形式输入整数x以十六进制无符号形式输入整数c以字符形式输入单个字符s输入字符串。以非空字符开始,以第一个空格结束f,e,g,E,G以小数形式或指数形式输入单、双精度数(2)在%和格式字符之间可以插入附加格式说明字符,表3.4 。P52字符字符 说说 明明l表示输入的是长整数或双精度数据

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论