C语言程序设计实验报告材料24.docx
- 文档编号:17373081
- 上传时间:2023-04-24
- 格式:DOCX
- 页数:17
- 大小:126.79KB
C语言程序设计实验报告材料24.docx
《C语言程序设计实验报告材料24.docx》由会员分享,可在线阅读,更多相关《C语言程序设计实验报告材料24.docx(17页珍藏版)》请在冰豆网上搜索。
C语言程序设计实验报告材料24
C语言程序设计实验报告
专业班级日期11月26日成绩
实验组别第2(2.4)次实验指导教师李开
学生姓名学号同组人姓名
实验名称流程控制实验
一、实验目的
(1)熟悉和掌握函数的定义、声明;函数调用与参数传递方法;以及函数返回值类型的定义和返回值使用。
(2)熟悉和掌握不同存储类型变量的使用。
(3)熟悉多文件编译技术。
二、实验任务
4.2实验内容及要求
1.源程序改错
下面是计算s=1!
+2!
+3!
+…+n!
的源程序,在这个源程序中存在若干语法和逻辑错误。
要求在计算机上对这个例子程序进行调试修改,使之能够正确完成指定任务。
#include
voidmain(void)
{
intk;
for(k=1;k<6;k++)
printf("k=%d\tthesumis%ld\n",k,sum_fac(k));
}
longsum_fac(intn)
{
longs=0;
inti;
longfac;
for(i=1;i<=n;i++)
fac*=i;
s+=fac;
returns;
}
2.源程序修改替换
(1)修改第1题中sum_fac函数,使其计算量最小。
(2)修改第1题中sum_fac函数,计算
。
3.跟踪调试
计算fabonacci数列前n项和的程序如下:
其中,longsum=0,*p=∑声明p为长整型指针并用&sum取出sum的地址对p初始化。
*p表示引用p所指的变量(*p即sum)。
voidmain(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);
}
}
longfabonacci(intn)
{
if(n==1||n==2)
return1;
else
returnfabonacci(n-1)+fabonacci(n-2);
}
单步执行程序,观察p,i,sum,n值。
(1)刚执行完scanf("%d",&k);语句,p,i值是多少?
(2)从fabonacci函数返回后光条停留在哪个语句上?
(3)进入fabonacci函数,watch窗口显示的是什么?
(4)当i=3,从调用fabonacci函数到返回,n值如何变化?
4.程序设计
(1)编程让用户输入两个整数,计算两个数的最大公约数并且输出之(要求用递归函数实现求最大公约数)。
同时以单步方式执行该程序,观察递归过程。
(2)编程验证歌德巴赫猜想:
一个大于等于4的偶数都是两个素数之和。
编写一个程序证明对于在符号常量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的内容分别如下,试编辑该多文件C程序,并编译和链接。
然后运行生成的可执行文件。
源文件file1.c的内容为:
#include"file.h"
intx,y;/*外部变量的定义性说明*/
charch;/*外部变量的定义性说明*/
voidmain(void)
{
x=10;
y=20;
ch=getchar();
printf("infile1x=%d,y=%d,chis%c\n",x,y,ch);
func1();
}
源文件file2.c的内容为:
#include"file.h"
voidfunc1(void)
{
x++;
y++;
ch++;
printf("infile2x=%d,y=%d,chis%c\n",x,y,ch);
}
头文件file.h的内容为:
#include
externintx,y;/*外部变量的引用性说明*/
externcharch;/*外部变量的引用性说明*/
voidfunc1(void);/*func1函数原型*/
4.3多源文件C程序的建立(结合第5题)
三、实验步骤及结果
(要求给出源程序和程序运行结果。
另外,根据实验内容,记录编辑、编译、链接、调试程序的操作过程和实验现象)
(2.4内容)
1.源程序改错
下面是计算s=1!
+2!
+3!
+…+n!
的源程序,在这个源程序中存在若干语法和逻辑错误。
要求在计算机上对这个例子程序进行调试修改,使之能够正确完成指定任务。
#include
voidmain(void)
{
intk;
for(k=1;k<6;k++)
printf("k=%d\tthesumis%ld\n",k,sum_fac(k));
}
longsum_fac(intn)
{
longs=0;
inti;
longfac;
for(i=1;i<=n;i++)
fac*=i;
s+=fac;
returns;
}
(修改后)
#include
longsum_fac(intn);
intmain(void)
{
intk;
for(k=1;k<6;k++)
printf("k=%d\tthesumis%ld\n",k,sum_fac(k));
}
longsum_fac(intn)
{
longs=0;
inti;
longfac=1;
for(i=1;i<=n;i++){
fac*=i;
s+=fac;}
returns;
}
2.源程序修改替换
(1)修改第1题中sum_fac函数,使其计算量最小。
#include
long sum_fac(int n);
int main(void)
{
int k;
for(k=1;k<6;k++)
printf("k=%d\tthe sum is %ld\n",k,sum_fac(k));
return 0;
}
long sum_fac(int n)
{
static long s=0;
static long fac=1;
fac*=n;
s+=fac;
return s;
}
(2)修改第1题中sum_fac函数,计算
。
#include
floatsum_fac(intn);
intmain(void)
{
intk;
for(k=1;k<6;k++)
printf("k=%d\tthesumis%f\n",k,sum_fac(k));
}
floatsum_fac(intn)
{
floats=0;
inti;
longfac=1;
for(i=1;i<=n;i++){
fac*=i;
s+=1.0/fac;}
returns;
}
3.跟踪调试
计算fabonacci数列前n项和的程序如下:
其中,longsum=0,*p=∑声明p为长整型指针并用&sum取出sum的地址对p初始化。
*p表示引用p所指的变量(*p即sum)。
voidmain(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);
}
}
longfabonacci(intn)
{
if(n==1||n==2)
return1;
else
returnfabonacci(n-1)+fabonacci(n-2);
}
单步执行程序,观察p,i,sum,n值。
(1)刚执行完scanf("%d",&k);语句,p,i值是多少?
i=29
p=5
sum=0
(2)从fabonacci函数返回后光条停留在哪个语句上?
printf("i=%d\tthesumis%ld\n",i,*p);
(3)进入fabonacci函数,watch窗口显示的是什么?
(4)当i=3,从调用fabonacci函数到返回,n值如何变化?
n=3到n=2到n=1到n=3
4.程序设计
(1)编程让用户输入两个整数,计算两个数的最大公约数并且输出之(要求用递归函数实现求最大公约数)。
同时以单步方式执行该程序,观察递归过程。
#include
#include
intGreatest_Common_divisor(intm,intn);
intmain(void)
{
intm,n;
printf("inputtwonumber\n");
scanf("%d%d",&m,&n);
Greatest_Common_divisor(m,n);
return0;
}
intGreatest_Common_divisor(intm,intn)
{
inti;
i=abs(m-n);
if((i==m)||(i==n)){
printf("%d",i);
}
else{
if(m>n){
Greatest_Common_divisor(n,i);
}
else{
Greatest_Common_divisor(m,i);
}
}
}
(2)编程验证歌德巴赫猜想:
一个大于等于4的偶数都是两个素数之和。
编写一个程序证明对于在符号常量BEGIN和END之间的偶数这一猜测成立。
例如,如果BEGIN为10,END为20,程序的输出应为:
GOLDBACH'SCONJECTURE:
Everyevennumbern>=4isthesumoftwoprimes.
10=3+7
12=5+7
……
20=3+17
#include
intisprime(intn)
{
intj,x;
for(j=2;j if(n%j==0) { x=0; break; }else x=1; return(x); } intas(intn,intm){ inti; printf("GOLDBACH'SCONJECTURE: \n"); printf("Everyevennumbern>=4isthesumoftwoprimes\n"); for(;n<=m;n+=2){ for(i=2;i<=(n/2);i++) { if((isprime(i)! =0)&&(isprime(n-i)! =0)){ printf("%d=%d+%d\n",n,i,n-i); break; } else continue; } } } intmain() { intn,m; scanf("%d%d",&n,&m); as(n,m); return0; } 5.选做题 假设一个C程序由file1.c、file2.c两个源文件和一个file.h头文件组成,file1.c、file2.c和file.h的内容分别如下,试编辑该多文件C程序,并编译和链接。 然后运行生成的可执行文件。 源文件file1.c的内容为: #include"file.h" intx,y;/*外部变量的定义性说明*/ charch;/*外部变量的定义性说明*/ voidmain(void) { x=10; y=20; ch=getchar(); printf("infile1x=%d,y=%d,chis%c\n",x,y,ch); func1(); } 源文件file2.c的内容为: #include"file.h" voidfunc1(void) { x++; y++; ch++; printf("infile2x=%d,y=%d,chis%c\n",x,y,ch); } 头文件file.h的内容为: #include externintx,y;/*外部变量的引用性说明*/ externcharch;/*外部变量的引用性说明*/ voidfunc1(void);/*func1函数原型*/ #include externintx,y;/*外部变量的引用性说明*/ externcharch;/*外部变量的引用性说明*/ voidfunc1(void);/*func1函数原型*/ intx,y;/*外部变量的定义性说明*/ charch;/*外部变量的定义性说明*/ voidmain(void) { x=10; y=20; ch=getchar(); printf("infile1x=%d,y=%d,chis%c\n",x,y,ch); func1(); } voidfunc1(void) { x++; y++; ch++; printf("infile2x=%d,y=%d,chis%c\n",x,y,ch); } 四、实验体会 了解更多有关C语言的语法知识和循环结构以及熟练了调试过程。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言程序设计 实验报告材料24 语言程序设计 实验 报告 材料 24