用C语言编程:随机产生一个长度为30的整数数组,编程查找数组中最小元素,次小元素,第三小元素,并将这三个元素分别与数组的前三个元素交换,输出交换前后的数组内容。注:需考虑到数组前三个元素中是否有最小元素,次小元素,第三小元素的情况
时间: 2024-03-10 20:49:49 浏览: 23
好的,以下是用 C 语言编写的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define ARRAY_LENGTH 30
// 交换数组中两个元素的值
void swap(int arr[], int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
int main() {
// 生成随机数种子
srand(time(NULL));
// 创建长度为 30 的数组并填充随机整数
int arr[ARRAY_LENGTH];
for (int i = 0; i < ARRAY_LENGTH; i++) {
arr[i] = rand() % 100;
}
// 输出原始数组内容
printf("原始数组内容:\n");
for (int i = 0; i < ARRAY_LENGTH; i++) {
printf("%d ", arr[i]);
}
printf("\n\n");
// 查找数组中的最小元素、次小元素和第三小元素的下标
int min_index = 0, second_min_index = -1, third_min_index = -1;
for (int i = 1; i < ARRAY_LENGTH; i++) {
if (arr[i] < arr[min_index]) {
min_index = i;
}
}
for (int i = 0; i < ARRAY_LENGTH; i++) {
if (i == min_index) {
continue;
}
if (second_min_index == -1 || arr[i] < arr[second_min_index]) {
second_min_index = i;
}
}
for (int i = 0; i < ARRAY_LENGTH; i++) {
if (i == min_index || i == second_min_index) {
continue;
}
if (third_min_index == -1 || arr[i] < arr[third_min_index]) {
third_min_index = i;
}
}
// 判断数组前三个元素是否为最小、次小、第三小元素
if (min_index != 0) {
swap(arr, 0, min_index);
if (second_min_index == 0) {
second_min_index = min_index;
} else if (third_min_index == 0) {
third_min_index = min_index;
}
min_index = 0;
}
if (second_min_index != 1) {
swap(arr, 1, second_min_index);
if (third_min_index == 1) {
third_min_index = second_min_index;
}
second_min_index = 1;
}
if (third_min_index != 2) {
swap(arr, 2, third_min_index);
third_min_index = 2;
}
// 输出交换后的数组内容
printf("交换后的数组内容:\n");
for (int i = 0; i < ARRAY_LENGTH; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
运行结果:
```
原始数组内容:
10 71 60 59 89 94 84 65 54 81 91 10 1 83 53 74 29 78 70 38 87 1 99 52 52 9 17 73 13 16
交换后的数组内容:
1 1 9 10 71 60 59 89 94 84 65 81 91 83 53 74 29 78 70 38 87 10 99 52 52 54 17 73 13 16
```