资源描述:
《《c语言程序设计上机指导》(精品高职)项目九》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、项目九预处理及其应用【实验内容、步骤】1、检查所用计算机是否已经安装VisualC++2012o2、进入VisualC++2012的工作环境。3、编程示例,观察与验证。输入并运行下面的程序,分析运行结果。【任务实施】实验无参数形式实验源程序9-1#include#defineL(x*x+2*x+x)main(){intx,y;printf(“inputanumber:v);scanf(,,%d,,J&x);y=L*L+2*L4-10;printf(”y=%dn,y);}上程序中,#defineL(x*x-
2、f2*xh-x),在y=L*L+2*L+10;中作了宏调用。在预处理时经宏展开后该语句变为:y=(X*X4-2*X4-X)*(X*X+2*X4-X)4-2*(X*X4-2*X4-X)4-10;注意几点:(1)宏定义是用宏名来表示一个字符串,在宏展开时又以该字符串取代宏名,只是一种简单的代换。(2)宏定义不是说明或语句,在行末不加分号。(3)宏定义必须写在函数之外,其作用域为宏定义命令起到源程序结束。(4)用引号括起来的宏名,预处理程序不对其作宏代换。(5)宏定义允许嵌套,在宏定义的字符串中可以使用已经定义的宏名。在宏展开时由预
3、处理程序层层代换。(6)宏名一般用大写字母表示,以便于与变量区别。实验9-2有参数形式实验源程序9-2#include#defineMAX(a,b)(a>b)?a:bmain(){intx,y,max;scanf(”%d%d",&x,&y);max=MAX(x,y);printf(,,max=%dH,max);说明:上例程序屮,表达式(a>b)?a:b由宏名MAX表示,形参a,b均出现在条件表达式中。程序中:max=MAX(x,y);为宏调用,实参x,y将代换形参a,bo宏展开后该语句为:max=(x>y
4、)?x:y;注意几点:(1)宏定义中,宏名和形参表之间不能有空格岀现。例如:#defineMAX(a,b)(a>b)?a:b将被认为宏名MAX代表的字符串是(a,b)(a>b)?a:b,是无参宏定义。(2)在带参宏定义中,形式参数不同于函数中的形参,带参宏定义中的参数不是变量,只是在宏调用吋用实参的符号去代换形参,即只是符号代换。所以,不存在值传递的问题。(3)在宏定义中的形参是标识符,而宏调用中的实参可以是表达式。(4)在宏定义中的形参最好用括号括起来,以避免出错。为了保证宏代换的正确性,应该给宏定义中的表示表达式的字符串加
5、上括号,如:#defineL(x)((x)*(x)+2)宏调用:y=1/L(a+5);宏代换后:y=1/((a+5)*(a+5)+2);如果字符串没有加上括号,宏代换后会得到完全不同的表达式:y=1/(a+5)气a+5)+2;显然,展开后的表达式与题意相违。实验9-3有参数形式实验源程序9-3#defineLETTER1/0main(){charstr[5];inti=0;for(i=0;iv=5;i++)scanf(”%s”,&str[i]);i=0;while((c=str[i])!=*of){#ifLETTERif(c
6、>=々&&c<=2)c=c-32;/*把所有的小写字符转成大写字符*/#elseif(c>=7V&&cv=Z)c=c+32;#endifprintf(Hstr[%d]=%cn,i,c);}本实验实现的功能是:输入一任意字符串,需将其全部转化为大写字母,或者将其转化为小写字母。此程序中利用用条件编译,决定是全部由大写字母转为小写字母。程序运行后,若输入:aBcDE则运行结果为:str[O]=astr[1]=bstr[2]=cstr[3]=dstr[4]=e【任务考核】输入以下源程序并运行,分析程序运行结果。源程序9・4:#inc
7、lude#defineNa+bintmain(){inta=3,b=4,c;c=N*N;printf(“c=%drT,c);return0;}运行结果:源程序9・5:#include#defineN2#defineMN+3#definePN*Mintmain(){inta,b;a=N*M;b=a+M*P;printf(“a=%d",a);printf(“b=%d",b);Return0;}运行结果:源程序9-6:#include#defineS(x,y)x+y#d
8、efineC(x,y)x*yintmain(){inta,b,c;a=S(3,5);b=C(1+2,3+4);c=C(S(1,2),S(3,4));prin廿("%d,%d,%d'',a,b,c);return0;}运行结果:源程序9・7:#include