鱼C论坛

 找回密码
 立即注册
查看: 2285|回复: 2

[已解决]关于c语言课后作业《数据类型》

[复制链接]
发表于 2020-9-9 13:00:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 街角提子 于 2020-9-9 13:04 编辑

在课后作业中有数麦数的问题,根据提示我照猫画虎进行编程,但编程后的结果是unsigned int的最大值而不是如答案中所说的unsigned long long int的最大值,


我个人的代码如下:

  1. #include <stdio.h>
  2. #include <math.h>

  3. int main()
  4. {
  5.        
  6.         int i;
  7.         unsigned long long  sum;
  8.         unsigned long long  weight;
  9.         unsigned long long  m;
  10.        
  11.         for(i=0;i<64;i++)
  12.         {
  13.                 m=pow(2,i);
  14.                 sum=sum+m;
  15.         }
  16.        
  17.         weight=sum/25000;
  18.        
  19.         printf("舍罕王应该给达伊尔%11u的麦子,\n\
  20. 如果每25000粒麦子为1kg,那么应该给达伊尔%11u",sum,weight);

  21. return 0;
  22. }
复制代码


请问有人知道为什么吗
最佳答案
2020-9-9 13:48:29
你的sum没有赋初值,再者printf中格式化字符写错了,是%llu,你把小写L写成数字1了,所以结果不对。
另外最好不要用pow,这个函数返回值为浮点数,可能会因为精度问题导致结果不太精确。
  1. #include <stdio.h>

  2. int main()
  3. {
  4.         
  5.     int i;
  6.     unsigned long long  sum=0;
  7.     unsigned long long  weight;
  8.     unsigned long long  m=1;
  9.    
  10.     for(i=0;i<64;i++)
  11.     {
  12.         sum=sum+m;
  13.         m=m*2;
  14.     }
  15.    
  16.     weight=sum/25000;
  17.    
  18.     printf("舍罕王应该给达伊尔%llu的麦子,\n\
  19. 如果每25000粒麦子为1kg,那么应该给达伊尔%llukg",sum,weight);

  20.     return 0;
  21. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-9-9 13:48:29 | 显示全部楼层    本楼为最佳答案   
你的sum没有赋初值,再者printf中格式化字符写错了,是%llu,你把小写L写成数字1了,所以结果不对。
另外最好不要用pow,这个函数返回值为浮点数,可能会因为精度问题导致结果不太精确。
  1. #include <stdio.h>

  2. int main()
  3. {
  4.         
  5.     int i;
  6.     unsigned long long  sum=0;
  7.     unsigned long long  weight;
  8.     unsigned long long  m=1;
  9.    
  10.     for(i=0;i<64;i++)
  11.     {
  12.         sum=sum+m;
  13.         m=m*2;
  14.     }
  15.    
  16.     weight=sum/25000;
  17.    
  18.     printf("舍罕王应该给达伊尔%llu的麦子,\n\
  19. 如果每25000粒麦子为1kg,那么应该给达伊尔%llukg",sum,weight);

  20.     return 0;
  21. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-9 13:50:40 | 显示全部楼层
可能是 pow() 函数在转换时出的问题,pow() 输出的是双精度 double 型数据,运算中被自动转换成了 unsigned long long 型了,数据可能造成了丢失。

以上只是猜测,我的系统不支持 long long 型,你自己试试看
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-28 05:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表