下午上机的第一题就是改错题,16分,存在4个错误。你应该很容易的发现并改正3个错。
一、改错题(16分)
【程序功能】
验证3(n范围内的任意两个相邻素数的平方之间至少存在4个素数。例如,5和7是两个相邻素数,5^2(25)与7^2(49)之间存在6个素数:29 31 37 41 43 47。
【测试数据与运行结果】
显示:input n:
输入:10
输出:
3~5 k=5 11 13 17 19 23 5~7 k=6 29 31 37 41 43 47 |
【含有错误的源程序】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | #include<stdio.h> #include<math.h> int prime(int n) { int i,flag=1; for(i=1; i<=sqrt(n); i++) if(n%i==0)flag=0; return flag; } int fun(int a[],int n) { int i,k=0; for(i=3; i<=n; i++) if(prime(i)) a[k++]=i; return k; } void fun1(int m,int n, int b[]) { int i,k=0; if(m>n) return 0; for(i=m*m; i<n*n; i++) if(prime(i)) b[k++]=i; return k; } void main() { int a[50]= {0},b[100]= {0},i,m,k,j,n; printf("input n: "); scanf("%d",&n); m=fun(a,n); for(i=0; i<m-1; i++) { k=fun1(a[i],a[i+1],b[0]); printf("%d~%d k=%d",a[i],a[i+1],k); if(k<4) { printf("false"); break; } for(j=0; j<k; j++) { if (j%10=0) printf("\n"); printf("%5d",b[j]); } printf("\n"); } getch(); } |
【要求】
1.将上述程序录入到文件myf1.c中,根据题目要求及程序中语句之间的逻辑关系对程序中的错误进行修改。
2.改错时,可以修改语句中的一部分内容,调整语句次序,增加少量的变量说明或编译预处理命令,但不能增加其它语句,也不能删去整条语句。
3.改正后的源程序(文件名myf1.c)保存在T:盘根目录中供阅卷使用,否则不予评分。