似乎无法将多个数组行加到 c 语言中的多个 int 变量
Can't seem to sum multiple array lines to multiple int variables in c language
我是一年级学生atm。而我正在努力用c语言完成我的“作业”。
现在我正在尝试将 4 个数组行和应用于 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)" 等等,这就是我应该做的(至少是一些像这样而不是一堆复杂的方程式,我的意思是它更短 'professional' 对吗?)。
如果我设法以可理解的方式解释我的情况,有人可以帮助并解释我在第一个提供的代码中做错了什么吗?
提前谢谢你。
您的代码的最终版本在底部。
首先,您不需要变量 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
语句,它应该可以正常工作。
第三,关于查找 maximum/minimum 值,您需要做的就是将 max/min 变量设置为数组中的第一个元素,然后遍历数组,查找值larger/smaller 比当前 largest/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);
}
我是一年级学生atm。而我正在努力用c语言完成我的“作业”。 现在我正在尝试将 4 个数组行和应用于 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)" 等等,这就是我应该做的(至少是一些像这样而不是一堆复杂的方程式,我的意思是它更短 'professional' 对吗?)。
如果我设法以可理解的方式解释我的情况,有人可以帮助并解释我在第一个提供的代码中做错了什么吗?
提前谢谢你。
您的代码的最终版本在底部。
首先,您不需要变量 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
语句,它应该可以正常工作。
第三,关于查找 maximum/minimum 值,您需要做的就是将 max/min 变量设置为数组中的第一个元素,然后遍历数组,查找值larger/smaller 比当前 largest/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);
}