利用函数和指针编写一个程序,在main()函数中建立并输入10个元素的一个数组,在swap_five(int*p)函数中实现前5个元素和后5个元素之间的对调
时间: 2024-02-05 14:13:13 浏览: 132
以下是实现代码:
```c
#include <stdio.h>
void swap_five(int* p);
int main() {
int arr[10];
printf("请输入10个整数:\n");
for (int i = 0; i < 10; ++i) {
scanf("%d", &arr[i]);
}
swap_five(arr);
printf("交换后的数组为:\n");
for (int i = 0; i < 10; ++i) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
void swap_five(int* p) {
for (int i = 0; i < 5; ++i) {
int temp = *(p + i);
*(p + i) = *(p + i + 5);
*(p + i + 5) = temp;
}
}
```
在以上代码中,`swap_five()` 函数接受一个指向数组首元素的指针 `p`,并使用循环和指针操作实现了前5个元素和后5个元素之间的对调。在 `main()` 函数中,首先建立并输入了10个整数的数组,然后调用 `swap_five()` 函数对数组进行操作,最后输出操作后的数组。
相关问题
c语言 使用指针编写程序,交换 仅编写一个函数,该函数查找数组中负元素的最大值,并将其与数组的最后一个元素交换。保证数组中只有一个这样的元素,或者没有这样的元素。如果没有负元素,请不要更改数组。 函数原型:void swap_negmax_last(int size, int a[]) 输入格式 该函数将数组的大小和指向数组开头的指针作为输入。数组由整数组成。
好的,我理解了你的问题。下面是使用指针编写的程序,交换数组中负元素的最大值和最后一个元素的位置:
```c
#include <stdio.h>
void swap_negmax_last(int size, int a[]) {
int *max = NULL; // 最大负数指针
int *last = a + size - 1; // 指向数组最后一个元素的指针
int *p = a; // 指向数组第一个元素的指针
// 找到最大的负数
while (p < last) {
if (*p < 0) {
if (max == NULL || *p < *max) {
max = p;
}
}
p++;
}
// 如果有负数,交换最大负数和最后一个元素的位置
if (max != NULL) {
int temp = *max;
*max = *last;
*last = temp;
}
}
int main() {
int a[] = {1, -2, 3, -4, 5};
int size = sizeof(a) / sizeof(int);
swap_negmax_last(size, a);
for (int i = 0; i < size; i++) {
printf("%d ", a[i]);
}
printf("\n");
return 0;
}
```
这个程序首先找到数组中最大的负数,然后将其与数组的最后一个元素交换位置。如果数组中没有负数,则不进行任何操作。注意,在函数中我们使用了指针来操作数组中的元素,这样可以避免数组的拷贝和额外的开销。
阅读全文