1
我有一個計劃:排序使用程序指針
- 給出數字的序列,甚至
- 按升序排序號碼,
- 按降序排序奇數和
- 將排序後的偶數添加到數組,然後排序奇數。
實施例:
Input: 1, 2, 3, 4, 5, 6
Expected output: 2, 4, 6, 5, 3, 1
Actual output: 1578032, 0, 3, 6, 6487408, 0
這裏是我的代碼:
#include <stdio.h>
int main() {
input();
}
int input() {
int n;
printf("Enter The Number Of Elements You Want To Enter : ");
scanf("%d", & n);
int * ptr, i, ev = 0, od = 0;
ptr = (int *) calloc(n, sizeof(int));
for (i = 0; i < n; i++) {
printf("Enter Number : ");
scanf("%d", (ptr + i));
if (* (ptr + i) % 2 == 0) {
ev++;
} else {
od++;
}
}
sorteven(& ptr, ev, od, n);
}
int sorteven(int * ptr, int ev, int od, int n) {
int i, j = 0, swap = 0, * ptreven;
ptreven = (int *) calloc(ev, sizeof(int));
for (i = 0; i < n; i++) {
if (* (ptr + i) % 2 == 0) { *
(ptreven + j) = * (ptr + i);
j++;
}
}
for (i = 0; i < ev - 1; i++) {
for (j = 0; j < ev - i - 1; j++) {
if (* (ptreven + j) > * (ptreven + j + 1)) {
swap = * (ptreven + j); *
(ptreven + j) = * (ptreven + j + 1); *
(ptreven + j + 1) = swap;
}
}
}
sortodd(& ptr, ev, od, n, & ptreven);
}
int sortodd(int * ptr, int ev, int od, int n, int ptreven) {
int i, k = 0, swap = 0, * ptrodd, j;
ptrodd = (int *) calloc(od, sizeof(int));
for (i = 0; i < n; i++) {
if (* (ptr + i) % 2 != 0) { *
(ptrodd + k) = * (ptr + i);
k++;
}
}
for (i = 0; i < od - 1; i++) {
for (j = 0; j < od - i - 1; j++) {
if (* (ptrodd + j) < * (ptrodd + j + 1)) {
swap = * (ptrodd + j); *
(ptrodd + j) = * (ptrodd + j + 1); *
(ptrodd + j + 1) = swap;
}
}
}
merge(& ptr, ev, od, n, & ptreven, & ptrodd);
}
int merge(int * ptr, int ev, int od, int n, int * ptreven, int * ptrodd) {
int * ptrmerge, i, j;
ptrmerge = (int *) calloc(n, sizeof(int));
for (i = 0; i < ev; i++) { *
(ptrmerge + i) = * (ptreven + i);
}
for (i = ev, j = 0; i < n; i++, j++) { *
(ptrmerge + i) = * (ptrodd + j);
}
display(& ptrmerge, n);
}
int display(int * ptrmerge, int n) {
int i;
printf("OUTPUT : ");
for (i = 0; i < n; i++) {
printf(" %d ", * (ptrmerge + i));
}
}
'sortodd(PTR,EV,OD,N,ptreven); } int sortodd(int * ptr,int ev,int od,int n,int ptreven)':'ptr'和'ptreven'的類型是不同的。合併(&ptr,ev,od,n,&ptreven,&ptrodd); } int merge(int * ptr,int ev,int od,int n,int * ptreven,int * ptrodd)':同上。等等。 – BLUEPIXY
你的程序有多個邏輯和程序問題。例如(ptr + i),ptr是指向整數的指針,我是一個整數,你如何做這個操作。此外,在編譯級別檢查警告並不錯,它們會給你提供很好的信息。 Yo在你的代碼中重複了這個操作。首先解決簡單的錯誤,然後將修正後的代碼放在這裏以找到它的邏輯問題。我認爲你的問題並不瞭解指針是如何工作的 – Eisa
@BLUEPIXY你能改正代碼嗎? –