标题:求救,那位高手教教我
只看楼主
toallen
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2004-8-23
 问题点数:0 回复次数:4 
求救,那位高手教教我

题目:下列程序的功能是:将大于整数m且紧靠m的k个素数存入数组xx。请编写函数nvm(int m,int k,int xx[])实现程序要求,最后调用函数readwriteDAT()把结果输出到out.dat文件中。

#include <conio.h> #include <stdio.h> void readwriteDAT(); int isP(int m) { int i; for(i=2;i<m;i++) if(m%i==0) return 0; return 1; } void num (int m,int k,int xx[]) {int data=m+1; int half,n=0,I; while(1) {half=data/2;for(I=2;I<=half;I++) if(data%I==0)break; if(I>half) {xx[n]=data;n++;} if(n>=k)break; data++; } } main() { int m,n,xx[1000]; clrscr(); printf("\nPlease enter two integers:"); scanf("%d,%d",&m,&n); num(m,n,xx); for(m=0;m<n;m++) printf("%d",xx[m]); printf("\n") readwriteDAT(); } void readwriteDAT() { int m,n,xx[1000],i; FILE *rf,*wf; rf=fopen("in.dat","r"); wf=fopen("out.dat","w"); for(i=0;i<10,i++); fscanf(rf,"%d,%d",&m,&n); num(m,n,xx); for(m=0;m<n;m++) fprintf(wf,"%d",xx[m]); fprintf(wf,"\n"); } fclose(rf) fclose(wf)

搜索更多相关主题的帖子: void 函数 include return 
2004-08-23 12:28
toallen
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2004-8-23
得分:0 
对了,忘了说求救什么了,我按照这个程序写的,然后运行出问题,请问,在不改变方式的情况下,那位高手告诉我,这个程序哪里有毛病,帮我检查一下!谢谢!!
2004-08-23 12:29
jzh2004
Rank: 1
等 级:新手上路
帖 子:341
专家分:0
注 册:2004-4-30
得分:0 

有什么问题具体说一下好吗?我没有编译器不好调试。


我的主页 http://www.
2004-08-25 10:41
天使预备役
Rank: 2
等 级:论坛游民
威 望:3
帖 子:670
专家分:10
注 册:2004-4-6
得分:0 

void num (int m,int k,int xx[]) {int data=m+1; int half,n=0,I; while(1) {half=data/2;for(I=2;I<=half;I++) if(data%I==0)break; if(I>half) {xx[n]=data;n++;} if(n>=k)break; data++; } }

这个的算法不和你的要求。

if(data%I==0)break;这个不对,如果m是素数,那这个肯定执行第一次时就跳出了(因为他下个数肯定是偶数),

不应该用while 用for循环,同时用continue;还有你的data要自动加一,这样才能继续比较。

void num (int m,int k,int xx[]) {int data=m+1; int half,n=0,I; for(;;) {half=data/2;for(I=2;I<=half;I++) if(data%I==0){ data++;continue;} if(I>half) {xx[n]=data;n++;} if(n>=k)break; data++; }

}

这也能看出while 和for循环的区别。。 还要注意整型数表示的范围。

[此贴子已经被作者于2004-08-25 17:00:46编辑过]


差点把你忘了...
2004-08-25 16:57
hotfish
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2004-8-26
得分:0 

其实原题已给出判断素数的子函数int isP(int m)只须调用以下即可

void num (int m,int k,int xx[]) {int data=m+1; while(1)

{if isp(data)

{xx[n]=data;n++;}

if(n>=k) break;

}

2004-08-26 17:51



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-4501-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.069692 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved