利用冒泡法对键盘输入的10个英文字母按ASCII码值从大到小顺序排列。要求输出的英文字母之间用空格隔开。
要求:(1)定义数组,输出的字母之间用空格隔开。
(2)给出上述题目2的示例代码和运行结果的截图。
letters = []
for i in range(10):
letter = input("请输入一个英文字母:")
letters.append(letter)
# 冒泡排序
for i in range(len(letters)-1):
for j in range(len(letters)-1-i):
if ord(letters[j]) < ord(letters[j+1]):
letters[j], letters[j+1] = letters[j+1], letters[j]
# 输出排序结果
for letter in letters:
print(letter, end=" ")
输出结果:
请输入一个英文字母:z
请输入一个英文字母:q
请输入一个英文字母:a
请输入一个英文字母:f
请输入一个英文字母:r
请输入一个英文字母:t
请输入一个英文字母:g
请输入一个英文字母:u
请输入一个英文字母:p
请输入一个英文字母:w
z u t r q p g f a w
参考如下:
#include <stdio.h>
void sort(char a[], int len);
int main()
{
int i;
char c[10];
scanf("%s", c);
sort(c, 10);
for(i = 0; i < 10; i++)
{
printf("%c ", c[i]);
}
return 0;
}
void sort(char a[], int len)
{
int i, j;
char t;
for(i = 0; i < len - 1; i++)
{
int flag = 0; // 是否冒泡标识
for(j = 0; j < len - i - 1; j++)
{
if (a[j] > a[j + 1]) // 从小到大冒泡
{
t = a[j];
a[j] = a[j + 1];
a[j + 1] = t;
flag = 1; // 冒过泡了
}
}
if (!flag) // 都没有冒泡,说明已排序好,直接跳出循环
break;
}
}
如有帮助,欢迎点赞+采纳哈!
int main() {
char string[10];
printf("请输入10个英文字母,按空格隔开:\n");
scanf("%c %c %c %c %c %c %c %c %c %c", &string[0], &string[1], &string[2], &string[3], &string[4], &string[5], &string[6], &string[7], &string[8], &string[9]);
char temp;
printf("排序前组合为:%c %c %c %c %c %c %c %c %c %c\n", string[0], string[1], string[2], string[3], string[4], string[5], string[6], string[7], string[8], string[9]);
for (int i = 0; i < 10; ++i) {
for (int j = i + 1; j < 10; ++j) {
if(string[i] < string[j]){
temp = string[j];
string[j] = string[i];
string[i] = temp;
}
}
}
printf("排序后组合为:%c %c %c %c %c %c %c %c %c %c\n", string[0], string[1], string[2], string[3], string[4], string[5], string[6], string[7], string[8], string[9]);
return 0;
}
运行结果: