早教吧 育儿知识 作业答案 考试题库 百科 知识分享

要求实现如下功能:(1)定义函数Rand1000(),随机生成1000个均不相同的正整数,并写入到文本文件“file1.dat”中,各数之间用空格来分隔。(2)编写一个函数input(inta[],intn),将上述数据

题目详情
要求实现如下功能:
(1)定义函数Rand1000(), 随机生成1000个均不相同的正整数,并写入到文本文件“file1.dat” 中,各数之间用空格来分隔。
(2)编写一个函数input(int a[],int n),将上述数据读入到数组a中。
(3)编写一个函数digitcount(int a[],int n,int b[10]), 统计数组a的每个元素保存的整数中,每位数字出现的次数,并分别保存在b[0]到b[9]中。
(4)编写函数maxprime(int *p,int n), 找出其中最大的素数,如果不存在素数函数结果为0。(5) 对于这些整数排序之后,分别输出相邻两数之差最大和之差最小的两个数,如果有多组满足条件要输出所有的。(6)定义函数myinput(int a[],int n),用fgetc函数从文件“file1.dat”上逐个读入字符,并将其转换成独立的正整数,并依次存入数组a中。
▼优质解答
答案和解析
#include
#include
#include
/* 建立n个随机数序列d【】 */
int creat_random(int d[],int n)
{ int i,k;
FILE *fp;
srand((unsigned)time(NULL));
for(i=0;i { d[i]=rand();
for(k=0;k if(d[k]==d[i]) { k=0; d[i]=rand(); } /*去掉重复数据*/
printf("%d ",d[i]);
}
printf("\n======End Creat=======\n");
fp=fopen("file1.dat","w");
for(i=0;i { fprintf(fp,"%d ",d[i]);
}
fclose(fp);
}
/* 读数据文件 */
int input(char filename[30],int a[])
{ FILE *fp;
int i,k=0;
printf("\n======Read File=======\n");
if((fp=fopen(filename,"r"))==NULL)
{ printf("Read File Error"); return 0; }
while(!feof(fp))
{ fscanf(fp,"%d",&a[k]); k=k+1; }
printf("\n End File total_records=%d\n",k);
return k-1;
}
/*统计数字个数*/
digitcount(int a[],int n,int b[10])
{ int i,k;
printf("\n======Begin digitcount======\n");
for(i=0;i<10;i++)
b[i]=0;
for(i=0;i { k=a[i];
while(k!=0)
{ b[k%10]++; k=k/10; }
}
for(i=0;i<10;i++)
printf("%d ",b[i]);
printf("\n======End digitcount======\n") ;
}
/* 为数据排序 */
sort(int d[],int total)
{ int i,k,temp;
printf("\n======Begin sort======\n");
for(i=1;i { for(k=i-1,temp=d[i];k>=0;k--)
{ if(d[k] else { d[k+1]=temp; break; }
}
if(k<0) d[0]=temp;
}
for(i=0;i printf("%d ",d[i]);
printf("\n======End sort======\n");
}
/*确定最大的素数*/
int maxprime(int *p,int n)
{ int i,k,j;
for(i=0;i { k=p[i];
for(j=2;j<=sqrt(k*1.0)+1;j++)
if(k%j==0) break;
if(j>sqrt(k*1.0)+1) return i; /*p[i]是最大素数*/
}
return -1; /*不包含素数*/
}
/*两数之差最大、最小*/
max_min(int *p,int n)
{ int max=p[0]-p[1],min=p[0]-p[1],difference;
int i,k;
for(i=0;i { difference=fabs(p[i]-p[i+1]);
if(difference>max) max=difference;
if(difference }
for(i=0;i { if(max==fabs(p[i]-p[i+1]))
printf("Max difference: d[%d]-d[%d]=%d\n",i,i+1,(int)fabs(p[i]-p[i+1]));
if(min==fabs(p[i]-p[i+1]))
printf("Min difference: d[%d]-d[%d]=%d\n",i,i+1,(int)fabs(p[i]-p[i+1]));
}
}

/*字符数据转换*/
void Transformation(char *fn,int *p)
{ FILE *fp;
char d[10];
int k,temp,i=0;
fp=fopen(fn,"r");
printf("\n====== Begin Transformation ======\n");
while(!feof(fp))
{ k=0;
temp=fgetc(fp);
/*32:空格 13:回车 10:换行*/
while( temp==32 ||temp==13 || temp==10) temp=fgetc(fp);
while(temp!=32 && !feof(fp)) /* 32是空格的内码 */
{ d[k]=temp; k++; temp=fgetc(fp); }
d[k]='\0';
p[i]=atoi(d);
i++;
}
printf("\nTotal number is: %d\n",i-1);
fclose(fp);
for(k=0;k printf("%d ",p[k]);
printf("\n====== End Transformation ======\n");
}

int main()
{ int data[10000],n=10,total_records,b[10],max_prime;
char filename[]={"file1.dat"};
creat_random(data,n);
total_records=input(filename,data);
digitcount(data,total_records,b);
sort(data,total_records);
max_prime=maxprime(data,total_records);
if(max_prime!=-1)
printf("\n MaxPrime=data[%d]:%d\n\n",max_prime,data[max_prime]);
else
printf("\n====== 指定数据中不包含素数!======\n\n");
max_min(data,total_records);
Transformation(filename,data);
system("pause");
}