这串代码的运行思路是什么?
我没搞懂这串代码的运行,有大佬可以解释一下吗? 请解释一下什么是 void int 类型 fun 就是把 a 里面的偶数删掉,当然这里不是真正意义上的删掉,而是仅仅将奇数移到前面,在将长度减少 zhangjinxuan 发表于 2023-2-11 13:03请解释一下什么是 void int 类型
同意
《空整数》,你开玩笑吗 int main(void) 傻眼貓咪 发表于 2023-2-11 13:06
他这都能写反,有点佩服{:10_306:} 有些东西我们眼睛看也许就能看出来,这个也不是什么特别难的算法,你可以在纸上模拟,如果真的要让我来帮你模拟的话……随便吧,也许你只是不知道模拟的方法 是void main我用的是别人的图,在编译器上运行之后忘记改了,但是这段代码我没有弄明白 zhangjinxuan 发表于 2023-2-11 13:08
有些东西我们眼睛看也许就能看出来,这个也不是什么特别难的算法,你可以在纸上模拟,如果真的要让我来帮你 ...
如果可以的话,麻烦模拟一下,我用VS调试没有弄明白 时十陵 发表于 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 中的偶数 zhangjinxuan 发表于 2023-2-11 15:45
代码大概是这样的吧:
调用 fun
明白了,非常感谢
页:
[1]