1000以内的10个最大素数之和
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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程序设计有了总体的认识。