嗯,问题是上面的问题。总结一下,它编译,但我想我的主要想法是错误的。我尝试使用该代码的原因是:
那就是它。有任何想法吗?请记住,我在第一个工程时期,所以我不是最好的编程。
代码如下:
#include <stdio.h>
#include <windows.h>
int main(void)
{
int k, i, j, d, v[101], sum, prim, f;
float ave;
i = 0;
while ((i < 101) && (j != 0) )
{
i++;
printf("Set the value of the element %d => ", i);
scanf("%d", &v[i]);
printf("To stop press 0 => ");
scanf("%d", &j);
}
k = 0;
prim = 1;
f = i;
sum = 0;
while (f > 2)
{
if (i % (f - 1) == 0)
{
prim = 0;
}
else
{
k++;
sum = sum + v[f];
}
f = f - 1;
}
med = sum / k;
printf("%d, %d, %d", k, soma, i);
printf("The average is => %f \n", ave);
system("pause");
}
对于那些想知道的人,这是我在正确答案中编辑后得到的:
int main(void)
{
int v[101];
int n = 0;
int k,j = 0;
int i=0;
int sum = 0;
while( i<100 )
{
i++;
printf ("Set the value of the element %d => ", i);
scanf ("%d", &v[i]);
int x,primo=1;
if (i>1){
for (x=2; x*x<=i; x++) {
if (i % x == 0) primo = 0;
}
if(primo==1)
{
sum = sum+ v[i];
n++;
}
}
printf ("To stop press 0 => ");
scanf ("%d", &j);
if(j == 0)
break;
}
float ave =(sum /n);
printf("%d, %d, %d", n,i,sum);
printf("The average is => %f \n", ave);
system("pause");
}
答案 0 :(得分:3)
首先让我们设一个可读的方法来测试一个数字是否为素数;来自另一篇SO帖子的this answer给了我们一个很好的帖子:
int IsPrime(int number) {
int i;
for (i=2; i*i<=number; i++) {
if (number % i == 0) return 0;
}
return 1;
}
其次,让我们清理您的代码,并计算到目前为止遇到的所有素数的运行总和。另外,我们会检查scanf
的返回值(但我们应该avoid scanf!)
第三,我们添加了一些缩进。
int main(void)
{
int n = 0;
int i = 0;
int j = 0;
int k = 0;
int sum = 0;
while( i<101 )
{
i++;
printf ("Set the value of the element %d => ", i);
if(scanf ("%d", &k) != 1)
continue;
if(is_prime(k))
{
sum += k;
++n;
}
printf ("To stop press 0 => ");
if(scanf ("%d", &j) == 1)
if(j == 0)
break;
}
float ave = sum / (double) n;
printf("The average is => %f \n", ave);
system("pause");
}
答案 1 :(得分:1)
嗯,有几件事要说。首先是简单的部分:如果允许读取的最大整数数是100,那么变量&#34; v&#34;应该是v[100]
。这不是char数组,因此这个数组不需要有一个额外的元素(v[100]
将是int
的数组,从v[0]
到v[99]
};也调整循环限制。
此外,您正在检查变量f
中的数字是否为素数,但此变量是使用变量i
分配的,而i
不是数组的元素。您希望为f
分配v[i]
之类的内容(对于i等于0,读取的数字减去1)。因此,您需要2个循环:您现在用于检查数字是否为素数的循环,以及另一个将v[i]
分配给f
的循环。
另一个要说的是你要两次调用scanf
进行阅读,你可以只读取数字并将其存储在一个临时变量中。如果此数字不为零,则将其存储在数组中并继续读取,否则您将停止读取。
最后,我强烈建议您设置有意义的var名称,仅对索引变量使用单个字母; temp
,array
,max
和countnumbers
等名称应出现在您的代码中。您和其他人更容易阅读您的代码,并且您将减少错误的数量。
答案 2 :(得分:1)
这是您问题的解决方案。非常简单。
/* C program to find average of all prime numbers from the inputted array(you can predefine it if you like.) */
#include <stdio.h>
#include <conio.h>
void main()
{
int ar[100], i, n, j, counter;
float avg = 0, numprime = 0;
printf("Enter the size of the array ");
scanf("%d", &n);
printf("\n Now enter the elements of the array");
for (i = 0; i < n; i++)
{
scanf("%d", &ar[i]);
}
printf(" Array is -");
for (i = 0; i < n; i++)
{
printf("\t %d", ar[i]);
}
printf("\n All the prime numbers in the array are -");
for (i = 0; i < n; i++)
{
counter = 0;
for (j = 2; j < ar[i]; j++)
{
if (ar[i] % j == 0)
{
counter = 1;
break;
}
}
if (counter == 0)
{
printf("\t %d", ar[i]);
numprime += 1;
avg += at[i];
}
}
avg /= numprime;
printf("Average of prime numbers is ℅f", avg);
getch();
}
对于所有平均计算,您只需要上述计数器变量。 (因为我们需要知道数组中素数的数量,这样我们就可以划分它们的总数,从而获得平均值。)不要担心类型转换正在向下完成...这个解决方案有效。我自己写的。
答案 3 :(得分:1)
这是做你想做的事情。您不需要接近原来的变量数量。而且,在不知道你想要素数的情况下,我只是在遇到素数时输出。同样如前所述,使用函数检查素数确实有帮助:
#include <stdio.h>
// #include <windows.h>
/* see: http://stackoverflow.com/questions/1538644/c-determine-if-a-number-is-prime */
int IsPrime(unsigned int number) {
if (number <= 1) return 0; // zero and one are not prime
unsigned int i;
for (i=2; i*i<=number; i++) {
if (number % i == 0) return 0;
}
return 1;
}
int main(void)
{
int i, v[101], sum, pcnt=0, psum=0;
float ave;
i=0;
printf ("\nEnter array values below, use [ctrl + d] to end input\n\n");
printf ("Set the value of the element %d => ", i);
while((i<101) && scanf ("%d", &v[i]) != EOF ){
sum += v[i];
if (IsPrime (v[i]))
psum += v[i], pcnt++;
i++;
printf ("Set the value of the element %d => ", i);
}
ave=(float)psum/pcnt;
printf("\n\n Number of elements : %d\n",i);
printf(" The sum of the elements: %d\n",sum);
printf(" The number of primes : %d\n",pcnt);
printf(" The average of primes : %f\n\n", ave);
return 0;
}
示例输出:
Enter array values below, use [ctrl + d] to end input
Set the value of the element 0 => 10
Set the value of the element 1 => 20
Set the value of the element 2 => 30
Set the value of the element 3 => 40
Set the value of the element 4 => 51
Set the value of the element 5 => 11
Set the value of the element 6 => 37
Set the value of the element 7 =>
Number of elements : 7
The sum of the elements: 199
The number of primes : 2
The average of primes : 24.000000