三级C上机遇到的一个题目,for循环,不懂

来源:百度知道 编辑:UC知道 时间:2024/05/22 03:52:38
下列程序的功能是:选取出100以上1000以内所有个位数字与十位数字之和被10除所得余数
恰是百位数字的素数(如293)。计算并输出上述这些素数的个数CNT以及这些素数值的和
SUM。请编写函数COUNTvalue()实现程序要求,最后调用函数WRITEDAT()把结果CNT和
SUM输出到文件OUT.DAT中.

错误:
void countValue()
{
int i, j, half, hun, ten, data;
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;
}}
}
}
}

正确:
void countValue()
{
int i, j, half, hun, ten, data;
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 +=

加不加不一样。
从语法上来说,不加{},for作用域到第一个语句即break就结束了,加了{},for的作用域到},即if语句后结束。
从语义上来说,加了{}后,即使找到素数,也不会被统出来,因为统计功能部分的语句已经运行不到了。

(1) for (j=2; j<half; j++) 不加 for控制到这个break
if (i%j == 0) break;
(2) for (j=2; j<half; j++)
{ if (i%j == 0)
break;
if (j >= half) {
cnt++;
sum += i; 加了 就是控制到
这儿
}}