函数与程序结构实验实验报告Word文档下载推荐.docx
《函数与程序结构实验实验报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《函数与程序结构实验实验报告Word文档下载推荐.docx(17页珍藏版)》请在冰豆网上搜索。
![函数与程序结构实验实验报告Word文档下载推荐.docx](https://file1.bdocx.com/fileroot1/2022-10/27/c5fa49ca-b303-4fa0-a777-10e4337d1739/c5fa49ca-b303-4fa0-a777-10e4337d17391.gif)
+3!
+…+n!
的原程序,在这个程序中存在若干语法和逻辑错误。
要求在计算机上对这个例子原程序进行调试修改,是指能够争取完成指定任务。
源程序:
#include<
stdio.h>
intmain(void)
{
intk;
for(k=1;
k<
6;
k++)
printf("
k=%d\tthesumis%ld\n"
k,sum_fac(k));
}
return0;
longsum_fac(intn)
longs=0;
inti;
longfac;
for(i=1;
i<
=n;
i++)
fac*=i;
s+=fac;
returns;
2.源程序修改替换
(1)修改施上述源程序中的sum_fac函数,是其计算量最小
(2)修改上述源程序中的sum_fac函数,计算
S=1+1/2!
+1/3!
+…+1/n!
3.跟踪调试
下面是计算fabonacci数列前n项和的源程序,线要求单步执行该程序,并观察p,i,sum,n值,即:
(1)刚执行按“scanf(“%d”,&
k);
”语句是,p,i值是多少?
(2)从fabonacci函数返回后,光条停留在哪个语句上?
(3)进入fabonacci函数是,watches窗口显示的是什么?
(4)当i=3时,从调用fabonacci函数大搜返回,n值如何变化?
源程序:
longfadonacci(int);
inti,k;
longsum=0,*p=&
sum;
scanf("
%d"
&
=k;
i++){
sum+=fabonacci(i);
i=%d\tthesumis%ld\n"
i,*p);
}
return0;
longfabonacci(intn)
if(n==1||n==2)
return1;
else
returnfabonacci(n-1)+fabonacci(n-2);
其中,“longsum=0,*p=&
”声明p为长整型指针,并用&
sum取出sum的地址对p初始化;
*p表示引用p所指的变量(*p即sum)。
4.程序设计
编写并上机调试运行能实现以下功能的程序:
(1)编写一个程序,让用户输入两个整数,计算两个整数的最大公约数并输出。
要求用递归函数实现求最大公约数,同时一单步方式执行,观察其递归过程。
(2)编写一个程序,验证哥德巴赫猜想:
一个大于等于4的偶数都是两个素数之和。
(3)编写一个程序,证明对与在符号常量BEGIN和END之间的偶数这一猜测成立。
例如,如果BEGIN为10,END为20,则程序的输出应为:
GOLDBACH'
SCONJECTURE:
Everyevennumbern>
=4isthesumoftwoprimes.
10=3+7
12=5+7
……
20=3+17
5.选做题
假设一个C程序由file1.c和file2.c连个源文件及一个file.h头文件组成,file1.c,file2.c,file.h的内容分别如下述。
试编辑该多文件程序,并编译和链接,然后运行生成后的可执行文件。
源文件file1.c的内容为
#include"
file.h"
intx,y;
charch;
x=10;
y=20;
ch=getchar();
infilex=%d,y=%d,chis%c\n"
x,y,ch);
funcl();
源文件file2.c的内容为
voidfuncl(void)
x++;
y++;
ch++;
infile2x=%d,y=%d,chis%c\n"
头文件file.h的内容为
externintx,y;
externcharch;
voidfuncl(void);
三、实验步骤及结果
1.源程序改错
改后程序:
longsum_fac(intn);
intmain()
longsum_fac(intn)
longfac=1;
{
(1)
staticlongs=0;
staticinti=1;
staticlongfac=1;
for(;
(2)
doublesum_fac(intn);
k=%d\tthesumis%lf\n"
doublesum_fac(intn)
staticdoubles=0;
doublec;
doublefac=1;
fac*=i;
c=1/fac;
s+=c;
longfabonacci(int);
longfabonacci(intn)
(1)刚执行完“scanf("
”语句时,p=(longint*)0x22ff10;
i=58;
(2)从fabonacci函数返回后,光条停留在printf语句上
(3)进入fabonacci函数时,watches窗口显示的是n=1
(4)当i=3时,从调用fabonacci函数到返回,n=3
intm,n;
pleaseinputtwonumbers:
\n"
);
%d,%d"
m,&
n);
thebiggestcommondivisoris:
divisor(m,n));
intdivisor(intm,intn)
if(m>
=n&
&
n>
0)
divisor(m-n,n);
elseif(m<
n&
m>
divisor(n-m,m);
elseif(m==0)
returnn;
elseif(n==0)
returnm;
intdivisor(intm,intn);
intcheck(intn);
intn,i;
pleaseinputaevennumbern>
=4:
i=check(n);
%d=%d+%d\n"
n,i,n-i);
intcheck(intn)
inti,k,m,j,x;
for(i=2;
=n/2;
m=0,j=0;
if(divisor(i,n-i)!
=1)
continue;
for(x=2;
x<
i;
x++)
if(divisor(x,i)!
j=1;
break;
for(k=2;
(n-i);
if(divisor(k,n-i)!
m=1;
if(m==0&
j==0)
returni;
(3)
intbegin,end,i;
\nEveryevennumbern>
=4isthesumoftwoprimes.\npleaseinputtwonumbersBEGIN,END:
begin,&
end);
begin<
=end;
begin+=2)
i=check(begin);
begin,i,begin-i);
elseif(