查找满足要求的素数c++课程设计

合集下载

c语言课程设计-素数探求

c语言课程设计-素数探求

C语言课程设计学院班级设计人 __ 成绩 ____一、题目:素数探求二、目的与要求1.目的:(1)培养学生综合利用C语言进行程序设计的能力;(2)熟悉函数设计、循环的控制方法及测试方法,理解模块化程序设计的优点和意义。

2.基本要求:(1)要求用C编程语言实现算法,完成程序的设计,在VC++6.0 开发环境运行算法;(2)用多个函数实现;(3)源代码程序要求必要的注释。

3.创新要求在基本要求达到后,可以进行创新设计,如优化人机界面、将输出结果存放在文件里等。

4.书写设计报告的要求课程设计报告1)课程设计题目、内容、要求。

2)总体设计(包含几大功能模块)。

3)详细设计(各功能模块的具体实现算法——流程图)4)数据结构设计描述,各模块(函数)的功能介绍,参数说明等。

5)调试分析(包含各模块的测试用例,及测试结果。

)6)总结(课程设计完成了哪些功能,还有哪些地方需要改进,及通过课程设计有何收获,调试程序的体会等)三、设计方法和基本原理1.问题描述:从键盘任意输入一个整数m:(1)若m不是素数,则对m进行质因数分解,并将m以质因数从小到大的顺序排列的乘积形式输出;否则输出“m 是质数!”。

例如:用户输入90,则程序输出为2*3*3*5。

(2)若m是素数,则按降序输出小于m的所有素数。

2.问题的解决方案:根据问题的描述,可以按照要求的功能采用结构化的设计思想。

四、主要技术问题的描述根据以上的分析,主要解决的技术问题在于:素数的判断,单独用一个函数完成;两个问题分别用两个函数完成。

设计程序:#include "stdio.h"int isprime(int);void f1(int);void f2(int); /*函数说明语句*//*************************主函数***************************/main(){int m;printf("从键盘任意输入一个整数m:\n");scanf("%d",&m);if(isprime(m)){printf("%d是素数\n",m);f1(m);}else{printf("%d不是素数\n可以进行质因数分解如下:\n",m);f2(m);}}/******************定义函数判断是否为素数******************/int isprime(int a){int i;for(i=2;i<=a/2;i++)if(a%i==0) return 0; /*a若能被某个数整除,即不是素数,返回0*/ return 1; /*a不能被2到a/2的任意数整除,返回1*/}/****************定义函数输出小于m的所有素数***************/ void f1(int b){int i;printf("小于%d的素数有: \n",b);for(i=b-1;i>=2;i--){if(isprime(i))printf("%d ",i);}printf("\n");}/**************定义函数对m进行质因数分解*******************/ void f2(int n){int i;for(i=2;i<=n;i++)while(n!=i){if(n%i==0){printf("%d*",i);n=n/i;}elsebreak;}printf("%d",n);printf("\n");}。

判断素数的C语言程序.docx

判断素数的C语言程序.docx

判断素数的C语言程序.docx素数是指只能被1和本身整除的整数,例如2、3、5、7、11等都是素数。

在编程中,判断一个数是否为素数是一个常见的问题。

下面我们来介绍一下如何用C语言来编写一个判断素数的程序。

判断方法判断一个数n是否为素数,可以采用以下方法:1. 如果n小于2,则n不是素数,直接返回false。

4. 如果n大于2,且为奇数,则从3到sqrt(n)依次判断n是否能被整除,如果可以则n不是素数,直接返回false,如果循环结束后n还未被整除,则n是素数,返回true。

根据上面的方法,我们就可以开始编写判断素数的C语言程序了。

代码实现```c#include <stdio.h>#include <math.h>bool is_prime(int n){if(n < 2){ //1.如果n小于2,则n不是素数,直接返回false。

return false;}if(n == 2){ //2.如果n等于2,则n是素数,直接返回true。

return true;}if(n % 2 == 0){ //3.如果n大于2,且为偶数,则n不是素数,直接返回false。

return false;}int limit = sqrt(n); //计算sqrt(n)for(int i = 3; i <= limit; i += 2){ //从3开始循环到sqrt(n)if(n % i == 0){ //如果n能够被i整除,则n不是素数,直接返回false。

return false;}}return true; //循环结束后n还未被整除,则n是素数,返回true。

}代码解析代码中首先包含了两个头文件,分别是stdio.h和math.h。

其中stdio.h是C语言标准输入输出头文件,math.h是C语言标准数学头文件,用于包含sqrt函数,可以用来计算平方根,即sqrt(n)。

接下来是一个is_prime函数,该函数传入一个n参数,用于判断n是否为素数。

C程序设计-求100以内所有素数

C程序设计-求100以内所有素数

C程序设计-求100以内所有素数1、提示:素数又叫质数,指只能被1和自己本身整出的自然数(1和0即非质数又非合数)方法一:#include#includevoid main(){int number = 2;int i;for(number ; number<=100; number++){ //1号for循环for ( i=2; i<=sqrt(number); i++){ //2号for循环if (number%i == 0){break;}}if (i>sqrt(number)) { //如果2号for循环结束时,if语句从来没执行,那么i的值肯定大于sqrt(number),所以用这个表达式来判断是否为素数printf("%d\n",number);}}}方法二(笨,但却很容易理解的方法,设置标志变量flag)#include#includevoid main(){int number = 2;int i;char flag = 0;for(number ; number<=100; number++){flag = 1;for ( i=2; i<=sqrt(number); i++){if (number%i == 0){flag = 0; //用标志变量来判断for循环是否成功进入if语句break;}}if (flag == 1) {printf("%d\n",number);}}}2、这里用到了sqrt()函数,sqrt的全称是squre root 即平方根,使用时别忘了引入头文件#include<math.h>3、求100以内的素数,再判断某数n是否为素数时,不需要从2一直除到n,只需要从2除到sqrt(n)【注意sqrt(n)也要判断】即可。

C语言实现素数

C语言实现素数
c语言实现素数 判断一个数是否是素数:#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) intnum,j; printf("请输入一个整数:\n"); scanf("%d",&amp;num); for(j=0;j<num;j++) printf("no\n");break; }else system("pause");return判断100-1000之间的素数: #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) intnum,j; num=100; for(num;num<=1000;num++) printf("%d",num);break; }else system("pause");return #include<stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) intnum,j; printf("请输入一个整数:"); scanf("%d",&amp;num); boo1 flag=true; for(j=2;j<num;j++) flag=false;break; system("pause");return #include<stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) inti,num,j; char answer; do{ int flag=1; printf("请输入一个整数"); scanf("%d", &amp;num); for(j=2;j<num;j++){ if(num%j==0) flag=0;break; continue(y/n)?");scanf(" %c",&amp;answer); }while(answer==?y?||answer==?y?); system("pause"); return #include<stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) inta[10]; int printf("请输入第%d个数:",a[i]); scanf("%d",&

c++,判断一个整数是否为素数用函数完成

c++,判断一个整数是否为素数用函数完成
cout<<"第"<<k<<"位为"<<digit[k-1]<<endl;
return 0;
}
教材3.7
#include<iostream>
#include<cmath>
using namespace std;
bool prime(int m){
if(m==1||m==0) return false;
return(a/b);
}
double Calculate(double a,double b,char c){
switch(c){ case'+':d=add(a,b);return d;
case'-':d=minus(a,b);return d;
case'*':d=muliti(a,b);return d;
实验七
一、实验内容
教材3.5设计函数digit(num,k),返回整数num从右边开始的第k位数字的值。例如:
digit(4647,3)=6
digit(23523,7)=0
教材3.7歌德巴赫猜想指出:任何一个充分大的偶数都可以表示为两个素数和。例如:4=2+2 6=3+3 8=3+5 … … 50=3+47将4.50之间的所有偶数用两个素数之和表示。判断一个整数是否为素数用函数完成。
教程例3设计一个简单的计算器程序,从键盘输入“+3 5”代表表达式“3+5”,程序读入运算符和数据,调用Calculate()函数,根据运算符进行加、减、乘、除四则运算。要求能反复执行这一过程,直到用户输入“#”符号作为运算符为止。

案例寻找素数.ppt

案例寻找素数.ppt
注:只能使用在switch语句或循环体语句中。
continue; 只结束本层本次循环,并不跳出循环。
【项目七
寻找素数】
算法
algorithm
x%7==0
Y
输出x
N
x++
continue
【项目七
寻找素数】
例3.20 输出100以内能被7整除的数。
main( ) { int n; for(n=7;n<=100;n++)
loop: if(getchar()!='\n')
{ n++;
goto loop;
}
printf("%d",n);
}
【项目七
寻找素数】
小结
重点 1. for语句的嵌套使用
掌握 2. break、continue、goto语句的功能和使用
【项目七
寻找素数】
课后任务
复习教材第三章 完成第三章课后习题
【项目七
寻找素数】
#include"math.h"
main( ) { int x,i,k;
printf(“2\t"); for(x=3;x<=100;x+=2)
{ k=sqrt(x);
for(i=2;i<=k;i++)
if(x%i==0) break; if(x>k) printf("%2d\t",n);
{ if (n%7!=0) continue;
printf(“%d ”,n);
}
}
【项目七
寻找素数】
goto语句
goto 语句标号 ;

c语言课程设计素数问题

c语言课程设计素数问题

c语言课程设计素数问题一、教学目标本课程旨在通过C语言编程,让学生掌握素数问题的算法设计与实现。

具体目标如下:1.理解素数的基本概念。

2.掌握素数生成算法。

3.理解素数在计算机科学中的应用。

4.能够使用C语言编写简单的素数生成程序。

5.能够对已有的素数生成算法进行分析和改进。

情感态度价值观目标:1.培养学生对数学和计算机科学的兴趣。

2.培养学生独立思考和解决问题的能力。

二、教学内容1.素数的概念和性质。

2.素数生成算法介绍。

3.C语言编程基础。

4.素数问题的C语言实现。

5.素数生成算法的改进和优化。

6.C语言基础知识(第一章)。

7.素数的概念和性质(第二章)。

8.素数生成算法介绍(第三章)。

9.素数问题的C语言实现(第四章)。

10.素数生成算法的改进和优化(第五章)。

三、教学方法针对不同的教学内容,采用多种教学方法,如讲授法、案例分析法、实验法等。

1.素数的概念和性质:采用讲授法,通过讲解和示例让学生理解素数的基本概念和性质。

2.素数生成算法介绍:采用案例分析法,通过分析已有的素数生成算法,让学生理解其原理和优缺点。

3.C语言编程基础:采用实验法,让学生动手编写C语言程序,掌握C语言的基本语法和编程技巧。

4.素数问题的C语言实现:采用项目驱动法,让学生独立完成素数生成程序的设计和实现。

5.素数生成算法的改进和优化:采用讨论法,让学生分组讨论和分析不同算法的优劣,并提出改进和优化的方案。

四、教学资源1.教材:《C语言程序设计》。

2.参考书:《C语言编程思想》。

3.多媒体资料:教学PPT、视频教程。

4.实验设备:计算机。

以上教学资源将贯穿整个教学过程,为学生提供丰富的学习材料和实践机会。

五、教学评估本课程的教学评估将采用多元化评价方式,全面客观地评估学生的学习成果。

具体评估方式如下:1.平时表现:通过课堂参与、提问、讨论等方式评估学生的学习态度和积极性。

2.作业:布置适量的编程作业,评估学生的编程能力和对知识的掌握程度。

根据素数的定义求解100以内的素数

根据素数的定义求解100以内的素数
}
int main()
{
int i,k,a[SIZE/2];
k=primel(a,SIZE);/*调用函数*/
printf("\n");
for(i=0;i<k-1;i++)
{
printf("%-4d",a[i]);/*输出数组a中的素数*/
}
return 0;
}
在学这个算法的时候,我有一处不太能理解:就是代码中黄颜色标注出来的部分。为啥判断一个数是不是素数时,只用比较到这个数的平方根就行。后来通过查资料发现,当一个数不能被从2开始直到自身开根号为止这个范围内的整数整除,那它就是素数。这个公理是数学上的证明,应用到算法上极大的提高了算法的效率。所以数学真的是很重要丫,要努力的把数学学得更好。
for(j=i+1;j<=n;j++)
if(a[i]!=0&&a[j]%a[i]==0)/*循环比较能否被当前数整除,若能就将值设为0*/
a[j]=0;
}
int main()
{
int i,a[SIZE+1];
prime(a,SIZE);/*调用函数*/
printf("\n");
for(i=Βιβλιοθήκη ;i<=SIZE;i++)
{
flag=1;
for(j=2;j<=sqrt(i)&&flag;j++)/* j从2到根号i循环,同时标志变量也控制循环*/
if(i%j==0)
flag=0;/*当有能整除的数时,就把标志变量的值改为0,控制循环结束*/
if(flag==1)
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

河北工业大学计算机软件基础(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日。

相关文档
最新文档