我一直在研究一些基本的编码,我正在努力寻找正确的扫描方法,第一个是我的x变量,第二个是x被提升到的n。我尝试5 ^ 5并使用我当前的代码获得-287648。
#include <stdio.h>
#include <math.h>
void x_to_the_n (void)
{
int x=0;
int n =0;
long int y;
printf("Enter a integer for X and N\n");
scanf("%i\n%i\n",&x,&n);
y=pow(x,y);
printf("%i \n",y);
}
int main(void)
{
x_to_the_n ();
return 0;
}
答案 0 :(得分:9)
我很确定你的意思是:
y = pow(x, n);
~~
你得到了一个奇怪的&#34;结果是因为y
永远不会被初始化为任何东西;你正在提升x
的力量(一些垃圾)和垃圾。
请注意,正如@ 0A0D在评论中建议的那样,如果您使用更多描述性变量,则此问题会更加明显:
int base = 0;
int exponent = 0;
long int result;
printf("Enter the base and exponent, on separate lines\n");
scanf("%i\n%i\n", &base, &exponent);
result = pow(base, result);
~~~~~~~ oops!
另外,正如@icepack所提到的,由于y
是long int
,因此格式应为%li
(不是%i
):
printf("%li\n", y);
答案 1 :(得分:0)
您正在使用未初始化为y
函数参数的pow()
。
这会导致结果溢出。
答案 2 :(得分:-2)
如果你需要一个函数来进行整数求幂,你可以试试这样的
#include <stdio.h>
unsigned int_pow(int n, unsigned x);
int main(void)
{
int n, x;
printf("Enter an integer (n) followed by the power (x) to raise to: ");
scanf("%i %i", &n, &x);
printf("%i^%i = %i\n", n, x, int_pow(n, x));
return 0;
}
unsigned int_pow(int n, unsigned x)
{
unsigned i, a = n;
switch (x)
{
case 0:
return 1;
case 1:
return n;
default:
for (i = 1; i < x; ++i) {
a *= n;
}
break;
}
return a;
}
您可能希望添加一些代码来检查传递给函数的错误值。大指数将溢出unsigned int数据类型。你可以编写函数来返回一个unsigned long,并使用unsigned long来形成正式参数x以处理更大的数字,但如果你知道你将处理大数字,你可能应该使用float类型。
如果您知道返回的值必须用作整数类型,那么此代码可以正常工作并保存任何类型转换。希望它有帮助。