1、 中南大学 本科生课程设计(实践)任务书、设计报告 (C++程序设计) 题 目 简单计算器设计 学生姓名 指导教师 学 院 专业班级 学生学号 计算机基础教学实验中心 2015年 6月 29日 题目 一 实验目的,内容 目的 1、使学生能够熟练地掌握C++语言的基本规则。 2、熟练掌握面向对象的程序设计技巧,如类的实现、创建类的实例、实现类的继承。 3、掌握各种面向对象的程序设计技术,如多态性的实现、运算符的重载、使用C++标准库等。 4、
2、学会分析错误并改正错误。
内容
1. 制作一个简易计算器,计算器的功能包括简单的加减乘除运算,以及乘方和开方稍微复杂的计算,另外还包括高级一点的三角函数计算。
此计算器还需要通过按钮来调用每个人的自选题,此次实践我选了两个题目,其中一个为第五题
计算分数的精确值(47)
使用数组精确计算M/N(0 3、析与算法设计
由于计算机字长的限制,常规的浮点运算都有精度限制,为了得到高精度的计算结果,就必须自行设计实现方法。
为了实现高精度的计算,可将商存放在一维数组中,数组的每个元素存放一位十进制数,即商的第一位存放在第一个元素中,商的第二位存放在第二个元素中….,依次类推。这样就可以使用数组不表示一个高精度的计算结果。
进行除法运算时可以模拟人的手工操作,即每次求出商的第一位后,将余数乘以10,再计算商的下一位,重复以上过程,当某次计算后的余数为0 时,表示M/N为有限不循环小数某次计算后的余数与前面的某个余数相同时,则M/N为无限循环小数,从该余数第一次出现之后所求得的各位数就是小数的循环 4、节。
另外一个主题为第十四题
14.验证歌德巴赫猜想(31)
验证:2000以内的正偶数都能够分解为两个素数之和(即验证歌德巴赫猜想对2000以内的正偶数成立)。
要求:输入要验证的正偶数的范围,输出符合歌德巴赫猜想的数,及其表示形式。
如输入:20 30
输出:
20=3+17
22=3+19
24=5+19
26=3+23
28=5+23
30=7+23
*问题分析与算法设计
为了验证歌德巴赫猜想对2000以内的正偶数都是成立的,要将整数分解为两部分,然后判断出分解出的两个整数是否均为素数。若是,则满足题意;否则重新进行分解和判断。
程序中对判断是否为素数的 5、算法进行了改进,对整数判断“用从2开始到该整数的一半”改为“2开始到该整数的平方根”。
下面我简单陈述我设计制作的过程
简单计算器的开发与设计
1,计算器开发设计思想
经过一个学期的C++学习我已经基本掌握了程序的设计原理与方法,这次事件旨在锻炼自己开发简单程序的能力,利用MFC工具操作,本次的设计我在页面上追求了排布工整简洁美感,程序代码上要求清晰化,以实现计算器的常用功能为目标,在一次次的实践中最后取得了成功,设计出了我的计算器。
2,计算器功能与设计介绍
我的计算器除了包含普通计算器加减乘除,进行三角函数的与平方开放等运算以外,还具备了两个进行特殊 6、计算的功能,一个是计算分数的精确值。
(1)计算分数的精确值:
设计这个程序的时候,程序要求的功能为:使用数组精确计算M/N(0 7、//a数组用于存放小数部分,b数组用于存放余数
int m = m_fenzi,i=0,s=0;
if(m > m_fenmu)
{//如果分子大于分母
s=m/m_fenmu; //得到整数部分
m=m%m_fenmu; //得到余数为分子
}
while(m!=0){
m=m*10;
a[i]=m/m_fenmu;
m=m%m_fenmu;
b[i]=m;
for(int h=0;h 8、
c.Format("起止位:%d, %d",h+1, i);
m_nuli = m_nuli+c;
m=0;
break;
}
}
i++;
}
CString c;
c.Format("%d",s);
m_qusi = m_qusi + c + ".";
for(int j=0;j 9、
UpdateData(FALSE);
(2)验证歌德巴赫猜想
int ee[1000];
int ww[1000];
int l=0;
int c[1000];
int z[1000];
for(int i=0,int m=0;i<=999;i++)
{
m=m+2;
z[i]=m;
}
for(int k=2,int g=1,int d=0;k<=1999;k++)
{
c[0]=2;
for(int j=2;j 10、 d=k;
else
break;
}
if(d!=0&&j==k)
{
c[g]=d;
g++;
}
}
for(int n=(m_num1/2-1);n>=(m_num1/2-1)&&n<=(m_num2/2-1);n++)
{
int p;
for(int e=0;e<302;e++)
{
int w=0;
p=z[n]-c[e];
while(p!=c[w]&&w<302)
w++;
if(w!=302&&p<=z[n]/2)
{
e 11、e[l]=c[e],ww[l]=c[w];
l++;
break;
}
}
}
CString str[1000];
for(int ii=(m_num1/2-1);ii<=(m_num2/2-1);ii++)
{
str[ii].Format(" %i,\r\n",z[ii]); m_shu+=str[ii];
}
UpdateData(FALSE);
CString str1[1000];
for(int iii=0;iii 12、r\n",ee[iii]); m_jieguo+=str1[iii];
}
UpdateData(FALSE);
// TODO: Add your control notification handler code here
CString str2[1000];
for(int iiii=0;iiii 13、
3,除此之外我还在同学的帮助下完善了计算器的欢迎界面,和增加了菜单项,使得计算器的界面更加完善,更加美观。
4,计算器开发的体会
在开发计算机中,一开始因为人品太差遇到了很多乱七八糟的问题,比如代码检测完全没有任何问题却无法成功建立程序,之后又因为头脑混乱一不小心把代码改的乱七八糟等等,但是经过不懈的努力和向C++大神们的求助,最后磕磕绊绊的完成了所有的设计,自己也感觉受益匪浅。在设计过程中出现那么多的问题一度想重做,后来经过仔细的排查最终解决的问题。通过这一次设计,我知道了要开发一个程序,需要有计划,需要有设计的章法,需要有大量的基础知识作为工具,但过程中最重要的还是自己的意志和信心才能帮助自己克服这么多的困难,这将对以后的学习生活与社会实践工作产生非常积极的影响。在C++实践过程中,这些题目涉及了很多我们没有掌握 甚至是没有学过的知识,在完成这些题的过程中我使用了最基本的类,循环,选择等结构,也自学并且掌握使用了链表和文件流,总的说来,这次C++实践不仅巩固了我所学的知识,并且锻炼我的自学能力,让我自己能有一个平台去自学并摸索C++的使用,增强了我的分析以及逻辑能力,让我有了自主编写C++程序的能力,让我受益匪浅。






