"c语言程序设计实践报告"
本报告旨在通过编程实践,熟练掌握 C 语言的基本语法和算法思维,掌握 if、if…else、if…else if 语句和 switch 语句的格式及使用方法,并且掌握 while 语句、do…while 语句和 for 语句的格式及使用方法。
一、实验名称
计算出 1000 以内 10 个最大素数之和
二、实验目的
1. 熟练掌握 if、if…else、if…else if 语句和 switch 语句的格式及使用方法,掌握 if 语句中的嵌套关系和匹配原则,利用 if 语句和 switch 语句实现分支选择结构。
2. 熟练掌握 while 语句、do…while 语句和 for 语句的格式及使用方法,掌握三种循环控制语句的循环过程以及循环结构的嵌套,利用循环语句实现循环结构。
3. 掌握简单、常用的算法,并在编程过程中体验各种算法的编程技巧。进一步学习调试程序,掌握语法错误和逻辑错误的检查方法。
三、实验内容
计算并输出 1000 以内最大的 10 个素数以及它们的和。
四、要求
在程序内部加必要的注释。由于偶数不是素数,可以不考虑对偶数的处理。学习文档仅供参考。虽然在 1000 以内的素数超过 10 个,但是要对 1000以内不够 10 个素数的情况进行处理。输出形式为:素数 1+素数 2+素数 3+…+素数 10=总和值。
五、算法描述流程图
Main 函数:
判断素数:
源程序
#include
#include
int sushu(int n)/* 判断素数的函数 */
{
int t,i;
t=sqrt(n);
for(i=2;i<=t;i++)
{
if(n%i==0)/* 如果不是素数,返回 0*/
return 0;
}
return n;/* 如果是素数,返回该数 */
}
void main()
{
int i,j=0,n,m=0,a,x;
/*clrscr();*/
printf("Please input a number form 1 to1000:");
scanf("%d",&x);
if(x==2)/* x=2 时的处理 */
printf("%d\n",x);
else if(x>1000)
printf("Error!\n");
else
{
if(x%2==0)/* x 为偶数时,把 x 变为奇数 */
x--;
for(i=x;i>1;i-=2)/* x 为奇数时,做函数计算 */
{
n=sushu(i); /* 做判断素数的函数调用 */
if(n!=0)/* 对素数的处理 */
{
a=n;/* 把素数由大至小存入数组 a 中 */
j++;
if(j<=10)
m+=n; /* 统计前 10 个素数之和 */
}
}
if(j<=10)
{
for(i=0;i<j;i++)
{
n=a;
printf("%d",n);
printf("+");
}
printf("=");
printf("%d\n",m+2);
}
else for(i=0;i<j;i++)
{
n=a;
printf("%d",n);
if(i<j-1)
printf("+");
else
{
printf("=");
printf("%d\n",m);
}
}
}
}
测试数据
分别输入 1000、100、10 测试。
六、运行结果
七、出现问题及解决方法
当素数个数小于 10 时的处理不够完善,考虑不够周全。把“+2”的处理做的太勉强。程序过大,不够精简,无用文字太多。学习耐心与细心不足,如 scanf(“%d”,&n);中的“&”经常忘记。编程思想不够发散,例如如何判断素数,只能想出 2种方式(其中 1 种为参考教科书上内容);在今后学习中应更学习多的动脑,综合运用所学。基本功不够,如清屏 clrscr()等函数用的不好,有时同样的问题多次犯,给实验课老师带来很大的麻烦。这说明我的知识不够广,有很多有用但不做考试要求的书中内容没有学好,认识程度不够深刻。就算以后 C 语言这门课程结束后,也应多看相关东西,多上机练习,才能真正从本质上提高自己。
八、实验心得
通过本次 C 语言上机实验,我对这个介于人类与非人类之间的电脑编程语言有了一定的体验。其间开心过、郁闷过、无奈过、彷徨过……随着实验的胜利成功与实验报告的胜利完成,有点微微的自豪感使人难忘。感谢高克宁老师的高标准、严要求,感谢实验课上小老师们的耐心指点,也感谢我在实验中经历过的点点滴滴……伴随着学习学习文档仅供参考的深入,我发现高深的东西还有很多很多,等待着我自己去挖掘。对 C 语言,我会更加努力,继续学习和实践,提高自己的编程能力和解决问题的能力。