newhand上路多多指教 2022-03-29 13:28 采纳率: 69.2%
浏览 117
已结题

这程序是自考题,知道结果,但推断过程不知道。

img


这程序知道结果,但推测过程不知道,写解题过程,这是个程序阅读题。

  • 写回答

5条回答 默认 最新

  • poizxc2014 2022-03-29 15:15
    关注

    推断过程大致如下列注释:@newhand上路多多指教

    #include <stdio.h>
    int main()
    {
        int a[] = {-8,9,8,-7};//声明一个数组a[] ,里面有四个值,-8的数组索引是09的数组索引是18的数组索引是2;-7的数组索引是3;a[3]=-7;a[2]=8;a[1]=9;a[0]=-8;
        int k1, k2, k3;            //声明3个变量;
        k1 = 0;                    //定义k1是数组的最小索引0;
        k2 = 3;                    //定义k2是数组的最大索引3;
        do {                      //死循环,如果k2大于k1就一直进行死循环;否则就跳出循环;
            if (a[k2] > 0)    //如果a[k2]大于0,a[k2]为正数,就执行--k2;如果k2等于3,那么就是a[3]=-7,所以第一次这里不动,k2还是3
                --k2;            //如果a[k2]大于0,a[k2]为正数,就执行k2减1,此时k2等于2,所以下次就执行a[2]的值;下次再进来就是21,变为k2=1;
            if (a[k1] < 0)    //如果a[k1]小于0,a[k1]为负数,比如a[0]=-8;所以此时if为真,就执行++k1;  k1就变为了1;
                ++k1;        //如果a[k1]小于0,就执行++k1;  k1此时就从0变为了1;第二次又执行这个行代码就从1变为2;
            if (k2 > k1)    //判断最小索引和最大索引是否相遇,没有就继续执行这个if中的代码;
            {                    //下面三行代码目的是交换a[k2]和a[k1]值的位置,k3作为临时变量,保存a[k1]的值,使负数排在正数的前面;
                k3 = a[k1];
                a[k1] = a[k2];
                a[k2] = k3;
            }
        } while (k2 > k1);    //死循环跳出条件:k2>k1。判断最小索引和最大索引是否相遇,相遇之前就继续循环;否则跳出循环,执行下面的代码;
        for (k1 = 0; k1 < 4; ++k1)        //循环输出四次,从03的;输出数组a[]
            printf("%d\t", a[k1]);       //循环输出四次,从03的;索引第一次就是输出a[0]的值,第二次就是a[1]的值,第三次就是a[2]的值,,第四次就是a[3]的值,
        printf("\n");
        return 0;
    }
    
    第一次执行死循环:k1=0,k2=3;
                               因为a[3]=-7,不大于0,所以不执行--k2;
                               因为a[0]=-8,小于0,所以执行++k1;
                               接着执行到if(k2>k1);   k1=1,k2=3,所以a[1]和a[3],的值交换,此时数组是a[] = {-8,-7,8,9}
    第二次执行死循环:k1=1,k2=3;
                               因为a[3]=9,大于0,所以执行--k2k2变为2
                               因为a[1]=-7,小于0,所以执行++k1k1变为2
                               接着执行到if(k2>k1);  k1=2,k2=2,因为k2不大于k1,所以a[2]和a[2],的值不交换,此时数组是a[] = {-8,-7,8,9}
    此时 k1=2,k2=2k2=k1,所以跳出死循环,通过for循环打印数组a[]的值为:a[] = {-8,-7,8,9}
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 4月6日
  • 已采纳回答 3月29日
  • 创建了问题 3月29日

悬赏问题

  • ¥30 VMware 云桌面水印如何添加
  • ¥15 用ns3仿真出5G核心网网元
  • ¥15 matlab答疑 关于海上风电的爬坡事件检测
  • ¥88 python部署量化回测异常问题
  • ¥30 酬劳2w元求合作写文章
  • ¥15 在现有系统基础上增加功能
  • ¥15 远程桌面文档内容复制粘贴,格式会变化
  • ¥15 这种微信登录授权 谁可以做啊
  • ¥15 请问我该如何添加自己的数据去运行蚁群算法代码
  • ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”