为什么有些数字显示小数点而有些则没有?

Why do some numbers present the decimals and others don't?

#include <stdio.h>
#pragma warning (disable:4996)

void cit_mat(float a[][100], int* m, int* n) {
    printf("nr linii =");
    scanf_s("%d", m);
    printf("\n");
    printf("nr coloane =");
    scanf_s("%d", n);
    printf("\n");

    printf("Introduceti matricea: \n");
    for (int i = 0; i < *m; i++) {
        for (int j = 0; j < *n; j++) {
            printf("x[%d][%d]=", i, j);
            scanf_s("%f", &a[i][j]);
        }
        printf("\n");
    }

}

void ordonare(float a[][100], int m, int n) {
    for (int i = 0; i < m; i++) {
        int ok = 1;
        while (ok) {
            ok = 0;
            for (int k = 0; k < n - 1; k++) {
                if (a[i][k] > a[i][k + 1]) {
                    int aux = a[i][k + 1];
                    a[i][k + 1] = a[i][k];
                    a[i][k] = aux;
                    ok = 1;
                }
            }
        }
    }
}

void afis_mat(float a[][100], int m, int n) {
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            printf("%5.6f ", a[i][j]);
        }
        printf("\n");
    }
}

void main() {
    int m, n;
    float a[100][100];
    cit_mat(a, &m, &n);
    ordonare(a, m, n);
    printf("Matricea cu liniile ordonate crescator arata astfel: \n");
    afis_mat(a, m, n);
}

大家好,所以每当我在这个矩阵中输入小数(比如 1.23、1.45、5.44)时,在控制台上,通过最后显示的矩阵,只有 一些 数字有小数点,而有些可能显示为 4.0000,即使我将其设置为 4.55。是什么导致了这个问题?我想不明白。该代码出现在 Visual Studio 2019 btw.

ordonare中,a是一个浮点数的集合。但是,您随后会执行 int aux = a[i][k+1];。当您将 float 存储在 int 中时,它会被截断为其整数部分并丢弃小数点后的值。