上学的小白 2021-12-17 16:20 采纳率: 85.7%
浏览 51
已结题

C语言 do while循环的问题

#include<stdio.h>
main()
int i=20,n=0;
do{
    n++;
    switch(i%4)
    {  case 0: i=i-7; break;
       case 1:
       case 2:
       case 3: i++; break;
    }
}while(i>0);
printf("%d",n);
}

用计算机编译出来是17,我想知道算到了i取值为4的时候,那时候n的取值不是应该是15吗,取值为4的时候进行case0计算为-3,退出循环,直接进入while判断真假 结果为假输出15, 我一直算不懂为什么等于17 n++不是先取值再+1吗

  • 写回答

3条回答 默认 最新

  • 南七灵 2021-12-17 16:30
    关注

    i = 20,n = 1,20%4 = 0,i=i-7=13
    i = 13,n = 2,13%4 =1,i++, i=14
    i = 14,n = 3,14%4 = 2,i++,i=15
    i = 15,n = 4,15%4 = 3,i++,i=16
    i = 16,n = 5,16%4 = 0,i=i-7=9
    i = 9,n = 6,9%4 =5,i++, i=10
    i = 10,n = 7,10%4 = 2,i++,i=11
    i = 11,n = 8,11%4 = 3,i++,i=12
    i = 12,n = 9,12%4 = 0,i=i-7=5
    i = 5,n = 10,5%4 =1,i++, i=6
    i = 6,n = 11,6%4 = 2,i++,i=7
    i = 7,n = 12,7%4 = 3,i++,i=8
    i = 8,n = 13,8%4 = 0,i=i-7=1
    i = 1,n = 14,1%4 =1,i++, i=2
    i = 2,n = 15,2%4 = 2,i++,i=3
    i = 3,n = 16,3%4 = 3,i++,i=4
    i = 4,n = 17,4%4 = 0,i=i-7=-3
    退出循环

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

报告相同问题?

问题事件

  • 系统已结题 12月25日
  • 已采纳回答 12月17日
  • 创建了问题 12月17日

悬赏问题

  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 关于大棚监测的pcb板设计
  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器
  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用
  • ¥15 C++ yoloV5改写遇到的问题