130 likes | 255 Views
项目十九. 求解圆面积. 杨凌职业技术学院电子信息工程系. 阅读下列程序,体会并掌握编译预处理命令的使用方法。. 项目内容. 项目分析. 测试宏定义的 2 种形式所得的不同结果。. 杨凌职业技术学院电子信息工程系. 过程与源代码. /* 测试宏定义的 2 种形式所得的不同结果* / #define PI 3.1415926 /* 无参宏定义* / #define S(r) PI*r*r /* 无参宏定义* / main( ) { float a,area; /* 定义两个实型变量 a,area*/
E N D
项目十九 求解圆面积 杨凌职业技术学院电子信息工程系
阅读下列程序,体会并掌握编译预处理命令的使用方法。阅读下列程序,体会并掌握编译预处理命令的使用方法。 项目内容
项目分析 测试宏定义的2种形式所得的不同结果。 杨凌职业技术学院电子信息工程系
过程与源代码 • /*测试宏定义的2种形式所得的不同结果*/ • #define PI 3.1415926 /*无参宏定义*/ • #define S(r) PI*r*r /*无参宏定义*/ • main( ) • { • float a,area; /*定义两个实型变量a,area*/ • a = 3.6; /*赋初值*/ • area = S(a); /*带参宏调用*/ • printf("r=%f\narea=%f\n",a,area); /*输出结果*/ • } 杨凌职业技术学院电子信息工程系
学生评价 教师评价 项目过程实施与评价
1.掌握带参数和不带参数的宏定义方法; 2.掌握文件包含的作用; 3.了解条件编译的作用和使用形式。 4.宏定义的形式: 1)无参宏定义(无参宏的宏名后不带参数),其定义的一般形式为: #define 标识符 字符串 学习目标 杨凌职业技术学院电子信息工程系
说明: (1)宏名一般习惯用大写字母,以便与变量名相区别(但是这并非规定,也可以用小写字母)。 (2)使用宏名代替一个字符串,可以减少程序中重复书写某些字符串的工作量。 (3)宏定义是用宏名代替一个字符串,也就是作简单的置换,不做正确性检查。 (4)宏定义不是C语句,不必在行末加分号。 (5)#define命令出现在程序中函数的外面,宏名的有效范围为定义命令之后到本源文件结束。 (6)可以用#undef命令终止宏定义的作用域。 (7)在进行宏定义时,可以引用一定义的宏名,可以层层置换。 (8)对程序中用双撇号括起来的字符串内的字符,即使与宏名相同,也可以不进行置换。 (9)宏定义是专门用于预处理命令的一个专用名词,它与定义变量的含义不同,只作字符替换,不分配内存空间。 2)带参宏定义(对带参数的宏,在调用中,不仅要宏展开,而且要用实参去代换形参),带参宏定义的一般形式为: #define 宏名(形参表) 字符串 如:#define S(a,b) a*b area=S(3,2);。 杨凌职业技术学院电子信息工程系
说明: • (1)对待参数的宏名的展开只是将语句中的宏名后面括号内的参数字符串代替#define命令行中的形参。 • (2)在宏定义时,在宏名与带参数的括弧之间不应加空格,否则将空格以后的字符都作替代字符串的一部分。 • 在字符串中含有各个形参。带参宏调用的一般形式为:宏名(实参表)。 杨凌职业技术学院电子信息工程系
1.求圆的面积 /*功能:使用宏求简单表达式的值*/ #include<stdio.h> #define PI3.1415926 #define s(r) PI*r*r main( ) { float a,area; a=5.55; area=s(a); printf(“r=%f\n”,area); } 求程序输出的结果是_________ 习题
2.下列有关编译预处理的说法,错误的是( )2.下列有关编译预处理的说法,错误的是( ) A.便宜预处理命令有三种:宏定义﹑文件包含和条件编译 B.预处理命理是C语言本身的一部分,编译程序能直接对它们进行编译 C.预处理命令必须以"#"开头 D.使用预处理命令能改进程序设计环境,提高编程效率 3.下列有关宏定义的叙述错误的是( ) A.使用宏定义可以提高程序的通用性 B.宏定义只是用宏名来替换一个字符串,而且在替换时不做正确性检查 C.宏定义也是C语句,因为它本身也可以被程序的其它部分引用 D.在进行宏定义时,可以应用已定义的宏名.即可以层层置换
4.有下面的程序段: #define S(r) r*r main( ) { int a=1,b=2; printf(“a*b=%d\n”,S(a+b)); } 程序的输出结果是( ) A.a*b=9 B.a*b=8 C.a*b=4 D.a*b=5
5.填空题 如果先有这样的宏定义:#defineFunb(a,b)a*b,那么在程序中使用下面的语句: s=Funb(x+y+z); 实际展开后的表达式为____________ 6.编程题 编写一个程序,他能够求一个圆柱体的体积,要求使用以圆柱体的底面圆半径和圆柱体的高为参数的宏。