18169947283 发表于 2020-11-11 08:59:05

大佬们,能帮我帮我解释一下这个程序吗

#include<stdio.h>
int main()
{
        int i, j, t;
        int a;
        printf("请输入十个数:");
        for (i = 0; i < 10; i++)
       
                scanf_s("%d", &a);
       
        for (i = 0; i < 10; i++)
        {
                for (j = i + 1; j < 10; j++)
               
                        if (a < a)
                        {
                                t = a;
                                a = a;
                                a = t;
                        }
                       
        }
                        printf("从大到小排序后:\n");
                        for (i = 0; i < 10; i++)
               
                        printf("%d\t", a);
                        return 0;
}

2269099035 发表于 2020-11-11 09:06:14

通过循环,让你输入十个数进去。这十个数,存在数组里面。然后循环数组,将里面的数字两两比较,把大的放到前面。

18169947283 发表于 2020-11-11 09:07:34

2269099035 发表于 2020-11-11 09:06
通过循环,让你输入十个数进去。这十个数,存在数组里面。然后循环数组,将里面的数字两两比较,把大的放到 ...

那最后一个for是什么意思呀

wp231957 发表于 2020-11-11 09:15:51

18169947283 发表于 2020-11-11 09:07
那最后一个for是什么意思呀

输出啊,c语的for语句后面只跟一条语句时,可以免掉花括号的

大刀三千 发表于 2020-11-11 09:32:19

这是冒泡排序,可以先了解一下冒泡排序的数学规律,然后再回来看这个代码就好理解了,下面的for循环代表着执行排序的趟数和每趟的次数

wnhuiyou 发表于 2020-11-11 09:34:31

本帖最后由 wnhuiyou 于 2020-11-11 10:32 编辑

首先定义三个变量,再定义一个数组,一般数组下标是从0开始,所以你定义的这个 a 你就简单理解为 11个杯子(实际用到的只有10个),然后下面你循环10次来进行输入数字,你又可以简单理解为,把输入的数字分别放到十个杯子里,比如(分号左边是输入的数字,右边是杯子的编号):1:0,3:1 ,2:2 , 4:3 , 8:4 , 6:5 , 5:6 , 9:7, 22:8 , 55:9

接着进入循环套循环,先从里面开始,i=0 所以 j=0+1 进入内循环,判断a <a ,通过上面输入的数字存在的杯子中 得知 a = 1a=3 所以 1 小于 3,成立,进入排序,t变量,你就简单理解为一个不同颜色的杯子,用来中转的,已知t = a = 1 所以 t=1,把1放在t的杯子等待中转, 这时候a = 是空杯子所以 a = a = 3把3放到a这个杯子里这时 a 是空杯子,最后把 t里面的数字1,放到 a杯子里,第一阶段的排序结束,回到 j++这时 j 变成2, 然后有进入判断,如上面步骤以此类推,直到 j=10 时判断不成立,退出内循环,回到i++   i 变成 1 , 又接着进入内循环,如上步骤。

最后一个for 其实就是遍历的意思了,也就是说,上面的循环都结束后,此时,那十个杯子中里面的数字已经发生变化了,通过for来进行把下标为 a -- a 里面的数字都打印出来。

18169947283 发表于 2020-11-11 10:52:14

理解理解,谢谢啦
页: [1]
查看完整版本: 大佬们,能帮我帮我解释一下这个程序吗