jMfOvO 2023-04-06 21:45 采纳率: 33.3%
浏览 8
已结题

刚学c++,问一下这里浮点数相关的问题

刚开始学c++,想问一下为什么最后出来的avg是整数,不是应该是4.5吗(20个数字是0到9重复两遍的时候)

#include<iostream>
using  namespace std;
int main(void) {
    int a[20], i, count1 = 0, count2 = 0, sum1 = 0, sum2 = 0, sum = 0;
    cout << "请输入20个数字";
    for (i = 0; i < 20; i++) {
        cin >> a[i];
        sum += a[i];
        if (a[i] % 2 == 0) {
            count2++;
            sum2 += a[i];
        }
        else {
            count1++;
            sum1 += a[i];
        }
    }
    int max = a[0];
    int min = a[0];
    for (i = 1; i < 20; i++) {
        if (max < a[i]) {
            max = a[i];
        }
        if (min > a[i]) {
            min = a[i];
        }
    }
    double avg = sum / 20;
    cout << "奇数的个数是:" << count1 << " " << "奇数和为:" << sum1 << endl;
    cout << "偶数的个数是:" << count2 << " " << "偶数和为:" << sum2 << endl;
    cout << "最大值为:" << max << " " << "最小值为:" << min << " " << "平均值为:" << avg;
    return 0;
}

  • 写回答

2条回答 默认 最新

  • 瞬间的未来式 2023-04-06 22:06
    关注

    在 C++ 中,如果对两个整数进行除法运算,结果默认会向下取整,即只保留整数部分,舍去小数部分。这就是为什么您得到的 avg 是整数而不是带有小数部分的实数。为了得到带有小数部分的平均值,您可以将 sum 转换为实数类型再进行除法运算,例如将 double avg = sum / 20; 改为 double avg = (double)sum / 20; 或 double avg = static_cast(sum) / 20;。这样就能得到正确的平均值了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月14日
  • 已采纳回答 4月6日
  • 创建了问题 4月6日

悬赏问题

  • ¥15 ansys fluent计算闪退
  • ¥15 有关wireshark抓包的问题
  • ¥15 需要写计算过程,不要写代码,求解答,数据都在图上
  • ¥15 向数据表用newid方式插入GUID问题
  • ¥15 multisim电路设计
  • ¥20 用keil,写代码解决两个问题,用库函数
  • ¥50 ID中开关量采样信号通道、以及程序流程的设计
  • ¥15 U-Mamba/nnunetv2固定随机数种子
  • ¥15 vba使用jmail发送邮件正文里面怎么加图片
  • ¥15 vb6.0如何向数据库中添加自动生成的字段数据。