《c语言课程设计 银行存钱.docx》由会员分享,可在线阅读,更多相关《c语言课程设计 银行存钱.docx(11页珍藏版)》请在第一文库网上搜索。
1、红河学院工学院程设计报告专业:计算机技术与科学年级: 11 级学号:201101030466姓名:曹永前成绩:木匕改时间:红河学院工学院编制1、本报告供学生课程设计时使用。2、学生应认真阅读课程设计要求。3、课程设计报告里面的内容要手工填写,以备存档使用(源程序可打印)。4、课程设计的总评成绩根据课程的性质,按一定比例计入该门课程成绩。5、课程设计报告中的各模块填写的内容是评分的主要依据,如果不够书写,可以自行添加附页。6、按规定的时间提交报告给教师评定成绩,由任课教师交到工学院存档。课程设计目录课程名称:高级语言程序设计序号课程设计名称起止页码36银行存钱设计任务题目该存多少钱,假设银行一年
2、整存零取的月利息为0.68%。现在某人手上有一笔钱,他打算在今后的十年中每年年底取出500元,到第十年时刚好取完,请算出他存钱时应该存入多少?班级11计科指导教师地点成绩学年2011-2012开始日期结束日期一、问题分析根据这学期所学内容,解决这类问题有多种方法,由于对这些方法都不熟悉,不知道使用哪一种方法更为简便,我打算在这个程序中运用不同方法解决问题,分析比较两种方法,得出两种方法的利弊,方便以后的学习利用.数据分析:1 .(倒推法分析)设:年初存款为X,年底连本带息为y则y=x* (1 + 12*0.0068)即:x=y(l+12*0.0068)(递推公式)第十年:y=500第九年:y=
3、 (500+第十年初的存款)第八年:产(500+第九年初的存款)第一年:y=(5()0+第二年初的存款)方法分析:(使用倒推法)第十年初存款 xl= (0+500) / (1 + 12*0.0068)第九年初存款 x9= (x 10+500) / (1 + 12*0.0068)第一年初存款 xl= (x2500) / (1+12*0.0068)2 .(顺序分析)假设第一年存n元,那么年终应当是n=n*(l+0.68%*12)-500;第二年也是 n=n*(l+0.68%*12)-500第三年 n=n*(l+0,68%*12)-500第四年 n=n*( 1+0.68%* 12)-500方法分析(
4、递归法)第十年 n=n*(l+0,68%*12)-500 为零所以n=500(l+0.68%*12)为第九年底,第十年初的数量第九年初n=(500+第十年初的数量)(l+0.68%*12)第八年初n= (500+第九年初的数量)(l+0.68%*12)第二年初n=(500+第三年初的数量)(l+0.68%*12)第一年初n=(500+第二年初的数量)(l+0.68%*12)二、设计流程图结束结束三、程序代码1 .(倒推法)#includevoid main() int k;float x=0;for(k= 10;k0;k) k从10开始,只要k0,执行之后k自减(倒推法)x=(x+500)/(
5、l+0.0068*12);/每一年的存款等于下一年的存款加500再除以(1+0.0068*12)printf(,He must save %f at firstn,x);输出第一次需要存入的金额2.递归法#include#inc ludedefine per 0.0816银行的年利率,等于月利率0.68%*12void count(int n,float a)(if (n =0)如果n等于(),则输出a,递归出口(printf(,%fn,a)i)a += 500;/a=a+500a = a/(l+per);下一年的存款除以(l+per)等于上一年的count(n-l,a);void main(
6、)(float i = 0;int n = 10;count(n,i);3把结果写进文件(倒推法)#include#includevoid main() int k;double x=0;for(k=10;k0;k) k从10开始,只要k0,执行之后k自减(倒推法)x=(x+500)/(l+0.0068*12);每一年的存款等于上一年的存款加500再除以(1+0.0068*12)FILE*fp;f=foen(,EAdaan l.txt,|,w);fprintf(fp,%f,x)jfclose(fp);printf(He must save %f at firstn”,x);输出第一次需要存入的
7、金额递归法#inckide#inc lude#define per0.0816银行的年利率,等月利率().68%*12void count(it n,float a)(if (n =0)如果n等于(),则输出a,递归出口(FILE*fp;fp=fopen( ,Edaan .txt,(w);fprintf(fp,%f,a)ifclose(fp);printf(,%fn,a)i)a += 500;/a=a+500a = a/(l+per);下一年的存款除以(l+per)等于上一年的count(n-l,a);)void main()(float i = 0;int n = 10;count(n,i)
8、;U!I、运行结果与分析1 .倒推法j E:DebugiSit.exeHe must saue 3330.9G2158 at firstPress any key to continue.2 .递归法L, nE:DebugS.exew.噎 V-一 . .,Lu-3330.962158Press any key to continue五、课程设计过程问题讨论问题讨论及解决办法:1 .设计时,先完成初步构思,然后对主函数设计的各个模块进行查阅资料进行编程。在环境中进行调试。2 .设计过程中,不应该忽视环境提示的警告。要及时修正并仔细认真检查。3 .程序调试时许多错误使自己学到知识,更好的巩固了课本
9、知识。4 .刚开始的时候不会把结果写入文件(最主要是参数出错,没有弄清各语句的参数).总结:1 .这个课程设计的主要目的是学会运用知识来解决实际问题,在开始的时候我已说明我要以不同的方法来解决问题,来得到两种方法在解决这个问题的难易、利弊。2 .从程序的问题分析上来看,倒推法当然是倒着来分析,而递归是顺序来分析,顺序分析可能共容易理解。3 .从代码上来看,运用倒推法的程序代码更为简洁,只用一个for循环节能的到答案,运用递归法首先必须找到递归出口,程序代码与倒推法相比起来更长,更难理解。4 .总体来看,没有哪一种方法是绝对简单的,需要具体问题具体分析,根据自己对知识的掌握程度在进行方法的选择。5 .这一次课程设计使我体会的编程的环境,提高了独立思考的能力,有效的巩固了课本知识。6 .(倒推法参考,上面是一个相似这一题的题目),递归法是看课本之后写出来的,流程图、写入文件的程序都是自己完成的。