我想计算1到10之间素数的平均值,我写了一个程序如下:
#include <stdio.h>
int main()
{
int i, j, sum = 0, count = 0;
loop1:
for(i = 2; i <= 10; i++)
{
for(j = i - 1; j > 1; j--)
{
if(i % j == 0)
{
goto loop1;
}
}
sum = sum + i;
count++;
}
printf("The avg:%d", (sum / count));
return 0;
}
请帮助我该程序是否正确。
答案 0 :(得分:2)
简单回答:
#include <stdio.h>
int main() {
float sum = 0, count = 0, average;
for(int i=2; i<11; i++){
for(int j=2; j<=i; j++){
if(j==i){
sum+=i;
count++;
}else if(i%j==0){
break;
}
}
}
average=sum/count;
printf("Average = %.2f", average);
return 0;
}
答案 1 :(得分:0)
“正确”是什么意思?
如果对你来说是正确的意味着它是有效的:那很容易为你自己验证。
如果正确意味着你正在达到最佳实践,那么,不,你错过了他们,我很害怕。
goto:关于最简单的“不要使用那个”标志。
“更好”的方法是编写一个测试数字是否为素数的函数。
答案 2 :(得分:0)
请确保您不习惯使用goto:
语句。你的程序不正确。这里,当声明
if(i % j == 0)
返回true,goto:
语句将控制权转移到父for
循环的开头,循环将从重新开始运行。这样,您将永远无法获得所需的输出。根据您的问题,您的解决方案是错误的。修改后的方法是
#include <stdio.h>
int main()
{
int i, j, sum = 0, count = 0,flag;
for(i = 2; i <= 10; i++)
{
flag=0;
for(j = i - 1; j > 1; j--)
{
if(i % j == 0)
{
flag=1;
break;
}
}
if(flag==0)
{
sum = sum + i;
count++;
}
}
printf("The avg:%d", (sum / count));
return 0;
}