很奇怪的问题。关于文件输出

skycncomp 2004-05-01 08:09:33
#include <conio.h>
#include <stdio.h>
/* 判断是否为素数 */
int isPrime( int m )
{
int i;

for( i=2;i<m;i++ )
if( m%i==0 )
return 0;
return 1;
}

int prime( int m,int n,int a )
{
int i,j;
int prime;

for( j=m+1;;j++ )
if( prime=isPrime( j )== 1 )
{
return j;
}
}


void main()
{
int m,n,i;
int a[3000];
int result=0;
FILE *fp;

clrscr();
printf("Please input m: ");
scanf("%d",&m );
printf("\nPlease input n: ");
scanf("%d",&n );

for( i=0;i<10;i++ )
a[i]=0;

result=prime( m,n,a[0] );
a[0]=result;

for( i=1;i<n;i++ )
{
result=prime( a[i-1],n,a[i] );
a[i]=result;
}

for( i=0;i<n;i++ )
printf("\n\n%d ", a[i] );


if( (fp=fopen("out.txt","w"))==NULL )
{
printf("\nCan't open this file.");
getch();
exit(0);
}

for( i=0;i<n;i++ )
{
fprintf( fp, "%d ", a[i] );
}
}

m为第一个素数,n为要输出多少个大于m的素数.
但现在问题是,我要是输出小一些的数,就会正确。如我输入3和5,输出5,7,11,13,17,文件输出也正常。但如果我输入3和2999(我数组定义大小为3000),屏幕输出正常。但文件输出错误。这是什么原因呀。还有如果我把所有的int型定义成long型后,则会出错。这是为什么?如果数组定义过大(如定义成a[30000] ),就会出错。是什么原因?
...全文
34 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
skycncomp 2004-05-06
  • 打赏
  • 举报
回复
没人给解释一下吗?
100万个素数如何来求。
skycncomp 2004-05-02
  • 打赏
  • 举报
回复
明白了。用无符号的就OK了。
我想试一下我要求100万个素数?该如何考虑这个程序呢?
高手请解答一下。
给些思路。应该是很难的。
newegg2002 2004-05-01
  • 打赏
  • 举报
回复
不是说了嘛 ..后面的数太大超出了int 型所能表达的范围嘛..
当最高位变为1的时候,当然变成负数了.因为最高位是个标志位,,0为正..1为负嘛..
可以扩大输出的范围嘛..用无符型可以解决一下这个问题.不过也不能太大了..
julyclyde 2004-05-01
  • 打赏
  • 举报
回复
/* 判断是否为素数 */
int isPrime( int m )
{
int i;

for( i=2;i<m;i++ )
if( m%i==0 )
return 0;
return 1;
}
huolong1312 2004-05-01
  • 打赏
  • 举报
回复
我一直不明白isPrime这是什么意思~!是调出函数吗?
julyclyde 2004-05-01
  • 打赏
  • 举报
回复
%ud
skycncomp 2004-05-01
  • 打赏
  • 举报
回复
那为什么我把数组定义成30000大小会出错呢。
文件输出前半部份正确,后半部他错误。是负数。
这是什么原因?
newegg2002 2004-05-01
  • 打赏
  • 举报
回复
呵.关于文件输出的问题我也已经解决了..对于你的程序作如下改动:
for( i=0;i<n;i++ )//这一句改为for( i=0;i<=n;i++ )
{
fprintf( fp, "%d ", a[i] );
}
就行了.另外.因为输出的数有可能超过int型的范围,,所以输出文件中有可能会有"负数"出现,,
不要用long,用unsigend int 也行啊..
newegg2002 2004-05-01
  • 打赏
  • 举报
回复
把所有的int型定义成long型后
如果数组定义过大(如定义成a[30000] ),就会出错。
///////////////
你所说的这两个错误在我这儿都没有出现..我猜之所以出错.恐怕是一个原因:存储分配问题..你定义的变量占用空间太大了..在这方面好像都有限制的..
rorot 2004-05-01
  • 打赏
  • 举报
回复
我再TC3和VC6下测试,文件是正常得.

70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧