函数与程序结构实验实验报告.docx
- 文档编号:2126211
- 上传时间:2022-10-27
- 格式:DOCX
- 页数:17
- 大小:94.08KB
函数与程序结构实验实验报告.docx
《函数与程序结构实验实验报告.docx》由会员分享,可在线阅读,更多相关《函数与程序结构实验实验报告.docx(17页珍藏版)》请在冰豆网上搜索。
函数与程序结构实验实验报告
C语言程序设计实验报告
专业:
计算机科学与技术班级:
计算机科学与技术创新实验班日期:
2011-12-12成绩:
实验组别:
第次实验:
指导教师:
学生姓名:
学号:
同组人姓名:
实验名称:
函数与程序结构实验
一、实验目的
(1)熟悉和掌握函数的定义、声明,函数的调用和参数传递方法,以及函数返回值类型的定义和返回值的使用。
(2)熟悉和掌握不同存储类型变量的使用
(3)熟悉多文件编译技术。
二、实验内容及要求
1.原程序改错
下面是计算s=1!
+2!
+3!
+…+n!
的原程序,在这个程序中存在若干语法和逻辑错误。
要求在计算机上对这个例子原程序进行调试修改,是指能够争取完成指定任务。
源程序:
#include
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值如何变化?
源程序:
#include
longfadonacci(int);
intmain(void)
{
inti,k;
longsum=0,*p=∑
scanf("%d",&k);
for(i=1;i<=k;i++){
sum+=fabonacci(i);
printf("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;
intmain(void)
{
x=10;
y=20;
ch=getchar();
printf("infilex=%d,y=%d,chis%c\n",x,y,ch);
funcl();
return0;
}
源文件file2.c的内容为
#include"file.h"
voidfuncl(void)
{
x++;
y++;
ch++;
printf("infile2x=%d,y=%d,chis%c\n",x,y,ch);
}
头文件file.h的内容为
#include
externintx,y;
externcharch;
voidfuncl(void);
三、实验步骤及结果
1.源程序改错
改后程序:
#include
longsum_fac(intn);
intmain()
{
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=1;
for(i=1;i<=n;i++)
{
fac*=i;
s+=fac;
}
returns;
}
2.源程序修改替换
(1)
#include
longsum_fac(intn);
intmain()
{
intk;
for(k=1;k<6;k++)
printf("k=%d\tthesumis%ld\n",k,sum_fac(k));
return0;
}
longsum_fac(intn)
{
staticlongs=0;
staticinti=1;
staticlongfac=1;
for(;i<=n;i++)
fac*=i;
s+=fac;
returns;
}
(2)
#include
doublesum_fac(intn);
intmain()
{
intk;
for(k=1;k<6;k++)
printf("k=%d\tthesumis%lf\n",k,sum_fac(k));
return0;
}
doublesum_fac(intn)
{
staticdoubles=0;
doublec;
staticinti=1;
doublefac=1;
for(;i<=n;i++)
fac*=i;
c=1/fac;
s+=c;
returns;
}
3.跟踪调试
#include
longfabonacci(int);
intmain(void)
{
inti,k;
longsum=0,*p=∑
scanf("%d",&k);
for(i=1;i<=k;i++){
sum+=fabonacci(i);
printf("i=%d\tthesumis%ld\n",i,*p);
}
return0;
}
longfabonacci(intn)
{
if(n==1||n==2)
return1;
else
returnfabonacci(n-1)+fabonacci(n-2);
}
(1)刚执行完“scanf("%d",&k);”语句时,p=(longint*)0x22ff10;i=58;
(2)从fabonacci函数返回后,光条停留在printf语句上
(3)进入fabonacci函数时,watches窗口显示的是n=1
(4)当i=3时,从调用fabonacci函数到返回,n=3
4.程序设计
(1)
#include
intmain()
{
intm,n;
printf("pleaseinputtwonumbers:
\n");
scanf("%d,%d",&m,&n);
printf("thebiggestcommondivisoris:
%d",divisor(m,n));
return0;
}
intdivisor(intm,intn)
{
if(m>=n&&n>0)
divisor(m-n,n);
elseif(m
divisor(n-m,m);
elseif(m==0)
returnn;
elseif(n==0)
returnm;
}
(2)
#include
intdivisor(intm,intn);
intcheck(intn);
intmain()
{
intn,i;
printf("pleaseinputaevennumbern>=4:
\n");
scanf("%d",&n);
i=check(n);
printf("%d=%d+%d\n",n,i,n-i);
return0;
}
intdivisor(intm,intn)
{
if(m>=n&&n>0)
divisor(m-n,n);
elseif(m
divisor(n-m,m);
elseif(m==0)
returnn;
elseif(n==0)
returnm;
}
intcheck(intn)
{
inti,k,m,j,x;
for(i=2;i<=n/2;i++)
{
m=0,j=0;
if(divisor(i,n-i)!
=1)
continue;
else
{
for(x=2;x
{
if(divisor(x,i)!
=1)
{
j=1;
break;
}
}
for(k=2;k<(n-i);k++)
{
if(divisor(k,n-i)!
=1)
{
m=1;
break;
}
}
if(m==0&&j==0)
returni;
}
}
}
(3)
#include
intdivisor(intm,intn);
intcheck(intn);
intmain()
{
intbegin,end,i;
printf("GOLDBACH'SCONJECTURE:
\nEveryevennumbern>=4isthesumoftwoprimes.\npleaseinputtwonumbersBEGIN,END:
\n");
scanf("%d,%d",&begin,&end);
for(;begin<=end;begin+=2)
{
i=check(begin);
printf("%d=%d+%d\n",begin,i,begin-i);
}
return0;
}
intdivisor(intm,intn)
{
if(m>=n&&n>0)
divisor(m-n,n);
elseif(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 函数 程序结构 实验 报告