你好,我正在嘗試約2小時來創建一個程序,它將從c中的dinamyc分配數組(有malloc)中刪除偶數。有人可以幫助我一些提示或創建碼。從c中刪除偶數編號
p.s.這是我的第一個主題,所以請隨時給我一些關於如何正確發佈問題的提示。
你好,我正在嘗試約2小時來創建一個程序,它將從c中的dinamyc分配數組(有malloc)中刪除偶數。有人可以幫助我一些提示或創建碼。從c中刪除偶數編號
p.s.這是我的第一個主題,所以請隨時給我一些關於如何正確發佈問題的提示。
假設您已經動態分配了n個元素的數組並對其進行了初始化。
在這種情況下,消除甚至值的元素可以看看下面的方式
size_t remove_even(int *a, size_t n)
{
size_t m = 0;
for (size_t i = 0; i < n; i++)
{
if (a[i] % 2 != 0)
{
if (i != m) a[m] = a[i];
++m;
}
}
return m;
}
它可以被稱爲以下方式
size_t m = remove_even(p, n);
for (size_t i = 0; i < m; i++) printf("%d ", a[i]);
printf("\n");
其中p爲指針,以你的動態分配功能n個元素的數組。
該函數實際上不會刪除任何內容。它只是將奇數元素移動到數組的開頭。
然後,您可以使用標準C函數realloc
物理刪除已刪除的元素。
例如
int *tmp = realloc(p, m * sizeof(int));
if (tmp != NULL) p = tmp;
這裏是一個示範項目
#include <stdlib.h>
#include <stdio.h>
size_t remove_even(int a[], size_t n)
{
size_t m = 0;
for (size_t i = 0; i < n; i++)
{
if (a[i] % 2 != 0)
{
if (i != m) a[m] = a[i];
++m;
}
}
return m;
}
#define N 10
int main(void)
{
int *a = malloc(N * sizeof(int));
for (size_t i = 0; i < N; i++) a[i] = i;
for (size_t i = 0; i < N; i++) printf("%d ", a[i]);
printf("\n");
size_t m = remove_even(a, N);
int *tmp = realloc(a, m * sizeof(int));
if (tmp != NULL) a = tmp;
for (size_t i = 0; i < m; i++) printf("%d ", a[i]);
printf("\n");
free(a);
}
它的輸出是
0 1 2 3 4 5 6 7 8 9
1 3 5 7 9
有一些事情你需要檢查你嘗試代碼的東西之前,但我看到沒有您使用的代碼。
SO不是教程網站,所以這意味着你應該向我們展示一些實際編譯的代碼,並在這裏詢問代碼是否存在問題。
任何晃到比,此代碼應該給你如何檢查是否一個數是odd
或even
一個想法:
#include<stdio.h>
#include<stdlib.h>
int main(void){
int n;
printf("Enter an integer:> ");
if((scanf("%d", &n)) != 1){
printf("Error, Fix it!\n");
exit(1);
}
if (n%2 == 0){
printf("Even\n");
}else{
printf("Odd\n");
}
return 0;
}
整個故事在這裏是不是如果數組裏面的數字是odd
檢查或even
,即將找到一種方法來檢查數字是否爲odd
或even
,然後才應該檢查該數組內是否有odd
或even
數字。我希望你明白我的觀點。
到目前爲止你有什麼?幫助意味着糾正你的錯誤,以便你可以向他們學習。爲別人做的工作對他們沒有幫助 – Alex
@AnoopKanyan這是C++不是C – Alex
顯示你的代碼。 –