新手求助,懂C语言的高手来。

从键盘为一维整型数组输入10个数,求其中的素数之和。

我编写的程序为:
#include"stdio.h"
void main(void)
{
int a[10],i,n,flag=1,sum=0;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<10;i++)
{
for(n=2;n<a[i];n++)
{
if(a[i]%n==0)
{
flag=0;break;
}
}
}
for(i=0;i<10;i++)
{
if(flag==1) sum=sum+a[i];
}
printf("sum=%d\n",sum);
getch();
}

运行没有报错,但是无论输入什么数字都是sum=0,求高手指点哪里错了,谢谢!

#include"stdio.h"

bool isPrime(int a);

void main(void)

{

 int a[10],i,sum=0;

 for(i=0;i<10;i++)

  scanf("%d",&a[i]);

 for(i=0;i<10;i++)

  {

    if(isPrime(a[i])) {

      sum += a[i];

    }

  }

 printf("\n\nsum=%d\n",sum);

 getchar();

}


bool isPrime(int a) {

  int i;

  for (i = 2; i < a; ++i) 

    if(a % i == 0)return false;

  printf ("%d is prime\n",a);

  return true;

}


追问

如果不用自定义函数,直接用我这种编法不行吗?需要怎么修改呢

追答

#include"stdio.h"

void main(void)

{

 int a[10],i, j, sum=0;

 bool flg;

 for(i=0;i<10;i++)

  scanf("%d",&a[i]);

 sum = 0;

 for(i=0;i<10;i++) {

   flg = true; //默认true。素数

    for (j = 2; j < a[i]; ++j) {

      if(a[i] % j == 0) {

        flg = false;

        break;

      }

    }

    if(!flg)continue;

    printf ("%d is prime\n",a[i]);

    sum += a[i];

 }

 printf("\n\nsum=%d\n",sum);

 getchar();

}



温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-06-10
因为你在计算总和的时候,写的算法有问题。
看你前面判断素数的算法,这么写其实没啥问题,如果当前数是素数的话把flag置为1,不是的话置为0,可是,问题来了,你并没有对数组a[i]做任何的修改,在执行完你的这个for循环语句后,如果数组的最后一个数不是素数,则flag为0,根本不走你的求和语句如果sum=sum+a[i];
数组的最后一个元素是素数,ok,flag为1,然后sum的值会是把数组所有的元素的和。
你的求和循环放在了外面,所以每次都会把整个是数组遍历一遍完事儿之后才开始你的求和。
其实,并没有什么luan用!追问

怎么修改?难道必须用自定义函数吗?

追答

很简单,只需要把你的sum计算求和放到for循环里面就行,像这样(flag初始化为0):
for(i=0;i<10;i++)
{
for(n=2;n<a[i];n++)
{
if(a[i]%n==0)
{
flag=0;break;
}
else
flag = 1;
}
if(flag==1) sum=sum+a[i];
}
printf("sum=%d\n",sum);

相似回答