1000以内的10个最大素数之和

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C语言程序设计实验报告

实验名称输出1000以内10个最大素数之和

学院专业班级

姓名学号

任课教师实验时间

1 实验目的:

1、熟练掌握if、if…else、if…else if语句和witch语句格式及使用方法,掌握if语句中的嵌套关系和匹配原则,利用if语句和switch语句实现分支选择结构。

2、熟练掌握while语句、do…while语句和for语句格式及使用方法,掌握三种循环控制语句的循环过程以及循环结构的嵌套,利用循环语句实现循环结构。

3、掌握简单、常用的算法,并在编程过程中体验各种算法的编程技巧。进一步学习调试程序,掌握语法错误和逻辑错误的检查方法。

2 实验内容:

输出1000以内最大的10个素数以及它们的和。

要求:

①由于偶数不是素数,可以不对偶数进行处理;

②输出形式为:素数1+素数2+素数3+…+素数10=总和值。

3 算法描述流程图

开始

变量声明n,sum=0

输入a

A=2 ? 输出a

A=素数

a>2?

A--

输出a Sum+=a,A=a-2

赋初值n=1 A>2&&n<=9 a 是素数 Sum=sum+a,n++

以+a 形式输出a A=a-2 n<9=?

Sum+=2

输出:sum+2

输出sum 值

4 源程序

#include

#include

int sushu(int a) /*判断素数的函数*/

{

int i,k;

k=sqrt(a);

for(i=2;i<=k;i++)

if(a%i==0) /*如果不是素数返回0*/

return 0;

return 1; /*如果是素数返回1*/

}

main()

{

int a,n,sum;sum=0;

printf("\ninput a number:"); /*在此输入1000*/

scanf("%d",&a);

if(a==2) /*a=2时的处理*/

printf("%d=%d",a,a);

if(a>2)

{

while(sushu(a)==0&&a>2) /*当a为偶数时,把a变为奇数处理*/ a--;

printf("%d",a);

sum=sum+a;

a=a-2;

for(n=1;a>2&&n<=9;) /*a为奇数时,做函数计算*/

{

if(sushu(a)==1)

{

sum=sum+a;

printf("+%d",a); /*把素数由大到小累加输出*/

n++;

};

a=a-2;

}

if(n<=9)

{

sum=sum+2;

printf("+2=%d",sum); /*统计前10个素数之和*/

}

if(n>=10)

printf("=%d\n",sum); /*当输出素数个数等于10时,结果输出*/ };

}

5 测试数据

分别输入1000、100、10测试。

6 运行结果

当测试数据为1000时

当测试数据为100时

当测试数据为10时

7 出现问题及解决方法

当素数个数小于10时的处理不够完善,考虑不够周全。把“+2”的处理做的太勉强。

程序过大,不够精简,无用文字太多。

学习耐心与细心不足,如scanf(“%d”,&n);中的“&”经常忘记。

编程思想不够发散,例如如何判断素数,只能想出2种方式(其中1种为参考教科书上内容);在今后学习中应更多的动脑,综合运用所学。

基本功不够,有时同样的问题多次犯,给实验·实验报告格式·实验报告模板知识不够广泛,如VC++6.0等程序,自己试了好一阵也不会用;说明我电脑水平还是不够,自学能力不够。已会的东西掌握的还是不够好。

8 实验心得

通过本次实验,我对这个介于人类与非人类之间的计算机编程语言有了一定的体验。伴随着学习的深入,我发现高深的东西还有很多很多,等待着我自己去挖掘。对C语言,我会更加努力。同时,我对分支(if,if``else,if```else if```)和循环结构(for,while,do```while)的几种用法更加熟练,并掌握了函数的定义与调用,参数说明以及返回值使用。并对C程序设计有了总体的认识。

相关文档
最新文档