用C语言编写程序? 5

读取文件中的数据(c:\sort\000.dat),并使用选择排序算法对进行排序,并写入文件(比如c:\sort\rank.dat)。... 读取文件中的数据(c:\sort\000.dat),并使用选择排序算法对进行排序,并写入文件(比如c:\sort\rank.dat)。 展开
 我来答
自我编程
2020-05-04 · 科技优质答主
自我编程
采纳数:1481 获赞数:4277

向TA提问 私信TA
展开全部

程序就是读取文件到数组,再将数组进行排序,最后写入文件。

读写文件流程:fopen获取文件流(根据读写需求,选择参数,使用完必须调用fclose函数关闭),fscanf读取文件内容,fseek控制文件流指针,fprintf写入文件。

选择排序:每个循环周期选出一个最值,交换一次。

下面是代码(数组为动态数组):

#include <stdio.h>

#include <malloc.h>

int maxLen;//数组长度

int *read2Nums(char path[]);//读取

int write2File(int *nums,char path[]);//写入

void showNums(int *nums);

int px(int *nums,int flag);//选择排序flag=1升序,flag=0降序

int main()

{

    int *nums=NULL;

    char rPath[]="c:\\000.dat",wPath[]="c:\\rank.dat";

    if(!(nums=read2Nums(rPath))) return 1;

    showNums(nums);

    printf("数组升序排列:\n");

    if(px(nums,1)==-1) return 1;

    showNums(nums);

    printf("数组降序排列:\n");

    if(px(nums,0)==-1) return 1;

    showNums(nums);

    printf("写入到文件路径%s下(存在覆盖,不存在新建)\n",wPath);

    if(write2File(nums,wPath)==-1) return 1;

    printf("写入成功!\n");

    return 0;

}

void showNums(int *nums)

{

    int i;

    if(nums) for(i=0,printf("文件内容:\n");i<maxLen;printf("%d ",nums[i]),i++);

    printf("\n");

}

int px(int *nums,int flag)

{

    int i,j,n,temp;

    if(!nums) return -1;

    for(i=0;i<maxLen-1;i++)

    {

        n=i;

        for(j=i+1;j<maxLen;j++)

        {

            if(flag && nums[n]>nums[j]) n=j;

            if(!flag && nums[n]<nums[j]) n=j;

        }

        temp=nums[i],nums[i]=nums[n],nums[n]=temp;

    }

    return 1;

}

int write2File(int *nums,char path[])

{

    int i;

    FILE *fp=NULL;

    if(!nums) return -1;

    if(!(fp=fopen(path,"w"))) return -1;

    //fseek(fp,SEEK_END);

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

        fprintf(fp,"%d ",nums[i]);

    fclose(fp);

    return 1;

}

int *read2Nums(char path[])

{

    int *nums=NULL,*temp=NULL,cnt=0;

    FILE *fp=NULL;

    maxLen=10;

    if(!(fp=fopen(path,"r"))) return NULL;

    nums=(int *)malloc(sizeof(int)*maxLen);

    if(!nums) return NULL;

    while(fscanf(fp,"%d",&nums[cnt++])!=-1)

        if(cnt==maxLen)//数组长度不够扩展(每次扩展10长度)

        {

            maxLen=maxLen+10;

            temp=(int *)realloc(nums,sizeof(int)*maxLen);

            if(temp) return NULL;

            nums=temp;

        }

    if(--cnt<maxLen)//函数结束前,删除多余地址,减少内存占用

    {

        maxLen=cnt;

        temp=(int *)realloc(nums,sizeof(int)*maxLen);

        if(!temp) return NULL;

        nums=temp;

    }

    fclose(fp);

    return nums;

}

听不清啊
高粉答主

2020-05-04 · 说的都是干货,快来关注
知道顶级答主
回答量:7.8万
采纳率:89%
帮助的人:1.8亿
展开全部
指定完成完成排序完成以件当中有记得关闭要求写要,按照他题目的要求打开指定的文件,然后把数据读入到一个一为数组中,然后对这个一为输出进行排序排序完成,以后再按照要求写入指定的文件当中,要记得关闭文件
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式