C++用随机函数产生10个互不相同的两位整数存放到一维数组中,并输出其中的素数。

为什么会不对呢,有些素数输不出来啊。
#include<iostream>#include<cstdlib>#include<ctime>using namespace std;void prime(int a[10]);int main(){ int a[10],i,j,t=0; srand(int(time(0))); cout<<"随机一维数组为:[ "; for(i=0;i<10;i++) { while(1) { a[i]=rand()%90+10; for(j=0;j<i;j++) { if(a[i]==a[j]) t+=1; } if(t==0) break; } cout<<a[i]<<" "; } cout<<"]\n"<<"其中的素数有:"; prime(a); system("pause");}void prime(int a[10]){ int i,j,t=0; for(i=0;i<10;i++) { for(j=1;j<=a[i]/2;j++) { if(a[i]%j==0) t+=1; } if(t==1) cout<<a[i]<<" "; } cout<<endl;}
有时还会出现这种情况,一维数组都还没有完全输出,程序就停止了。

j的起始值应该从2开始


#include<iostream>

#include<cstdlib>

#include<ctime>

using namespace std;

void prime(int a[10]);

void main()

{

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

srand(int(time(0)));

cout<<"随机一维数组为:[  ";

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

{

while(1)

{

a[i]=rand()%90+10;

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

{

if(a[i]==a[j])

t+=1;

}

if(t==0)

break;

}

cout<<a[i]<<"  ";

}

cout<<"]\n"<<"其中的素数有:";

prime(a);

}

void prime(int a[10])

{

int i,j,t;

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

{

t=0;

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

{

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

t=1;

}

if(t==0)

{

printf("%d ",a[i]);

}

}

cout<<endl;

}

追问

 

那出现这个问题是什么原因??

追答

使用srand()函数需要包含stdlib.h头文件,你#include 看能否解决。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-11-30
prime函数中t变理的置0位置不合理,如果第一个数不是素数,之后的都不会输出,第一个是素数时也只输出了第一个,之后的由于t不再是1而无法输出,调整一下位置:
void prime(int a[10])
{
int i,j,t=0;
for(i=0;i<10;i++)
{
t=0; //<<< 加一这里,测试每个数都先把t置0

for(j=1;j<=a[i]/2;j++)
{
if(a[i]%j==0)
t+=1;
}
if(t==1)
cout<<a[i]<<" ";
}
cout<<endl;
}
//至于一维数组没完全输出就停止的情况不明白了,从程序逻辑上没看到什么明显的问题追问

一维数组没完全输出就停止的情况出现频率还很高,我运行程序5次出现了3次

追答

#include
#include
#include
using namespace std;
void prime(int a[10]);
int main()
{
int a[10],i,j,t=0;
srand(int(time(0)));
cout<<"随机一维数组为:[ ";
for(i=0;i<10;i++)
{
while(1)
{
t=0;/////////必需在此置0 否则一旦重复就死循环了
a[i]=rand()%90+10;
for(j=0;j<i;j++)
{
if(a[i]==a[j])
t+=1;
}
if(t==0)
break;
}
cout<<a[i]<<" ";
}
cout<<"]\n"<<"其中的素数有:";
prime(a);
system("pause");
}
void prime(int a[10])
{
int i,j,t=0;
for(i=0;i<10;i++)
{
t=0;/////////必需在此置0 否则最多只输出1个素数
for(j=1;j<=a[i]/2;j++)
{
if(a[i]%j==0)
t+=1;
}
if(t==1)
cout<<a[i]<<" ";
}
cout<<endl;
}

//两处错误都是类似的,变量的重新初始化要在合适的时候进行!!!

第2个回答  2012-11-30
每次在for(i=……)循环后,应该重新设置t,否则只要第一个不是素数,你的素数计算就都没有输出了
第3个回答  2012-11-30
程序很简答,但是LZ的代码风格实在是。。。