我必须做以下事情:
给定一个带随机数的向量,将它分成2个其他向量,奇数和偶数。但是在函数中,所有向量必须通过参数传递(不能使用全局)。 这是我的代码:
#include <stdio.h>
#include <stdlib.h>
void vetores(int *vetor, int *A, int *B)
{
int i = 0,aux;
for(i = 0;i < 100; i++)
{
if(vetor[i] % 2 == 0)
{
aux = vetor[i];
A[i] = aux;
}else{
aux = vetor[i];
B[i] = aux;
}
}
}
int main()
{
int vetor[101], a[51], b[51],i;
/*a = (int)malloc(sizeof(int)*51);
b = (int)malloc(sizeof(int)*51);*/
for(i = 0; i < 100; i++)
{
vetor[i] = i;
}
vetores(vetor,a,b);
for(i = 0; i < 50; i++)
{
if(vetor[i] % 2 == 0)
{
printf("%d",a[i]);
}else
{
printf("%d",b[i]);
}
}
return 0;
}
如果你测试那个代码,那么矢量正在被改变(它不应该被改变)并且A矢量没有接收偶数!
答案 0 :(得分:3)
您的主要问题是您根据输入中的位置索引输出。
例如,如果您的第一个偶数位于input[3]
,那么您将其写入even_output[3]
,其中应该(可能)位于even_output[0]
。
您可能需要以下内容:
if (input[i] %2 == 0)
*A++ = input[i];
else
*B++ = input[i];
您可能还需要做一些事情来告诉来电者您找到了多少个奇数和偶数(并且调用者可能需要稍微分配内存,除非这些计数相等 - 现在,您有101个输入,并且为每个输出分配了51个点。如果你有(例如)60个偶数和40个奇数,你将写入超出你为偶数分配的空间的末尾。使用你提供的输入,这个问题赢了不会出现,但在任何其他情况下,它不仅可能,而且实际上可能。
答案 1 :(得分:1)
数组A和B需要单独的索引计数。
试试这个:
void vetores(int *vetor, int *A, int *B)
{
int i = 0,aux;
int aIndex = 0, bIndex = 0;
for(i = 0;i < 100; i++)
{
if(vetor[i] % 2 == 0)
{
A[aIndex] = vetor[i];
aIndex++;
}else{
B[bIndex] = vetor[i];
bIndex++;
}
}
}
尝试使用不错的debugger tool,这有助于您在代码中找到此类错误。
您还需要检查阵列的长度:
int vetor[101], a[51], b[51]
我认为a
或b
如果是随机的,则可能有超过51个值。
希望它有所帮助。
答案 2 :(得分:0)
以下是一些提示:除了你几乎总是拼写错误的“向量”之外,你使用的是经典的c数组而不是向量。你的vector方法需要一些重构,因为你不必使用额外的内存和双重赋值变量。
#include <stdio.h>
#include <stdlib.h>
void vectores(int *vector, int *A, int *B)
{
int i = 0, k = 0, l = 0;
for(;i < 100; i++)
{
if(vector[i] % 2 == 0)
{
A[k++] = vector[i];
}else{
B[l++] = vector[i];
}
}
}
int main()
{
int vector[100], a[51], b[51],i;
for(i = 0; i < 100; i++)
{
vector[i] = i;
}
vectores(vector,a,b);
for(i = 0; i < 51; i++){
printf("%d %d",a[i], b[i] );
printf("\n");
}
return 0;
}
答案 3 :(得分:0)
这在技术上不是你问题的答案,但是如果你想分开奇数和偶数值,你最好在每个值的最后一位做一次QuickSort传递,例如
int temp, i = 0, j = N-1;
while ( i < j ) {
while ( vetor[i] & 1 == 0 )
i += 1;
while ( vetor[j] & 1 == 1 )
j -= 1;
if ( i < j ) {
temp = vetor[i];
vetor[i] = vetor[j];
vetor[j] = temp;
}
}
以上是未经测试的,如果您发现任何错误,请随时保留它们。