C语言程序设计实验报告3 下载本文

内容发布更新时间 : 2024/6/16 19:22:57星期一 下面是文章的全部内容请认真阅读。

实验3 函数与程序结构实验

3.1 实验目的

(1)熟悉和掌握函数的定义、声明;函数调用与参数传递方法;以及函数返回值类型的定义和返回值使用。

(2)熟悉和掌握不同存储类型变量的使用。 (3)熟悉多文件编译技术。 3.2 实验内容及要求 3.2.1源程序改错

下面是计算s=1!+2!+3!+…+n!的源程序,在这个源程序中存在若干语法和逻辑错误。要求在计算机上对这个例子程序进行调试修改,使之能够正确完成指定任务。 1 #include 2 int main(void) 3 {

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 long sum_fac(int n); int main(void) {

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 main(void) {

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项和的程序如下: