编写一个函数,对于两个数字 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==5
和 b==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.
x
和 koko()
中 y
的 int*
类型的参数也不需要是指针(只要它不是所有参数类型必须是指针的任务),因为我们不需要从 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
我的程序return结果错误。老实说,我不知道问题出在哪里。 a==5
和 b==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.
x
和 koko()
中 y
的 int*
类型的参数也不需要是指针(只要它不是所有参数类型必须是指针的任务),因为我们不需要从 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