大体是C语言小数点的问题

img

img


为什么我输出答案小数后面是0,而正确答案是9


#include
int main(){
    int n;
    int sum=0;
    double p;
    int count=0;
    scanf("%d\n",&n);
    int a[n][n];
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            scanf("%d",&a[i][j]);
            
    }scanf("\n");
}
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            sum+=a[i][j];
            count ++;
    }
}p=sum/count;
    printf("%.1lf",p);
    return 0;
}

基于Monster 组和GPT的调写:
你的代码实现基本正确,但有两个小问题:

如果想要输出小数点后一位,应该使用 "%.1f" 而不是 "%.1lf"。
在输入数据的时候,可以不用在每一行的末尾再输入一个换行符,因为 scanf 函数会自动跳过空白字符,包括换行符。

以下是修改后的代码:

#include <stdio.h>

int main() {
    int n;
    int sum = 0;
    double avg;
    int count = 0;
    scanf("%d", &n);
    int a[n][n];
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            scanf("%d", &a[i][j]);
        }
    }
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            sum += a[i][j];
            count++;
        }
    }
    avg = (double) sum / count;
    printf("%.1f", avg);
    return 0;
}


21行有问题
p=sum/count;
由于sum和count都是int型,实际这个除法进行的是整除运算,得到的结果是没有小数部分的
改为
p = sum * 1.0/count;这样就会有小数了

该回答引用ChatGPT

试一下这个

#include <stdio.h>

int main() {
    int n;
    double sum = 0;
    scanf("%d", &n);
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            double h;
            scanf("%lf", &h);
            sum += h;
        }
    }
    printf("%.1f", sum / (n * n));
    return 0;
}


不知道你这个问题是否已经解决, 如果还没有解决的话:

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