#include
int main()
{
int i,s,a[100];
do {
printf("输入数组,输入完成后按回车:\n");
scanf("%d",&a[i]);
i++;
} while(getchar()==' ');
int min=0;
min=a[0];
for(s=1;sif(min>a[s])
min=a[s];
}
scanf("%d",&min);
//删除数,末尾补0
for(s=0;sif(a[i]==min)
{
for(s=i;s-1;s++)
a[s]=a[s+1];
a[i-1]=0;
i--;
}
}
for(s=0;sprintf("%d",a[s]);
}
该回答引用GPTᴼᴾᴱᴺᴬᴵ
您的程序存在以下问题:
在使用变量i之前未初始化,应该将i初始化为0。
在删除最小值时,应该使用min变量记录最小值,而不是再次从用户输入中读取最小值。
在删除数组元素时,应该使用变量s作为循环计数器,而不是使用变量i。
输出数组元素时应该加上换行符,便于阅读。
下面是修改后的程序:
#include<stdio.h>
int main()
{
int i=0, s, a[100];
do {
printf("输入数组,输入完成后按回车:\n");
scanf("%d", &a[i]);
i++;
} while (getchar() == ' ');
int min = a[0];
for (s = 1; s < i; s++)
{
if (min > a[s])
min = a[s];
}
// 删除最小值,末尾补0
for (s = 0; s < i; s++)
{
if (a[s] == min)
{
for (int j = s; j < i - 1; j++)
a[j] = a[j + 1];
a[i - 1] = 0;
i--;
s--; // 需要将循环计数器s回退1,因为删除一个元素后数组的长度会减少1
}
}
for (s = 0; s < i; s++)
printf("%d\n", a[s]);
return 0;
}
现在程序可以正确输出删除最小值后的数组元素了。
输入方式不对,这样不会捕获到' '这个结束条件,换一个结束条件