第一楼我写题目,第二楼我写我的解法。
要求写一个函数,
1:计算500到800之间的素数的个数;
2;对这些素数进行从大到小的排序;
3:间隙加减求最后的结果(如:80,40,60,70 应这么算:80-40+60-70)
其中有两个全局变量;cnt(素数的个数)sum(最后加减后的结果)
自认这程序不是太难,可是编好后,总是出问题还把模拟上机的机子搞死机了。
明天就要真正上机考试了。大家帮我看一下我出的问题:
#include "stdio.h" int cnt=0;int sum=0;
void voj() {int i,j,k,m=1; int xx[300]; for(i=500;i<800;i++) for(j=2;j<i;j++) if(i%j!=0) {xx[cnt]=i; cnt++;} for(i=0;i<cnt-1;i++) for(j=i+1;j<cnt;j++) if(xx[i]<xx[j]) {k=xx[i]; xx[i]=xx[j]; xx[j]=k; } for(i=0;i<cnt;i++) {m=m*(-1); sum=sum+xx[i]*m; } } main() { voj(); printf("500到800之间的素数的个数为:%d",cnt); printf("这些数的间隙加减的和为:%d",sum); getch(); }
#include <stdlib.h> #include <stdio.h>
/* DEFINES ********************/ #define BOOL unsigned int #define TRUE 1 #define FALSE 0
/* GLOBAL *********************/ int cnt = 0; int sum = 0;
/* MAIN ***********************/ void main() { int i,j; BOOL bIsPrime = TRUE; int nPrimeNums[150];
cnt = 0; sum = 0;
/* Step1 find out prime number */ for (i = 501; i < 800; i+=2) { bIsPrime = TRUE; for (j = 3; j <= (i >> 1); j++) { if (i % j == 0) { bIsPrime = FALSE; break; } }
/* find out */ if (bIsPrime) { /* Step2 save the number into array nPrimeNums[150]*/ nPrimeNums[cnt] = i;
/* Step3 calculate the sum */ if (cnt % 2 == 0) { sum += i; } else { sum -= i; }
/* Step4 count the number */ cnt++; } }
/* sort */ for (i = 0; i < (cnt >> 1); i++) { /* exchange */ nPrimeNums[i] = nPrimeNums[i] + nPrimeNums[cnt - 1 - i]; nPrimeNums[cnt - 1 - i] = nPrimeNums[i] - nPrimeNums[cnt - 1 - i]; nPrimeNums[i] = nPrimeNums[i] - nPrimeNums[cnt - 1 - i]; }
/* print the count */ printf("The count of Prime Numbers is: %d\n", cnt);
/* print the number array*/ printf("Prime Numbers are:\n"); for (i = 0; i < cnt; i++) { printf("%d ", nPrimeNums[i]); } printf("\n");
/* print the sum*/ printf("Sum is: %d\n", sum); system("pause");
}
[此贴子已经被作者于2004-09-18 18:56:53编辑过]
#include "stdio.h" #include"string.h"
int cnt=0; int sum=0;
void main() { void voj(); voj(); printf("500 to 800:%d",cnt); printf("sum:%d",sum); getchar(); }
void voj() { int i,j,k,m=1; int xx[300]; for(i=500;i<800;i++) { for(j=2;j<i;j++) { if(i%j==0)break; if(j==i-1) {xx[cnt]=i; cnt++;} } } for(i=0;i<cnt-1;i++) for(j=i+1;j<cnt;j++) if(xx[i]<xx[j]) {k=xx[i]; xx[i]=xx[j]; xx[j]=k; } for(i=0;i<cnt;i++) { m=m*(-1); sum=sum+xx[i]*m; } }
[此贴子已经被作者于2004-09-20 18:21:45编辑过]