解题报告


该题涉及了二级指针的应用,当然,因为本题所给出的数据边界清晰,方便我们定义二维数组,所以我采用了二维数组的解法。
#include <stdio.h>
#include <string.h>
main()
{
    char str[20][10], p[20], q[10];
    int i, j, k = 0;

1.在结束符'#'的处理上,通过先判断结束符,再将内容输入二维数组。

2.我们需要让计算机知道二维数组中有内容的行数,所以设计了变量k来计算行数。
    while (1)
    {
        scanf("%s", q);
        if (q[0] == '#')break;
        else strcpy(str[k], q);
        k++;
    }

3.题目要求按长度从小到大排序后输出,所以这里我采用冒泡排序(当然还可以用选择排序)。
    for (i = 0; i < k - 1; i++)
        for (j = 0; j < k - i - 1; j++)
         if (strlen(str[j]) > strlen(str[j + 1]))
            {
                strcpy(p, str[j]);
                strcpy(str[j], str[j + 1]);
                strcpy(str[j + 1], p);
            }
(选择排序):

for (i = 0; i < k - 2; i++) {
    min = i;
    for (j = i + 1; j < k - 1; j++) {
        if (strlen(str[i]) > strlen(str[j]))
        {
        min = j;
        }
    }
    strcpy(p, str[min]);
    strcpy(str[min], str[i]);
    strcpy(str[i], p);
}


4.最后就是按题目要求输出了。
    for (i = 0; i < k; i++)
printf("%s ", str[i]);
}
以下以下是冒泡排序流程图:
二维数组与二级指针相比,二级指针操作难度较大,较容易出错。

  

posted on 2019-12-16 21:22  chentao*  阅读(116)  评论(0编辑  收藏  举报