实验五 函数与编译预处理

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《C语言程序设计》实验报告

实验五函数与编译预处理

学号201002314 姓名李光

一、实验目的

1、掌握函数定义及调用的方法,正确理解函数调用时实参和形参的对应关系

2、掌握并正确使用数组作为函数参数;

3、掌握函数的嵌套调用和递归调用的方法;

4、理解变量的作用域和生存期;

5、掌握宏定义、文件包含的方法。

二、实验内容

1、分析下面的程序并上机运行程序,要求写出3组以上程序的运行结果。

#include /*程序需要使用C语言提供的标准函数库*/

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 分析本次实验出现的主要错误最直接原因

相关文档
最新文档