c - 在 int 和 double 之间进行转换时出现意外结果

标签 c

我正在查看一个示例代码,其中涉及打印出整数数据类型的几个数字的平均值。代码是:

#include<stdio.h>

double getavg(int a[],int size){
    int temp=0;
    for(int i=0;i<size;i++){
        temp+=a[i];
        //checking intermediate temp
        printf("%d ",temp); 
    }
    return (temp/size);
}

int main(){
    int arr[5]={1,2,3,4,5};

    for(int i=0;i<5;i++)
        printf("%d ",arr[i]);
    printf("\n");
    int avg=getavg(arr,5);
    printf("\n");
    printf("Average is %d",avg);
}

我尝试将 temp 的数据类型从整数更改为 double ,其余代码保持不变,我执行了程序,但现在代码输出平均值为 0,并且所有中间温度值都被评估为零。

#include<stdio.h>

double getavg(int a[],int size){
    double temp=0;
    for(int i=0;i<size;i++){
        temp+=a[i];
        //checking intermediate temp
        printf("%d ",temp); 
    }
    return (temp/size);
}

任何人都可以清除这个吗?

最佳答案

我认为它的计算结果为 double 但由于您使用的 printf "%d"掩码而打印了一个 int。请改用“%f”。

关于c - 在 int 和 double 之间进行转换时出现意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27436772/

相关文章:

c - K&R 第二版标准库中的 fgets 实现

c - sizeof struct 小于 4 B 被报告为实际

c# - 如何将元素的背景颜色与 2 个半透明元素背景颜色相匹配

c - 为什么访问数组中的元素需要常数时间?

c - 提高并发进程的效率 - 设置 CPU 限制或其他?

c - string + int 在 C 中执行什么操作?

c - 低级 DBus C API 主循环

c - 从 C 中的文件扫描

将字符串转换为 double

c - 如何在没有外部机制的情况下通信树的进程