C++课程设计报告书- 编写程序精确计算100!的值_第1页
C++课程设计报告书- 编写程序精确计算100!的值_第2页
C++课程设计报告书- 编写程序精确计算100!的值_第3页
C++课程设计报告书- 编写程序精确计算100!的值_第4页
C++课程设计报告书- 编写程序精确计算100!的值_第5页
已阅读5页,还剩6页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

河北联合大学2012-2013第2学期《软件设计基础-C++》课程设计报告设计名称:编写程序精确计算100!的值姓名:学号:专业班级:学院:设计时间:设计地点:指导教师评语:教师评定教师评定:自评成绩:指导教师签字:年月日《软件设计基础-C++》课程设计报告第3页,共10页目录1.课程设计目的 32.课程设计任务与要求 33.课程设计说明书 44.课程设计成果 65.程序调试过程 76.设计问题的不足和改进方案 87.课程设计心得 98.参考文献 9

1.课程设计目的《软件设计基础-C++》课程设计是这门课程的实践性教学环节之一,本次设计结合实际应用的要求,使课程设计既覆盖C++的知识点,又接近工程实际需要。目的是通过课程设计的综合训练,培养学生实际分析问题、解决问题的能力,以及编程和动手能力,最终目标是通过课程设计这种形式,帮助学生系统掌握C++这门课程的主要内容,养成良好的编程习惯,更好的完成教学任务。2.课程设计任务与要求:要求:本次课程设计利用《软件设计基础-C++》课程中所学到的编程知识和编程技巧,完成具有一定难度和工作量的程序设计题目,帮助学生掌握编程、调试的基本技能,独立完成所布置的任务。要求:1、对系统进行功能需求分析2、设计合理的数据结构和系统框架3、编程简练,程序功能齐全,能正确运行4、说明书、流程图要清楚5、课题完成后必须按要求提交课程设计报告任务:问题描述:由于100!的结果不能够用C++中某种数据类型的变量进行精确的描述,因此需要采用一个大的数组,数组中每个元素存储一位数,这样一个非常大的数可以用一个大的数组来表示。问题的解决方案:根据问题描述,可以采用模拟人进行乘法的过程,进行计算100!的值。首先用一个大数组来描述一个小数1,然后让这个大数组所表示的数为这个大数组乘2的值;再让这个大数组所表示的数为这个大数组乘3的值;…依次类推,直到这个大数组所表示的数为这个大数组乘100的值。这样可求得100!的值。

3.课程设计说明书=1\*GB2⑴概要设计模块说明:在我的程序中主要有两个部分,分别是文件的写入与100阶乘的计算。在阶乘的计算中又使用了for循环嵌套外部循环是实现j的依次递增即相应阶乘中的一项,内部循环是通过模拟手工计算乘法过程来计算结果。最后又通过两个for循环来得结果。模块结构图:写入文件写入文件输入数据计算并输出结果结束=2\*GB2⑵详细设计开始打开开始打开/创建文件输入数据用for循环嵌套计算阶乘输出结果关闭文件结束各功能模块流程图:开始开始Ofstreamofs(“com.txt”,ios::trunc)写入文件的内容 ofs.close()结束图1写入文件流程图开始开始j=2;j<=n;j++i=0;i<N;i++s=a[i]*j+c;a[i]=s%10;c=s/10;for(i=N-1;i>=0;i--)//忽略前导零if(a[i])break;结束for(j=i;j>=0;j--)//倒序输出cout<<a[j];图2for循环嵌套求阶乘图4.课程设计成果#include<iostream>#defineN3000#include<cstring>#include<fstream>usingnamespacestd;inta[N];//定义数组intmain(){ ofstreamofs("com.txt",ios::trunc);//ios::trunc表示在打开文件前将文件清空,由于是写入,文件不存在则创建 if(!ofs) { cout<<"不能打开出文件"<<endl; return1; } intn,i,j,c,s; cin>>n; memset(a,0,sizeof(a));//数组清零 a[0]=1;//a[0]赋值为1 for(j=2;j<=n;j++)//乘以j { //开始阶乘,阶乘元素从2开始依次"登场" //按最基本的乘法运算思想来考虑,将临时结果的每位与阶乘元素相乘 c=0;//是否进位 for(i=0;i<N;i++) { s=a[i]*j+c;//相应阶乘中的一项与当前所得临时结果的某位//相乘(加上进位) a[i]=s%10;//更新临时结果的位上信息 c=s/10;//看是否有进位 } } for(i=N-1;i>=0;i--) if(a[i])break;//忽略前导零 for(j=i;j>=0;j--)//倒序输出 cout<<a[j]; ofs.close();//关闭文件}运行结果如下:5.程序调试过程步骤:1.输入数据100,输入完成后程序开始调用函数进行计算。2.100阶乘的计算是通过for循环嵌套来实现的,外部循环是实现j的依次递增即相应阶乘中的一项,内部循环是通过模拟手工计算乘法过程来计算结果,即由于100!的结果不能够用C++中某种数据类型的变量进行精确的描述,因此需要采用一个大的数组,数组的每一个元素表示一位十进制数字,高位在前,低位在后,这样一个非常大的数可以用一个大的数组来表示。以此模拟手工计算,例如:2234*8。我们将被乘数表示为一个数组A[],a[1],a[2],a[3],a[4]分别为2,2,3,4,a[0]置为0.Step1:从被乘数的个位a[4]起,取出一个数字4.Step2:与乘数8相乘,其积是两位数32,其个位数2作为结果的个位,存入a[4],十位数3存入进位c。Step3:取被乘数的上一位数字a[3]与乘数相乘,并加上上一步计算过程的进位C,得到27,将这个数的个位7作为结果的倒数第二位,存入a[3],十位数2存入进位c。Step4:重复Step3,取a[i](i依次为4,3,2,1)与乘数相乘并加上c,其个位仍存入a[i],十位数字存入c,直到i等于1为止。Step5:将最后一步的进位c作为积的最高位a[0]。3.在通过一个循环语句将大数组中的元素依照“从左至右,高位到低位”的顺序排列出来,最终在以循环语句进行顺序的颠倒得出结果。6.设计问题的不足和改进方案不足之处有二,一是没有运用相对好的递归函数,二是只有写入文件,没有读出文件改进方案:将程序改用递归函数来实现,进而优化程序;并用fstream来实现函数的读出,以实现以文件的形式保存计算过程。7.课程设计心得近一个月的课程设计结束了,感觉自己收获很大。这一个月的课程设计不仅是对我所学知识的检验,更是对我知识综合运用的实践。通过这次课程设计,我深深体会到“千里之行始于足下”这句千古名言的真正含义。只有平时努力学习,脚踏实地才能在应用的时候出彩!在课程设计过程中我也深深感受到了自己知识的匮乏,好多想法想去实现却又不知道方向,以致想法胎死腹中!但我也从中学会了好多,对于循环结构的应用变得得心应手了,也粗略涉及到了文件的有关知识。除此之外,我还学会了如何去把握一件事情,如何去做一件事情。做事之前要有准确的分析,这样会减少不必要的弯路,对于目标的实现起很大作用;做事的时候要有耐心,过程中寂寞、挫折不会少,只有耐得住性子才能成功。8.参考文献[1]

(美)

Bjarne

Stroustrup

著.

C++程序设计语言(特别版).

(

裘宗燕

).北京:

机械工业出版社,2002.125~188

[2]

何渝编

著.计算机常用数值算法与程序[M].北京:人民邮电出版社,20

温馨提示

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

评论

0/150

提交评论