簡體   English   中英

似乎無法在 c 語言中將多個數組行與多個 int 變量相加

[英]Can't seem to sum multiple array lines to multiple int variables in c language

我是一年級學生atm。 我正在努力用 c 語言完成我的“作業”。 現在我正在嘗試將 4 個數組行 sum 應用於 4 個 int 變量,這是我到目前為止所取得的成果:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int dvimatisMas[4][4] = { {1,2,3,4}, {5,6,7,8}, {9,10,11,12}, {13, 14, 15, 16} };
    int eiluciuSum[4];

for(int i = 0; i < 4; i++){

    for(int x = 0; x < 4; x++){

        for(int j = 0; j < 4; j++){

            eiluciuSum[i] += dvimatisMas[x][j];

        }

    }

}

printf("suma 1 eil: %d\n", eiluciuSum[1]);
printf("suma 2 eil: %d\n", eiluciuSum[2]);
printf("suma 3 eil: %d\n", eiluciuSum[3]);
printf("suma 4 eil: %d\n", eiluciuSum[4]);

int min = 0;
int max = 0;

}

它只是給出了一堆答案,即使應該只有 4 個。正如你在代碼中看到的,我試圖通過編寫 4 個單獨的打印並為它們指定每個括號來糾正這個問題,所以是的,我顯然得到了 4 個答案,就像我一樣應該但它們不正確而且我仍然不應該指定所有這些。

如果我寫一些更“簡單”的東西,我會得到想要的結果:

int dvimatisMas[4][4] = { {1,2,3,4}, {5,6,7,8}, {9,10,11,12}, {13, 14, 15, 16} };
int eilute1 = 0;
int eilute2 = 0;
int eilute3 = 0;
int eilute4 = 0;

for(int i = 0; i < 4; i++){

    eilute1 += dvimatisMas[0][i];
    eilute2 += dvimatisMas[1][i];
    eilute3 += dvimatisMas[2][i];
    eilute4 += dvimatisMas[3][i];

}

printf("suma 1 eil: %d\n", eilute1);
printf("suma 2 eil: %d\n", eilute2);
printf("suma 3 eil: %d\n", eilute3);
printf("suma 4 eil: %d\n", eilute4);

但問題是我還必須打印出 'eilute' 中的最小數字和最大數字。 但我無法達到這一點,因為我需要 'eilute[]'(我在第一個代碼中將其稱為 'eiluciuSum[]')由代碼擴展並在“if”語句中使用它,例如“if (eilute[i] < 0){ min += eilute[i]; printf("smallest: %d", min)" 等等,這就是我應該怎么做的(至少是這樣的)而不是一堆復雜的方程,我的意思是它更短而且“專業”,對嗎?)。

如果我設法以可以理解的方式解釋我的情況,有人可以幫助並解釋我在第一個提供的代碼中做錯了什么嗎?

先感謝您。

代碼的最終版本位於底部。

首先,您不需要變量x 切出第二個 for 循環。

for(int i = 0; i < 4; i++) {

    for(int j = 0; j < 4; j++) {

        eiluciuSum[i] += dvimatisMas[i][j];

    }

}

其次,問題是eiluciuSum數組沒有初始化為零。 它已經包含來自之前存儲在該內存地址中的任何內容的垃圾值。 你應該用這個替換它的定義:

int eiluciuSum[4] = { 0 };

然后將printf語句放在內部循環之后,如下所示:

for (int i = 0; i < 4; i++) {

    for (int j = 0; j < 4; j++) {

        eiluciuSum[i] += dvimatisMas[i][j];

    }

    printf("%d\n", eiluciuSum[i]);

}

如果沒有下面的 4 個printf語句,它應該可以正常工作。

第三,關於查找最大值/最小值,您需要做的就是將 max/min 變量設置為數組中的第一個元素,然后遍歷數組,查找大於/小於當前最大值的值/smallest,然后切換這些值。

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int dvimatisMas[4][4] = { {1,2,3,4}, {5,6,7,8}, {9,10,11,12}, {13, 14, 15, 16} };
    int eiluciuSum[4] = { 0 }; // initialize all elements of array to 0

    for (int i = 0; i < 4; i++) {
        for (int j = 0; j < 4; j++) {
            eiluciuSum[i] += dvimatisMas[i][j];
        }
        printf("%d\n", eiluciuSum[i]);
    }

    int min = eiluciuSum[0]; // assume the first sum is the smallest
    int max = eiluciuSum[0]; // assume the first sum is the largest

    // loop through all elements of array and if you encounter one bigger/smaller
    // than the current max/min, then make those the current max/min values
    for (int i = 0; i < 4; i++) {
        if (eiluciuSum[i] < min)
            min = eiluciuSum[i];
        if (eiluciuSum[i] > max)
            max = eiluciuSum[i];
    }
    printf("The smallest sum is %d\n", min);
    printf("The largest sum is %d\n", max);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM