我編寫了一個廣義的C語言程序,它給出一系列數字,按升序排序偶數,按降序排列奇數,並將所有偶數置於數組的起始部分,然後奇數數字。我的排序功能給出了意想不到的輸出
Example: 2, 5, 1, 0, 4, 7, 9, 3, -2, 10, 20, 15
Expect: -2, 0, 2, 4, 10, 20, 15, 9, 7, 5, 3, 1
需要6個功能。解決方案必須僅使用提到的函數提供。不應聲明全局變量。使用適當的數據類型,返回類型和函數參數。
Input()
- 取元素和值作爲來自用戶的輸入的總數。將值存儲在「輸入」數組中。SortEven()
- 按升序排序的偶數並將其存儲在一個名爲「甚至」SortOdd()
陣列 - 地方 - 在一個名爲「奇」Merge()
數組降序排列,並將它們存儲排序奇數數組的起始部分中的所有偶數都命名爲「結果」,然後是奇數。Display()
- 顯示「結果」數組的內容。main()
- 調用Input()模塊開始執行。
計劃:
#include <stdio.h>
int main() {
input();
}
int input() {
int n;
printf("Enter The Number Of Elements You Want To Enter : ");
scanf("%d", &n);
int a[n], i, ev = 0, od = 0;
for (i = 0; i < n; i++) {
printf("Enter Number : ");
scanf("%d", &a[i]);
if (a[i] % 2 == 0) {
ev++;
} else {
od++;
}
}
sorteven(a, ev, od, n);
}
int sorteven(int a[], int ev, int od, int n) {
int i, j = 0, swap, even[ev];
for (i = 0; i < n; i++) {
if (a[i] % 2 == 0) {
even[j] = a[i];
j++;
}
}
for (i = 0; i < ev - 1; i++) {
for (j = 0; j < ev - i - 1; j++) {
if (even[j] > even[j + 1]) {
swap = even[j];
even[j] = even[j + 1];
even[j + 1] = swap;
}
}
}
sortodd(a, ev, od, n, even);
}
int sortodd(int a[], int ev, int od, int n, int even[]) {
int i, k = 0, swap, odd[od], j;
for (i = 0; i < n; i++) {
if (a[i] % 2 != 0) {
odd[k] = a[i];
k++;
}
}
for (i = 0; i < od - 1; i++) {
for (j = 0; j < od - i - 1; j++) {
if (odd[j] < odd[j + 1]) {
swap = odd[j];
odd[j] = odd[j + 1];
odd[j + 1] = swap;
}
}
}
merge(a, ev, od, n, even, odd);
}
int merge(int a[], int ev, int od, int n, int even[], int odd[]) {
int merge[n], i;
for (i = 0; i < ev; i++) {
merge[i] = even[i];
}
for (i = ev; i < n; i++) {
merge[i] = odd[i];
}
display(merge, n);
}
int display(int merge[], int n) {
int i;
printf("OUTPUT : ");
for (i = 0; i < n; i++) {
printf(" %d ", merge[i]);
}
}
歡迎SO,你寫什麼預期結果,但你是怎麼獲得?你用調試器檢查了中間結果嗎? –
當我輸入1,2,3,4,5時,我得到的輸出是2,4,1,0,49 –
有一件事可能會有所幫助:在'main()'函數之前爲函數聲明原型。例如,'int input(void);'和'int sorteven(int a [],int evenCount,int oddCount,int totalCount);'。否則,你的數組將作爲int來傳遞,如果sizeof(int)!= sizeof(int *)',代碼將無法正常工作。 –