在线编译器 C

#include <stdio.h> // 升序排序函数(冒泡排序) void sort_ascending(int arr[], int size) { for (int i = 0; i < size - 1; i++) { for (int j = 0; j < size - i - 1; j++) { if (arr[j] > arr[j + 1]) { int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } } // 降序排序函数(冒泡排序) void sort_descending(int arr[], int size) { for (int i = 0; i < size - 1; i++) { for (int j = 0; j < size - 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 arr[10]; // 1. 读取 10 个通过空格分隔的整数 for (int i = 0; i < 10; i++) { scanf("%d", &arr[i]); } // 2. 对前半部分(前 5 个元素)进行升序排序 sort_ascending(arr, 5); // 3. 对后半部分(后 5 个元素)进行降序排序 // arr + 5 表示将后半部分子数组的起始指针传入函数 sort_descending(arr + 5, 5); // 4. 打印输出最终结果,数字间用空格分隔 for (int i = 0; i < 10; i++) { printf("%d", arr[i]); if (i < 9) { printf(" "); } } printf("\n"); return 0; }
这段代码实现了以下功能:读取10个整数,然后对前5个数字进行升序排序,对后5个数字进行降序排序,最后输出整个数组。

代码逻辑是正确的,但有一个潜在问题需要注意。

- 你使用了 `scanf` 读取输入,但没有检查返回值。如果输入格式不符合预期(比如输入了非数字字符),程序可能会产生未定义行为。建议检查 `scanf` 的返回值是否等于成功读取的项目数。

- 在 `sort_descending` 函数中,你通过 `arr + 5` 传递了后半部分的起始地址,这是正确的做法。但要注意,这个指针运算依赖于数组在内存中是连续存储的,你的代码符合这个条件。