标题:编一个程序,合并两个已按递增排序的整数文件成一个按递增排序文件。
只看楼主
D2284581470
Rank: 3Rank: 3
来 自:沈阳
等 级:论坛游侠
威 望:2
帖 子:169
专家分:147
注 册:2019-12-8
结帖率:58.33%
 问题点数:0 回复次数:5 
编一个程序,合并两个已按递增排序的整数文件成一个按递增排序文件。
【问题描述】编一个程序,合并两个已按递增排序的整数文件成一个按递增排序文件。
【输入形式】输入两个文件,文件名分别为1.txt和2.txt,在两个文件中分别输入已经排好序的整数,整数之间用单个空格隔开
【输出形式】输出按递增排好序的文件3.txt,输出文件中的整数用单个空格分隔
【样例输入】1.txt中内容为:1 3 4 5;2.txt中内容为:6 7 8
【样例输出】3.txt中内容为:1 3 4 5 6 7 8
 
【样例输入】1.txt中内容为:1 3 5;2.txt中内容为:2 4 6
【样例输出】3.txt中内容为:1 2 3 4 5 6
【样例说明】
【评分标准】


麻烦各位大神呀🙏🙏🙏
搜索更多相关主题的帖子: 排序 递增 txt 文件 整数 
2019-12-27 16:43
D2284581470
Rank: 3Rank: 3
来 自:沈阳
等 级:论坛游侠
威 望:2
帖 子:169
专家分:147
注 册:2019-12-8
得分:0 
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
    int A,B;
    FILE *fp,*fq,*pr;
    if((fp=fopen("1.txt","r"))==NULL)
    {
        printf("打开文件失败1\n");
        getchar();
        exit(1);
    }
    if((fq=fopen("2.txt","r"))==NULL)
    {
        printf("打开文件失败2\n");
        getchar();
        exit(1);
    }
    if((pr=fopen("3.txt","w"))==NULL)
    {
        printf("打开文件失败3\n");
        getchar();
        exit(1);
    }
    A=fgetc(fp);
    B=fgetc(fq);
    while(A!=EOF && B!=EOF)
    {
        if(A<B)
        {
            fputc(A,pr);
            A=fgetc(fp);
        }else
        {
            fputc(B,pr);
            B=fgetc(fq);
        }
    }
    while(A!=EOF)
    {
        fputc(A,pr);
        A=fgetc(fp);
    }
    while(B!=EOF)
    {
        fputc(' ',pr);
        fputc(B,pr);
        B=fgetc(fq);
    }
    fclose(fp);
    fclose(fq);
    fclose(pr);
    getchar();
    return 0;
}
2019-12-27 16:46
D2284581470
Rank: 3Rank: 3
来 自:沈阳
等 级:论坛游侠
威 望:2
帖 子:169
专家分:147
注 册:2019-12-8
得分:0 
2019-12-27 16:49
D2284581470
Rank: 3Rank: 3
来 自:沈阳
等 级:论坛游侠
威 望:2
帖 子:169
专家分:147
注 册:2019-12-8
得分:0 
程序代码:
#include<stdio.h>
#include<stdlib.h>
int main()
{
    int temp;
    int i, j = 0, k = 0, j1 = 0;
    int a[100] = { 0 };
    FILE* fp, * fq, * pr;
    if ((fp = fopen("1.txt", "r")) == NULL)
    {
        printf("打开文件失败1\n");
        getchar();
        exit(1);
    }
    if ((fq = fopen("2.txt", "r")) == NULL)
    {
        printf("打开文件失败2\n");
        getchar();
        exit(1);
    }
    if ((pr = fopen("3.txt", "w")) == NULL)
    {
        printf("打开文件失败\n");
        getchar();
        exit(1);
    }
    for (i = 0; !feof(fp); i++)
    {
        fscanf(fp, "%d", &a[i]);
        j1 = i;
    }
    for (j=j1+1; !feof(fq); j++)
    {
        fscanf(fq, "%d", &a[j]);
        k = j;
    }
    for (i = 0; i < k+1; i++)
    {
        for (j = 0; j < k - i; j++)//至于为什么k不减去1 是因为这里的k代表的不是数组下标
        {
            if (a[j] > a[j + 1])
            {
                temp = a[j];
                a[j] = a[j + 1];
                a[j + 1] = temp;
            }
        }
    }
    for (i = 0; i < k+1; i++)
    {
        fprintf(pr, "%d ", a[i]);
    }
    fclose(fp);
    fclose(fq);
    fclose(pr);
    getchar();
    return 0;
}

2019-12-27 20:51
D2284581470
Rank: 3Rank: 3
来 自:沈阳
等 级:论坛游侠
威 望:2
帖 子:169
专家分:147
注 册:2019-12-8
得分:0 
这是答案
2019-12-27 20:51
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
程序代码:
#include <stdio.h>

int main( void )
{
    FILE* f1 = fopen("1.txt","r");
    FILE* f2 = fopen("2.txt","r");
    FILE* f3 = fopen("3.txt","w");
    if( !f1 || !f2 || !f3 )
    {
        if(f3) fclose(f3);
        if(f2) fclose(f2);
        if(f1) fclose(f1);
        return 1;
    }

    for( int a,b,n1=fscanf(f1,"%d",&a),n2=fscanf(f2,"%d",&b); n1==1||n2==1; )
    {
        if( (n1==1 && n2!=1) || (n1==1 && n2==1 && a<=b) )
        {
            fprintf( f3, "%d ", a );
            n1 = fscanf(f1,"%d",&a);
        }
        else
        {
            fprintf( f3, "%d ", b );
            n2 = fscanf(f2,"%d",&b);
        }
    }

    fclose( f3 );
    fclose( f2 );
    fclose( f1 );
}
2019-12-29 12:21



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-498683-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.259518 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved