第五周作业

这个题属于哪个课程 C语言程序设计II
这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/software-engineering-class1-2018/homework/2825
我在这个课程的目标是 更加熟悉字符型数组的运用及一些排序的方法
这个作业在哪个具体方面帮助我实现目标 用数组与字符数数组结合,用冒泡排序法将其相关联
参考文献 C语言程序设计

本题要求编写程序,输入若干英文单词,对这些单词按长度从小到大排序后输出。如果长度相同,按照输入的顺序不变。

输入格式:

输入为若干英文单词,每行一个,以#作为输入结束标志。其中英文单词总数不超过20个,英文单词为长度小于10的仅由小写英文字母组成的字符串。

输出格式:

输出为排序后的结果,每个单词后面都额外输出一个空格。

输入样例:

blue
red
yellow
green
purple

输出样例:

red blue green yellow purple

PTA:

实验代码:

#include<stdio.h>
int main()
{
    int a[20],i,j,x=0,y=0,m=0,n=0,t=1,flag,k,p,s;
    char str[190];

    while((str[t]=getchar())!='#')
        t++;
    for(i=1; i<=t; i++)
    {
        m++;
        if(str[i]=='\n')
        {
            a[y]=m-1;
            y++;
            m=0;
        }
    }
    for(i=1; i<y; i++)
        for(j=0; j<y-i; j++)
            if((a[j]>a[j+1]))
            {
                k=a[j];
                a[j]=a[j+1];
                a[j+1]=k;
            }
    for(i=0; i<y; i++)
    {
        if(a[i-1]==a[i])
        {
            for(p=1; p<=t; p++)
            {
                n++;
                if(str[p]=='\n')
                {
                    if(n-1==a[i]&&p>x+1)
                    {
                        x=p-1;
                        s=n-2;
                        break;
                    }
                    n=0;
                }
            }
        }
        else
            for(p=1; p<=t; p++)
            {
                n++;
                if(str[p]=='\n')
                {
                    if(n-1==a[i]&&p!=x+1)
                    {
                        x=p-1;
                        s=n-2;
                        break;
                    }
                    n=0;
                }

            }
        for(j=x-s; j<=x; j++)
        {
            printf("%c",str[j]);
            if(j==x)
            {
                printf(" ");
            }
        }
        n=0;
    }

    return;
}

博客园:

#include<stdio.h>
#include<stdlib.h>
int main()
{
    int a[20],i,j,x=0,y=0,m=0,n=0,t=1,k,p,s;
    char str[190];
        FILE*fp;

    fp=fopen("C://Users//Dell//Desktop//Rehiwang.txt","r+");
    for(i=1;; i++)
    {
        t++;
        fscanf(fp,"%c",&str[i]);
        if(str[i]=='#')
            break;
    }

    for(i=1; i<=t; i++)
    {
        m++;
        if(str[i]=='\n')
        {
            a[y]=m-1;
            y++;
            m=0;
        }
    }
    for(i=1; i<y; i++)
        for(j=0; j<y-i; j++)
            if((a[j]>a[j+1]))
            {
                k=a[j];
                a[j]=a[j+1];
                a[j+1]=k;
            }
    for(i=0; i<y; i++)
    {
        if(a[i-1]==a[i])
        {
            for(p=1; p<=t; p++)
            {
                n++;
                if(str[p]=='\n')
                {
                    if(n-1==a[i]&&p>x+1)
                    {
                        x=p-1;
                        s=n-2;
                        break;
                    }
                    n=0;
                }
            }
        }
        else
            for(p=1; p<=t; p++)
            {
                n++;
                if(str[p]=='\n')
                {
                    if(n-1==a[i]&&p!=x+1)
                    {
                        x=p-1;
                        s=n-2;
                        break;
                    }
                    n=0;
                }

            }
        for(j=x-s; j<=x; j++)
        {
            fprintf(fp,"%c",str[j]);
            if(j==x)
            {
                fprintf(fp," ");
            }
        }
        n=0;
    }
    return 0;
}

运行截图:

设计思路:

本题遇到的问题及其解决方法:

问题:一开始忘记考虑有多个相同长度单词的情况
解决方案:把多个相同长度单词的情况写入代码

学习进度条:

原文地址:https://www.cnblogs.com/Leehomwang/p/10623524.html