возвращая массив с динамическим расположением в c - PullRequest
0 голосов
/ 18 декабря 2018

Я должен вернуть массив double* b и сравнить его с double* a внутри функции arrays_equal.Код не работает и тест не пройден.Я пишу здесь соответствующие коды:

double* array_copy(/*IN*/ const double* a, int n) {

   double *b;
   b = xcalloc(n,sizeof(double));

   for(int i = 0; i < n; i++){
       *(b + i) = *(a + i);    
       printf("%.2f\n",b[i]);   
       }     
   printf("%.2f\n",b[0]);

   return  b;
}

, и я пишу здесь свою тестовую функцию, я должен получить double * b1 из моей функции array_copy:

void array_copy_test(void) {
    double a1[] = { 1.50, 2.30, 42.42 };
    double* b1 = array_copy(a1, 3);
    test_equal_b(arrays_equal(a1, b1, 3), true);
    free(b1);

функция равенства:

bool arrays_equal(/*IN*/ const double* a, /*IN*/ const double* b, int n) {
    int j = 0;
    for(int i = 0; i<= n; i++){
        if(approx(*(a+i),*(b+i))){

        j++;
       }
    }      

if(n == j){
      return true;
     } else{return false;}

}


void arrays_equal_test(void) {

    double a3[] = { 1.5, 2.3, 42.43 };
    double b3[] = { 1.5, 2.3, 42.42 };
    test_equal_b(arrays_equal(a3, b3, 3), false);


}

bool approx(double a, double b) {
    return fabs(a - b) < 1e-6;
}

Может кто-нибудь сказать мне, где моя проблема?

1 Ответ

0 голосов
/ 19 декабря 2018

В вашем коде есть ошибки.Прежде всего, почему вы написали for(int i = 0; i<= n; i++)?Таким образом, он будет повторяться n+1 раза.Это должно быть for(int i = 0; i< n; i++).

Тогда вы ожидаете, что ваш тест вернется true: третий элемент сильно отличается a3[2] = 42.43, b3[2] = 42.42, разница намного больше, чем 10e-6, поэтому онине равны.

...