文档库 最新最全的文档下载
当前位置:文档库 › 第八章 编译预处理

第八章 编译预处理

第八章  编译预处理
第八章  编译预处理

第八章编译预处理

实践教学:

属性:实训

时间:学时。

实践教学内容:

实验目的:掌握宏定义的形式(带参数的宏定义、不带参数的宏定义);掌握文件包含的形式和应用;了解条件编译的定义形式和应用。

实验内容和步骤:

1、编程,通过用带参的宏定义从3个数中找出最大值。主

函数完成数据输入、宏调用及数据输出。存入ex8_1.c

文件,并编译、调试、运行。

#include

#define MAX(x,y) (x)>(y)?(x):(y)//注意括号的使用!

main()

{

int n1,n2,n3,m;

printf("Please print:");

scanf("%d%d%d",&n1,&n2,&n3);

m=MAX(n1,MAX(n2,n3));

printf("The max is %d\n",m);

}

2、编一个头文件,将经常使用的数学函数、字符处理函数

及圆周率等符号常量事先定义好。以便以后调用。存入

headfile.h文件,存盘。

//圆周率

#define PI 3.1415926

//求x的n次方

double power(double x,int n)

{

int i;

double powers=1;

for(i=0;i

if(n==0)powers=1;

else powers*=x;

return powers;

}

//字符串长度的计数

int strlen(char *a)

{

int i;

while(a[i]!='\0')

i++;

return i;

}

调用例举:

#include

int strlen(char *a)

{

int i=0;

while(a[i]!='\0')

i++;

return i;

}

main()

{

char a[50];

printf("Input one string:\n");

gets(a);

printf("The length of the string:%d\n",strlen(a)); }

字符串的连接:

#include

#include

main()

{

char a[50],b[50];

int m,n,i,j;

printf("Input two strings:\n");

gets(a);

gets(b);

m=strlen(a);

n=strlen(b);

for(i=m,j=0;j<=n+1;i++,j++)

a[i]=b[j];

printf("The result is:\n");

puts(a);

}

3、编一个程序,接收一行字符,根据具体需要设置编译条件,

使之能将所有的字母全改为大写字母。存入ex8_2.c文件,

并编译、调试、运行。

#include

#define LETTER 1

main()

{

int i=0;

char str[300],c;

gets(str); //输入一个字符串

while((c=str[i])!='\0')

{

i++; //保证循环的继续!

if(LETTER) //如果条件为真,则小写变大写

if(c>='a' && c<='z')

c-=32;

printf("%c",c);

}

printf("\n");

}

现在先定义LETTER为1,这样在预处理条件编译命令时,由于LETTER为真(非零),则对第一个if语句进行编译,运行时使小写字母变大写。如果将程序第一行改为:

#define LETTER 0,则对第一个if语句进行编译后,运行时不曾发生改变。

当然,不用条件编译命令而直接用if语句也能达到要求,用条件编译命令有什么好处呢?的确,此问题完全可以不用条件编译处理,但那样做目标程序长(因为所有语句都编译),而采用条件编译,可以减少被编译的语句,从而减少目标的长度。当条件编译段比较多时,目标程序长度可以大大减少。

设备及生均耗材要求:计算机机房

实践考核办法:检查学生程序结构和执行情况,并给出评分。

相关文档