时十陵 发表于 2023-2-11 12:42:10

这串代码的运行思路是什么?

我没搞懂这串代码的运行,有大佬可以解释一下吗?

zhangjinxuan 发表于 2023-2-11 13:03:19

请解释一下什么是 void int 类型

zhangjinxuan 发表于 2023-2-11 13:05:47

fun 就是把 a 里面的偶数删掉,当然这里不是真正意义上的删掉,而是仅仅将奇数移到前面,在将长度减少

歌者文明清理员 发表于 2023-2-11 13:06:17

zhangjinxuan 发表于 2023-2-11 13:03
请解释一下什么是 void int 类型

同意
《空整数》,你开玩笑吗

傻眼貓咪 发表于 2023-2-11 13:06:33

int main(void)

zhangjinxuan 发表于 2023-2-11 13:07:33

傻眼貓咪 发表于 2023-2-11 13:06


他这都能写反,有点佩服{:10_306:}

zhangjinxuan 发表于 2023-2-11 13:08:52

有些东西我们眼睛看也许就能看出来,这个也不是什么特别难的算法,你可以在纸上模拟,如果真的要让我来帮你模拟的话……随便吧,也许你只是不知道模拟的方法

时十陵 发表于 2023-2-11 15:29:27

是void main我用的是别人的图,在编译器上运行之后忘记改了,但是这段代码我没有弄明白

时十陵 发表于 2023-2-11 15:31:22

zhangjinxuan 发表于 2023-2-11 13:08
有些东西我们眼睛看也许就能看出来,这个也不是什么特别难的算法,你可以在纸上模拟,如果真的要让我来帮你 ...

如果可以的话,麻烦模拟一下,我用VS调试没有弄明白

zhangjinxuan 发表于 2023-2-11 15:45:48

时十陵 发表于 2023-2-11 15:31
如果可以的话,麻烦模拟一下,我用VS调试没有弄明白

代码大概是这样的吧:
#include <stdio.h>
int fun(int *a, int n) {
        int i, j;
        for (i = 0, j = 0; i < n; ++i)
                if (a % 2 == 1)
                        a = a;
        return j;
}
int main() {
        int a[] = {1, 2, 3, 4, 5, 6}, i, k;
        k = fun(a, 6);
        for (i = 0; i < k; ++i)
                printf("%3d", a);
        getchar();
}
调用 fun

[*] 循环开始前,i = 0, j = 0, a : 1, 2, 3, 4, 5, 6
[*] 第一次循环,i = 0, j = 0, a0 % 2 == 1,也就是奇数,所以就先把 a0 设为 a0,再将 j++,此时 a : 1, 2, 3, 4, 5, 6
[*] 第二次循环,i = 1, j = 1, a1 % 2 == 0,也就是偶数,也就什么都不做,此时 a : 1, 2, 3, 4, 5, 6
[*] 第三次循环,i = 2, j = 1, a2 % 2 == 1,也就是奇数,所以就先把 a1 设为 a2,再将 j++,此时 a : 1, 3, 3, 4, 5, 6
[*] 第四次循环,i = 3, j = 2, a3 % 2 == 0,也就是偶数,也就什么都不做,此时 a : 1, 3, 3, 4, 5, 6
[*] 第五次循环,i = 4, j = 2, a4 % 2 == 1,也就是奇数,所以就先把 a2 设为 a4,再将 j++,此时 a : 1, 3, 5, 4, 5, 6
[*] 第六次循环,i = 6, j = 3, a5 % 2 == 0,也就是偶数,也就什么都不做,此时 a : 1, 3, 5, 4, 5, 6
[*] 第七次循环,i < n 不成立,所以退出

fun 返回 j,也就是 3
回到 main,k 被设为了 3,k 在这里表示长度,原本是 6,现在是 3
输出前 3 项,也就是 1 3 5,这个也就间接性的筛掉了 a 中的偶数

时十陵 发表于 2023-2-11 16:10:14

zhangjinxuan 发表于 2023-2-11 15:45
代码大概是这样的吧:

调用 fun


明白了,非常感谢
页: [1]
查看完整版本: 这串代码的运行思路是什么?