结果明显是错的。标准解答第一行少了cnt=0,sum=0,得到正确答案,这是为什么?

下列程序的功能是:选取出100以上1000以内所有个位数字与十位数字之和被10除所得余数恰是百位数字的素数(如293)。计算并输出上述这些素数的个数CNT以及这些素数值的和SUM。请编写函数COUNTvalue()实现程序要求,最后调用函数WRITEDAT()把结果CNT和SUM输出到文件OUT.DAT中.
注意:部分源程序已给出。
请勿改动主函数main()和函数readwriteDAT()的内容。 
#include <stdio.h>
int cnt, sum;
void countValue()
{
}
void writeDAT()
{
FILE *fp;
fp = fopen("out.dat", "w");
fprintf(fp, "%d\n%d\n", cnt, sum);
fclose(fp);
}
void main()
{
cnt = sum = 0;
countValue();
printf("素数的个数=%d\n", cnt);
printf("满足条件素数值的和=%d", sum);
writeDAT();
}
我的解答是:

int i, j, half, hun, ten, data,cnt=0,sum=0;
for (i=101; i<1000; i++)
{
hun = i/100;
ten = i%100/10;
data = i%10;
if (hun == (ten+data)%10)
{
half = i/2;
for (j=2; j<half; j++)
if (i%j == 0)
break;
if (j >= half)
{
cnt++; 
sum += i;
}
}
}
输出是:
素数的个数=0
满足条件素数值的和=0

肥皂起泡泡
浏览 79回答 2
2回答

慕仙森

int i, j, half, hun, ten, data,cnt=0,sum=0;&nbsp;你等于定义了一个新的cnt、sum,是局部变量,全局变量cnt、sum并未改变

智慧大石

你在countValue()函数中又定义了变量cnt,sum(与全局变量同名);这样就把全局变量cnt,sum给屏蔽掉了.你在countValue()中对cnt,sum的操作都是在操作你那个函数中的局部变量.而你在main函数中又是操作的全局变量.countValue()没有起到修改全局变量的作用.所以它的值还是0.
打开App,查看更多内容
随时随地看视频慕课网APP