#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
C B D B A
我完全理解第一行的输出是如何,但我对第二部分感到困惑。
for(k=0;k<5;k++){
printf("%c ",65+a[k]);
这一点让我感到困惑,因为循环第一次从我的理解应该是k = 0然后打印%c来自65 + a [k],其中k当前是0所以65 + a [0]。从其设置的前一部分我们看到[0] = 2和65 + 2是67,这是字符&#34; C&#34;。这在输出上是正确的,但是如果我对第二个循环65 + a [k]遵循相同的逻辑,其中k = 1,那么65 + a [1]和a [1]是11而65 + 11是76将等于角色&#34; K&#34;但那应该是错的 角色&#34; B&#34;。
我觉得这行代码是我遗漏的东西:
a[i]=num%4
但它实际上并没有设置一个仍然混淆的数字。
感谢任何帮助
答案 0 :(得分:3)
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
,它的初始值。
因此我们得到:C B D B A