[英]C loop doesn't properly run all aspects of the loop. Loops only on a certain part of the loop
[英]The output of a certain part of my for loop
#include <stdio.h>
int num, i, k, a[5];
int main() {
a[0]=2;
a[1]=11;
a[2]=12;
a[3]=16;
a[4]=28;
num=a[1+3]
i=4;
while(num>0){
a[i]=num%4;
num=num/3;
printf("%d ",num);
i--;
}
printf("8\n");
for(k=0;k<5;k++){
printf("%c ",65+a[k]);
}
printf("\n);
}
这个程序的输出是:
9 3 1 0 8
生物多样性公约
我完全理解第一行的输出如何,但对第二部分感到相当困惑。
for(k=0;k<5;k++){
printf("%c ",65+a[k]);
这一点让我感到困惑,因为根据我的理解,循环第一次应该是 k=0 然后打印 %c 来自 65+a[k] 其中 k 当前为 0 所以 65+a[0]。 从前面的部分,我们看到 a[0]=2 和 65+2 是 67,它是字符“C”。 这在输出上是正确的,但如果我对第二个循环 65+a[k] 遵循相同的逻辑,其中 k=1 所以 65+a[1] 和 a[1] 是 11,65+11 是 76,这将等于字符“K”但这是错误的,因为它应该是字符“B”。
我觉得这行代码是我遗漏的地方:
a[i]=num%4
但它实际上并没有设置一个数字,所以仍然很困惑。
任何帮助表示赞赏
a[i]=num%4
确实设置了数字。 这是如何:
在你的循环中:
while(num>0){
a[i]=num%4;
num=num/3;
printf("%d ",num);
i--;
}
num
与输出的第一行相同。
a[i]=num%4;
实际上设置数组中的值如下:
最初, i=4
和num=28
。 所以,
a[i]=num%4;
将a[4]
为28%4=0
。 因此,您的最后一个字符是A+0=A
。
然后i=3
和num=9
。 所以,
a[i]=num%4;
将a[3]
为9%4=1
。 因此,您的倒数第二个字符是A+1=B
。
然后i=2
和num=3
。 所以,
a[i]=num%4;
将a[2]
为3%4=3
。 因此,您的倒数第三个字符是A+3=D
。
然后i=1
和num=1
。 所以,
a[i]=num%4;
将a[1]
为1%4=1
。 因此,您的倒数第四个字符是A+1=B
。
然后i=0
和num=0
。 所以,
我们不进入循环。 a[0]=C
,它的初始值。
因此我们得到: CBDBA
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.