C语言编程高手请进~

计算X的Y次方,其中Y为整数(可以是负整数或0),X为实型(不得使用pow函数计算)。
自己瞎编了下,希望能指出其中的错误~谢谢咯~

#include<stdio.h>

int main (void)

{
int i, y;
float x, t, ss;

printf("Input x, y:");
scanf("%d, %d", &x, &y);
t = x;

if (y > 0)
{
for (i = 1; i <= y; i++)
{
if (y != i)
{
t = t * x;
}
else
{
return 0;
}

}
printf("%-6f^%d=%-6f", x, y, t);

}

if (y < 0)
{
for(i = 1; i <= (- y); i ++)
{
if (( - y) != i)
{
t = t * x;
ss = 1 / t;
}
else
{
return 0;
}
}

printf("%-6f^%d=%-6f", x, y, ss);

}
if (y == 0 && x == 1)
{
printf("%-6f^%d=%-6f", x, y, 1);
return 0;
}

}

虽然本人不是什么c语言高手,不过对于lz的程序,本人还是有些许拙见要向lz说明的:
首先是语法错误:程序中的x变量是float型的,但scanf中读入的x却是整型的,应改为scanf("%f, %d", &x, &y)比较好。
其次是算法有问题:lz是不是每次运行都得不到结果呢??原因是程序中滥用了return 0。例如:
if (y > 0)
{
for (i = 1; i <= y; i++)
{
if (y != i)
{
t = t * x;
}
else
{
return 0;
}

}
printf("%-6f^%d=%-6f", x, y, t);

}
其中if (y != i)……else本人是看了好几遍也不知道lz有何用意,而且for循环的最后一次循环一定会有y==i,于是会导致循环进入了else语句中执行return 0,那结果都返回了还怎么执行printf("%-6f^%d=%-6f", x, y, t)语句呢??下面的也差不多是这个问题了!!!
最后也就是一楼提到的语句简洁问题,我就有点不明白楼主为什么那么喜欢在if………语句中都用到printf("%-6f^%d=%-6f", x, y, t),其实这个句子最后统一再用也行,当然这个也只是小问题了!!!主要的还是前两个问题使楼主的程序不能正确运行!!
下面是我写的程序,基本上也是秉承了lz的算法,只是有些改动。
int main(void)
{
int i, y;
float x,t=1;

printf("Input x, y:");
scanf("%f, %d", &x, &y);

if (y > 0)
for (i = 1; i <= y; i++)t=t*x;
else if (y < 0)
{
for(i = 1; i <= - y; i ++)t=t*x;
t=1/t;
}
printf("%-6f^%d=%-6f", x, y, t);
return 0;
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-01-30
ls的回答不错

即指明了错误的方向原因

又给余了lz自己寻找改正的空间

恩, 向上顶
第2个回答  2010-01-29
问题大概有3个,读错,有的条件重复,注意语句的简洁。

首先提醒下,scanf要读的是两个不同的型,而不是%d,%d

后面的就交给你自己了……
相似回答
大家正在搜