C语言 随机生成100个1000以内的整数,存放到in.txt中,

然后将这100个整数排序,将排序好的数据按5个一行放到out.txt中,并把结果输出到显示器上。(冒泡排序算法)

#include <stdio.h>

#include<stdlib.h>

#include <time.h>

int main ()

{int i,j,t,a[100];

 FILE *fp;

 fp=fopen("c:\\in.txt","w");

 srand(time(NULL));

 for(i=0;i<100;i++)

 {a[i]=rand()%1000;

  fprintf(fp,"%4d",i);

 }

 fclose(fp);

 for(i=0;i<99;i++)

   for(j=0;j<99-i;j++)

     if(a[j]>a[j+1])

     {t=a[j];a[j]=a[j+1];a[j+1]=t;}

 fp=fopen("c:\\out.txt","w");

 for(i=0;i<100;i++)

 {printf("%4d",a[i]);

  fprintf(fp,"%4d",i);

  if(i%5==4)

  {printf("\n");

   fprintf(fp,"\n");

  }

 }

 fclose(fp);

return 0;

}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-12-28

我可以帮你解决这个。程序代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 100
#ifdef RAND_MAX 
#undef RAND_MAX
#define RAND_MAX 1000
#endif
/**
上面宏定义部分说明,因为这个RAND_MAX在stdlib.h头文件中已经宏定义过了,所以我们这里需要先
取消这个宏定义名,然后再自己重新定义这个宏名
*/
//冒泡排序(升序)
void bubble_sort(int a[],int n)
{
    int i,j;  //j表示趟数,i表示每i趟两两比较的次数
    int tmp; //临时变量
    for(j=0;j<n-1;j++)
        for(i=0;i<n-1-j;i++)
        {
            if(a[i] > a[i+1])
            {
                tmp=a[i];
                a[i]=a[i+1];
                a[i+1]=tmp;
            }
        }
}
int main()
{
int num[N],count,i;
FILE *fp_in,*fp_out;
if((fp_in=fopen("in.txt","w+")) == NULL) //创建in.txt
{
printf("Open file:%s\n",strerror(errno));
exit(-1);
}
if((fp_out=fopen("out.txt","w+")) == NULL) //创建out.txt
{
printf("Open file:%s\n",strerror(errno));
exit(-1);
}
srand(time(NULL));
for(i=0,count=0;i<N;i++)
{
num[i]=rand()%1000;
fprintf(fp_in,"%4d",num[i]);
count++;
if(count%10==0) //in.txt按10个一行存放
{
fprintf(fp_in,"\r\n"); //文件换行
}
}
bubble_sort(num,N); //调用排序算法
for(i=0,count=0;i<N;i++)
{
fprintf(fp_out,"%4d",num[i]);
printf("%4d",num[i]); //输出到屏幕上
count++;
if(count%5==0)
{
fprintf(fp_out,"\r\n"); //文件换行
printf("\n");  //屏幕换行
}
}
fclose(fp_in);   //关闭文件
fclose(fp_out);  //关闭文件
return 0;
}

以上代码,本人编译运行过了,没有什么问题,希望对你有所帮助吧。

相似回答