c语言课后作业求助
5^6 不是等于15625吗c语言为什么显示15624呀#include <stdio.h>
#include <math.h>
int main()//计算:1^2 + 2^3 + 3^4 + 4^5 + 5^6 + 6^7 + 7^8 + 8^9
{
int c,number1=1,number2=1,sum=0;
for (number1=1;number1<=8;number1++)
{
number2++;
c=pow(number1, number2);
sum+=c;
printf("当前number1的值%d 当前number2的值%d 当前c的值%d\n",number1,number2,c);//5^6 =15625
}
printf("当前sum的值%d ",sum);
}
本帖最后由 stein 于 2021-6-7 11:42 编辑
原因是pow()函数是double类型的,函数原型如下。
double pow(double x, double y)
你定义的变量是整形,在强制转换的时候就有可能出错,把5^6=15624.999999,强转成了15624。
你用VS2019,编译器会报错: warning C4244: “=”: 从“double”转换到“int”,可能丢失数据
意思就是函数是double类型,你传递的是int类型,就把0.999999....丢失了
你可以改成这样就不会错了。
#include <stdio.h>
#include <math.h>
int main()//计算:1^2 + 2^3 + 3^4 + 4^5 + 5^6 + 6^7 + 7^8 + 8^9
{
double c, number1 = 1, number2 = 1, sum = 0;
for (number1 = 1; number1 <= 8; number1++)
{
number2++;
c = pow(number1, number2);
sum += c;
printf("当前number1的值%.0f 当前number2的值%.0f 当前c的值%.0f\n", number1, number2, c);//5^6 =15625
}
printf("当前sum的值%.0f ", sum);
}
你编译器的问题吧,我用DEVC++是15625 可能是编译器的问题,用别的软件试试吧
我的code::blocks跟你显示效果一样 {:5_103:} 本帖最后由 王之叹息 于 2021-6-5 12:40 编辑
https://blog.csdn.net/wuli_dear_wang/article/details/80373255?utm_medium=distribute.pc_relevant_bbs_down.none-task-blog-baidujs-1.nonecase&depth_1-utm_source=distribute.pc_relevant_bbs_down.none-task-blog-baidujs-1.nonecase
https://blog.csdn.net/weixin_43583397/article/details/84667561?utm_medium=distribute.pc_relevant_bbs_down.none-task--2~all~sobaiduend~default-1.nonecase&depth_1-utm_source=distribute.pc_relevant_bbs_down.none-task--2~all~sobaiduend~default-1.nonecase
搜出来好几个这种帖子
感觉说的还是很有道理的,并且你只要把pow函数求出的值放在float或double类型的变量进行存储就没误差了,在你的函数里就是把c定义成float或double类型就行了
毕竟pow本身就是个函数,只不过是现成写好的,就可能其中算法有点问题5^6求出来15624.999999转换成整形就是156724了
好吧,我也是有点迷,你如果不用变量,int a;然后直接a=pow(5,6)求出来的就是156725. 运行这个代码看看
#include <stdio.h>
#include <math.h>
int main()//计算:1^2 + 2^3 + 3^4 + 4^5 + 5^6 + 6^7 + 7^8 + 8^9
{
int c,number1=1,number2=1,sum=0;
for (number1=1;number1<=8;number1++)
{
number2++;
c=pow(number1, number2);
sum+=c;
printf("当前number1的值%d 当前number2的值%d 当前c的值%d, cf: %lf\n",number1,number2,c, pow(number1, number2));//5^6 =15625
}
printf("当前sum的值%d ",sum);
}
用visual stdio
页:
[1]