大学二级C语言程序设计及同步训练-涂玉芬-课件PPT
收藏
资源目录
压缩包内文档预览:
编号:21836173
类型:共享资源
大小:11.93MB
格式:ZIP
上传时间:2019-09-06
上传人:QQ24****1780
认证信息
个人认证
王**(实名认证)
浙江
IP属地:浙江
25
积分
- 关 键 词:
-
大学
二级
语言程序设计
同步
训练
涂玉芬
课件
ppt
- 资源描述:
-
大学二级C语言程序设计及同步训练-涂玉芬-课件PPT,大学,二级,语言程序设计,同步,训练,涂玉芬,课件,ppt
- 内容简介:
-
第10章 编译预处理与位运算,10.1 编译预处理 编译预处理:是在编译前由编译系统中的预处理程序对源程序的预处理命令进行加工。 源程序中的预处理命令均以“#”开头,命令末尾不加分号,它们可以写在程序中的任何位置,作用域是从出现位置开始到源程序的结束.,10.1.1 宏定义,宏定义是定义一个标识符来代替一个字符串。 宏定义有不带参数的宏定义和带参数的宏定义两种。 1不带参数的宏定义 定义形式: #define 标识符 字符串 功能:用一个指定的标识符(即名字,称为宏名)来代表一个字符串。 例如:#define PI 3.1415926 说明:(1)与其他标识符相区别,宏名一般用大写字母表示。 (2)编译预处理时,将程序中的宏名用字符串代替,这种将宏名替换成字符串的过程称为“宏展开”。 (3)使用宏可以减少程序中重复书写或修改某些字符串的工作量. (4)在程序中出现在双引号中或其他字符串中与宏名相同的字符串,不能作为宏处理。 (5)#define命令的作用范围从定义位置至源程序结束,但可以用#undef终止其作用域。,10.1.1 宏定义,例1:#define PI 3.1415926 main() float l,s,r; scanf(“%d“, ,main() float l,s,r; scanf(“%d“, ,例2:#define PI 3.1415926 main() #undef PI fun() ,10.1.1 宏定义,10.1.1 宏定义,(6)宏定义时,可以引用已定义的宏名,编译时层层展开。 例3:#define PI 3.1415926 #define R 3.0 #define L 2*PI*R #define X R+L main() y=2*X; ,main() y=2*3.0+2*3.1415926*3.0; ,(7)宏名是一个常量标识符,不是变量,不分配内存空间。,2带参数的宏定义 定义形式: #define 标识符(参数表)字符串 功能:用指定的带参数的标识符来代表一个字符串。 注意:带参数的宏展开时要用实参字符串替换形参字符串。 例4:#define S(x) 2*x*x main() y=S(2+2); ,main() y=2*2+2*2+2; ,注意:展开时用实参字符串2+2替换形参字符串x,2+2是字符串,不能看做表达式,即S不能展开为2 * (2+2) * (2+2)。,10.1.1 宏定义,10.1.2 文件包含,文件包含是一个源程序通过#include命令把另外一个文件的全部内容嵌入到源程序中。 文件包含命令有如下两种格式: #include #include“文件名“ 功能:将指定文件的全部内容放到该命令行所在的位置。 说明:命令#include在搜索文件时只检索C语言编译系统所确定的标准目录,而命令#include“文件名“在搜索文件时首先对使用包含文件的源程序文件所在的目录进行检索,若没有找到指定的文件,再在标准目录中检索。,10.2 位运算,数据在计算机内部是以二进制补码形式存储的。 1按位与运算符:& 若参与运算的两个操作数对应的两个二进制位都是1,则对应位结果为二进制位1,否则为0。 例1:求5&3的值。 运算过程如下: 0000 0000 0000 0101(5的补码) & 0000 0000 0000 0011(3的补码) 0000 0000 0000 0001 (1的补码,即5&3=1),2按位或运算符:| 若参与运算的两个操作数对应的两个二进制位有一个为1,则对应位结果为二进制位1,否则为0。 例2:求5|3的值。 运算过程如下: 0000 0000 0000 0101(5的补码) | 0000 0000 0000 0011(3的补码) 0000 0000 0000 0111(7的补码,即5|3=7),10.2 位运算,3按位异或运算符: 若参与运算的两个操作数对应的两个二进制位相异(一个为1,另一个为0),则对应位结果为二进制位1,否则为0。 例3:求53的值。 运算过程如下: 0000 0000 0000 0101(5的补码) 0000 0000 0000 0011(3的补码) 0000 0000 0000 0110(6的补码,即53=6),10.2 位运算,4按位取反运算符: “”的操作数只有一个,若操作数的某二进制位为1,则对应位结果为0,若操作数的某二进制位为0,则对应位结果为1, 例4:求5的值。 运算过程如下: 0000 0000 0000 0101(5的补码) 1111 1111 1111 1010(-6的补码,即5=-6),10.2 位运算,5左移运算符: 左移运算的一般形式为: 操作数 移位位数 功能:将一个操作数的所有二进制位依次左移若干位,高位移出并舍弃,低位补0。 例5:求53的值。 运算过程如下: 0000 0000 0000 0101(5的补码) 3 0000 0000 0000 0101000(40的补码,即53=40),10.2 位运算,6右移运算符: 左移运算的一般形式为: 操作数 移位位数 功能:将一个操作数的所有二进制位依次右移动若干位。若操作数为无符号数或正数,移出的低位被舍弃,高位补0。这种移位操作又称逻辑右移。若操作数为有符号数的负数,即最高位为1时,右移时高位补1,以保持符号位不变,低位移出并舍弃。这种移位操作又称算术右移。 例6:求51的值。 运算过程如下: 0000 0000 0000 0101(5的补码) 1 0000 0000 0000 00100(2的补码,即51=2),10.2 位运算,7位运算应用举例 例10.1 取一个整数a从右端开始的第47位。 程序如下: #include main() unsigned a,b,c,d; scanf(“%o“, ,10.2 位运算,10.3 本章考点,宏定义。 文件包含。 位运算。,10.4 典型试题详解,1有如下程序: #define N 2 #define M N+1 #define NUM 2*M+1 main() int i; for(i=1;i=NUM;i+) printf(%dn,i); 该程序中的for循环执行的次数是_。 正确答案:6(知识点:不带参数的宏定义),2程序中头文件type1.h的内容是: #define N 5 #define M1 N*3 程序如下: #include “type1.h“ #define M2 N*2 main() int i; i=M1+M2; printf(%dn,i); 程序编译后运行的输出结果是_。 正确答案:25(知识点:文件包含、不带参数的宏定义),10.4 典型试题详解,3以下程序的输出结果是_。 #define SQR(X) X*X main() int a=16,k=2,m=1; a/=SQR(k+m)/SQR(k+m); printf(“%dn“,a); 正确答案:2(知识点:带参数的宏定义),10.4 典型试题详解,4有以下程序: main() int x=3,y=2,z=1; printf(“%d n“,x/y 程序运行后的输出结果是_。 A)3 B)2 C)-1 D)0 正确答案:D(知识
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。