
C语言编程高手请进~
计算X的Y次方,其中Y为整数(可以是负整数或0),X为实型(不得使用pow函数计算)。自己瞎编了下,希望能指出其中的错误~谢谢咯~#include<stdio.h>int...
计算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;
}
} 展开
自己瞎编了下,希望能指出其中的错误~谢谢咯~
#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;
}
} 展开
3个回答
2010-01-30
展开全部
虽然本人不是什么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;
}
首先是语法错误:程序中的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;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询