使用c语言书写代码,要求:随机输入4个一位的数字,总共能组成多少个整数?并将这些整数按从小到大的顺序输出。分别采用选择排序和冒泡排序解决这一问题。
时间: 2023-06-09 16:03:34 浏览: 85
C语言输入一个整数序列并计算他们的值.rar_C语言输入一个整数序列并计算他们的值_输入序列C语言
5星 · 资源好评率100%
好的,我了解了,下面是代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void selection_sort(int *arr, int len)
{
for (int i = 0; i < len-1; i++)
for (int j = i+1; j < len; j++)
if (*(arr+i) > *(arr+j))
{
int temp = *(arr+i);
*(arr+i) = *(arr+j);
*(arr+j) = temp;
}
}
void bubble_sort(int *arr, int len)
{
for (int i = 0; i < len-1; i++)
for (int j = 0; j < len-i-1; j++)
if (*(arr+j) > *(arr+j+1))
{
int temp = *(arr+j);
*(arr+j) = *(arr+j+1);
*(arr+j+1) = temp;
}
}
int main()
{
int nums[24];
srand(time(NULL));
for (int i = 0; i < 4; i++)
for (int j = 0; j < 6; j++)
*(nums+i*6+j) = rand() % 10; //生成4*6个数字,放到nums中
int len = 24; //初始化总共的数字的个数
for (int i = 0; i < 4; i++) //循环4次,每次把第i*6个数字变成当前最高位
for (int j = 0; j < len/4; j++) //这里需要除以4,是因为每次循环后,总长度都减少了4
for (int k = 0; k < 4; k++) //把每个数字都和第i*6+k个数字交换位置
{
int tmp = *(nums+i*6+k); //交换操作
*(nums+i*6+k) = *(nums+i*6+j*4+k);
*(nums+i*6+j*4+k) = tmp;
}
printf("所有生成的数字是:\n");
for (int i = 0; i < len; i++) //输出生成的所有数字
printf("%d ", *(nums+i));
printf("\n");
selection_sort(nums, len); //选择排序
printf("选择排序后的结果是:\n");
for (int i = 0; i < len; i++) //输出排序后的结果
printf("%d ", *(nums+i));
printf("\n");
bubble_sort(nums, len); //冒泡排序
printf("冒泡排序后的结果是:\n");
for (int i = 0; i < len; i++) //输出排序后的结果
printf("%d ", *(nums+i));
printf("\n");
return 0;
}
```
这个程序会生成4*6个一位数字,并将其按从小到大的顺序输出。然后用选择排序和冒泡排序对它们进行排序,并分别打印出排序后的结果。
阅读全文