求大神帮帮忙,c语言这道题。根本没有头绪

 我来答
B2K1bonPplR
2020-11-30 · TA获得超过2045个赞
知道小有建树答主
回答量:1156
采纳率:72%
帮助的人:370万
展开全部
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define N 100
#define L 81

void init(char *a[]);
void input(char *a[], int n);
void sort(char *a[], int n);
int cmp(char *s1, char *s2);
void swap(char **s1, char **s2);
void output(char *a[], int n);
void clean(char *a[]);

int main()
{
    int n = 0;
    int i = 0;
    char *a[N];

    init(a);

    while (1)
    {
        scanf("%d", &n);
        if (n <= 0)
        {
            break;
        }

        input(a, n);
        sort(a, n);
        output(a, n);
    }

    clean(a);
}

void init(char *a[])
{
    int i = 0;
    for (i = 0; i < N; i++)
    {
        a[i] = malloc(L * sizeof(char));
    }
}

void input(char *a[], int n)
{
    int i = 0;
    for (i = 0; i < n; i++)
    {
        scanf("%s", a[i]);
    }
}

void sort(char *a[], int n)
{
    int i = 0;
    int j = 0;
    int k = 0;
    for (i = 0; i < n - 1; i++)
    {
        k = i;
        for (j = i + 1; j < n; j++)
        {
            if (cmp(a[j], a[k]) < 0)
            {
                k = j;
            }
        }
        if (k != i)
        {
            swap(&a[i], &a[k]);
        }
    }
}

int cmp(char *s1, char *s2)
{
    int len1 = strlen(s1);
    int len2 = strlen(s2);
    return len1 != len2 ? (len1 - len2) : strcmp(s1, s2);
}

void swap(char **s1, char **s2)
{
    char *temp = *s1;
    *s1 = *s2;
    *s2 = temp;
}

void output(char *a[], int n)
{
    int i = 0;
    for (i = 0; i < n; i++)
    {
        printf("%s\n", a[i]);
    }
    printf("\n");
}

void clean(char *a[])
{
    int i = 0;
    for (i = 0; i < N; i++)
    {
        free(a[i]);
    }
}
Forever_小毅
2020-11-30 · TA获得超过143个赞
知道小有建树答主
回答量:216
采纳率:84%
帮助的人:122万
展开全部

....由于过于简单,不知道如何讲解思路,此处贴出运行结果与代码(带注释)




#include <stdio.h>


int main()

{

// 由于题目说 N 最大为 100, 所以 a 给 105 个的大小即可, 实际上写 100 也可以, 个人习惯

int i, j, N, a[105];

int res = 0;


while (1) // 死循环, 为了持续获取数据

{

// 获取数据, 存储到 N 里

scanf("%d", &N);


// 题目给出的跳出循环条件

if (N == 0) break;


// 循环获取 N 个整数

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

scanf("%d", &a[i]);


// 冒泡法, 进行排序

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

{

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

{

if (a[i] > a[j])

{

int temp = a[i];

a[i] = a[j];

a[j] = temp;

}

}

}


// 循环输出排序后的结果

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

printf("%d \n", a[i]);


// 题目要求每两组数据之间留一个空行

printf("\n");

}

}


答题不易,如无疑问,烦请采纳

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式