求大神帮帮忙,c语言这道题。根本没有头绪
#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]);
}
}
....由于过于简单,不知道如何讲解思路,此处贴出运行结果与代码(带注释)
#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");
}
}
答题不易,如无疑问,烦请采纳