实验五 函数与编译预处理
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《C语言程序设计》实验报告
实验五函数与编译预处理
学号201002314 姓名李光
一、实验目的
1、掌握函数定义及调用的方法,正确理解函数调用时实参和形参的对应关系
2、掌握并正确使用数组作为函数参数;
3、掌握函数的嵌套调用和递归调用的方法;
4、理解变量的作用域和生存期;
5、掌握宏定义、文件包含的方法。
二、实验内容
1、分析下面的程序并上机运行程序,要求写出3组以上程序的运行结果。
#include
int fun(int k) /*此函数用于计算阶乘*/
{
int result=1,i;
for(i=1;i<=k;i++) /*循环k次*/
{
result=result*i;
}
return result;
}
void main() /*主函数*/
{
int n;
printf("Input n please(1<=n<=10)");
scanf("%d",&n); /*输入一个数*/
printf("%d!=%d\n",n,fun(n)); /*输出结果*/
}
『运行结果:』
2、编写程序,输出2~n之间的所有素数,n由键盘输入。要求判断素数的过程要写在函数中,由主函数调用实现,并写出2组以上程序运行结果。
程序代码:
#include
#include
void fun(int n)
{
int a,b;
for (a=2;a<=n;a++)
{
for (b=2;b<=a-1;b++)
{
if (a%b==0)
break;
if (b==a-1)
{
printf ("%3d ",a);
}
}
}
}
void main()
{ int t;
printf("input t=");
scanf("%d",&t);
fun(t);
printf("\n");
} 『运行结果:』
3、编程实现输入8个学生某门功课的成绩,用函数求出平均分,并在主函数中输出平均分以及高于平均分的同学的成绩。并写出2组以上程序运行结果。
程序代码:
#include
#define N 8
float average(float a[])
{
float sum=0;
int i;
for(i=0;i sum+=a[i]; return(sum/N); } void main() { float x[N],aver; int t; printf("input score of student:\n"); for(t=0;t scanf("%f",&x[t]); aver=average(x); printf("aver=%3f\n",aver); for(t=0;t if(x[t]>aver) printf("%3f\n",x[t]); } 运行结果:』 三、问题讨论 1、函数的“定义”和“说明”各自有何作用?并简要说明两者区别。 作用:函数的定义是对功能的确定,它是一个完整的独立的程序函数单位;说明一般子函数(用户定义的函数)放在主函数(main函数)后面的话,前面就该有声明.不然C由上往下的编译系统将无法识别. 区别: 说明变量不分配空间,定义变量要分配空间。说明主要是告诉编译器,后面的引用都按说明的格式;定义其实包含了说明的意思,同时要分配内存空间.总之,函数定义是系统要求的,不定义就错误,而函数说明实际上不定义也行,但为了方便和减少错误,人为规定要说明。 2、举例说明自动变量和静态变量区别。 静态变量是在编译过程中赋初值的,且只赋一次初值,以后调用函数时不再赋初值,而是保留前一次调用函数时的结果,如: #include void fun() { int n=2; n++; printf("n=%d\n",n); } void main() { fun(); fun();} 结果为: 但当第三个语句改为static int n=2;结果为: 四、实验总结 1 总结本次实验完成情况、相关知识掌握情况 2 总结本次实验编辑、编译、连接、运行所取得的经验 3 分析本次实验出现的主要错误最直接原因