试图从 2 个数组 returns 0(不起作用)和其他数组中找到最小的数组元素。 (C郎)
Trying to find smallest array elements from 2 arrays returns 0 (doesn't work) and the other works. (C lang)
我试图在 C 中完成一个简单的任务,即打印出数组 1 中的最小数字和数组 2 中的最小数字。两个数组元素均由用户估算。
第一个只是 returns 0(在我的测试用例中应该是 1),另一个 returns 是正确的 (11)。我真的不明白为什么,我也试过google这个没有结果所以我再次决定在这里寻求帮助!
int main () {
int masyvas1[10] = {0};
int masyvas2[10] = {0};
for(int i = 0; i < 10; i++){
int x;
printf("Ivesk pirmo masyvo 10 sk: ");
scanf("%d", &x);
masyvas1[i] = x;
}
for(int i = 0; i < 10; i++){
int x;
printf("Ivesk antro masyvo 10 sk: ");
scanf("%d", &x);
masyvas2[i] = x;
}
int mas1maz[2] = {0, 0};
for(int i = 0; i < 10; i++){
if(masyvas1[i] < mas1maz[1]){
mas1maz[1] = masyvas1[i];
}
if(masyvas2[i] < mas1maz[2]){
mas1maz[2] = masyvas2[i];
}
}
printf("testas: %d %d", mas1maz[1], mas1maz[2]);
}
如果我为第一个数组输入 1 到 10 的数字,为第二个数组输入 11 到 20 的数字,程序输出为:testas: 0 11
,我期望它是 testas: 1 11
提前致谢!
if(masyvas2[i] < masyvas2[i]){
mas1maz[2] = masyvas2[i];
}
按照以下方式更改您的第二个。您正在检查 masmaz1 数组中较小的数字,并在不兼容的数组参数中传递 2。由于您已经为 2 个位置 0 和 1 初始化了一个数组,因为数组位置是从 0 开始的。因此更改第二个 if 以将其与自身进行比较以获得最小数字。
int min;
int max;
int i;
min=max=mas1maz[0];
for(i=1; i<10; i++)
{
if(min>mas1maz[i])
min=mas1maz[i];
}
您应该在用 scanf 填充表格后使用它来查找最小值
然后比较两个不同的最小值
我希望你通过尝试下面的内容来复习你的程序
int mas1maz[2] = {0, 0};
数组有 2 个元素,尝试打印每个元素。
注意: 只有 2 个元素,但我打印了 3 个,因为你已经使用了 mas1maz[2]
(这是 grabage=11)
printf("%d,%d,%d",mas1maz[0],mas1maz[1],mas1maz[2]);
然后您尝试与 mas1maz[1]=0
进行比较,这将导致最小值始终为零。
for(int i = 0; i < 10; i++) {
/*
*/
if(masyvas1[i] < mas1maz[1]) {
mas1maz[1] = masyvas1[i];
}
这里你很累比较 mas1maz[2]
和 garbage=11
,这就是你看到 11 的原因。
if(masyvas2[i] < mas1maz[2]) {
mas1maz[2] = masyvas2[i];
}
您应该尝试以下操作:
for(int i = 0; i<9; i++) {
if(masyvas1[i]>masyvas1[i+1])
{
/*copy to your array*/
mas1maz[0]=masyvas1[i]
}
/* similarly for masyvas2*/
}
看到对于长度为 len
的数组,数组的索引范围从 0
到 len-1
我试图在 C 中完成一个简单的任务,即打印出数组 1 中的最小数字和数组 2 中的最小数字。两个数组元素均由用户估算。
第一个只是 returns 0(在我的测试用例中应该是 1),另一个 returns 是正确的 (11)。我真的不明白为什么,我也试过google这个没有结果所以我再次决定在这里寻求帮助!
int main () {
int masyvas1[10] = {0};
int masyvas2[10] = {0};
for(int i = 0; i < 10; i++){
int x;
printf("Ivesk pirmo masyvo 10 sk: ");
scanf("%d", &x);
masyvas1[i] = x;
}
for(int i = 0; i < 10; i++){
int x;
printf("Ivesk antro masyvo 10 sk: ");
scanf("%d", &x);
masyvas2[i] = x;
}
int mas1maz[2] = {0, 0};
for(int i = 0; i < 10; i++){
if(masyvas1[i] < mas1maz[1]){
mas1maz[1] = masyvas1[i];
}
if(masyvas2[i] < mas1maz[2]){
mas1maz[2] = masyvas2[i];
}
}
printf("testas: %d %d", mas1maz[1], mas1maz[2]);
}
如果我为第一个数组输入 1 到 10 的数字,为第二个数组输入 11 到 20 的数字,程序输出为:testas: 0 11
,我期望它是 testas: 1 11
提前致谢!
if(masyvas2[i] < masyvas2[i]){
mas1maz[2] = masyvas2[i];
}
按照以下方式更改您的第二个。您正在检查 masmaz1 数组中较小的数字,并在不兼容的数组参数中传递 2。由于您已经为 2 个位置 0 和 1 初始化了一个数组,因为数组位置是从 0 开始的。因此更改第二个 if 以将其与自身进行比较以获得最小数字。
int min;
int max;
int i;
min=max=mas1maz[0];
for(i=1; i<10; i++)
{
if(min>mas1maz[i])
min=mas1maz[i];
}
您应该在用 scanf 填充表格后使用它来查找最小值
然后比较两个不同的最小值
我希望你通过尝试下面的内容来复习你的程序
int mas1maz[2] = {0, 0};
数组有 2 个元素,尝试打印每个元素。
注意: 只有 2 个元素,但我打印了 3 个,因为你已经使用了 mas1maz[2]
(这是 grabage=11)
printf("%d,%d,%d",mas1maz[0],mas1maz[1],mas1maz[2]);
然后您尝试与 mas1maz[1]=0
进行比较,这将导致最小值始终为零。
for(int i = 0; i < 10; i++) {
/*
*/
if(masyvas1[i] < mas1maz[1]) {
mas1maz[1] = masyvas1[i];
}
这里你很累比较 mas1maz[2]
和 garbage=11
,这就是你看到 11 的原因。
if(masyvas2[i] < mas1maz[2]) {
mas1maz[2] = masyvas2[i];
}
您应该尝试以下操作:
for(int i = 0; i<9; i++) {
if(masyvas1[i]>masyvas1[i+1])
{
/*copy to your array*/
mas1maz[0]=masyvas1[i]
}
/* similarly for masyvas2*/
}
看到对于长度为 len
的数组,数组的索引范围从 0
到 len-1