用C语言编写随机输入十组三位数求最大的一组,剩下的数组依次从大到小排列
时间: 2024-11-06 10:35:56 浏览: 19
在C语言中,你可以通过以下几个步骤来实现这个功能:
1. **定义结构体**:
首先,创建一个结构体`num`,用于存储每一位数字。
```c
typedef struct {
int hundreds;
int tens;
int units;
} num_t;
```
2. **生成随机数组**:
使用`srand()`函数初始化随机数种子,然后使用`rand()`函数生成随机的三位数。
```c
#include <time.h>
#include <stdio.h>
void generate_random_nums(num_t numbers[], int n) {
srand(time(0)); // 初始化随机数种子
for (int i = 0; i < n; i++) {
numbers[i].hundreds = rand() % 10 + 1; // 生成0-9之间的随机整数
numbers[i].tens = rand() % 10 + 1;
numbers[i].units = rand() % 10 + 1;
// 确保是三位数
while(numbers[i].hundreds == 0 || numbers[i].tens == 0 || numbers[i].units == 0) {
numbers[i].hundreds = rand() % 10 + 1;
numbers[i].tens = rand() % 10 + 1;
numbers[i].units = rand() % 10 + 1;
}
}
}
```
3. **找到最大值并排序**:
找到最大值并将其放在数组的起始位置,然后对剩余的数组进行降序排序。
```c
void find_max_and_sort(num_t numbers[], int n, num_t max_num) {
for(int i=0; i<n; i++) {
if(numbers[i].hundreds > max_num.hundreds ||
(numbers[i].hundreds == max_num.hundreds && numbers[i].tens > max_num.tens) ||
(numbers[i].hundreds == max_num.hundreds && numbers[i].tens == max_num.tens && numbers[i].units > max_num.units)) {
max_num = numbers[i];
}
}
// 将最大值移除,再对剩余数组进行冒泡排序
memmove(&numbers[1], &numbers[0], sizeof(num_t)*(n-1));
for(int j=0; j<(n-1); j++) {
for(int k=0; k<(n-j-1); k++) {
if(numbers[k].hundreds > numbers[k+1].hundreds ||
(numbers[k].hundreds == numbers[k+1].hundreds && numbers[k].tens > numbers[k+1].tens) ||
(numbers[k].hundreds == numbers[k+1].hundreds && numbers[k].tens == numbers[k+1].tens && numbers[k].units > numbers[k+1].units)) {
num_t temp = numbers[k];
numbers[k] = numbers[k+1];
numbers[k+1] = temp;
}
}
}
}
int main() {
num_t numbers[10];
int n = 10;
num_t max_num;
generate_random_nums(numbers, n);
find_max_and_sort(numbers, n, max_num);
printf("Max number: ");
print_num(max_num);
printf("\nSorted array (excluding max):");
for(int i=0; i<n-1; i++) {
print_num(numbers[i]);
}
return 0;
}
// 辅助函数打印三位数结构体
void print_num(num_t num) {
printf("(%d,%d,%d)", num.hundreds, num.tens, num.units);
}
```
在这个程序中,首先生成一个包含十组随机三位数的数组,然后找出最大值并将其移出,最后对剩下的数组进行降序排列。注意,由于是简单版实现,这里并未处理可能出现的最大值就是数组内某个元素的情况。
阅读全文