qq_50827509 2021-09-02 19:54 采纳率: 91.5%
浏览 21
已结题

可以分析一下下面代码答案0008是怎么得到的吗?


#include <stdio.h>
int main()
{
    char *p="12134221";
    int z[4]={0,0,0,0},j,i;
    for(j=0;p[j];j++)
    {switch(p[j])
    {
        case'1':i=0;
        case'2':i=1;
        case'3':i=2;
        case'4':i=3;
    }
    z[i]++;
    }
    for(j=0;j<4;j++)
    printf("%d",z[j]);
    return 0;
}









  • 写回答

1条回答 默认 最新

  • qzjhjxj 2021-09-02 20:16
    关注

    1.char *p="12134221"; 这里定义了字符串 p 长度为8
    2.for(j=0;p[j];j++) 这个for()循环共8次
    3.switch(p[j])
    {
    case'1':i=0;
    case'2':i=1;
    case'3':i=2;
    case'4':i=3;
    }
    由于每个case : 后面没有break,所以不管switch(p[j]) 是什么,都会执行到 case '4': i=3; 所以z[i]++ == > z[3] ++ , z[3] 连加 8次 ,数组z[0] z[1] z[2] 均为0.
    p[0]=1,i=3
    p[1]=2,i=3
    p[2]=1,i=3
    p[3]=3,i=3
    p[4]=4,i=3
    p[5]=2,i=3
    p[6]=2,i=3
    p[7]=1,i=3

    4.所以最后for(j=0;j<4;j++)
    printf("%d",z[j]);
    输出:0008

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 9月11日
  • 已采纳回答 9月3日
  • 创建了问题 9月2日