鱼C论坛

 找回密码
 立即注册
查看: 654|回复: 6

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

[复制链接]
发表于 2020-11-11 08:59:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
int main()
{
        int i, j, t;
        int a[10];
        printf("请输入十个数:");
        for (i = 0; i < 10; i++)
       
                scanf_s("%d", &a[i]);
       
        for (i = 0; i < 10; i++)
        {
                for (j = i + 1; j < 10; j++)
               
                        if (a[i] < a[j])
                        {
                                t = a[i];
                                a[i] = a[j];
                                a[j] = t;
                        }
                       
        }
                        printf("从大到小排序后:\n");
                        for (i = 0; i < 10; i++)
               
                        printf("%d\t", a[i]);
                        return 0;
}
最佳答案
2020-11-11 09:34:31
本帖最后由 wnhuiyou 于 2020-11-11 10:32 编辑

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

最后一个for 其实就是遍历的意思了,也就是说,上面的循环都结束后,此时,那十个杯子中里面的数字已经发生变化了,通过for来进行把下标为 a[0] -- a[9] 里面的数字都打印出来。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-11 09:06:14 From FishC Mobile | 显示全部楼层
通过循环,让你输入十个数进去。这十个数,存在数组里面。然后循环数组,将里面的数字两两比较,把大的放到前面。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

那最后一个for是什么意思呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-11 09:15:51 | 显示全部楼层
18169947283 发表于 2020-11-11 09:07
那最后一个for是什么意思呀

输出啊,c语的for语句后面只跟一条语句时,可以免掉花括号的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-11 09:32:19 From FishC Mobile | 显示全部楼层
这是冒泡排序,可以先了解一下冒泡排序的数学规律,然后再回来看这个代码就好理解了,下面的for循环代表着执行排序的趟数和每趟的次数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-11 09:34:31 | 显示全部楼层    本楼为最佳答案   
本帖最后由 wnhuiyou 于 2020-11-11 10:32 编辑

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

最后一个for 其实就是遍历的意思了,也就是说,上面的循环都结束后,此时,那十个杯子中里面的数字已经发生变化了,通过for来进行把下标为 a[0] -- a[9] 里面的数字都打印出来。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-11 10:52:14 | 显示全部楼层
理解理解  ,谢谢啦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 17:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表