河北工业大学计算机软件基础(vc)
学院:电气信息类班级:电信c1124 姓名:李悠学号:110706 一,题目:查找满足要求的素数
二,设计思路
1,总体设计
(1)分析程序的功能,用来判断整数d是否为素数,任意输入一个数d,判断是否为可逆素数,如果皆为素数的话,该数d
为可逆素数,在d为可逆素数的基础上xd=d+1为偶数,找
出满足xd=d1+d2的所有数时,其中要求d1与d2均为素数(2)系统总体的机构
每一次查找的过程可以由这几部分完成,编制函数void prim()用筛选法求素数,编制函数void compose(in d)将一个数分解为两个素数的形式,编制主函数int main()将输入的数值设置为字符型。
正序赋值给整数得到数值n,当输入的不是数值时提示重复输入直到纠正为止,然后将整数逆序得到m,先判断n是否为素数输出不是素数,若为素数再判断m是否为素数,若都为素数将n+1分解成两个素数
每一次查找关注的结果有三个:(1)是否输入的为数字,若不
是反复输入直到输入的是数字为止,(2)是否为素数(3)是否为可逆素数(4)将素数分解成两个素数相加的形式并输出结果2各功能模块的设计:说明各功能模块的实现方法
(1)prim模块
该函数没有返回值所以函数类型为void型,要实现的功能是用筛选法求出素数,将数组中下,标为0和1的元素设置为0,下标为n-2的元素设置为1,然后从下标为2的元素开始查找当发现当前位置的数组元素为1时,将下标是当前下标的2倍3倍……的那些元素全部设置为0。
重复(2)直到考查了数组全部元素,那些值依旧为1的元素下标都是素数,数组元素的值为1是素数,为0不是素数
(2)compose模块
该函数没有返回值,所以函数类型为void型,要实现的功能是将一个数分解为两个素数,通过判断条件prim【i】是否1来判断分解的数是否为素数,最后找出满足条件的数对(3)m ain函数
将输入的数值设置为字符型,当输入的是数值时正序赋值给整数得到数值n,当输入的不是数值时提示重复输入直到正确为止,然后将整数逆序得到m,通过判断prim【n】的值判断n 是否为素数,若为0则输出结果n不是素数,若为1则输出结果为素数。
然后判断prim【m】的值,若为1输出它且是可逆素数,并调用函数compose进行素数分解,若prim【m】的值
为0输出且它不是可逆素数。
3创新设计部分
通过循环执行程序,若退出输入0,若选择继续则可进行其他数的可逆素数判断。
因此该程序有运行且多次输入的功能。
使用for循环输入数值,若不是字符型的推出本次循环进入下次循环直到输入正确为止。
4设计中的主要困难和解决方法
将输入的任意数值进行可逆转换,可以将输入的数值设置为字
符型,通过判断字符的长度决定数值的大小,并将字符正序及
逆序赋值给整数得到n及其逆序数值
5设计的程序最终完成的功能
(1)任意输入一个数,判断其是否为可逆素数,如果皆为素数的话,该数为可逆素数,在为可逆素数的基础上xd=d+1为偶数,找出满足d=d1+d2的所有数对,其中要求d1与d2均为素数
(2)准备的测试数据及运行结果
三程序清单
(1)main函数
int main()
{
int n,m;
char tmp[20];
Prim();
cout<<"请输入一个数字(在1到10000000之间),本程序将判断其是否为素数。
输入数字0结束程序\n"<<endl;
while(cin>>tmp)
{
int isend=0,re=0;
n=m=0;
for(int i=0;tmp[i];i++)
{
if(tmp[i]>='0'&&tmp[i]<='9')
n=n*10+(tmp[i]-'0');
else
{
cout<<"输入有误!!请输入数字!!"<<endl;
re=1;
break;
}
}
if(re)
continue;
if(n==0)
{
cout<<"程序运行结束"<<endl;
break;
}
int tmp=n;
while(tmp)//求逆序数
{
int a=tmp%10;
tmp=tmp/10;
m=m*10+a;
}
if(!prim[n])
{
cout<<n<<"是素数!!"<<endl;
if(!prim[m])
{
cout<<"且它是可逆素数"<<endl;
Compose(n+1);//素数分解
}
else
cout<<"且它不是可逆素数"<<endl;
}
else
cout<<n<<"不是素数!!"<<endl;
}
}
(2)prim函数
void Prim()//筛选法求素数表
{
for(int i=2;i*i<max;i++){
if(!prim[i])
for(int j=i*i;j<max;j+=i)
prim[j]=1;
}
prim[1]=1;
}
(4)c ompose函数
void Compose(int d)
{
for(int i=2;i<=d/2;i++)
{
if(!prim[i]&&!prim[d-i])
cout<<d<<"="<<i<<"+"<<d-i<<endl;
}
}
四对设计题目有何更完善的方案
1,对自己完成程序进行自我评价:我的程序较好的完成了任务只中规定的设计内容,并完成了创新要求的设计,运行正确。
2,对课题提出更完善的方案:在显示结果的时候考虑用ASCLL 码绘图的方式显示,并加上控制使得程序获得更高地友好度和吸引力。
五收获和心得体会
通过一周的课程设计我体会到c++是与现代社会息息相关的学科,它能高效快捷地帮助人们解决问题并可用于科学研究但做好程序设计需要严谨的态度和丰富的c++知识储备,并需要严密的思维通过c++课程设计了解了c++所涉及到的学科领域的广泛,学好c++会为以后的学习和生活带来方便
2012年6月29日。