鱼C论坛

 找回密码
 立即注册
查看: 4151|回复: 7

一个c语言初学者的各种疑惑

[复制链接]
发表于 2022-9-6 00:11:18 | 显示全部楼层 |阅读模式

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

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

x
最近写作业遇到的问题都放在这里了,希望能有大神来帮忙解答
大家遇到相同问题的可以一起讨论~


问题1
第六课作业《数据类型》,作业动手的第二题里面。
在定义除了i的这三个变量时,为什么定义weight时不能使用int定义呢,我用int定义,输出的weight值就是0,改成unsigned就正常了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-9-6 00:16:48 | 显示全部楼层
本帖最后由 jackz007 于 2022-9-6 00:19 编辑

       问任何问题之前,第一要紧的事情,是把代码贴出来,注意,一定得贴文本,要贴进代码框,否则,一切都是白扯,因为,没有任何人明白你说的事情!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-6 00:27:42 | 显示全部楼层
i变量是什么,weight又是什么,你连题目都没有给出来我们怎么回答
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-9-14 00:28:59 | 显示全部楼层
呃 我以为是会有一起听课做作业的人来讨论 没有想到是大佬来解答

题目和代码在这

相传国际象棋是古印度舍罕王的宰相达依尔发明的。舍罕王十分喜爱象棋,决定让宰相自己选择何种赏赐。这位聪明的宰相指着 8 * 8 共 64 格的象棋说:“陛下,请您赏给我一些麦子吧。就在棋盘的第 1 格放 1 粒,第 2 格放 2 粒,第三格放 4 粒,以后每一格都比前一格增加一倍,依此放完棋盘 64 格,我就感激不尽了。”。舍罕王听了达依尔这个“小小”的要求,想都没想就满口答应下来。

结果在给达依尔麦子时舍罕惊奇地发现要给的麦子比自己想象的要多得多,于是他进行了计算,结果令他大惊失色。请问,舍罕王要兑现他的许诺共要多少粒麦子赏赐他的宰相?如果每25000粒麦子重1kg,那么舍罕王应该给予达依尔多少公斤麦子?

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

int main()
{
        unsigned long long sum = 0;
        unsigned long long temp;
        unsigned long long weight;
        int i;
        for (i=0; i < 64; i++)
        {
                temp = pow(2, i);
                sum = sum + temp;
               
        }

        weight = sum / 25000;
       
        printf("舍罕王应该给予达依尔%llu粒麦子!\n", sum);
        printf("如果每25000粒麦子为1kg,那么应该给%llu公斤麦子!", weight);
       
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-9-14 00:34:55 | 显示全部楼层
如果把除了i以外的三个变量改为int定义
输出内容就变成这样

舍罕王应该给予达依尔18446744073709551615粒麦子!
如果每25000粒麦子为1kg,那么应该给0公斤麦子!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-17 18:54:53 | 显示全部楼层
第一个问题,你要是把前三个改成了int,麦子数应该是4294967295,因为int默认带符号,所以这个数应该是num加temp他们相加硬生生把num变成了unsigned存了进去。也就是unsigned int能存放的最大值。第二点我不太确定,当你sum已经过大了,他再进行运算逻辑就紊乱了,我试了一些数,不过逻辑没太看懂QAQ.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-9-22 23:03:27 | 显示全部楼层
yushi10 发表于 2022-9-17 18:54
第一个问题,你要是把前三个改成了int,麦子数应该是4294967295,因为int默认带符号,所以这个数应该是num ...

好!谢谢你
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-9-22 23:04:54 | 显示全部楼层
这个题目也是出了一些问题...

输出的运算结果是这样的:
请输入你想存入的金额:10000
一次性定期存取5年,所得本息和为1279178880.00
先存三年定期,再存两年定期,所得本息和为1281340288.00
连续存五次一年定期,所得本息和为1347135488.00
#include<stdio.h>
#include<math.h>

int main()
{
        int principal;
        float P1, P2, P3;
        float r1, r2;//存两年以上的利率和存一年的利率 
        
        printf("请输入你想存入的金额:");
        scanf("%f", &principal);
        
        r1 = 0.0175;
        r2 = 0.0275;
        P1 = principal * (1 + r1*5);
        P2 = principal * (1 + r1*3) * (1 + r1*2);
        P3 = principal * pow((1 + r2), 5);
        
        printf("一次性定期存取5年,所得本息和为%.2f\n", P1);
        printf("先存三年定期,再存两年定期,所得本息和为%.2f\n", P2);
        printf("连续存五次一年定期,所得本息和为%.2f\n", P3);
        
        return 0; 
 } 
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-25 22:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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