分类: C/C++
2011-09-12 22:54:02
题目:程序test.c的功能是:选出大于100小于1000的所有的个位数字与十位数字之和被10除所得的余数恰是百位数字的所有素数(如293)。计算并输出上述这些素数的个数cnt以及这些素数的值的和sum。
程序1如下:
#include
int cnt, sum;
void writeDAT();
int isP(int num)
{
int i;
for(i = 2; i < num / 2; i++)
if(num % i == 0)
return 0;
return 1;
}
void countValue()
{
int j,bw,sw,gw;
for(j=100;j<1000;j++)
{
if(isP(j))
{
bw=j/100;
sw=(j-bw*100)/10;
gw=j%10;
if((gw+sw)%10==bw)
{
cnt=cnt+1;
sum=sum+j;
}
}
}
}
void main()
{
cnt = sum = 0;
countValue();
printf("素数的个数=%d\n", cnt);
printf("满足条件素数值的和=%d", sum);
writeDAT();
}
void writeDAT()
{
FILE *fp;
fp = fopen("out.dat", "w");
fprintf(fp, "%d\n%d\n", cnt, sum);
fclose(fp);
}
运行结果如下:
素数的个数=15
满足条件的素数值的和=6825Press any key to continue
但是在编程的过程中又一次不小心把那个括号给删除了程序变成如下所示:
程序2如下:
#include
int cnt, sum;
void writeDAT();
int isP(int num)
{
int i;
for(i = 2; i < num / 2; i++)
if(num % i == 0)
return 0;
return 1;
}
void countValue()
{
int j,bw,sw,gw;
for(j=100;j<1000;j++)
{
if(isP(j))
bw=j/100;
sw=(j-bw*100)/10;
gw=j%10;
if((gw+sw)%10==bw)
{
cnt=cnt+1;
sum=sum+j;
}
}
}
void main()
{
cnt = sum = 0;
countValue();
printf("素数的个数=%d\n", cnt);
printf("满足条件素数值的和=%d", sum);
writeDAT();
}
void writeDAT()
{
FILE *fp;
fp = fopen("out.dat", "w");
fprintf(fp, "%d\n%d\n", cnt, sum);
fclose(fp);
}
这次运行的结果如下:
素数的个数=91
满足条件的素数的和=49662Press any key to continue
两个程序其中程序1正确的,现在很疑惑为什么少一个循环就变成错误的了???