设有一数列,包含10个数,现要求编一程序首先按升序排好,然后从指定位置开始的n个数按逆序重新排列并输出新的完整数列。进行逆序处理时要求使用指针方法。(可以用随机函数生成数组元素)
时间: 2023-11-27 17:51:18 浏览: 93
下面是示例代码,可以参考:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define NUM 10
void sort(int arr[], int n);
void reverse(int arr[], int n, int start, int count);
int main()
{
int arr[NUM], i, start, count;
srand(time(NULL)); // 初始化随机数种子
// 生成随机数组
printf("原始数组:");
for (i = 0; i < NUM; i++) {
arr[i] = rand() % 100; // 生成0~99的随机数
printf("%d ", arr[i]);
}
// 排序
sort(arr, NUM);
// 输入指定位置和个数
printf("\n请输入要翻转的起始位置(1~%d):", NUM);
scanf("%d", &start);
printf("请输入要翻转的个数(1~%d):", NUM - start + 1);
scanf("%d", &count);
// 翻转
reverse(arr, NUM, start, count);
// 输出新数组
printf("\n翻转后的数组:");
for (i = 0; i < NUM; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
// 冒泡排序
void sort(int arr[], int n)
{
int i, j, temp;
for (i = 0; i < n - 1; i++) {
for (j = 0; j < n - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
// 翻转
void reverse(int arr[], int n, int start, int count)
{
int *p1, *p2, temp;
p1 = arr + start - 1;
p2 = p1 + count - 1;
while (p1 < p2) {
temp = *p1;
*p1 = *p2;
*p2 = temp;
p1++;
p2--;
}
}
```
示例输出:
```
原始数组:50 20 16 22 33 28 78 97 29 76
请输入要翻转的起始位置(1~10):3
请输入要翻转的个数(1~8):6
翻转后的数组:50 20 76 29 97 78 33 28 22 16
```
阅读全文