错误有两个
一个是,你的if(a[i] > 100) printf("请重新输入"); 要放在for循环里面
一个是,循环条件
m < 10 应该是 m<9
i < 10应该是 i < 9 - m
#include <stdio.h>
int main()
{
int a[10];
for (int i = 0; i < 10; i++)
{
scanf("%d", &a[i]);
while (a[i] >= 100)
{
printf("请重新输入");
scanf("%d", &a[i]);
}
}
for (int m = 0; m < 9; m++)
for (int i = 0; i < 9 - m; i++)
{
if (a[i] > a[i + 1])
{
int t = a[i];
a[i] = a[i + 1];
a[i + 1] = t;
}
}
for (int i = 0; i < 10; i++)
printf("%d ", a[i]);
printf("\n");
return 0;
}
for (i = 0; i < 10; i++) {
scanf("%d", &a[i]);
if (a[i] >= 100) {
printf("输入的数必须小于100,请重新输入:\n");
i--;
}
}
for (i = 0; i < 10-1; i++) {
for (j = 0; j < 10-i-1; j++) {
if (a[j] > a[j+1]) {
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
for (i = 0; i < 10; i++) {
printf("%d ", arr[i]);
}
【以下回答由 GPT 生成】
问题出在第二个for循环中,代码部分如下:
for(int i=0; i<10; i++) {
scanf("%d", &a[i]);
}
这段代码将会让用户再次输入10个数,覆盖了之前输入的数,导致排序结果错误。
解决方案如下:
#include<stdio.h>
int main() {
int a[10];
int temp;
int i;
for(int i=0; i<10; i++) {
scanf("%d", &a[i]);
if(a[i] >= 100) {
printf("请重新输入");
}
}
for(int m=0; m<10; m++) {
for(int i=0; i<9-m; i++) { // 修改这里的循环条件
if(a[i] > a[i+1]) {
temp = a[i];
a[i] = a[i+1];
a[i+1] = temp;
}
}
}
for(int i=0; i<10; i++) {
printf("%d ", a[i]);
}
printf("\n");
return 0;
}
修改后的代码中,将第三个for循环的内部循环条件修改为for(int i=0; i<9-m; i++)
,这是因为在每次内部循环结束后,最大的元素都会“沉”到数组的最后,所以每次内部循环的次数都要减少1。这样就可以得到正确的排序结果了。
【相关推荐】