Моя программа возвращает неправильные результаты. Я честно не знаю, где проблема. 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;
}
-1
ile123 12 Апр 2020 в 11:32

2 ответа

Лучший ответ

В синтаксисе 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 
0
RobertS supports Monica Cellio 12 Апр 2020 в 12:08

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

Вы можете использовать это вместо:

int koko(int *x,int *y,int *z,int *u)
{
 *z=((*x)*(*x))+((*y)*(*y));
 *u=(*x+*y)*(*x+*y);
}
1
hanie 12 Апр 2020 в 09:14