#include "stdio.h"
void main()
{
int n,i;
float s=1/3;
scanf("%d",&n);
for(i=0;i<=n;i++)
{
s=s*3;
printf("pow(3,%d) = %.0f\n",i,s);
}
}
输出3的n次方,这个怎么改,不用pow函数
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- 冷0_O 2021-11-06 18:38关注
你的问题就在float s=1/3;这个语句这里,在计算机中,同类型相互运算的结果也是同种类型,1/3是两个int型在运算,所以的到的结果是0.33333无限循环取整数部分,也就是1/3是等于0的,所以s的值一开始就是0。然而,两个不同类型进行运算,自动向高精度转化,你可以把1/3改成1/3.0,就代表一个int除以一个double,结果才是真正的三分之一。
再者,main函数的返回值只能是int,不要写成void main(即便有些老编译器支持这样),因为C语言只给出了int main()和int main(int argc,char *argv[]) 两者形式的主函数。最后对于浮点数(float、double),我建议用双精度的double而不是单精度的float。
优化代码如下:int main() { int n = 0,flag = 0; double sum = 1; scanf("%d",&n); if(0 == n){ printf("结果为:1\n"); return 0; } if(n < 0){ //如果是负数,先将n取绝对值,算出3的n平方 n = 0 - n; flag = 1; } for(int i=0;i<n;i++) //3的正数n平方 sum = sum*3; if(1 == flag){ //n是负数 sum = 1/sum; } printf("结果为:%lf\n",sum); return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥15 2020长安杯与连接网探
- ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
- ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
- ¥16 mybatis的代理对象无法通过@Autowired装填
- ¥15 可见光定位matlab仿真
- ¥15 arduino 四自由度机械臂
- ¥15 wordpress 产品图片 GIF 没法显示
- ¥15 求三国群英传pl国战时间的修改方法
- ¥15 matlab代码代写,需写出详细代码,代价私
- ¥15 ROS系统搭建请教(跨境电商用途)