江南大学C语言程序设计本科第九章PPT文档格式.ppt
《江南大学C语言程序设计本科第九章PPT文档格式.ppt》由会员分享,可在线阅读,更多相关《江南大学C语言程序设计本科第九章PPT文档格式.ppt(19页珍藏版)》请在冰豆网上搜索。
![江南大学C语言程序设计本科第九章PPT文档格式.ppt](https://file1.bdocx.com/fileroot1/2022-10/22/2746fde4-a0ca-4f70-a0e2-bc5c68255d17/2746fde4-a0ca-4f70-a0e2-bc5c68255d171.gif)
voidmain()intk=3;
floatx=8.975;
PRN一一.不带参数的宏定义不带参数的宏定义#definePI3.1415926第一节第一节宏定义宏定义说明说明:
1.宏名宏名习惯习惯用用大写字母大写字母表示。
表示。
2.可代替可代替字符串、数值、表达式、语句等。
字符串、数值、表达式、语句等。
3.宏代换在编译以前进行并完成。
宏代换在编译以前进行并完成。
4.宏展开仅宏展开仅忠实替换忠实替换,不做语法检查。
不做语法检查。
结果:
20S(4,5)5*4S(x+2,y+2)y+2*x+2()()()()25.6二二.带参数的宏定义带参数的宏定义-参数替换参数替换#defineS(t,w)w*tvoidmain()floatx=5.5,y=12.6;
printf(“%dn”,S(4,5);
printf(“%fn”,S(x+2,y+2);
1)替换时,可以是各种类型的量。
2)替换时不做计算。
3)可嵌套定义#definePI3.1415926#defineS(r)PI*r*r说说明明第二节第二节文件包含处理文件包含处理文件包含编译预处理命令格式:
文件包含编译预处理命令格式:
#include或或#include“文件名文件名”表示在源文件所在目录以外的目录中查表示在源文件所在目录以外的目录中查找要找要包含的文件包含的文件“文件名文件名”表示先表示先在源文件所在目录中查找要包含在源文件所在目录中查找要包含文件文件,若没找到再在源文件所在目录以外的目录若没找到再在源文件所在目录以外的目录中中查找要包含的文件查找要包含的文件f1.c#include“f2.c”p2p1f1.cf2.cp2使用文件包含指令时应注意几个问题:
(1)一个#include指令只能包含一个文件,要包含多个文件就要用多个#include指令
(2)文件包含可以嵌套,比如文件file1中含有指令:
#includef2.c而在文件f2.c中又有:
#include#includef3.c则file1也把f2.c中包含的文件全部包含进来。
(3)被包含文件中的全局变量也是包含文件中的全局变量,因此在包含文件中对这些量不必再加ertern说明即可引用。
(4)被包含文件的扩展名一般用.h(头),表示是在文件开头加进来的,其内容可以是程序文件或数据文件,也可以是宏定义、全局变量声明等。
这些数据有相对的独立性,可被多个文件使用,不必在多个文件中都去定义,而只在一个文件中定义,其他文件中包含这个定义文件即可。
第三节第三节条件编译条件编译其中其中若已用若已用#define命令定义过,则命令定义过,则编译编译程序段程序段1形式形式1.#ifdef程序段程序段1#else程序段程序段1#endif例:
例:
#include#defineTtruemain()#ifdefTprintf(“编译程序编译程序1”);
#elseprintf(“编译程序编译程序2”);
#endifmain()printf(“编译程序编译程序1”);
等价于等价于形形式式2#ifndef程序段程序段1#else程序段程序段2#endif逻辑和作用与形式逻辑和作用与形式1相反相反#defineORDER1main()intk;
#ifORDERfor(k=1;
k11;
k+)printf(“%d”,k);
#elsefor(k=11;
k1;
k-)printf(“%d”,k);
#endifmain()intk;
for(k=1;
形形式式3#if程序段程序段1#else程序段程序段2#endif课堂例题课堂例题课后课后练习练习2.预处理命令可能具有如下特点:
预处理命令可能具有如下特点:
(1).均以均以“#”开头开头
(2).必在程序开头必在程序开头(3).后面不加分号后面不加分号(4).在真正编译前处理在真正编译前处理正确的说法是,预处理命令具有以下正确的说法是,预处理命令具有以下_条特点:
条特点:
A1,2B1,3,4C1,3D1,2,3,41.编译预处理包括编译预处理包括_A.文件包含、宏定义和预编译文件包含、宏定义和预编译B.构造工程文件构造工程文件C.语句注释语句注释D.编辑源程序编辑源程序3.假设有宏定义:
假设有宏定义:
defineNUM15defineDNUMNUMNUM则表达式则表达式DUNM/2NUM*2的值为:
的值为:
_524.程序段如下:
程序段如下:
defineN2defineMN1defineNUM2*M1voidmain()inti;
intsum=0;
for(i=1;
i=NUM;
i+)sum+=i;
sum最后的值为:
最后的值为:
_21此时才替此时才替代代2*M+12*N+1+12*2+1+165.下列程序的输出结果为下列程序的输出结果为_#definep(v,format)printf(“v=%format”,v)#defines(x)3.5*x*xmain()inta=1,b=2;
floats1;
s1=s(a+b);
p(s1,f);
Av=14.0Bs1=31.5Cv=7.5ormatDs1=7.5ormat字符内容,所字符内容,所以不会被替换以不会被替换!
s1=3.5*a+b*a+b=3.5*1+2*1+2=7.5p(s1,f)printf(“v=%format”,s1)printf(“v=%format”,s1)