模块十 预处理命令(ppt)-2022-2023学年高一《C语言程序设计》同步教学

2022-09-30
| 25页
| 95人阅读
| 1人下载
普通

内容正文:

YCF 正版可修改PPT (中职)C语言程序设计模块十ppt电子课件 1 预处理命令 模块10 LOGO 10.1无参宏定义及宏代换 所谓无参宏定义,指的是宏名(标识符)后面不带参数。 定义方法: #define 标识符 字符串/*字符串可以是常量、表达式和格式串*/ 其意为:在书写时,用标识符代替其后的字符串出现于程序中;而在程序执行时,则用字符串去代换标识符。这就是宏代换。 10.1无参宏定义及宏代换 #include <stdio.h> #define A(x*x+2*x)/*注意下面整个表达式用()括起来时的展开方法 */ #define Bx*x+2*x/*注意下面表达式没用()括起来时的展开方法*/ #define M("%d,%d,%d\n")/*格式串*/ #define P(A*y+c)/*宏定义嵌套*/ #define RB*y+c int main() {int x,y,s1,s2,a=3,b=4,c; c=a+b; printf("Input x:"); scanf("%d",&x);/*假设输入3*/ y=2; s1=2*A; /*展开方法:2×(3×3+2×3)=30,故s1为30 */ s2=2*B; /*展开方法:2×3×3+2×3=24,故s2为24 */ 【例10-1】不同方式无参宏代换详解。 10.1无参宏定义及宏代换 a=b;/*a重新获得4*/ b=c;/*b重新获得7*/ c=a+b; /*c重新获得4+7=11*/ printf("s1=%d,s2=%d\n",s1,s2); printf(M,a,b,c);/*按格式串宏代换输出a,b,c,注意宏名只能直接引用,不能加引号*/ printf("(A*y+c)=%d\n",P);/*展开:(3×3+2×3)×2+11=41*/ printf("A*y+c=%d\n",3*R); /*展开:3×3×3+2×3×2+11=50*/ } #undef A/*终止A的作用域, 即其代替作用到此为止,下同*/ #undef B #undef M #undef P 输出结果如下: Input x:3 s1=30,s2=24 4,7,11 (A*y+c)=41 A*y+c=50 10.1无参宏定义及宏代换 从上面的程序中可以得出以下结论: (1)宏定义一般不用带符号结束,如 “#define A(x*x+2*x)”。 (2)当宏名后面的字符串以“()”括起来时,展开时它是一个整体进行运算。例如: #define A(x*x+2*x) s1=2*A; 实际就是“s1=2*(x*x+2*x)”。 (3)若宏名后面的字符串不以“()”括起来,展开时是按序展开的。例如: #define Bx*x+2*x s2=2*B; 实际就是“s2=2*x*x+2*x”。 可见,宏名后的字符串用“()”和不用,宏代换时其意完全不同。因此,在进行下面的运算时,算法就完全不同: 10.1无参宏定义及宏代换 #define P(A*y+c) #define RB*y+c printf("(A*y+c)=%d\n",P); printf(“A*y+c=%d\n”,3*R); P表示“(A*y+c)”,运算过程是“((x*x+2*x)*y+c)”。 R表示“B*y+c”,3*R的运算过程就是“3*x*x+2*x*y+c”。 (4)#undef用于强制中止宏名的作用域,若不中止,则其作用域为到程序结束。 (5)宏名只能直接引用,若加引号,加双引号做字符串处理,加单引号做字符处理。 (6)为与变量名区别开来,宏名一般用大写。还可用宏定义表数据类型。例如:#define DB double #define STU struct student DB m; STU st[20],*p=st; 最后须强调一点的是,预处理程序不会对错误的宏定义进行检查。 10.2带参宏定义与宏调用 带参宏定义就是“宏名(标识符)”后带了参数,参数用“()”括起来。 (1)定义方式(要注意形参表和标识符之间不能有空格)。 (2)调用方式: 标识符(实参表); 【例10-2】带参宏定义与调用示例。 #include <stdio.h> #define PI 3.14 #define S(r)(PI*r*r)/*计算圆的面积*/ #define L(x,y,z)(x)*(y)+(z)/*形参表x,y

资源预览图

模块十 预处理命令(ppt)-2022-2023学年高一《C语言程序设计》同步教学
1
模块十 预处理命令(ppt)-2022-2023学年高一《C语言程序设计》同步教学
2
模块十 预处理命令(ppt)-2022-2023学年高一《C语言程序设计》同步教学
3
模块十 预处理命令(ppt)-2022-2023学年高一《C语言程序设计》同步教学
4
模块十 预处理命令(ppt)-2022-2023学年高一《C语言程序设计》同步教学
5
模块十 预处理命令(ppt)-2022-2023学年高一《C语言程序设计》同步教学
6
所属专辑
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。