C语言程序设计实验报告3.docx_第1页
C语言程序设计实验报告3.docx_第2页
C语言程序设计实验报告3.docx_第3页
C语言程序设计实验报告3.docx_第4页
C语言程序设计实验报告3.docx_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验3 函数与程序结构实验3.1 实验目的(1)熟悉和掌握函数的定义、声明;函数调用与参数传递方法;以及函数返回值类型的定义和返回值使用。(2)熟悉和掌握不同存储类型变量的使用。(3)熟悉多文件编译技术。3.2 实验内容及要求3.2.1源程序改错下面是计算s=1!+2!+3!+n!的源程序,在这个源程序中存在若干语法和逻辑错误。要求在计算机上对这个例子程序进行调试修改,使之能够正确完成指定任务。1 #include2 int main(void)3 4 int k;5 for(k=1;k6;k+)6 printf(k=%dtthe sum is %ldn,k,sum_fac(k);7 8 return 0;9 long sum_fac(int n)10 11 long s=0;12 int i;13 long fac;14 for(i=1;i=n;i+)15 fac*=i;16 s+=fac;17 return s;18 解答:(1)错误修改1) 未声明函数sum_fac(int n)的情况下,就调用函数。2) 第8行中,return 0;语句应放在主函数中。3) 第15,16行,应该被括号括起来,否则程序意义不是计算阶乘的和。 (2)修改错误后的程序为 #includelong sum_fac(int n);int main(void) int k; long sum_fac(int n); for(k=1;k6;k+) printf(k=%dtthe sum is %ldn,k,sum_fac(k); return 0;long sum_fac(int n) long s=0; int i; long fac=1; for(i=1;i=n;i+) fac*=i; s+=fac; return s;(3)运行结果 图1 3.2.1程序运行截图3.2.2源程序修改替换(1)修改第1题中sum_fac函数,使其计算量最小。解答:1)将long设为静态局部变量,当退出函数时,long的值被保存在内存中,再次调用函数时,不用再对long初始化,静态局部变量的值具有记忆性。替换后的程序如下所示:#includelong sum_fac(int n);int main(void) int k; for(k=1;k6;k+) printf(k=%dtthe sum is %ldn,k,sum_fac(k); return 0;long sum_fac(int n) static long s=0; int i; long fac=1; for(i=1;i=n;i+) fac*=i; s+=fac; return s;2)运行截图及说明 图2 3.2.2(1)程序运行截图(2)修改第1题中sum_fac函数,计算。解答:1)第1题计算的是阶乘的和,而现在需要计算阶乘的倒数的和。只需将s+=fac替换为s+=1.0/fac即可。替换后的程序如下所示:#includeint main(void) int k; double sum_fac(int n); for(k=1;k6;k+) printf(k=%dtthe sum is %lfn,k,sum_fac(k); return 0; double sum_fac(int n) double s=0; int i; long fac=1; for(i=1;i=n;i+) fac*=i; s+=1.0/fac; return s;2)运行截图及说明图3 3.2.2(2)程序运行截图3.2.3跟踪调试计算fabonacci数列前n项和的程序如下:其中,long sum=0,*p=∑声明p为长整型指针并用&sum取出sum的地址对p初始化。*p表示引用p所指的变量(*p即sum)。 #include;int main(void)long fabonacci(int n); int i,k; long sum=0,*p=∑ scanf(%d,&k); for(i=1;i=k;i+) sum+=fabonacci(i); printf(i=%dtthe sum is %ldn,i,*p);return0;long fabonacci(int n) if(n=1 | n=2) return 1; else return fabonacci(n-1)+fabonacci(n-2);单步执行程序,观察p,i,sum,n值。(1)刚执行完scanf(%d,&k);语句,p,i值是多少?p=(long int)0x28ff00 i=60(2)从fabonacci函数返回后光条停留在哪个语句上? 光条停留在语句printf(i=%dtthe sum is %ldn,i,*p);(3)进入fabonacci函数,watch窗口显示的是什么? 输入k=6时,i与sum的值的变化。 (4)当i=3,从调用fabonacci函数到返回,n值如何变化? 3.2.4程序设计(1)编程让用户输入两个整数,计算两个数的最大公约数并且输出之(要求用递归函数实现求最大公约数)。同时以单步方式执行该程序,观察递归过程。解答:1) 解题思路1. 输入两个整数x,y。2. 判断x与y的大小,若xy,将x与y对换。3. 如果x%y=0,输出y。4. 否则,yueshu(y,x%y)。2) 程序清单。int main()int x,y;printf(请输入两个不为0的整数:);scanf(%d%d,&x,&y);printf(这两个整数的最大公约数是%d,yueshu(x,y);return 0; int yueshu(int x,int y)int z;if(xy)z=x;x=y;y=z;if(x%y=0)return y;elsereturn yueshu(y,x%y);3) 测试。测试用例输入的两个整数 应输出的理论结果用例1 24 78 6用例2 98 28 14 图4 3.2.4(1)用例1程序运行截图 图5 3.2.4(1)用例2程序运行截图(2) 编程验证歌德巴赫猜想:一个大于等于4的偶数都是两个素数之和。解答:1)解题思路1. 先输入一个大于等于4的偶数z, n的起始值为0。2. 将z分为相等两部分,x1为z/2+n,另一部分为z-x1。3. 先判断x1是不是质数,如果不是,则n+1,直到n=z/2。4. 如果x1是质数,再判断x2是不是质数。5. 如果是质数,输出x1,x2。6. n+1, 直到n=z/2。回到第2步。2)程序清单:#include int main()int x1,x2,z,n,i,k;printf(请输入一个大于等于4的偶数:);scanf(%d,&z); for(n=0;nz/2;n+)x1=z/2+n; for(i=2;iz/2;i+) if(x1%i=0)break; if(i=z/2) x2=z-x1; for(k=2;k=4 is the sum of two primes.10=3+712=5+720=3+17解答:1) 解题思路:1 输入符号常量BEGIN和END。2 定义偶数z为BEGIN+j,j的初始值为0。3 判断j是否小于END-BEGIN。4 若小于END-BEGIN,将z分为相等两部分,x1为z/2+n,另一部分为z-x1,n的初始值为0。5 先判断x1是不是质数,如果不是,则n+1,直到n=z/2。6 如果x1是质数,再判断x2是不是质数。7 如果是质数,输出x1,x2。8 j=j+2,回到第3步。 2)程序清单:#includeint main() int x1,x2,z,n,i,k,j; int BEGIN,END; scanf(%d%d,&BEGIN,&END); printf(GOLDBACHS CONJECTURE:n); printf(Every even number n=4 is the sum of two primes.n); for(z=BEGIN;z=END;z=z+2) for(n=1;nz/2;n+) x1=z/2+n; for(i=2;iz/2;i+) if(x1%i=0)break; if(i=z/2) x2=z-x1; for(k=2;kx2;k+) if(x2%k=0)break; if(k=x2) printf(%d=%d+%dn,z,x2,x1); 3)测试。 图11 3.2.4(3)用例1程序运行截图 图12 3.2.4(3)用例2程序运行截图3.2.5选做题假设一个C程序由file1.c、file2.c两个源文件和一个file.h头文件组成,file1.c、file2.c和file.h的内容分别如下,试编辑该多文件C程序,并编译和链接。然后运行生成的可执行文件。源文件file1.c的内容为:#include file.hint x,y; /* 外部变量的定义性说明 */char ch; /* 外部变量的定义性说明 */int main(void) x=10; y=20; ch=getchar(); printf(in file1 x=%d,y=%d,ch is %cn,x,y,ch);func1();return 0;源文件file2.c的内容为:#include file.hvoid func1(void) x+; y+; ch+; printf(in file2 x=%d,y=%d,ch is %cn,x,y,ch);头文件file.h的内容为:#include extern int x,y; /* 外部变量的引用性说明 */extern char ch; /* 外部变量的引用性说明 */void func1(void); /* func1函数原型 */解答:1) 程序清单:源文件file1.c的内容为:#include file.hint x,y; char ch; int main(void) x=10; y=20; ch=getchar(); printf(in file1 x=%d,y=%d,ch is %cn,x,y,ch);func1();return 0;源文件file2.c的内容为:#include file.hvoid func1(void) x+; y+; ch+; printf(in file2 x=%d,y=%d,ch is %cn,x,y,ch);头文件file.h的内容为:#include extern int x,y; extern char ch;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论