实验九 函数与预处理
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验九函数和预处理
实验时间:2010年12月3日
【实验目的】
1、掌握函数的定义、说明、调用方法,理解函数的返回值;
2、掌握函数实参、形参的对应关系和传递规则;
3、掌握函数的嵌套调用和递归调用的方法和结构形式;
4、掌握全局变量、局部变量、动态变量、静态变量的区别和用法;
5、理解内部函数和外部函数的含义,掌握内部函数和外部函数的定义和声明;
6、掌握宏定义的方法,掌握文件包含处理的方法,掌握条件编译的方法。【实验内容】
1、函数的定义和调用;
2、函数的递归调用和嵌套调用;
3、变量的作用域和存储类型、内部函数和外部函数;
4、编译预处理。
【实验步骤】
一、在E或F盘上建立以自己的学号命名的文件夹。
二、上机验证与分析题:
1、分析以下源程序中,函数的定义与说明格式,并上机运行验证结果:
/*文件名:ex9_1.c*/
/*功能:定义一个求两个整数的和的函数,并在主函数中调用*/
#include
#include
void main()
{
float sum(float a,float b); /*函数说明*/
float x,y;
printf("请输入两个数\n");
scanf("%f%f",&x,&y);
printf("两个数的和是:%f\n",sum(x,y));
getch(); /*使程序暂停,按任一键继续*/
}
float sum(float a,float b)/*定义一个函数sum()*/
{
float c;
c=a+b;
return(c);
}
2、程序的调试,常见错误分析:
上题中,sum函数的功能是求两个参数的和,并将求和的结果返回到主函数。
试进行下面的调试,观察所出现的错误。
①将main()函数中的函数声明去掉,编译时出现什么信息,产生的原因是什么?
②将main()函数最后的“}”去掉,编译时出现什么信息,产生原因是什么?
③将sum()函数的参数改为“float a ,b ”,编译时出现什么信息,产生原因是什么?
④将main()函数中的函数声明语句末尾的“;”去掉,编译时出现什么信息,产生原因是什么?
⑤、若将函数调用语句中的参数y去掉,编译时出现什么信息;产生原因是什么?
3、跟踪调试以下源程,注意函数调用的过程中形参、实参的关系。记录并分析结果;将形参a, b对应改为x,y,使得与实参变量同名,记录并分析结果。
/*文件名:ex9_2.c*/
int a ,b;
#include
void main()
{
int x=2,y=5;
int swap(int,int);
printf("(1) in main: x=%d,y=%d\n",x,y);
swap(x,y);
printf("(4) in main: x=%d,y=%d\n",x,y);
printf("(5) a=%d,b=%d\n",a,b);
}
swap(int a,int b)
{
int t;
printf("(2) in swap: a=%d,b=%d\n",a,b);
t=a;
a=b;
b=t;
printf("(3) in swap: a=%d,b=%d\n",a,b);
}
4、分析以下源程,并上机验证。此程序是输入长方体的长、宽、高l、w、h。求长方体的体积及三个面的面积。
/*文件名:ex9_3.c*/
#include
int s1,s2,s3;
int vs(int a,int b,int c);
void main()
{
int v,l,w,h;
printf("请输入长方体的长、宽、高:\n");
scanf("%d%d%d",&l,&w,&h);
v=vs(l,w,h);
printf("v=%d\n",v);
printf("s1=%d\n",s1);
printf("s2=%d\n",s2);
printf("s3=%d\n",s3);
}
int vs(int a,int b,int c)
{
int v;
v=a*b*c;
s1=a*b;
s2=b*c;
s3=a*c;
return v;
}
5、分析以下源程序,若输入2,3,上机验证程序的运行结果,分析函数嵌套调用的执行过程。
/*文件名:ex9_4.c*/
#include
long sum(int a ,int b);
long factorial(int n);
void main()
{
int n1,n2;
long a;
printf("请输入两个整数:\n");
scanf("%d%d",&n1,&n2);
a=sum(n1,n2);
printf("a=%ld",a);
}
long sum(int a,int b)
{