C语言程序设计实验报告24.docx

上传人:b****5 文档编号:2858333 上传时间:2022-11-16 格式:DOCX 页数:14 大小:126.85KB
下载 相关 举报
C语言程序设计实验报告24.docx_第1页
第1页 / 共14页
C语言程序设计实验报告24.docx_第2页
第2页 / 共14页
C语言程序设计实验报告24.docx_第3页
第3页 / 共14页
C语言程序设计实验报告24.docx_第4页
第4页 / 共14页
C语言程序设计实验报告24.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

C语言程序设计实验报告24.docx

《C语言程序设计实验报告24.docx》由会员分享,可在线阅读,更多相关《C语言程序设计实验报告24.docx(14页珍藏版)》请在冰豆网上搜索。

C语言程序设计实验报告24.docx

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((

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 育儿理论经验

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1