计算机2级考试--C语言真题--编程,求 帮我指出错误。若是小错,修改处在右侧指出。先谢谢了。

二、编程题(20分)
【编程要求】
1. 编写函数int prime_m( int n,int x[], long y[]),在2n范围内查找同时符合以下条件的整数m:2m -1是素数、2m -1的反序数是奇数、2m -1的十进制表示中包含数字1。将2n范围内符合上述条件的所有整数m依次保存到x指向的数组中,将与m对应的整数2m -1依次保存到y指向的数组中。函数返回x数组中保存的整数个数。
2. 编写main函数,接收键盘输入的n值,调用prime_m函数找到2n范围内所有符合给定条件的整数m及整数2m -1并将它们分别保存在两个一维数组中,将两个一维数组中的数据按所示格式输出到屏幕并保存到文件myf2.out中。最后将考生本人的准考证号字符串保存到文件myf2.out中。
【测试数据与运行结果】
测试数据: n=20
输出结果:
5 31
7 127
17 131071
【要求】
1. 源程序文件名为myf2.c,输出结果文件名为myf2.out。
2. 数据文件的打开、使用、关闭均用C语言标准库中缓冲文件系统的文件操作函数实现。
3.源程序文件和运行结果文件均需保存在T:盘根目录中供阅卷使用。
4.不要复制扩展名为obj和exe的文件到T:盘中。
下面是功课不好的我编写的程序。。。。
#include<stdio.h>
#include<math.h>
int isprime(int n){
int i;
for(i=2;i<n;i++)
if(n%i==0)
return 0;
return 1;
}
int prime_m(int n,int x[],long y[]){
int m,j=0,s[20]={0},a;
long M,rei;
for(m=2;m<=n;m++){
M=(long)pow(2,m)-1;
while(isprime(M)){
rei=M;
a=0;
while(rei)
{ s[a]=rei%10;
rei=rei/10;
a++;
}
printf("%d\n",M);//调试之用
if(s[a]%2==1){
for(;a=0;a--){
if(s[a]==1){
x[j]=m;
y[j]=M;
j++;
}
}
}
}

}
return j;
}
void main(){
int k,n,x[100],i;
long y[100];
FILE *fp;
fp=fopen("myf2.out","w");
printf("请输入n:\n");
scanf("%d",&n);
k=prime_m(n,x,y);
printf("%d\n",k);
for(i=1;i<=k;i++)
fprintf(fp,"%d\n",x[i]);
fprintf(fp,"%d\n",y[i]);
fprintf(fp,"\nMy exam number is : 00123");
fclose(fp);
}

#include<stdio.h>
#include<math.h>
int isprime(int n){
int i;
for(i=2;i<n;i++)
if(n%i==0)
return 0;
return 1;
}
int prime_m(int n,int x[],long y[]){
int m,j=0,s[20]={0},a;
long M,rei;
for(m=2;m<=n;m++){
M=(long)pow(2,m)-1;
while(isprime(M)){ //这里应该使用if,而不是while
rei=M;
a=0;
while(rei)
{ s[a]=rei%10;
rei=rei/10;
a++;
}
printf("%d\n",M);
//应该在操作s[a]之前先进行a--,因为上面最后一次a++后,对应的s[a]没有赋值
if(s[a]%2==1){
for(;a=0;a--){ //for语句中间条件判断处不应该是a=0(这是赋值语句),应是a>=0
if(s[a]==1){
x[j]=m;
y[j]=M;
j++;
//这里已经找到,应该break
}
}
}
}

}
return j;
}
void main(){
int k,n,x[100],i;
long y[100];
FILE *fp;
fp=fopen("myf2.out","w");
printf("请输入n:\n");
scanf("%d",&n);
k=prime_m(n,x,y);
printf("%d\n",k);
for(i=1;i<=k;i++) //x[i]和y[i]应该成对输出,因此这里少个"{"
//另外,i的范围应该是[0,k-1],即for(i=0;i<k;i++)
fprintf(fp,"%d\n",x[i]); //我看要求的格式,这里是不是应该使用“\t”而不是"\n"?
fprintf(fp,"%d\n",y[i]);
//这里添加"}"
fprintf(fp,"\nMy exam number is : 00123");
fclose(fp);
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-12-31
LZ你想学编程的话我建议去饭客网络学习,那里有专门的版块供大家交流学习,还
有许多教程供大家观看·你的问题到那里可以解决本回答被网友采纳
第2个回答  2011-01-08
问老师吧,学过的都忘完了
第3个回答  2011-01-06
兄弟 考试不可以作弊 (*^__^*) 嘻嘻……
相似回答