内容发布更新时间 : 2024/11/13 7:37:49星期一 下面是文章的全部内容请认真阅读。
实验3 函数与程序结构实验
3.1 实验目的
(1)熟悉和掌握函数的定义、声明;函数调用与参数传递方法;以及函数返回值类型的定义和返回值使用。
(2)熟悉和掌握不同存储类型变量的使用。 (3)熟悉多文件编译技术。 3.2 实验内容及要求 3.2.1源程序改错
下面是计算s=1!+2!+3!+…+n!的源程序,在这个源程序中存在若干语法和逻辑错误。要求在计算机上对这个例子程序进行调试修改,使之能够正确完成指定任务。 1 #include
4 int k;
5 for(k=1;k<6;k++)
6 printf(\7 }
8 return 0;
9 long sum_fac(int n) 10 {
11 long s=0; 12 int i; 13 long fac;
14 for(i=1;i<=n;i++) 15 fac*=i; 16 s+=fac; 17 return s; 18 } 解答:
(1)错误修改
1) 未声明函数sum_fac(int n)的情况下,就调用函数。 2) 第8行中,return 0;语句应放在主函数中。
3) 第15,16行,应该被括号括起来,否则程序意义不是计算阶乘的和。 (2)修改错误后的程序为 #include
long sum_fac(int n); int main(void) {
int k;
long sum_fac(int n); for(k=1;k<6;k++)
printf(\ return 0;
}
long sum_fac(int n) {
long s=0; int i;
long fac=1;
for(i=1;i<=n;i++) {
fac*=i; s+=fac; }
return s;
}
(3)运行结果
图1 3.2.1程序运行截图 3.2.2源程序修改替换
(1)修改第1题中sum_fac函数,使其计算量最小。 解答:
1)将long设为静态局部变量,当退出函数时,long的值被保存在内存中,再次调用函数时,不用再对long初始化,静态局部变量的值具有记忆性。替换后的程序如下所示:
#include
int k;
for(k=1;k<6;k++)
printf(\ return 0; }
long sum_fac(int n) {
static long s=0; int i;
long fac=1;
for(i=1;i<=n;i++) fac*=i; s+=fac; return s; }
2)运行截图及说明
图2 3.2.2(1)程序运行截图
s?1?111????2!3!n!。
(2)修改第1题中sum_fac函数,计算
解答:
1)第1题计算的是阶乘的和,而现在需要计算阶乘的倒数的和。只需将s+=fac替换为s+=1.0/fac即可。替换后的程序如下所示:
#include
int k;
double sum_fac(int n); for(k=1;k<6;k++)
printf(\ return 0; }
double sum_fac(int n) {
double s=0; int i;
long fac=1;
for(i=1;i<=n;i++) {
fac*=i; s+=1.0/fac; }
return s; }
2)运行截图及说明
图3 3.2.2(2)程序运行截图
3.2.3跟踪调试
计算fabonacci数列前n项和的程序如下: