这程序知道结果,但推测过程不知道,写解题过程,这是个程序阅读题。
5条回答 默认 最新
- poizxc2014 2022-03-29 15:15关注
推断过程大致如下列注释:@newhand上路多多指教
#include <stdio.h> int main() { int a[] = {-8,9,8,-7};//声明一个数组a[] ,里面有四个值,-8的数组索引是0;9的数组索引是1;8的数组索引是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]的值;下次再进来就是2减1,变为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) //循环输出四次,从0到3的;输出数组a[] printf("%d\t", a[k1]); //循环输出四次,从0到3的;索引第一次就是输出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,所以执行--k2;k2变为2 因为a[1]=-7,小于0,所以执行++k1;k1变为2 接着执行到if(k2>k1); k1=2,k2=2,因为k2不大于k1,所以a[2]和a[2],的值不交换,此时数组是a[] = {-8,-7,8,9} 此时 k1=2,k2=2;k2=k1,所以跳出死循环,通过for循环打印数组a[]的值为:a[] = {-8,-7,8,9}
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥30 VMware 云桌面水印如何添加
- ¥15 用ns3仿真出5G核心网网元
- ¥15 matlab答疑 关于海上风电的爬坡事件检测
- ¥88 python部署量化回测异常问题
- ¥30 酬劳2w元求合作写文章
- ¥15 在现有系统基础上增加功能
- ¥15 远程桌面文档内容复制粘贴,格式会变化
- ¥15 这种微信登录授权 谁可以做啊
- ¥15 请问我该如何添加自己的数据去运行蚁群算法代码
- ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”