本题要求用c语言编写程序,输入若干英文单词,对这些单词按长度从小到大排序后输出。如果长度相同,按照输入的顺序不变。 输入格式: 输入为若干英文单词,每行一个,以#作为输入结束标志。其中英文单词总数不超过20个,英文单词为长度小于10的仅由小写英文字母组成的字符串。 输出格式: 输出为排序后的结果,每个单词后面都额外输出一个空格。
时间: 2024-02-12 11:08:44 浏览: 44
以下是一个简单的 C 语言程序,可以按照题目要求对输入的英文单词进行排序并输出。程序使用冒泡排序法进行排序。请注意,以下程序仅作为参考,您可以通过修改或优化代码来实现更好的效果。
```c
#include <stdio.h>
#include <string.h>
#define MAX_WORDS 20
#define MAX_LENGTH 10
int main() {
char words[MAX_WORDS][MAX_LENGTH+1]; // 存储输入的单词,每个单词最长为10个字符(包括结尾的'\0')
int n = 0; // 存储输入的单词个数
char input[MAX_LENGTH+1]; // 临时存储输入的单词
// 输入单词,以 '#' 结束
printf("请输入若干英文单词,每行一个,以#作为输入结束标志:\n");
while (scanf("%s", input) != EOF && input[0] != '#') {
if (n >= MAX_WORDS) {
printf("输入的英文单词总数不超过20个,请重新输入!\n");
break;
}
strcpy(words[n], input);
n++;
}
// 按长度从小到大排序
for (int i = 0; i < n-1; i++) {
for (int j = 0; j < n-i-1; j++) {
if (strlen(words[j]) > strlen(words[j+1]) ||
(strlen(words[j]) == strlen(words[j+1]) && j > 0 && strlen(words[j-1]) == strlen(words[j]) && strcmp(words[j-1], words[j]) > 0)) {
// 如果前一个单词长度大于后一个单词长度或者长度相等但前一个单词字典序更大(已经排好序的部分不需要再比较)
char temp[MAX_LENGTH+1];
strcpy(temp, words[j]);
strcpy(words[j], words[j+1]);
strcpy(words[j+1], temp);
}
}
}
// 输出排序结果
printf("排序后的结果为:\n");
for (int i = 0; i < n; i++) {
printf("%s ", words[i]);
}
printf("\n");
return 0;
}
```