1.实验代码(判断素数)
#include<stdio.h> #include<math.h> int main(void) { int x,i,n,j; scanf("%d",&n); while(n--){ scanf("%d",&x); j=1; for(i=2;i<=sqrt(x);i++){ if(x%i==0){ j=0; break; } } if(j==0||x==1) printf("No "); else printf("Yes "); } return 0; }
2 设计思路
第一步:设置第一个循环,输入的n值控制循环次数用于输入需要判断得值。
第二步:在循环中设计判断素数的算法,主要用的循环,如果循环没执行完就跳出循环,则该数不为素数,否则则为素数。
(2)流程图
3.本题调试过程碰到问题及解决办法
出现问题:程序本身的设计思路并没有太大问题,问题出现在pta中给出运行超时。自己分析题目中的各个步骤,发现可能是循环的次数过多!应该有可以让内层循环判断素数时循环不那么多的办法。最后根据素数本身的特别之处考虑到对该数求根,只要改变循环控制变量中的i<=sqrt(x),在加入数学函数,该程序就不会运行超时了!
1.实验代码(交换最小值和最大值)
#include<stdio.h> int main(void) { int n,i,max,min,c,a[10],d,e; scanf("%d",&n); for(i=0;i<n;i++){ scanf("%d",&a[i]); } max=min=a[0]; for(i=0;i<n;i++){ if(a[i]<=min){ min=a[i]; c=i; } } d=a[0]; a[0]=min; a[c]=d; for(i=0;i<n;i++){ if(a[i]>=max){ max=a[i]; c=i; } } e=max; a[c]=a[n-1]; a[n-1]=e; for(i=0;i<n;i++) printf("%d ",a[i]); return 0; }
2 设计思路
第一步:考虑到该程序为一组数据,所以优先使用数组解决问题会更方便,首先设置循环给数组中的每个做赋值。
第二部:在不知道最大值与最小值的情况下,假设max与min作为下表都为0,也就是数组中第一个为最大值和最小值,运用循环做判断,如果数组中下一个大于max则,记录下表,并把值赋值过去。同样的方法找到最大值和最小值。并记下最大值和最小值的下表。
第三部:根据找到的最大值和最小值和已经保存的下表进行位置调换即可。
(2)流程图
3.本题调试过程碰到问题及解决办法
错误分析:首先程序的基本思路我很清晰,觉得没什么问题,我把pta中给的数据运行程序,发现最小值做交换的时候,最小值的确时在a[0]的位置但是原来最小值的位置仍为原来的值,并且初始第一个值没有保留。导致该程序错误,没有达到位置互换的目的,在处理位置互换是忘记把a[0]原值做保存然后再赋值给交换过来的那个值。
二、总结和学习进度条
1、总结这几周所学内容、遇到的问题以及解决方法。
第十七周我们主要学习了二维数组,还有字符数组。在二维数组的学习中,我对于行列的交换还有各种行列间的关系掌握的不是很好,因为课上讲的比较快,自己也似懂非懂,大概只掌握了百分之七十。课下在对书上代码反复琢磨之后算是有了很大的提高,不是那种一头雾水了!对于字符数字接受起来比较简单,因为和一维数组差不多!除了字符数组中涉及字符串的特别之处,觉得很好掌握,没有什么难以理解的地方,关键还是熟练掌握,运用于自己的编程中去把!
2、点评3个同学的本周作业
3、请用表格和折线图呈现你这几周的代码行数和时间、博客字数和时间、涉及的知识点。