我需要从键盘输入一些随机值,并将它们放入数组中。之后,我只需要打印素数的平均值。这是我的代码,但是不起作用:
#include<stdio.h>
#include<conio.h>
int main()
{
int v[50], n, i, nrprim = 0, sum = 0, j;
float medie = 0;
printf("dati numarul de elemente al vectorului:\t");
scanf("%d", &n);
for ( i = 0; i < n; i++)
{
printf("dati elmentele vectorului:\t");
scanf("%d", &v[i]);
}
for(i=0; i<n; i++)
for(j=2; j<v[i]; j++)
{
if(v[i]%j!=0)
{
sum = sum + v[i];
nrprim++;
}
}
medie =( sum/nrprim);
printf("%f", medie);
_getch();
return 0;
}
答案 0 :(得分:2)
您的主要检查错误。当您找到无法将其除以的第一个数字时,您将数字视为质数,而不是测试一个数字是否不能除以其他任何数字。因此,当您测试9
是否为质数时,您说“是”,因为它不能被2
除,而不检查是否可以被3
除。尝试这样的事情:
int flag;
for (i = 0; i < n; i++)
{
flag = 1;
for (j = 2; j < v[i]; j++)
{
if (v[i] % j == 0)
{
flag = 0;
break;
}
}
if (flag) {
sum = sum + v[i];
nrprim++;
}
}
此外,如果没有输入素数,您的程序就会崩溃,因此您也需要处理这种情况。我建议像这样的东西:
if (nrprim) {
medie = (sum / nrprim);
printf("%f\n", medie);
}
else {
printf("Error: no prime numbers were entered.\n");
}
答案 1 :(得分:2)
每次发现不重要的数字时,您都会添加到sum
和nrprim
中。例如,在i == 8
时,您将在j
为3
,5
,6
或7
时添加到他们。>
仅当以下数字中的个都不是因数时,该数字才是质数。您必须等到j
循环结束才能知道这一点。
如果要取平均值,则需要在除之前将其中一个值转换为float
。否则,您将获得整数除法。
#include<stdio.h>
#include<conio.h>
int main()
{
int v[50], n, i, nrprim = 0, sum = 0, j;
float medie = 0;
printf("dati numarul de elemente al vectorului:\t");
scanf("%d", &n);
for ( i = 0; i < n; i++)
{
printf("dati elmentele vectorului:\t");
scanf("%d", &v[i]);
}
for(i=0; i<n; i++)
int is_prime = 1;
for(j=2; j<v[i]; j++)
{
if(v[i]%j == 0)
{
is_prime = 0;
break;
}
}
if (is_prime) {
sum = sum + v[i];
nrprim++;
}
medie = float(sum)/nrprim;
printf("%f", medie);
_getch();
return 0;
}