2013-03-13 56 views
2

我一直在研究一些基本的编码,我努力想找出正确的方式来扫描整数,第一个是我的x变量,第二个是n哪个x被提升到。我尝试5^5并用当前的代码得到-287648。整数功率在c

#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; 
} 
+1

你需要有更好的变量名称,所以你不会混淆 – 2013-03-13 19:07:08

+2

我认为你正在使用y,你打算使用n,正确吗? – BlackVegetable 2013-03-13 19:07:28

回答

9

我敢肯定你的意思是:

y = pow(x, n); 
      ~~ 

你得到一个 “奇怪” 的结果,因为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提到,因为ylong int,格式应为%li(不%i):

printf("%li\n", y); 
+1

鉴于此,'y'的打印也不正确。由于它是一个'long int',格式应该是:'printf(“%li \ n”,y);' – SomeWittyUsername 2013-03-13 19:14:51

+0

@icepack非常真实 – 2013-03-13 19:16:39

+0

更好的是:“输入基数,回车,然后指数”或出于某种原因......不确定输入是否被解释为\ r \ n或只是\ n – 2013-03-13 19:17:06

0

您正在使用y未被初始化为pow()函数参数。

这会导致结果溢出。

-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数据类型。你可以编写这个函数来返回一个无符号长整数,并且用一个无符号长整数形式参数x来处理更大的数字,但是如果你知道你将处理大数字,你应该使用浮点类型。

如果你知道返回值必须作为整数类型使用,那么这段代码运行良好,并保存任何类型conversion.Hope它有帮助。

+1

这似乎并没有回答手头的实际问题。 – 2014-12-22 07:40:47