谁能帮我改改这个C语言问题中的错

2024-11-30 15:29:54
推荐回答(2个)
回答1:

问题在这里:

min1中的循环次数不对,明明五个元素却循环8次,造成数组下标越界。

修改以后的min1:

int min1 (int arrA[], int num)
{
int i, j, temp, minA, flag = 0;
for (i=0; i<7; i++)
{
for (j=i+1; j<5; j++)
{
if (arrA[i] > arrA[j])
{
temp = arrA[i];
arrA[i] = arrA[j];
arrA[j] = temp;
}
}
}
for (i=0; i<5; i++)
{
if (arrA[i] > num)
{
minA = arrA[i];
flag = 1;
break;
}
}
if (flag == 1)
{
return minA;
}
else
{
return -1;
}
}

回答2:

粗略的看了下,min1函数有问题,修改后的代码在下面,不过貌似先冒泡再查找的方法效率有点低了。
int min1 (int arrA[], int num)
{
int i, j, temp, minA, flag = 0;

for (i=0; i<4; i++)
{
for (j=i+1; j<5; j++)
{
if (arrA[i] > arrA[j])
{
temp = arrA[i];
arrA[i] = arrA[j];
arrA[j] = temp;
}
}
}
for (i=0; i<5; i++)
{
if (arrA[i] > num)
{
minA = arrA[i];
flag = 1;
break;
}
}
if (flag == 1)
{
return minA;
}
else
{
return -1;
}
}