Напишите функцию, которая для двух чисел a и b возвращает их сумму квадратов a ^ 2 + b ^ 2 и (a + b) ^ 2, используя указатели - PullRequest
0 голосов
/ 12 апреля 2020

Моя программа возвращает неправильные результаты. Я честно не знаю, где проблема. a==5 и b==3 вместо правильных результатов возвращают 2 для a ^ 2 + b ^ 2 и 10 для (a + b) ^ 2. Если я не использую указатели неправильно, я не знаю, в чем проблема.

#include <stdio.h>
#include <stdlib.h>

int main()
{
int a=5;
int b=3;
int c,d;
koko(&a,&b,&c,&d);
printf("Rezulat brojeva %d i %d je %d i %d",a,b,c,d);

}

int koko(int *x,int *y,int *z,int *u)
{
 *z=(*x)^2+(*y)^2;
 *u=(*x+*y)^2;
}

Ответы [ 2 ]

1 голос
/ 12 апреля 2020

Оператор ^ не предназначен для возведения в степень в c. Это побитовый оператор XOR, смотрите эту ссылку .

, которую вы можете использовать вместо:

int koko(int *x,int *y,int *z,int *u)
{
 *z=((*x)*(*x))+((*y)*(*y));
 *u=(*x+*y)*(*x+*y);
}
0 голосов
/ 12 апреля 2020

В синтаксисе C символ ^ не предполагается использовать для возведения в степень для операндов. Это подразумевается как оператор XOR, используемый операциями с битами.

Вы можете выполнить возведение в степень на 2, умножив соответствующее значение на себя:

exp2_a = a * a;       // Example.

Также параметры int* типов для x и y в koko() не обязательно должны быть указателями (если для задачи не требуется, чтобы все типы параметров были указателями), поскольку нам не нужно изменять переданные объекты изнутри koko(). Это делает дескриптор при вызове функции более удобным, поскольку нам не нужно добавлять оператор амперсанда (&) для предоставления относительных адресов. Просто измените их на тип int.

Кроме того, koko() ничего не возвращает, поэтому возвращаемое значение должно иметь тип void, а не int.

Поэтому лучше использовать:

void koko(int x, int y, int* z, int* u)
{
   *z = (x * x) + (y * y);
   *u = (x + y) * (x + y);
}

Далее вы пропустили объявление / прототип koko() до main(), поскольку функция определена после main() в исходном коде. Это даст вам как минимум предупреждение о компиляции.


Вот полный и исправленный код:

#include <stdio.h>
#include <stdlib.h>

void koko(int,int,int*,int*);

int main()
{
   int a=5;
   int b=3;
   int c,d;
   koko(a,b,&c,&d);
   printf("Rezulat brojeva %d i %d je %d i %d",a,b,c,d);
}

void koko(int x, int y, int* z, int* u)
{
   *z = (x * x) + (y * y);
   *u = (x + y) * (x + y);
}

Вывод:

Rezulat brojeva 5 i 3 je 34 i 64 
...