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

为什么会不对呢,有些素数输不出来啊。#include<iostream>#include<cstdlib>#include<ctime>usingnamespacestd... 为什么会不对呢,有些素数输不出来啊。
#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;}
有时还会出现这种情况,一维数组都还没有完全输出,程序就停止了。
展开
 我来答
百度网友fb116dc
推荐于2017-05-20 · TA获得超过687个赞
知道小有建树答主
回答量:439
采纳率:0%
帮助的人:460万
展开全部

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 看能否解决。
hwm_2012
2012-11-30 · TA获得超过966个赞
知道小有建树答主
回答量:470
采纳率:0%
帮助的人:412万
展开全部
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;
}

//两处错误都是类似的,变量的重新初始化要在合适的时候进行!!!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
402407
2012-11-30 · TA获得超过771个赞
知道小有建树答主
回答量:726
采纳率:50%
帮助的人:908万
展开全部
每次在for(i=……)循环后,应该重新设置t,否则只要第一个不是素数,你的素数计算就都没有输出了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
玉宝不虚C
2012-11-30 · TA获得超过594个赞
知道小有建树答主
回答量:434
采纳率:0%
帮助的人:186万
展开全部
程序很简答,但是LZ的代码风格实在是。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式