。 请问这个过程是哪里出错了吗,可以运行但是结果不对

img


输入10个数,数要小于100,并进行排序。
请问这个过程是哪里出错了吗,可以运行但是结果不对

错误有两个
一个是,你的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。这样就可以得到正确的排序结果了。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^