C 上机2.docx

上传人:b****6 文档编号:8834897 上传时间:2023-02-02 格式:DOCX 页数:16 大小:208.95KB
下载 相关 举报
C 上机2.docx_第1页
第1页 / 共16页
C 上机2.docx_第2页
第2页 / 共16页
C 上机2.docx_第3页
第3页 / 共16页
C 上机2.docx_第4页
第4页 / 共16页
C 上机2.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

C 上机2.docx

《C 上机2.docx》由会员分享,可在线阅读,更多相关《C 上机2.docx(16页珍藏版)》请在冰豆网上搜索。

C 上机2.docx

C上机2

C语言程序设计实验报告

班级日期2012.4.19

学生姓名学号

第2次上机

实验1函数与程序结构

(一)实验目的

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

(2)熟悉和掌握不同存储类型变量的使用。

(3)熟悉多文件编译技术。

(二)实验内容及要求

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

{

intk;

printf("pleaseinputk:

");

scanf("%d",&k);

printf("k=%d\tthesumis%ld\n",k,sum_fac(k));

return0;

}

longsum_fac(intn)

{

longs=0;

inti;

staticlongfac=1;

for(i=1;i<=n;i++)

{

fac=fac*i;

s=s+fac;

}

returns;

}

运行结果:

2.源程序修改替换

(1)修改上述源程序中的sum_fac函数,使其计算量最小。

(2)修改上述源程序中的sum_fac函数,计算

 

(1)

#include

longsum_fac(intn,intt);

intmain()

{

intk=0,i;

longm;

do{

printf("pleaseinputk:

");

scanf("%d",&k);

}while(k<0);

for(i=1;i<=k;i++)

m=sum_fac(k,i);

printf("k=%d\tthesumis%ld\n",k,m);

return0;

}

longsum_fac(intn,intt)

{

staticlongfac=1,s=0;

if(t<=n)

{

fac=fac*t;

s=s+fac;

}

returns;

}

运行结果:

(2)

#include

doublesum_fac(intn);

intmain()

{

intk;

printf("pleaseinputk:

");

scanf("%d",&k);

printf("k=%d\tthesumis%lf\n",k,sum_fac(k));

return0;

}

doublesum_fac(intn)

{

doubles=0.0;

inti=1;

longfac=1;

do{

fac=fac*i;

s=s+1.0/fac;

i++;

}while(i<=n);

returns;

}

 

3.跟踪调试

下面是计算fabonacci数列前n项和的源程序,现要求单步执行该程序,并观察p,i,sum,n值,即:

(1)刚执行完scanf("%d",&k);语句时,p,i值是多少?

(2)从fabonacci函数返回后,光条停留在哪个语句上?

(3)进入fabonacci函数时,watch窗口显示的是什么?

(4)当i=3时,从调用fabonacci函数到返回,n值如何变化?

源程序:

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);

}

其中,“longsum=0,*p=∑”声明p为长整型指针并用&sum取出sum的地址对p初始化。

*p表示引用p所指的变量(*p即sum)。

答:

(1)输入k=6;p和i的值如右图:

 

(2)从fabonacci函数返回后光条停留在“printf("i=%d\tthesumis%ld\n",i,*p);”语句上.

(3)在k=3输入:

最后一个截图为程序结束时的各变量数值。

最后一个截图为程序结束时的各变量数值。

(4)

 

4.程序设计

编写并上机调试运行能实现以下功能的程序。

(1)编写一个程序,让用户输入两个整数,计算两个数的最大公约数并且输出之。

要求用递归函数实现求最大公约数,同时以单步方式执行该程序,观察其递归过程。

intgcd(intu,intv)

{

inttemp;

while(v!

=0)

{

temp=u%v;

u=v;

v=temp;

}

returnu;

}

intmain()

{

intm,n;

printf("Pleaseinputtwonumbers:

");

scanf("%d%d",&m,&n);

printf("gcd=%d",gcd(m,n));

}

 

(2)编写一个程序,验证歌德巴赫猜想:

一个大于等于4的偶数都是两个素数之和。

#include

#include

#defineN40

intgedebahe(int);

intmain()

{

inti=6,n;

printf("4=2+2\n");

for(;i<=N;i+=2)

{

for(n=3;n<=i/2;n+=2)

if(gedebahe(n))

if(gedebahe(i-n))

{

printf("%4d=%2d+%2d\n",i,n,i-n);

break;

}

if(n>i/2)printf("error%d\n",i);

}

return0;

}

intgedebahe(inti)

{

intj;

if(i<=1)return0;

if(i==2)return1;

if(!

(i%2))return0;

for(j=3;j<=sqrt(i);j+=2)

if(!

(i%j))return0;

return1;

}

(3)编写一个程序,证明对于在符号常量BEGIN和END之间的偶数这一猜测成立。

例如,如果BEGIN为10,END为20,则程序的输出应为:

GOLDBACH'SCONJECTURE:

Everyevennumbern>=4isthesumoftwoprimes.

10=3+7

12=5+7

……

20=3+17

程序:

#include

#include

intgedebahe(int);

intmain()

{

inti,n;

printf("GOLDBACH'SCONJECTURE:

\n");

printf("Everyevennumbern>=4isthesumoftwoprimes.\n");

for(i=10;i<=20;i+=2)

{

for(n=3;n<=i/2;n+=2)

if(gedebahe(n))

if(gedebahe(i-n))

{

printf("%d=%d+%d\n",i,n,i-n);

break;

}

if(n>i/2)printf("error%d\n",i);

}

return0;

}

intgedebahe(inti)

{

intj;

if(i<=1)return0;

if(i==2)return1;

if(!

(i%2))return0;

for(j=3;j<=sqrt(i);j+=2)

if(!

(i%j))return0;

return1;

}

运行结果:

 

实验心得与体会

 

选做题

(1)假设一个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函数原型*/

 

(3)如果由n个1组成的整数能被2011整除,则n至少为多少?

源程序:

#include

voidmain()

{inta,c,n;

c=1111;n=4;

while(c!

=0)

{a=c*10+1;

c=a%2011;n++;

}

printf("%d",n);

}

运行结果:

 

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

当前位置:首页 > 高等教育 > 农学

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

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