m0_74112347 2022-12-27 00:56 采纳率: 50%
浏览 61
已结题

【c语言】随机产生两组数从小到大排序后,分别存入两个文件,并读出两组数据,将两组数据合并并存入磁盘文件。

首先随机产生两组各100个随机数,并分别存入到data1.dat和data2.dat中。要求:
编程将随机数从小到大排序后保存
将两组文件中的数据读出并输出到屏幕验证
编程将上题中的两组文件中的数据合并。要求:
将两组文件中的数据按照从小到大的顺序合并
输出(保存)到磁盘文件“result.dat”中

  • 写回答

2条回答 默认 最新

  • 语言-逆行者 2022-12-27 12:23
    关注
    #include <stdio.h>
    #include<stdlib.h>
    #include<time.h>
    #define N 100
    //选择排序
    void selectSort(int array[] , int size)
    {
        int i,j,k,min,temp,count=1;
        //需要的主循环趟数比实际的数据个数少1
        for(i = 0; i < size - 1;i++)
        {
            min = i;
            for(j = i + 1; j < size; j++ )
            {
                if(array[j] < array[min])
                {
                    min = j;
                }
            }
            if(min != i)
            {
                temp = array[min];
                array[min] = array[i];
                array[i] = temp;
            }
        }
    }
    //保存数据的函数
    void ctrl_s(char name[],int date[N]){
      int i;
      FILE * fp;
      fp=fopen(name,"w");
      if(fp==NULL){
        printf("打开文件失败!\n");
      }
      else{
        fwrite(date, sizeof(int), N, fp);
      }
      fclose(fp);
    }
    //从文件获取数据并输出
    void print(char name[],int date[N]){
        int i;
      FILE * fp;
      fp=fopen(name,"rb");
      if(fp==NULL){
        printf("打开文件失败!\n");
      }
      else{
        fread(date, sizeof(int), N, fp);
      }
      for(i=0;i<N;i++){
        if(i%10==0){printf("\n");}
        printf("%d ",date[i]);
      }
      fclose(fp);
    }
    //读取数据合并后并保存到result.dat文件中
    void combine(char name[],int date3[N],int date4[N]){
       int i;
       int date[2*N];
       FILE * fp;
       for(i=0;i<N;i++){
        date[i]=date3[i];
       }
       for(i=100;i<2*N;i++){
        date[i]=date4[i];
       }
       selectSort(date,2*N);
       fp=fopen(name,"w");
       if(fp==NULL){
        printf("文件打开失败!\n");
       }
       else{
        fwrite(date, sizeof(int), N*2, fp);
       }
       fclose(fp);
       printf("结果写入文件成功!\n");
    }
    int main()
    {
        //生成随机种子
        srand((unsigned int)time(NULL));
        int dat1[N],dat2[N],dat3[N],dat4[N];
        int i;
        //获取随机数
        for(i=0;i<N;i++){
            dat1[i]=rand();
            dat2[i]=rand();
        }
        //排序
        selectSort(dat1,N);
        selectSort(dat2,N);
        //写进文件
        ctrl_s("date1.dat",dat1);
        ctrl_s("date2.dat",dat2);
        //读取文件内容并输出
        print("date1.dat",dat3);
        printf("\n");
        print("date2.dat",dat4);
        //读取数据合并后并保存到result.dat文件中
        combine("result.dat",dat3,dat4);
        return 0;
    }
    

    运行截图验证:

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 1月4日
  • 已采纳回答 12月27日
  • 请采纳用户回复 12月27日
  • 修改了问题 12月27日
  • 展开全部

悬赏问题

  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀