1昆明理工大学《程序设计基础》课程综合设计实践教学课题报告课程名称:c语言程序设计课题名称:有关函数jsvalue的数学运算昆明理工大学计算中心2010年6月8日2昆明理工大学计算中心《程序设计基础》课程综合设计实践教学课题考核表课题名称:有关函数jsvalue的数学运算学院:农工院专业班级:农电091学号姓名小组编号题号承担及完成的内容成绩备注小组自评教师萍定设计说明与功能描述(基本思路及关键语句说明)该程序首先是对程序中要产生的一些函数定义,再在主函数中对它们进行调用。从而形成一套有条理的程序设计,并且能够很好的达到程序设计的目的。程序中,通过运用语句、指针、文件等,十分方便地执行了对数据的相关操作。函数jsvalue提供以下几个功能:1.输入整形数据n2.对数据进行相关处理3.调用自定义函数,进行一系列迭代处理,找到大于t的最小的一个数。3.输出数据表:将返回数据输出4.将相应的10个输出结果存到文件中5.将n=1000时的函数值输出签名:魏晓刚2010年6月8日教师评语教师签名:20年月日3《程序设计基础》课程综合设计实践教学课题报告要求第一部分系统概述一、程序功能:求Fibonacci数列(F(n)的定义为:F(0)=0,F(1)=1F(n)=F(n-1)+F(n-2))中大于t的最小的一个数,结果由函数返回。二、程序算法:根据Fibonacci数列的特点:F(n)=F(n-1)+F(n-2),fun函数应用迭代算法,而迭代算法的关键是对初值的设定及对迭代关系得确定。其具体程序如下:intfun(intt)/*定义函数fun()*/{inta=1,b=1,c=0,i;/*a为数列的第二项,b为第三项,c为第四项,a和b已经根据Fibonacci数列的特点赋初值*/for(i=4;i=t;i++)/*从第四项开始循环到第十项*/{if(ct)/*如果数列的值比t小,进行迭代*/{c=a+b;/*根据关系F(n)=F(n-1)+F(n-2)*/a=b;/*把后一项的值付给它的前一项*/b=c;/*把后一项的值付给它的前一项*/}elsebreak;/*如果数列的值大于t,则跳出for循环,跳到return语句*/}从屏幕上输入一个数,通过对自定义fun函数的调用,返回函数值。本程序共分三个部分,分别为:主函数、调用函数fun()、输出函数(需从调用函数writeDat中读取10个数据t,分别得出4结果且把结果输出到文件out.dat中并输出t=1000时的函数值)。各函数的主要算法见流程图。其具体程序如下:intn;FILE*out;/*定义文件指针out*/n=1000;printf(n=%d,f=%d\n,n,fun(n));out=fopen(out.dat,w);/*用只读方式打开文件out.dat*/for(n=500;n5000;n+=500)fprintf(out,%d\n,fun(n));/*调用fun()函数*/fclose(out);/*关闭out所指向文件out.dat*/第二部分结构设计一、数据设计本程序定义了一系列整形数据a、b、c、i、n、t。用a、b、c进行迭代、用for循环进行查找,最终找到Fibonacci数列中大于t的最小的一个数。还运用文件的相关操作把从调用函数writeDat()中读取10个数据t分别得出的结果输出到文件out.dat中,并在屏幕上输出了n=1000时的函数值。二、模块设计(1)程序所能达到的功能求Fibonacci数列(F(n)的定义为:F(0)=0,F(1)=1F(n)=F(n-1)+F(n-2))中大于t的最小的一个数,结果由函数返回。(2)函数定义5程序中定义了一个功能函数和一个库函数,它们分别是调用函数fun()、数学函数math;还调用了文件函数fopen()、fclose()。最后是用主函数main()来调用以上3个函数。主函数流程图如下:第三部分使用程序说明一、调试运行及操作说明(1)调试中可能因为n的初值或范围设置不当而不能输出准确地数据,所以一定要正确地给n赋初值,并且合理的设置n的取值范围,以确保数据的输出个数满足程序的要求。如:n值不当,造成程序输出值过多。主函数入口调用自定义函数出错判断退出系统输出数据处理并存入文件输入数据程序结束6调试中也可能因为文件不能正确的打开或关闭而使文件不能正常地运行,所以一定要确保对文件地正确操作,其大致步骤为:定义文件-打开文件-运用文件-关闭文件。在运用文件时,一定确保使文件的类型与程序的基本要求相符合,以免输出错误结果。(2)利用文件把输出结果保存到盘中(本程序因为out.dat文件是只写文件“w”,故以下数据无法从屏幕上输出)。7(3)测试数据:下面即为本程序正确地输出结果,即为n取1000时所对应的函数值。8第四部分总结和体会转眼间,本学期就要结束了。我通过本学期的学习,见识到了苦,但还有稍许的甜。在懵懂之中,我慢慢的摸索,慢慢的实践,我不怕失败,勇往直前。正是有了这样的初生牛犊的精神,我才感受到了很多乐趣,我才收获了许多东西。这是我平生第一次接触c语言,虽然以前听说过,也深刻的认识到它的重要性,但是刚开始的时候,真的是什么都不懂,每天看着天书一般的程序,头皮都发麻。有时候,看着别人顺利的读出程序,写出自己的设计,那种羡慕感和失落感,那种无奈感叫人无法承受。不甘的学习,不停的努力,不断的探索,我不想放弃!随着进一步的学习,慢慢地,我也能读懂程序了,渐渐地,我也不再恐惧和失落了。天书一般的程序,也渐渐的向我展示出它的内涵。老师和同学不怕我底子薄,不怕麻烦,将每一道题都讲的仔仔细细,我照着老师的话去做,不断地去学习,不断地花时间去看。很多的概念性问题,我都一一理解了,于是,在教学平台上的每一道编程作业我都能够顺利的独立完成了。可是,在这次的程序设计中,我又有了那种失败的感觉。刚开始看到这个题目时,我感到很渺茫。我认真的查找原因,仔细的体会本体的意图,最终才知道那是因为我还不懂对文件9的操作。随后,我在教科书上找到了文件的相关内容,进过我的认真学习,我已成功掌握了这一部分知识。后来,我就开始着手编写程序了,每天好长好长的时间,我都泡在里面,我不断的发现错误,不断的进步。可是到最后,我的程序还是没能真确地运行,手忙脚乱的做了个小程序,就是上面所见的,功能很不齐全,远没有我原先预想的那样,真的很失落。不过最后我终于认识到了一点:结果虽然很重要,但是过程更需要重视,我成长了,我也就有所获得了。我希望,在下学期的c语言二级等考中,我的成长和变化可以得到体现,我的付出不会落空!这次编程作业虽然对我来说比较困难,但是值得高兴的是,我努力了,并基本完成了任务。这次做C语言编写程序题让我感触颇深。首先是由于对基础知识掌握不扎实,以至于刚开始拿着不知道从何下手,这就让我明白了学习的重要性。其次让我明白的是互相帮助的重要性,由于对编程的相关知识不十分了解,所以我询问了许多同学,在他们的帮助之下,我的一些问题都解决了,并完成了这次作业。虽然这次我没有做好题目,但是,不管是在知识的汲取上,还是在互助意识上我都有了很大的收获。为了做好这次作业,我还查阅了大量关于C语言编程的书籍,并接受了很多同学的建议,以求做到精益求精。付出总有回报,即使它不能出现在现在,也会在不远的将来出现!我永远坚持这一点。10第五部分程序源代码#includeconio.h#includemath.h#includestdio.hintfun(intt)/*定义函数fun()*/{inta=1,b=1,c=0,i;/*a为数列的第二项,b为第三项,c为第四项,a和b已经根据Fibonacci数列的特点赋初值*/for(i=4;i=t;i++)/*从第四项开始循环到第十项*/{if(ct)/*如果数列的值比t小,进行迭代*/{c=a+b;/*根据关系F(n)=F(n-1)+F(n-2)*/a=b;/*把后一项的值付给它的前一项*/b=c;/*把后一项的值付给它的前一项*/}elsebreak;/*如果数列的值大于t,则跳出for循环,跳到return语句*/11}returnc;/*返回数列的值*/}main(){intn;FILE*out;/*定义文件指针out*/n=1000;printf(n=%d,f=%d\n,n,fun(n));out=fopen(out.dat,w);/*用只读方式打开文件out.dat*/for(n=500;n5000;n+=500)fprintf(out,%d\n,fun(n));/*调用fun()函数*/fclose(out);/*关闭out所指向文件out.dat*/}12