c语言新手求内存单位换算题的错误指正

#题目信息
计算机的内存容量以字节(BYTE,简称B)为基本单元组织,K(千)、M(兆)、G(吉)三个数量级单位定义为:
1千字节:1KB = 1024B
1兆字节:1MB = 1024KB
1吉字节:1GB = 1024MB

现在编写一个内存单位换算的程序。

Input
输入为一个整数,表示内存中n个字节,0<=n<232。

Output
输出三行:第一行为KB数,不足K的舍去;第二行为MB数、第三行为GB数,均保留两位小数。

初步想法如图所示

img

求错误指正,不足K的舍去 怎么处理
以及程序可以run但数据输出结果都为0
使用codeblocks编写的程序
谢谢帮助!

将n的数据类型改为long long ,因为2^32= 4294967296 ,超过了int的取值范围,所以需要将n改为更大范围的整数数据类型。

然后在第7、第8、第9行时,计算结果要保留小数的话,需要将整数类型转为浮点数类型,可以在式子前面乘以1.0。

最后小于1K的结果需要舍去。

修改如下:

参考链接:


#include <stdio.h>

int main(void){
    
    // https://blog.csdn.net/hhmy77/article/details/82429260
    // 因为2^32超过int的取值范围,所以n需要改为更大的整数数据类型 
    long long  n;
    double a,b,c;
    scanf("%lld",&n);
    
    // 保留小数结果,需要将整数转为浮点数 ,可以在式子前乘以1.0 
    a=1.0*n/1024;
    b=1.0*n/1024/1024;
    c=1.0*n/1024/1024/1024;
    
    // 大于等于1K的显示保留2位小数的结果 
    if (a>=1.0){
        printf("%.2lfK\n",a);     
    }else{  // 小于1K的输出为0.00K 
        printf("0.00K\n"); 
    }    
    printf("%.2lfM\n",b); 
    printf("%.2lfG\n",c); 
    
    return 0;
} 

img

【以下回答由 GPT 生成】

首先,我们来看一下你的代码。根据你的描述,你的问题主要是如何处理不足1K的情况,以及输出结果为0的问题。

#include <stdio.h>

int main() {
    int size_in_byte;
    float size_in_kbyte, size_in_mbyte, size_in_gbyte;

    printf("请输入内存容量(单位:字节):");
    scanf("%d", &size_in_byte);

    size_in_kbyte = size_in_byte / 1024;
    size_in_mbyte = size_in_kbyte / 1024;
    size_in_gbyte = size_in_mbyte / 1024;

    printf("内存容量为:%f GB \n", size_in_gbyte);
    printf("内存容量为:%f MB \n", size_in_mbyte);
    printf("内存容量为:%f KB \n", size_in_kbyte);
    printf("内存容量为:%d B \n", size_in_byte);

    return 0;
}

问题1:如何处理不足1K的情况?

在现有代码中,你简单地使用了除法运算来计算不同内存单位之间的换算关系。然而,这种方法并不能处理不足1K的情况,因为它会使用浮点数来存储结果。

要解决这个问题,我们可以使用取余(modulus)运算符来计算不足1K的字节数,并将其舍去。下面是修改后的代码:

#include <stdio.h>

int main() {
    int size_in_byte;
    int size_in_kbyte, size_in_mbyte, size_in_gbyte;
    int remainder; // 新增的变量用于存储不足1K的字节数,即余数

    printf("请输入内存容量(单位:字节):");
    scanf("%d", &size_in_byte);

    size_in_kbyte = size_in_byte / 1024; // 计算KByte,并将结果以整数保存
    remainder = size_in_byte % 1024; // 计算不足1K的字节数

    size_in_mbyte = size_in_kbyte / 1024; // 计算MByte,并将结果以整数保存
    size_in_kbyte = size_in_kbyte % 1024; // 修正KByte,将不足1M的字节数加回

    size_in_gbyte = size_in_mbyte / 1024; // 计算GByte,并将结果以整数保存
    size_in_mbyte = size_in_mbyte % 1024; // 修正MByte,将不足1G的字节数加回

    printf("内存容量为:%d GB\n", size_in_gbyte);
    printf("内存容量为:%d MB\n", size_in_mbyte);
    printf("内存容量为:%d KB\n", size_in_kbyte);
    printf("内存容量为:%d B\n", remainder);

    return 0;
}

问题2:输出结果始终为0的问题

在你的代码中,你使用了浮点数变量(float)来存储内存容量。然而,由于你的计算是以整数除以整数的方式进行的,结果会被直接截断为整数。因此,你应该使用整数变量(int)而不是浮点数来存储计算结果。

在修改后的代码中,我将内存容量的变量类型(size_in_kbytesize_in_mbytesize_in_gbyte)都改为整数类型。

请尝试使用修改后的代码,应该能够解决你遇到的问题。如果还有其他问题,请随时提问。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^