gpt4 book ai didi

c - 我是不是想多了?

转载 作者:太空宇宙 更新时间:2023-11-04 03:18:23 25 4
gpt4 key购买 nike

我遇到了以下作业问题:

考虑以下 C 程序段。不使用 goto 或 breaks 重写它。

j = -3;
for (i = 0; i < 3; i++) {
switch (j + 2) {
case 3:
case 2: j--;
break;
case 0: j += 2; break;
default: j = 0;
}
if (j > 0) break;
j = 3 - i;
}

研究了几分钟后,我得出的结论是代码段只会产生 j = 1。除非我错了,否则 case 语句只会产生默认值,并且在 i = 2 迭代之后在循环中,j 最终将变为 j = 3 - i(2),即 1。我是不是想多了?

最佳答案

j will just end up being j = 3 - i(2) which is 1

正确:

#include<stdio.h>
int main(void)
{
int i,j;

j = -3;
for (i = 0; i < 3; i++)
{
switch (j + 2)
{ // j = -1 ->

case 3:
printf("3\n");
case 2: j--;
printf("2\n");
break;

case 0:
j += 2;
printf("0\n");
break;

default:
j = 0;
printf("j=%d i=%d default:\n", j, i);
}

if (j > 0){
printf("j>0\n");
break;
}

j = 3 - i;
printf("j=3-i j=%d i=%d \n", j, i);
}

printf("j=%d i=%d END\n", j, i);
return 0;
}

输出:

j=0  i=0  default:
j=3-i j=3 i=0
j=0 i=1 default:
j=3-i j=2 i=1
j=0 i=2 default:
j=3-i j=1 i=2
j=1 i=3 END

因此,对于上面的代码,最小化简为:

j = 1; 
i = 3;

关于c - 我是不是想多了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49102869/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com