编写一个函数,对于两个数字 a 和 b returns 它们的平方和 a ^ 2 + b ^ 2 和 (a + b) ^ 2 使用指针

Write a function that for two numbers a and b returns their sum of squares a ^ 2 + b ^ 2 and (a + b) ^ 2 using pointers

我的程序return结果错误。老实说,我不知道问题出在哪里。 a==5b==3,而不是 return 正确的结果,他们 return 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;
}

^ 运算符不用于取幂 c.it 是按位异或运算符,请参阅此 link

你可以改用这个:

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

在 C 语法中,^ 字符并不暗示用于对操作数执行幂运算。它隐含为位操作使用的 XOR 运算符。

你可以用 f.e 乘以 2 的幂。将各自的值乘以自身:

exp2_a = a * a;       // Example.

xkoko()yint* 类型的参数也不需要是指针(只要它不是所有参数类型必须是指针的任务),因为我们不需要从 koko() 内部更改传递的对象。这使得函数调用处的句柄更加方便,因为我们不需要添加符号运算符 (&) 来提供相对地址。只需将它们更改为类型 int.

此外,koko() 不会 return 任何东西,因此 return 值应该是 void 类型,而不是 int

所以宁愿使用:

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

接下来是您在 main() 之前错过了 koko() 的 declaration/prototype,因为该函数是在源代码中的 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