c++,完成程序,只在Program和End之间增加代码。 编写一个为数组排序的函数oddeven(int a[], int n);其中a为待排序的数组,n为数组中的元素个数(n<100)。 排序要求: (1)奇数在前,偶数在后,即奇数下标比偶数小; (2)奇数按从小到大排列; (3)偶数按从大到小排列。 例如:排序前数组a为{1 2 3 4 5},排序后为{1 3 5 4 2}。
时间: 2023-11-22 19:54:42 浏览: 34
以下是代码实现:
```c++
#include <iostream>
using namespace std;
void oddeven(int a[], int n) {
for(int i = 0; i < n - 1; i++) {
for(int j = i + 1; j < n; j++) {
if((a[i] % 2 == 0 && a[j] % 2 == 0 && a[i] < a[j]) || (a[i] % 2 == 1 && a[j] % 2 == 1 && a[i] > a[j])) {
swap(a[i], a[j]);
}
}
}
}
int main() {
int a[] = {1, 2, 3, 4, 5};
int n = sizeof(a) / sizeof(int);
oddeven(a, n);
for(int i = 0; i < n; i++) {
cout << a[i] << " ";
}
cout << endl;
return 0;
}
```
其中,oddeven函数用于实现排序,采用了双重循环,依次比较相邻两个元素的大小和奇偶性,并根据要求进行交换。主函数中定义了一个测试数组a,并计算出其元素个数n,然后调用oddeven函数进行排序,最后输出排序后的数组。
相关问题
完成程序,只在Program和End之间增加代码。编写一个为数组排序的函数oddeven(int a[], int n);其中a为待排序的数组,n为数组中的元素个数(n<100)。排序要求: (1)奇数在前,偶数在后,即奇数下标比偶数小; (2)奇数按从小到大排列; (3)偶数按从大到小排列。
下面是函数oddeven的代码实现:
```
void oddeven(int a[], int n) {
int i, j, temp;
for (i = 0; i < n; i++) {
for (j = i+1; j < n; j++) {
if (a[i] % 2 == 0 && a[j] % 2 == 1) { // 奇偶性不同,交换位置
temp = a[i];
a[i] = a[j];
a[j] = temp;
} else if (a[i] % 2 == 1 && a[j] % 2 == 1 && a[i] > a[j]) { // 两个奇数,大小顺序不对,交换位置
temp = a[i];
a[i] = a[j];
a[j] = temp;
} else if (a[i] % 2 == 0 && a[j] % 2 == 0 && a[i] < a[j]) { // 两个偶数,大小顺序不对,交换位置
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
}
```
解释一下代码实现:
首先使用两层循环,遍历所有的数组元素,对于每一个元素,再与后面的元素进行比较。
如果两个元素的奇偶性不同,则需要将它们交换位置,因为题目要求奇数在前偶数在后,而且奇数下标比偶数小。
如果两个元素都是奇数,且顺序不正确,需要将它们交换位置,使得奇数按从小到大排列。
如果两个元素都是偶数,且顺序不正确,需要将它们交换位置,使得偶数按从大到小排列。
最终完成排序后,数组a中的奇数就在前面,偶数在后面,并且奇数按从小到大排列,偶数按从大到小排列。
使用c语言编写一个函数,分别求出数组a中的奇数之和与所有偶数之和格式如下fun(int *a,int n,int *odd,int *even)
下面是使用 C 语言编写的求出数组 `a` 中奇数和偶数之和的函数:
```
void fun(int *a, int n, int *odd, int *even) {
*odd = 0;
*even = 0;
for (int i = 0; i < n; i++) {
if (a[i] % 2 == 0) {
*even += a[i];
} else {
*odd += a[i];
}
}
}
```
该函数接受两个指针变量 `odd` 和 `even`,用于存储奇数和和偶数和。在函数内部,使用循环遍历数组 `a`,判断每一个数是奇数还是偶数,并累加到对应的变量中。